summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjak1 <mike.wollmann@gmail.com>2021-08-01 17:02:17 +0200
committerjak1 <mike.wollmann@gmail.com>2021-08-01 17:02:17 +0200
commita8fb9c3e5ca4e089b8161b0e0f0150c1100d68c3 (patch)
treeb3eb94b0ff4cd3792fcebb8b34e0e7192d0c7b50
parentc9bdbee1b58b8530b6508ea705d5b9fd9a17f627 (diff)
downloadthepixelworld-a8fb9c3e5ca4e089b8161b0e0f0150c1100d68c3.tar.gz
thepixelworld-a8fb9c3e5ca4e089b8161b0e0f0150c1100d68c3.tar.bz2
thepixelworld-a8fb9c3e5ca4e089b8161b0e0f0150c1100d68c3.tar.xz
thepixelworld-a8fb9c3e5ca4e089b8161b0e0f0150c1100d68c3.zip
added some more features, and fixed some bugs (was to lazy to commit every change *hides)
-rw-r--r--app.js467
-rw-r--r--client/assets/maps/002-1.tmx130
-rw-r--r--client/assets/npcs.xml20
-rw-r--r--client/assets/tilesets/2006__desert1.pngbin0 -> 295336 bytes
-rw-r--r--client/assets/tilesets/2006__desert1.tsx4
-rw-r--r--client/assets/tilesets/2006__desert2.pngbin0 -> 179534 bytes
-rw-r--r--client/assets/tilesets/2006__desert2.tsx4
-rw-r--r--client/assets/tilesets/2006__desert_x2.pngbin0 -> 18093 bytes
-rw-r--r--client/assets/tilesets/2006__desert_x3.pngbin0 -> 21957 bytes
-rw-r--r--client/assets/tilesets/collision.pngbin0 -> 177 bytes
-rw-r--r--client/consts.js12
-rw-r--r--client/index.html187
-rw-r--r--client/lib/socket.io.js6081
-rw-r--r--client/lib/socket.io.js.map1
-rw-r--r--client/lib/socket.io.min.js7
-rw-r--r--client/lib/socket.io.min.js.map1
-rw-r--r--client/lib/socket.io.msgpack.min.js7
-rw-r--r--client/lib/socket.io.msgpack.min.js.map1
-rw-r--r--client/tmxloader.js190
-rw-r--r--docs/ChangeLog3
-rw-r--r--docs/ClassStructure.md15
-rw-r--r--server/Entities/Bullet.js83
-rw-r--r--server/Entities/Entity.js28
-rw-r--r--server/Entities/Player.js156
24 files changed, 7071 insertions, 326 deletions
diff --git a/app.js b/app.js
index 42f1e75..d219310 100644
--- a/app.js
+++ b/app.js
@@ -1,3 +1,4 @@
+var consts = require('./client/consts')
var mongojs = require("mongojs");
var db = mongojs("localhost:27017/ThePixelWorld", ["account","progress"]);
@@ -14,229 +15,12 @@ app.use('/client', express.static(__dirname + '/client'));
serv.listen(2000);
console.log("Server started.");
-var DEBUG = true;
var SOCKET_LIST = {};
-var Entity = function(){
- var self = {
- x:250,
- y:250,
- map: '001-1',
- speedX:0,
- speedY:0,
- id:"",
- }
- self.update = function(){
- self.updatePosition();
- }
- self.updatePosition = function(){
- self.x += self.speedX;
- self.y += self.speedY;
- }
- self.getDistance = function(pt){
- return Math.sqrt(Math.pow(self.x-pt.x,2)) + Math.pow(self.y-pt.y,2);
- }
- return self;
-}
-
-var Player = function(id){
- var self = Entity();
- self.id = id;
- self.number = "" + Math.floor(10 * Math.random());
- self.pressingRight = false;
- self.pressingLeft = false;
- self.pressingUp = false;
- self.pressingDown = false;
- self.pressingAttack = false;
- self.mouseAngle = 0;
- self.maxSpeed = 10;
- self.hp = 10;
- self.hpMax = 10;
- self.score = 0;
-
- var super_update = self.update;
- self.update = function(){
- self.updateSpeed();
- super_update();
- if(self.pressingAttack){
- self.shootBullet(self.mouseAngle);
- }
- }
-
- self.shootBullet = function(angle){
- var b = Bullet(self.id, angle);
- b.x = self.x
- b.y = self.y
- }
-
- self.updateSpeed = function(){
- if(self.pressingRight)
- self.speedX = self.maxSpeed;
- else if(self.pressingLeft)
- self.speedX = -self.maxSpeed;
- else
- self.speedX = 0;
-
- if(self.pressingUp)
- self.speedY = -self.maxSpeed;
- else if(self.pressingDown)
- self.speedY = self.maxSpeed;
- else
- self.speedY = 0;
- }
-
- self.getInitPack = function() {
- return {
- id:self.id,
- x:self.x,
- y:self.y,
- map:self.map,
- number:self.number,
- hp:self.hp,
- hpMax:self.hpMax,
- score:self.score,
- };
- }
- self.getUpdatePack = function() {
- return {
- id:self.id,
- x:self.x,
- y:self.y,
- map:self.map,
- score:self.score,
- hp:self.hp,
- };
- }
- Player.list[id] = self;
- initPack.player.push(self.getInitPack());
- return self;
-}
-
-Player.list = {};
-Player.onConnect = function(socket){
- var player = Player(socket.id);
+const Entity = require('./server/Entities/Entity')
+const Player = require('./server/Entities/Player')
+const Bullet = require('./server/Entities/Bullet')
- socket.on('keyPress', function(data){
- if (data.inputId === 'left')
- player.pressingLeft = data.state;
- else if (data.inputId === 'right')
- player.pressingRight = data.state;
- else if (data.inputId === 'up')
- player.pressingUp = data.state;
- else if (data.inputId === 'down')
- player.pressingDown = data.state;
- else if (data.inputId === 'attack')
- player.pressingAttack = data.state;
- else if (data.inputId === 'mouseAngle')
- player.mouseAngle = data.state;
- });
-
- socket.emit('init',{
- selfId:socket.id,
- player:Player.getAllInitPack(),
- bullet:Bullet.getAllInitPack(),
- });
-}
-
-Player.getAllInitPack = function(){
- var players = [];
- for(var i in Player.list)
- players.push(Player.list[i].getInitPack());
- return players;
-}
-
-Player.onDisconnect = function(socket){
- delete Player.list[socket.id];
- removePack.player.push(socket.id);
-}
-
-Player.update = function(){
- var pack = [];
- for(var i in Player.list){
- var player = Player.list[i];
- player.update();
- pack.push(player.getUpdatePack());
- }
- return pack;
-}
-
-var Bullet = function(parent, angle) {
- var self = Entity();
- self.id = Math.random();
- self.speedX = Math.cos(angle/180*Math.PI) *10;
- self.speedY = Math.sin(angle/180*Math.PI) *10;
- self.parent = parent;
- self.timer = 0;
- self.toRemove = false;
- var super_update = self.update;
- self.update = function(){
- if (self.timer++ > 100)
- self.toRemove = true;
- super_update();
- for (var i in Player.list){
- var p = Player.list[i];
- if(self.getDistance(p) < 32 && self.parent !== p.id){
- p.hp -= 1;
- if (p.hp <= 0){
- var shooter = Player.list[self.parent];
- if (shooter)
- shooter.score += 1;
- p.hp = p.hpMax;
- p.x = Math.random() * 500;
- p.y = Math.random() * 500;
-
- }
- self.toRemove = true;
- }
- }
- }
-
- self.getInitPack = function() {
- return {
- id:self.id,
- x:self.x,
- y:self.y,
- map:self.map,
- };
- }
-
- self.getUpdatePack = function() {
- return {
- id:self.id,
- x:self.x,
- y:self.y,
- map:self.map,
- };
- }
-
- Bullet.list[self.id] = self;
- initPack.bullet.push(self.getInitPack());
- return self;
-}
-
-Bullet.list= {};
-
-Bullet.update = function(){
- var pack = [];
- for(var i in Bullet.list){
- var bullet = Bullet.list[i];
- bullet.update();
- if(bullet.toRemove){
- delete Bullet.list[i];
- removePack.bullet.push(bullet.id);
- }
- else
- pack.push(bullet.getUpdatePack());
- }
- return pack;
-}
-
-Bullet.getAllInitPack = function(){
- var bullets = [];
- for(var i in Bullet.list)
- bullets.push(Bullet.list[i].getInitPack());
- return bullets;
-}
var isValidPassword = function(data, cb){
db.account.find({username:data.username, password:data.password},function(err,res){
@@ -262,6 +46,21 @@ var addUser = function(data, cb){
});
}
+var updateGMLevel = function(username, lvl, cb){
+ db.account.update({username:username},{$set:{gmlvl:lvl}},function(err){
+ cb();
+ });
+}
+
+var hasPermission = function(username, req, cb){
+ db.account.find({username:username},function(err,res){
+ if (res[0].gmlvl >= req)
+ cb(true);
+ else
+ cb(false);
+ });
+}
+
var io = require('socket.io')(serv, {});
io.sockets.on('connection', function(socket){
socket.id = Math.random();
@@ -270,7 +69,7 @@ io.sockets.on('connection', function(socket){
socket.on('signIn', function(data){
isValidPassword(data, function(res){
if (res){
- Player.onConnect(socket);
+ Player.Player.onConnect(socket, data.username);
socket.playerName = data.username;
socket.emit('signInResponse', {success:true});
} else {
@@ -292,40 +91,226 @@ io.sockets.on('connection', function(socket){
socket.on('disconnect', function(){
delete SOCKET_LIST[socket.id];
- Player.onDisconnect(socket);
+ Player.Player.onDisconnect(socket);
});
socket.on('sendMsgToServer', function(data){
- var playerName = ("" + socket.id).slice(2,7);
- for (var i in SOCKET_LIST){
- SOCKET_LIST[i].emit('addToChat', socket.playerName + ': ' + data);
+ if (data)
+ for (var i in SOCKET_LIST){
+ SOCKET_LIST[i].emit('addToChat', {ctimestamp: getTimeStamp(0), content: socket.playerName + ': ' + data, tab: "world"});
+ }
+ });
+
+ socket.on('command', function(data){
+ servermsg = "Server: ";
+ modifyer = data[0];
+ command = data.slice(1).split(' ');
+
+ // TODO: has permission
+ //staff cmd
+ if(modifyer === '@'){
+ hasPermission(socket.playerName, 1, function(res){
+ if (res)
+ switch (command[0]) {
+ // @bc (args: <message>)
+ case "bc":
+ res = joinArgs(command, 1, 0);
+ for (var i in SOCKET_LIST){
+ SOCKET_LIST[i].emit('addToChat', {ctimestamp: getTimeStamp(0), content: "<font color='red' weight='bold'>GlobalAnnounce: " + res + "</font>", tab: "world"});
+ }
+ break;
+
+ // @who (args: none)
+ case "who":
+ for (var i in Player.Player.list){
+ servermsg+=Player.Player.list[i].playerName + ", ";
+ }
+ socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg, tab:"any"});
+ break;
+
+ // @where (args:[playername])
+ case "where":
+ found = false;
+ if(command.length <= 1)
+ command[1] = socket.playerName;
+ for (var i in Player.Player.list){
+ if (Player.Player.list[i].playerName.includes(command[1])){
+ socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + Player.Player.list[i].playerName + ": " + Player.Player.list[i].map + " [" + Player.Player.list[i].x + ", " + Player.Player.list[i].y + "]",tab: "any"});
+ found = true;
+ }
+ }
+ if (!found)
+ socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Player not found", tab: "any"});
+ break;
+
+ // @goto (args:<playername>)
+ case "goto":
+ found = false;
+ if(command.length <= 1)
+ command[1] = socket.playerName;
+ for (var i in Player.Player.list){
+ if (Player.Player.list[i].playerName.includes(command[1])){
+ Player.Player.list[socket.id].map = Player.Player.list[i].map;
+ Player.Player.list[socket.id].x = Player.Player.list[i].x;
+ Player.Player.list[socket.id].y = Player.Player.list[i].y;
+ socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Warped to " + Player.Player.list[i].playerName, tab: "any"});
+ found = true;
+ break;
+ }
+ }
+ if (!found)
+ socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Player not found", tab:"any"});
+ break;
+
+ // @recall (args:<playername>)
+ case "recall":
+ found = false;
+ if(command.length <= 1)
+ command[1] = socket.playerName;
+ for (var i in Player.Player.list){
+ if (Player.Player.list[i].playerName.includes(command[1])){
+ Player.Player.list[i].map = Player.Player.list[socket.id].map;
+ Player.Player.list[i].x = Player.Player.list[socket.id].x;
+ Player.Player.list[i].y = Player.Player.list[socket.id].y;
+ socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Recalled " + Player.Player.list[i].playerName + " to you.", tab: "any"});
+ SOCKET_LIST[Player.Player.list[i].id].emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "You were Recalled from " + socket.playerName, tab: "any"});
+ found = true;
+ break;
+ }
+ }
+ if (!found)
+ socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Player not found", tab: "any"});
+ break;
+
+ // @setgm (args:<playername> <lvl>)
+ case "setgm":
+ hasPermission(socket.playerName, 99, function(res){
+ if (res)
+ updateGMLevel(command[1],parseInt(command[2]), function(){
+ socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "GM level set.", tab:"any"});
+ });
+ else
+ socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "you dont have permission to use this command!", tab: "any"});
+ });
+ break;
+ default:
+ socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Command not found.", tab: "any"});
+ break;
+ }
+ else{
+ socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "you dont have permission to use this command!", tab: "any"});
+ }
+ });
+ }
+
+ // player cmd
+ else if(modifyer === '/'){
+ switch (command[0]) {
+ // /who (args: none)
+ case "who":
+ socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + Object.keys(Player.Player.list).length + " Players Online.", tab: "any"});
+ break;
+
+ // /where (args: none)
+ case "where":
+ socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + Player.Player.list[socket.id].playerName + ": " +
+ Player.Player.list[socket.id].map + " [" + Player.Player.list[socket.id].x + ", " + Player.Player.list[socket.id].y + "]", tab: "any"});
+
+ break;
+
+ // /whisper (args: <playername> <message>)
+ case "w":
+ case "whisper":
+ found = false;
+
+ for (var i in Player.Player.list){
+ if (Player.Player.list[i].playerName == command[1]){
+ res = joinArgs(command, 2, 0);
+ socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: socket.playerName + " : " + res, tab: Player.Player.list[i].playerName});
+ SOCKET_LIST[Player.Player.list[i].id].emit('addToChat', {ctimestamp: getTimeStamp(0), content: socket.playerName + ": " + res, tab: socket.playerName});
+ found = true;
+ break;
+ }
+ }
+ if (!found)
+ socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Player not found", tab: "any"});
+ break;
+
+ default:
+ socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Command not found.", tab: "any"});
+ break;
+ }
+ }
+
+ // guild commands
+ else if(modifyer === '#'){
+
+ }
+ // party commands
+ else if(modifyer === '.'){
+
+ }
+ // help commands
+ else if(modifyer === '?'){
+ // ?
+ }
+ else{
+ // this should never happen...
}
});
-
+
socket.on('evalServer', function(data){
- if(DEBUG){
- socket.emit('evalAnswer', eval(data));
- }
+ servermsg = "Server: ";
+ hasPermission(socket.playerName, 80, function(res){
+ if (res)
+ socket.emit('evalAnswer', eval(data));
+ else
+ socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "you dont have permission to use this command!", tab: "any"});
+ });
});
});
-var initPack = {player:[], bullet:[]};
-var removePack = {player:[], bullet:[]};
-
+// erm... the game loop
setInterval(function(){
var pack = {
- player:Player.update(),
- bullet:Bullet.update()
+ player: Player.Player.update(),
+ bullet: Bullet.Bullet.update()
}
for(var i in SOCKET_LIST){
var socket = SOCKET_LIST[i];
- socket.emit('init', initPack);
+ socket.emit('init', Entity.initPack);
socket.emit('update', pack);
- socket.emit('remove', removePack);
+ socket.emit('remove', Entity.removePack);
}
- initPack.player = [];
- initPack.bullet = [];
- removePack.player = [];
- removePack.bullet = [];
+ Entity.initPack.player = [];
+ Entity.initPack.bullet = [];
+ Entity.removePack.player = [];
+ Entity.removePack.bullet = [];
+
+}, 1000/25);
+
+//removes (number)remArgsBefore and (number)remArgsAfter from argument array/list
+joinArgs = function(argsList, remArgsBefore, remArgsAfter){
+ var res = "";
+ for(var i = 0; i<argsList.length; i++){
+ if(i < remArgsBefore)
+ continue;
+ if(argsList.length - i <= remArgsAfter)
+ continue;
+ res +=argsList[i] + " ";
+ }
+ return res;
+}
-}, 1000/25); \ No newline at end of file
+// gets the current (weird formated) timestamp (FIXME later...)
+getTimeStamp = function(){
+ var date_ob = new Date();
+ day = date_ob.getDate();
+ month = date_ob.getMonth();
+ year = date_ob.getFullYear();
+ hours = date_ob.getHours();
+ minutes = date_ob.getMinutes();
+ seconds = date_ob.getSeconds();
+
+ return (year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds);
+} \ No newline at end of file
diff --git a/client/assets/maps/002-1.tmx b/client/assets/maps/002-1.tmx
new file mode 100644
index 0000000..3c5e75b
--- /dev/null
+++ b/client/assets/maps/002-1.tmx
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<map version="1.4" tiledversion="1.4.3" orientation="orthogonal" renderorder="right-down" width="20" height="20" tilewidth="32" tileheight="32" infinite="0" nextlayerid="6" nextobjectid="1">
+ <tileset firstgid="1" name="2006__desert1" tilewidth="32" tileheight="32" tilecount="256" columns="16">
+ <image source="../tilesets/2006__desert1.png" width="512" height="512"/>
+ </tileset>
+ <tileset firstgid="257" name="collision" tilewidth="32" tileheight="32" tilecount="2" columns="2">
+ <image source="../tilesets/collision.png" width="64" height="32"/>
+ </tileset>
+ <tileset firstgid="259" source="../tilesets/2006__desert2.tsx"/>
+ <layer id="1" name="ground" width="20" height="20">
+ <data encoding="csv">
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+</data>
+ </layer>
+ <layer id="2" name="ground 2" width="20" height="20">
+ <data encoding="csv">
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,47,48,0,0,63,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,38,0,40,0,0,0,0,0,63,0,0,0,0,0,0,0,
+0,0,0,0,54,55,56,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,61,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,342,343,344,0,0,0,0,0,0,
+0,0,0,0,59,0,0,364,355,356,0,358,359,360,0,362,363,364,0,0,
+0,0,0,0,0,0,0,380,371,372,0,358,359,360,0,378,379,380,0,0,
+0,0,62,0,0,0,0,0,342,343,343,407,359,360,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,358,359,359,359,359,360,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,374,375,375,375,375,376,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+</data>
+ </layer>
+ <layer id="3" name="fringe" width="20" height="20">
+ <data encoding="csv">
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+</data>
+ </layer>
+ <layer id="4" name="over" width="20" height="20">
+ <data encoding="csv">
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,31,32,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,22,23,24,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,259,260,261,262,263,264,265,266,267,0,0,0,
+0,0,0,0,0,0,0,0,275,276,277,278,279,280,281,282,283,0,0,0,
+0,0,0,0,0,0,0,300,291,292,293,294,295,296,297,298,299,300,0,0,
+0,0,0,0,0,0,0,316,307,308,309,310,311,312,313,314,315,316,0,0,
+0,0,0,0,0,0,0,332,323,324,325,326,327,328,329,330,331,332,0,0,
+0,0,0,0,0,0,0,348,339,340,341,0,0,0,345,346,347,348,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+</data>
+ </layer>
+ <layer id="5" name="collision" width="20" height="20">
+ <data encoding="csv">
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,258,0,0,0,0,0,258,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,258,258,0,0,258,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,258,258,258,0,0,0,0,0,258,0,0,0,0,0,0,0,
+0,0,0,0,258,258,258,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,258,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,258,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,258,0,0,258,258,258,0,0,0,0,0,258,258,258,0,0,
+0,0,0,0,0,0,0,258,258,258,0,0,0,0,0,258,258,258,0,0,
+0,0,258,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+</data>
+ </layer>
+</map>
diff --git a/client/assets/npcs.xml b/client/assets/npcs.xml
new file mode 100644
index 0000000..3238114
--- /dev/null
+++ b/client/assets/npcs.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<npcs>
+ <images>
+ <img imgid='1' src='/client/assets/npcs/generic.png'
+ width='128'
+ height='128'
+ tileWidth='32'
+ tileHeight='32' />
+ <img imgid='2' src='/client/assets/npcs/humans.png'
+ width='128'
+ height='128'
+ tileWidth='32'
+ tileHeight='64' />
+ </images>
+
+ <npc id='0' >#hidden</npc>
+ <npc id='1' imgid='1' index='0'>Chest</npc>
+ <npc id='2' imgid='2' index='0'>Girl 1</npc>
+ <npc id='3' imgid='2' index='1'>Boy 1</npc>
+</npcs> \ No newline at end of file
diff --git a/client/assets/tilesets/2006__desert1.png b/client/assets/tilesets/2006__desert1.png
new file mode 100644
index 0000000..5813119
--- /dev/null
+++ b/client/assets/tilesets/2006__desert1.png
Binary files differ
diff --git a/client/assets/tilesets/2006__desert1.tsx b/client/assets/tilesets/2006__desert1.tsx
new file mode 100644
index 0000000..b062249
--- /dev/null
+++ b/client/assets/tilesets/2006__desert1.tsx
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tileset version="1.4" tiledversion="1.4.3" name="2006__desert1" tilewidth="32" tileheight="32" tilecount="256" columns="16">
+ <image source="2006__desert1.png" width="512" height="512"/>
+</tileset>
diff --git a/client/assets/tilesets/2006__desert2.png b/client/assets/tilesets/2006__desert2.png
new file mode 100644
index 0000000..98a8740
--- /dev/null
+++ b/client/assets/tilesets/2006__desert2.png
Binary files differ
diff --git a/client/assets/tilesets/2006__desert2.tsx b/client/assets/tilesets/2006__desert2.tsx
new file mode 100644
index 0000000..7db0966
--- /dev/null
+++ b/client/assets/tilesets/2006__desert2.tsx
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tileset version="1.4" tiledversion="1.4.3" name="2006__desert2" tilewidth="32" tileheight="32" tilecount="256" columns="16">
+ <image source="2006__desert2.png" width="512" height="512"/>
+</tileset>
diff --git a/client/assets/tilesets/2006__desert_x2.png b/client/assets/tilesets/2006__desert_x2.png
new file mode 100644
index 0000000..8b14d63
--- /dev/null
+++ b/client/assets/tilesets/2006__desert_x2.png
Binary files differ
diff --git a/client/assets/tilesets/2006__desert_x3.png b/client/assets/tilesets/2006__desert_x3.png
new file mode 100644
index 0000000..5453761
--- /dev/null
+++ b/client/assets/tilesets/2006__desert_x3.png
Binary files differ
diff --git a/client/assets/tilesets/collision.png b/client/assets/tilesets/collision.png
new file mode 100644
index 0000000..9486abf
--- /dev/null
+++ b/client/assets/tilesets/collision.png
Binary files differ
diff --git a/client/consts.js b/client/consts.js
index 0e0e28c..242857d 100644
--- a/client/consts.js
+++ b/client/consts.js
@@ -1,8 +1,16 @@
-const WIDTH = 500;
-const HEIGHT = 500;
+// game settings
+const WIDTH = 500;
+const HEIGHT = 500;
+// directions
+const DIR_DOWN = 0;
+const DIR_LEFT = 1;
+const DIR_UP = 2;
+const DIR_RIGHT = 4;
+
+// error codes
const CONNECTION_LOST = 10001; \ No newline at end of file
diff --git a/client/index.html b/client/index.html
index c77e929..0d576d8 100644
--- a/client/index.html
+++ b/client/index.html
@@ -1,8 +1,23 @@
<!DOCTYPE html>
-<html lang="en_US">
+<html lang="en_US" style='background-color:#858590;'>
<meta charset="UTF-8">
<title>ThePixelWorld</title>
<!-- Login -->
+ <style type="text/css">
+ .chat-tab{
+ margin-left: 2px;
+ margin-right: 2px;
+ padding-left: 3px;
+ padding-right: 3px;
+ float: left;
+ color: #858590;
+ background-color: #555555;
+ border-radius: 4px;
+ }
+ #active{
+ color: lime;
+ }
+ </style>
<div id="signDiv" style='text-align:center;'>
Username: <input id="signDiv-username" type="text"></input><br>
Password: <input id="signDiv-password" type="password"></input><br>
@@ -19,8 +34,9 @@
To disable the limit, set it to <b>0</b>.
<hr>
<h3>News:</h3>
- I have some trouble while parsing tmx maps.<br>
- currently we are using just a sprite file as "map" :D<br>
+ tmx maps loading and rendering nearly done, beside collision system.<br>
+ basic chat system (guild/party/... wip) {may also implement an api for irc usage?}<br>
+ every player has a name drawn above there head now.<br>
<h3>ToDo</h3>
to much, and to lazy to write it down *blush*
</div>
@@ -28,25 +44,34 @@
<!-- Game -->
<div id="gameDiv" style="display:none;">
- <canvas id="ctx" width="500" height="500" style="border:1px solid #000000;"></canvas>
- <div id="chat-text" style="width:500px; height:100px; overflow-y:scroll;"> <!--https://www.sitepoint.com/community/t/auto-scrolling-a-div-with-overflow-scroll-auto/2291--></div>
- <form id="chat-form">
- <input id="chat-input" type="text" style="width:500px;"></input>
- </form>
+ <canvas id="ctx" width="500" height="500" tabindex="1" style="border:1px solid #000000;"></canvas>
+ <div id="chat-wrapper" style="width:500px; height:20px; overflow: hidden; white-space: nowrap;">
+ <div class="chat-tab" id='active' onclick="setActiveChatTab('world', this)" >WORLD</div>
+ <!-- TODO only show up on permission to use the GM tab.
+ <div class="chat-tab" onclick="setActiveChatTab('gm', this)"> GM</div> -->
+ <div class="chat-tab" onclick="setActiveChatTab('guild', this)">[#] Guild (WIP)</div>
+ <div class="chat-tab" onclick="setActiveChatTab('party', this)">[.] Party (WIP)</div>
+ </div>
+ <div id="chat-text" style="width:500px; height:100px; overflow-y:scroll;"></div>
+ <form id="chat-form">
+ <input id="chat-input" type="text" style="width:500px;"></input>
+ </form>
+ </div>
</div>
<!-- loading socket.io library -->
<script src="https://cdn.socket.io/4.1.3/socket.io.js"></script>
+ <script src="client/lib/socket.io.js"></script>
<script src="client/consts.js"></script>
<script src="client/tmxloader.js"></script>
<script>
var socket = io();
var errno = 0;
-
+
socket.on('disconnect', function(){
errno = CONNECTION_LOST;
- alert("Connection lost..." + err);
+ alert("Connection lost..." + errno);
});
// Login
@@ -80,12 +105,30 @@
});
// Chat
+ var activeChatTab = "world"; // default tab on join.
+ var chatContents = [];
+ chatContents[activeChatTab] = "";
+
var chatText = document.getElementById("chat-text");
var chatInput = document.getElementById("chat-input");
var chatForm = document.getElementById("chat-form");
socket.on('addToChat', function(data){
- chatText.innerHTML += "<div>" + data + "</div>";
+ if(data.tab === "any")
+ data.tab = activeChatTab;
+ if (chatContents[data.tab] === undefined)
+ document.getElementById("chat-wrapper").innerHTML += "<div class=\"chat-tab\" onclick=\"setActiveChatTab('" + data.tab + "', this)\">" + data.tab + "</div>";
+
+ if(!chatContents[data.tab])
+ chatContents[data.tab] = "<div title=\"" + data.ctimestamp + "\">" + data.content + "</div>"
+ else
+ chatContents[data.tab] += "<div title=\"" + data.ctimestamp + "\">" + data.content + "</div>"
+
+ if (activeChatTab === data.tab){
+ chatText.innerHTML = chatContents[activeChatTab];
+ //scroll down
+ chatText.scrollTop = chatText.scrollHeight;
+ }
});
socket.on('evalAnswer', function(data){
console.log(data);
@@ -93,33 +136,32 @@
chatForm.onsubmit = function(e){
e.preventDefault();
- if (chatInput.value[0] === "/")
+ if (chatInput.value[0] === "*")
socket.emit("evalServer", chatInput.value.slice(1));
+ else if (chatInput.value[0] === "@" || chatInput.value[0] === "/"
+ || chatInput.value[0] === "." || chatInput.value[0] === "#")
+ socket.emit("command", chatInput.value);
+ else if(activeChatTab !== "world")
+ socket.emit("command", "/w " + activeChatTab + " " + chatInput.value);
else
socket.emit("sendMsgToServer", chatInput.value);
chatInput.value = "";
}
- var TMXMap = function(mapId){
- var self = new TMXLoader(mapId);
- return self;
- };
-
// Game
var Img = {};
Img.player = new Image();
Img.player.src = '/client/assets/sprites/races/human-female.png';
Img.bullet = new Image();
Img.bullet.src = '/client/assets/sprites/blaze.png';
- Img.map = new Image();
- Img.map.src = '/client/assets/sprites/races/human-female.png';
var ctx = document.getElementById("ctx").getContext("2d");
- ctx.font = '30px Arial';
+ ctx.font = '16px Arial';
var Player = function(initPack){
var self = {};
self.id = initPack.id;
+ self.playerName = initPack.playerName;
self.number = initPack.number;
self.x = initPack.x;
self.y = initPack.y;
@@ -127,31 +169,40 @@
self.hp = initPack.hp;
self.hpMax = initPack.hpMax;
self.score = initPack.score;
+ self.dir = DIR_DOWN;
- self.draw = function(){
+ self.drawPlayer = function(){
var x = self.x - Player.list[selfId].x + WIDTH/2;
var y = self.y - Player.list[selfId].y + HEIGHT/2;
- var hpWidth = 30 * self.hp / self.hpMax;
- // hp-bar
- ctx.fillStyle="rgba(255,0,0,0.8)";
- ctx.fillRect(x - hpWidth/2, y - 40, hpWidth, 4);
// 'player'
var width = 64;
var height = 64;
-
ctx.drawImage(Img.player,
0,0,
width, height,
x-width/2, y-height/2,
width, height);
}
-
+ self.drawPlayerName = function(){
+ var x = self.x - Player.list[selfId].x + WIDTH/2;
+ var y = self.y - Player.list[selfId].y + HEIGHT/2;
+ var hpWidth = 30 * self.hp / self.hpMax;
+ // hp-bar
+ ctx.fillStyle="rgba(255,0,0,0.8)";
+ ctx.fillRect(x - hpWidth/2, y - 40, hpWidth, 4);
+ ctx.fillStyle="rgba(75,75,75,0.8)";
+ var metrics = ctx.measureText(Player.list[self.id].playerName);
+ ctx.fillText(Player.list[self.id].playerName,
+ x - metrics.width/2, y - 45, metrics.width, 4);
+ }
+
Player.list[self.id] = self;
return self;
};
Player.list = {};
+ tmxmap=null;
var Bullet = function(initPack){
var self = {};
@@ -193,7 +244,7 @@
}
if(data.selfId){
selfId = data.selfId;
- new TMXMap(Player.list[selfId].map);
+ tmxmap = new TMXLoader(Player.list[selfId].map);
}
});
// update (diff)
@@ -210,6 +261,10 @@
p.hp = pack.hp;
if(pack.score !== undefined)
p.score = pack.score;
+ if(pack.dir !== undefined)
+ p.dir = pack.dir;
+ if(pack.dir !== undefined)
+ p.playerName = pack.playerName;
}
}
for(var i = 0; i < data.bullet.length; i++){
@@ -233,27 +288,65 @@
delete Bullet.list[data.bullet[i]];
}
});
-
+
+ setActiveChatTab = function(tabName, tab){
+ if (!chatContents[tabName])
+ chatContents[tabName] = "";
+ activeChatTab = tabName;
+ chatText.innerHTML = chatContents[activeChatTab];
+ Array.from(document.getElementsByClassName("chat-tab")).forEach(function(element, index, array) {
+ element.setAttribute("id", "");
+ })
+ tab.setAttribute("id", "active");
+ chatText.scrollTop = chatText.scrollHeight;
+ }
+
setInterval(function(){
- if(!selfId)
+ if(!selfId || errno != 0)
return;
ctx.clearRect(0,0,500,500);
-
- drawMap();
+ drawMapGround();
+ drawGFXGround();
+ drawEntities();
+ drawMapOver();
+ for(var i in Player.list){
+ Player.list[i].drawPlayerName();
+ }
+ drawGFXOver();
//drawScore();
+ }, 1000/25);
+
+ var drawMapGround = function(){
+ var x = WIDTH/2 - Player.list[selfId].x;
+ var y = HEIGHT/2 - Player.list[selfId].y;
+
+ tmxmap.drawLayer("ground",x,y);
+ }
+
+ var drawGFXGround = function(){
+
+ }
+
+ var drawEntities = function(){
for(var i in Player.list){
- Player.list[i].draw();
+ Player.list[i].drawPlayer();
}
for(var i in Bullet.list){
Bullet.list[i].draw();
}
- }, 1000/25);
+ }
- var drawMap = function(){
+ var drawMapOver = function(){
var x = WIDTH/2 - Player.list[selfId].x;
- var y= HEIGHT/2 - Player.list[selfId].y;
- ctx.drawImage(Img.map,x,y);
+ var y = HEIGHT/2 - Player.list[selfId].y;
+ tmxmap.drawLayer("fringe",x,y); // needs to get rendered on last pos.
+ tmxmap.drawLayer("over",x,y);
+ }
+
+ var drawGFXOver = function(){
+
}
+ // TODO Collision
var drawScore = function(){
ctx.fillStyle = 'green';
@@ -262,14 +355,16 @@
document.onkeydown = function(event){
//console.log(event.keyCode);
- if(event.keyCode === 68 || event.keyCode === 39) // d
- socket.emit('keyPress',{inputId: 'right', state: true});
- else if(event.keyCode === 65 || event.keyCode === 37) // a
- socket.emit('keyPress',{inputId: 'left', state: true});
- else if(event.keyCode === 83 || event.keyCode === 40) // s
- socket.emit('keyPress',{inputId: 'down', state: true});
- else if(event.keyCode === 87 || event.keyCode === 38) // w
- socket.emit('keyPress',{inputId: 'up', state: true});
+ if (document.activeElement === document.getElementById('ctx')){
+ if(event.keyCode === 68 || event.keyCode === 39) // d
+ socket.emit('keyPress',{inputId: 'right', state: true});
+ else if(event.keyCode === 65 || event.keyCode === 37) // a
+ socket.emit('keyPress',{inputId: 'left', state: true});
+ else if(event.keyCode === 83 || event.keyCode === 40) // s
+ socket.emit('keyPress',{inputId: 'down', state: true});
+ else if(event.keyCode === 87 || event.keyCode === 38) // w
+ socket.emit('keyPress',{inputId: 'up', state: true});
+ }
}
document.onkeyup = function(event){
@@ -284,7 +379,9 @@
}
document.onmousedown = function(event){
+ if (document.activeElement === document.getElementById('ctx')){
socket.emit('keyPress',{inputId: 'attack', state: true});
+ }
}
document.onmouseup = function(event){
diff --git a/client/lib/socket.io.js b/client/lib/socket.io.js
new file mode 100644
index 0000000..9c6a8a3
--- /dev/null
+++ b/client/lib/socket.io.js
@@ -0,0 +1,6081 @@
+/*!
+ * Socket.IO v4.1.3
+ * (c) 2014-2021 Guillermo Rauch
+ * Released under the MIT License.
+ */
+(function webpackUniversalModuleDefinition(root, factory) {
+ if(typeof exports === 'object' && typeof module === 'object')
+ module.exports = factory();
+ else if(typeof define === 'function' && define.amd)
+ define([], factory);
+ else if(typeof exports === 'object')
+ exports["io"] = factory();
+ else
+ root["io"] = factory();
+})(self, function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./build/index.js");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./build/index.js":
+/*!************************!*\
+ !*** ./build/index.js ***!
+ \************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.io = exports.Socket = exports.Manager = exports.protocol = void 0;
+
+var url_1 = __webpack_require__(/*! ./url */ "./build/url.js");
+
+var manager_1 = __webpack_require__(/*! ./manager */ "./build/manager.js");
+
+var debug = __webpack_require__(/*! debug */ "./node_modules/debug/src/browser.js")("socket.io-client");
+/**
+ * Module exports.
+ */
+
+
+module.exports = exports = lookup;
+/**
+ * Managers cache.
+ */
+
+var cache = exports.managers = {};
+
+function lookup(uri, opts) {
+ if (_typeof(uri) === "object") {
+ opts = uri;
+ uri = undefined;
+ }
+
+ opts = opts || {};
+ var parsed = url_1.url(uri, opts.path || "/socket.io");
+ var source = parsed.source;
+ var id = parsed.id;
+ var path = parsed.path;
+ var sameNamespace = cache[id] && path in cache[id]["nsps"];
+ var newConnection = opts.forceNew || opts["force new connection"] || false === opts.multiplex || sameNamespace;
+ var io;
+
+ if (newConnection) {
+ debug("ignoring socket cache for %s", source);
+ io = new manager_1.Manager(source, opts);
+ } else {
+ if (!cache[id]) {
+ debug("new io instance for %s", source);
+ cache[id] = new manager_1.Manager(source, opts);
+ }
+
+ io = cache[id];
+ }
+
+ if (parsed.query && !opts.query) {
+ opts.query = parsed.queryKey;
+ }
+
+ return io.socket(parsed.path, opts);
+}
+
+exports.io = lookup;
+/**
+ * Protocol version.
+ *
+ * @public
+ */
+
+var socket_io_parser_1 = __webpack_require__(/*! socket.io-parser */ "./node_modules/socket.io-parser/dist/index.js");
+
+Object.defineProperty(exports, "protocol", {
+ enumerable: true,
+ get: function get() {
+ return socket_io_parser_1.protocol;
+ }
+});
+/**
+ * `connect`.
+ *
+ * @param {String} uri
+ * @public
+ */
+
+exports.connect = lookup;
+/**
+ * Expose constructors for standalone build.
+ *
+ * @public
+ */
+
+var manager_2 = __webpack_require__(/*! ./manager */ "./build/manager.js");
+
+Object.defineProperty(exports, "Manager", {
+ enumerable: true,
+ get: function get() {
+ return manager_2.Manager;
+ }
+});
+
+var socket_1 = __webpack_require__(/*! ./socket */ "./build/socket.js");
+
+Object.defineProperty(exports, "Socket", {
+ enumerable: true,
+ get: function get() {
+ return socket_1.Socket;
+ }
+});
+exports["default"] = lookup;
+
+/***/ }),
+
+/***/ "./build/manager.js":
+/*!**************************!*\
+ !*** ./build/manager.js ***!
+ \**************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.Manager = void 0;
+
+var eio = __webpack_require__(/*! engine.io-client */ "./node_modules/engine.io-client/lib/index.js");
+
+var socket_1 = __webpack_require__(/*! ./socket */ "./build/socket.js");
+
+var parser = __webpack_require__(/*! socket.io-parser */ "./node_modules/socket.io-parser/dist/index.js");
+
+var on_1 = __webpack_require__(/*! ./on */ "./build/on.js");
+
+var Backoff = __webpack_require__(/*! backo2 */ "./node_modules/backo2/index.js");
+
+var typed_events_1 = __webpack_require__(/*! ./typed-events */ "./build/typed-events.js");
+
+var debug = __webpack_require__(/*! debug */ "./node_modules/debug/src/browser.js")("socket.io-client:manager");
+
+var Manager = /*#__PURE__*/function (_typed_events_1$Stric) {
+ _inherits(Manager, _typed_events_1$Stric);
+
+ var _super = _createSuper(Manager);
+
+ function Manager(uri, opts) {
+ var _this;
+
+ _classCallCheck(this, Manager);
+
+ _this = _super.call(this);
+ _this.nsps = {};
+ _this.subs = [];
+
+ if (uri && "object" === _typeof(uri)) {
+ opts = uri;
+ uri = undefined;
+ }
+
+ opts = opts || {};
+ opts.path = opts.path || "/socket.io";
+ _this.opts = opts;
+
+ _this.reconnection(opts.reconnection !== false);
+
+ _this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);
+
+ _this.reconnectionDelay(opts.reconnectionDelay || 1000);
+
+ _this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);
+
+ _this.randomizationFactor(opts.randomizationFactor || 0.5);
+
+ _this.backoff = new Backoff({
+ min: _this.reconnectionDelay(),
+ max: _this.reconnectionDelayMax(),
+ jitter: _this.randomizationFactor()
+ });
+
+ _this.timeout(null == opts.timeout ? 20000 : opts.timeout);
+
+ _this._readyState = "closed";
+ _this.uri = uri;
+
+ var _parser = opts.parser || parser;
+
+ _this.encoder = new _parser.Encoder();
+ _this.decoder = new _parser.Decoder();
+ _this._autoConnect = opts.autoConnect !== false;
+ if (_this._autoConnect) _this.open();
+ return _this;
+ }
+
+ _createClass(Manager, [{
+ key: "reconnection",
+ value: function reconnection(v) {
+ if (!arguments.length) return this._reconnection;
+ this._reconnection = !!v;
+ return this;
+ }
+ }, {
+ key: "reconnectionAttempts",
+ value: function reconnectionAttempts(v) {
+ if (v === undefined) return this._reconnectionAttempts;
+ this._reconnectionAttempts = v;
+ return this;
+ }
+ }, {
+ key: "reconnectionDelay",
+ value: function reconnectionDelay(v) {
+ var _a;
+
+ if (v === undefined) return this._reconnectionDelay;
+ this._reconnectionDelay = v;
+ (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v);
+ return this;
+ }
+ }, {
+ key: "randomizationFactor",
+ value: function randomizationFactor(v) {
+ var _a;
+
+ if (v === undefined) return this._randomizationFactor;
+ this._randomizationFactor = v;
+ (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v);
+ return this;
+ }
+ }, {
+ key: "reconnectionDelayMax",
+ value: function reconnectionDelayMax(v) {
+ var _a;
+
+ if (v === undefined) return this._reconnectionDelayMax;
+ this._reconnectionDelayMax = v;
+ (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v);
+ return this;
+ }
+ }, {
+ key: "timeout",
+ value: function timeout(v) {
+ if (!arguments.length) return this._timeout;
+ this._timeout = v;
+ return this;
+ }
+ /**
+ * Starts trying to reconnect if reconnection is enabled and we have not
+ * started reconnecting yet
+ *
+ * @private
+ */
+
+ }, {
+ key: "maybeReconnectOnOpen",
+ value: function maybeReconnectOnOpen() {
+ // Only try to reconnect if it's the first time we're connecting
+ if (!this._reconnecting && this._reconnection && this.backoff.attempts === 0) {
+ // keeps reconnection from firing twice for the same reconnection loop
+ this.reconnect();
+ }
+ }
+ /**
+ * Sets the current transport `socket`.
+ *
+ * @param {Function} fn - optional, callback
+ * @return self
+ * @public
+ */
+
+ }, {
+ key: "open",
+ value: function open(fn) {
+ var _this2 = this;
+
+ debug("readyState %s", this._readyState);
+ if (~this._readyState.indexOf("open")) return this;
+ debug("opening %s", this.uri);
+ this.engine = eio(this.uri, this.opts);
+ var socket = this.engine;
+ var self = this;
+ this._readyState = "opening";
+ this.skipReconnect = false; // emit `open`
+
+ var openSubDestroy = on_1.on(socket, "open", function () {
+ self.onopen();
+ fn && fn();
+ }); // emit `error`
+
+ var errorSub = on_1.on(socket, "error", function (err) {
+ debug("error");
+ self.cleanup();
+ self._readyState = "closed";
+
+ _this2.emitReserved("error", err);
+
+ if (fn) {
+ fn(err);
+ } else {
+ // Only do this if there is no fn to handle the error
+ self.maybeReconnectOnOpen();
+ }
+ });
+
+ if (false !== this._timeout) {
+ var timeout = this._timeout;
+ debug("connect attempt will timeout after %d", timeout);
+
+ if (timeout === 0) {
+ openSubDestroy(); // prevents a race condition with the 'open' event
+ } // set timer
+
+
+ var timer = setTimeout(function () {
+ debug("connect attempt timed out after %d", timeout);
+ openSubDestroy();
+ socket.close();
+ socket.emit("error", new Error("timeout"));
+ }, timeout);
+
+ if (this.opts.autoUnref) {
+ timer.unref();
+ }
+
+ this.subs.push(function subDestroy() {
+ clearTimeout(timer);
+ });
+ }
+
+ this.subs.push(openSubDestroy);
+ this.subs.push(errorSub);
+ return this;
+ }
+ /**
+ * Alias for open()
+ *
+ * @return self
+ * @public
+ */
+
+ }, {
+ key: "connect",
+ value: function connect(fn) {
+ return this.open(fn);
+ }
+ /**
+ * Called upon transport open.
+ *
+ * @private
+ */
+
+ }, {
+ key: "onopen",
+ value: function onopen() {
+ debug("open"); // clear old subs
+
+ this.cleanup(); // mark as open
+
+ this._readyState = "open";
+ this.emitReserved("open"); // add new subs
+
+ var socket = this.engine;
+ this.subs.push(on_1.on(socket, "ping", this.onping.bind(this)), on_1.on(socket, "data", this.ondata.bind(this)), on_1.on(socket, "error", this.onerror.bind(this)), on_1.on(socket, "close", this.onclose.bind(this)), on_1.on(this.decoder, "decoded", this.ondecoded.bind(this)));
+ }
+ /**
+ * Called upon a ping.
+ *
+ * @private
+ */
+
+ }, {
+ key: "onping",
+ value: function onping() {
+ this.emitReserved("ping");
+ }
+ /**
+ * Called with data.
+ *
+ * @private
+ */
+
+ }, {
+ key: "ondata",
+ value: function ondata(data) {
+ this.decoder.add(data);
+ }
+ /**
+ * Called when parser fully decodes a packet.
+ *
+ * @private
+ */
+
+ }, {
+ key: "ondecoded",
+ value: function ondecoded(packet) {
+ this.emitReserved("packet", packet);
+ }
+ /**
+ * Called upon socket error.
+ *
+ * @private
+ */
+
+ }, {
+ key: "onerror",
+ value: function onerror(err) {
+ debug("error", err);
+ this.emitReserved("error", err);
+ }
+ /**
+ * Creates a new socket for the given `nsp`.
+ *
+ * @return {Socket}
+ * @public
+ */
+
+ }, {
+ key: "socket",
+ value: function socket(nsp, opts) {
+ var socket = this.nsps[nsp];
+
+ if (!socket) {
+ socket = new socket_1.Socket(this, nsp, opts);
+ this.nsps[nsp] = socket;
+ }
+
+ return socket;
+ }
+ /**
+ * Called upon a socket close.
+ *
+ * @param socket
+ * @private
+ */
+
+ }, {
+ key: "_destroy",
+ value: function _destroy(socket) {
+ var nsps = Object.keys(this.nsps);
+
+ for (var _i = 0, _nsps = nsps; _i < _nsps.length; _i++) {
+ var nsp = _nsps[_i];
+ var _socket = this.nsps[nsp];
+
+ if (_socket.active) {
+ debug("socket %s is still active, skipping close", nsp);
+ return;
+ }
+ }
+
+ this._close();
+ }
+ /**
+ * Writes a packet.
+ *
+ * @param packet
+ * @private
+ */
+
+ }, {
+ key: "_packet",
+ value: function _packet(packet) {
+ debug("writing packet %j", packet);
+ var encodedPackets = this.encoder.encode(packet);
+
+ for (var i = 0; i < encodedPackets.length; i++) {
+ this.engine.write(encodedPackets[i], packet.options);
+ }
+ }
+ /**
+ * Clean up transport subscriptions and packet buffer.
+ *
+ * @private
+ */
+
+ }, {
+ key: "cleanup",
+ value: function cleanup() {
+ debug("cleanup");
+ this.subs.forEach(function (subDestroy) {
+ return subDestroy();
+ });
+ this.subs.length = 0;
+ this.decoder.destroy();
+ }
+ /**
+ * Close the current socket.
+ *
+ * @private
+ */
+
+ }, {
+ key: "_close",
+ value: function _close() {
+ debug("disconnect");
+ this.skipReconnect = true;
+ this._reconnecting = false;
+
+ if ("opening" === this._readyState) {
+ // `onclose` will not fire because
+ // an open event never happened
+ this.cleanup();
+ }
+
+ this.backoff.reset();
+ this._readyState = "closed";
+ if (this.engine) this.engine.close();
+ }
+ /**
+ * Alias for close()
+ *
+ * @private
+ */
+
+ }, {
+ key: "disconnect",
+ value: function disconnect() {
+ return this._close();
+ }
+ /**
+ * Called upon engine close.
+ *
+ * @private
+ */
+
+ }, {
+ key: "onclose",
+ value: function onclose(reason) {
+ debug("onclose");
+ this.cleanup();
+ this.backoff.reset();
+ this._readyState = "closed";
+ this.emitReserved("close", reason);
+
+ if (this._reconnection && !this.skipReconnect) {
+ this.reconnect();
+ }
+ }
+ /**
+ * Attempt a reconnection.
+ *
+ * @private
+ */
+
+ }, {
+ key: "reconnect",
+ value: function reconnect() {
+ var _this3 = this;
+
+ if (this._reconnecting || this.skipReconnect) return this;
+ var self = this;
+
+ if (this.backoff.attempts >= this._reconnectionAttempts) {
+ debug("reconnect failed");
+ this.backoff.reset();
+ this.emitReserved("reconnect_failed");
+ this._reconnecting = false;
+ } else {
+ var delay = this.backoff.duration();
+ debug("will wait %dms before reconnect attempt", delay);
+ this._reconnecting = true;
+ var timer = setTimeout(function () {
+ if (self.skipReconnect) return;
+ debug("attempting reconnect");
+
+ _this3.emitReserved("reconnect_attempt", self.backoff.attempts); // check again for the case socket closed in above events
+
+
+ if (self.skipReconnect) return;
+ self.open(function (err) {
+ if (err) {
+ debug("reconnect attempt error");
+ self._reconnecting = false;
+ self.reconnect();
+
+ _this3.emitReserved("reconnect_error", err);
+ } else {
+ debug("reconnect success");
+ self.onreconnect();
+ }
+ });
+ }, delay);
+
+ if (this.opts.autoUnref) {
+ timer.unref();
+ }
+
+ this.subs.push(function subDestroy() {
+ clearTimeout(timer);
+ });
+ }
+ }
+ /**
+ * Called upon successful reconnect.
+ *
+ * @private
+ */
+
+ }, {
+ key: "onreconnect",
+ value: function onreconnect() {
+ var attempt = this.backoff.attempts;
+ this._reconnecting = false;
+ this.backoff.reset();
+ this.emitReserved("reconnect", attempt);
+ }
+ }]);
+
+ return Manager;
+}(typed_events_1.StrictEventEmitter);
+
+exports.Manager = Manager;
+
+/***/ }),
+
+/***/ "./build/on.js":
+/*!*********************!*\
+ !*** ./build/on.js ***!
+ \*********************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.on = void 0;
+
+function on(obj, ev, fn) {
+ obj.on(ev, fn);
+ return function subDestroy() {
+ obj.off(ev, fn);
+ };
+}
+
+exports.on = on;
+
+/***/ }),
+
+/***/ "./build/socket.js":
+/*!*************************!*\
+ !*** ./build/socket.js ***!
+ \*************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }
+
+function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.Socket = void 0;
+
+var socket_io_parser_1 = __webpack_require__(/*! socket.io-parser */ "./node_modules/socket.io-parser/dist/index.js");
+
+var on_1 = __webpack_require__(/*! ./on */ "./build/on.js");
+
+var typed_events_1 = __webpack_require__(/*! ./typed-events */ "./build/typed-events.js");
+
+var debug = __webpack_require__(/*! debug */ "./node_modules/debug/src/browser.js")("socket.io-client:socket");
+/**
+ * Internal events.
+ * These events can't be emitted by the user.
+ */
+
+
+var RESERVED_EVENTS = Object.freeze({
+ connect: 1,
+ connect_error: 1,
+ disconnect: 1,
+ disconnecting: 1,
+ // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener
+ newListener: 1,
+ removeListener: 1
+});
+
+var Socket = /*#__PURE__*/function (_typed_events_1$Stric) {
+ _inherits(Socket, _typed_events_1$Stric);
+
+ var _super = _createSuper(Socket);
+
+ /**
+ * `Socket` constructor.
+ *
+ * @public
+ */
+ function Socket(io, nsp, opts) {
+ var _this;
+
+ _classCallCheck(this, Socket);
+
+ _this = _super.call(this);
+ _this.receiveBuffer = [];
+ _this.sendBuffer = [];
+ _this.ids = 0;
+ _this.acks = {};
+ _this.flags = {};
+ _this.io = io;
+ _this.nsp = nsp;
+ _this.ids = 0;
+ _this.acks = {};
+ _this.receiveBuffer = [];
+ _this.sendBuffer = [];
+ _this.connected = false;
+ _this.disconnected = true;
+ _this.flags = {};
+
+ if (opts && opts.auth) {
+ _this.auth = opts.auth;
+ }
+
+ if (_this.io._autoConnect) _this.open();
+ return _this;
+ }
+ /**
+ * Subscribe to open, close and packet events
+ *
+ * @private
+ */
+
+
+ _createClass(Socket, [{
+ key: "subEvents",
+ value: function subEvents() {
+ if (this.subs) return;
+ var io = this.io;
+ this.subs = [on_1.on(io, "open", this.onopen.bind(this)), on_1.on(io, "packet", this.onpacket.bind(this)), on_1.on(io, "error", this.onerror.bind(this)), on_1.on(io, "close", this.onclose.bind(this))];
+ }
+ /**
+ * Whether the Socket will try to reconnect when its Manager connects or reconnects
+ */
+
+ }, {
+ key: "active",
+ get: function get() {
+ return !!this.subs;
+ }
+ /**
+ * "Opens" the socket.
+ *
+ * @public
+ */
+
+ }, {
+ key: "connect",
+ value: function connect() {
+ if (this.connected) return this;
+ this.subEvents();
+ if (!this.io["_reconnecting"]) this.io.open(); // ensure open
+
+ if ("open" === this.io._readyState) this.onopen();
+ return this;
+ }
+ /**
+ * Alias for connect()
+ */
+
+ }, {
+ key: "open",
+ value: function open() {
+ return this.connect();
+ }
+ /**
+ * Sends a `message` event.
+ *
+ * @return self
+ * @public
+ */
+
+ }, {
+ key: "send",
+ value: function send() {
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+
+ args.unshift("message");
+ this.emit.apply(this, args);
+ return this;
+ }
+ /**
+ * Override `emit`.
+ * If the event is in `events`, it's emitted normally.
+ *
+ * @return self
+ * @public
+ */
+
+ }, {
+ key: "emit",
+ value: function emit(ev) {
+ if (RESERVED_EVENTS.hasOwnProperty(ev)) {
+ throw new Error('"' + ev + '" is a reserved event name');
+ }
+
+ for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
+ args[_key2 - 1] = arguments[_key2];
+ }
+
+ args.unshift(ev);
+ var packet = {
+ type: socket_io_parser_1.PacketType.EVENT,
+ data: args
+ };
+ packet.options = {};
+ packet.options.compress = this.flags.compress !== false; // event ack callback
+
+ if ("function" === typeof args[args.length - 1]) {
+ debug("emitting packet with ack id %d", this.ids);
+ this.acks[this.ids] = args.pop();
+ packet.id = this.ids++;
+ }
+
+ var isTransportWritable = this.io.engine && this.io.engine.transport && this.io.engine.transport.writable;
+ var discardPacket = this.flags["volatile"] && (!isTransportWritable || !this.connected);
+
+ if (discardPacket) {
+ debug("discard packet as the transport is not currently writable");
+ } else if (this.connected) {
+ this.packet(packet);
+ } else {
+ this.sendBuffer.push(packet);
+ }
+
+ this.flags = {};
+ return this;
+ }
+ /**
+ * Sends a packet.
+ *
+ * @param packet
+ * @private
+ */
+
+ }, {
+ key: "packet",
+ value: function packet(_packet) {
+ _packet.nsp = this.nsp;
+
+ this.io._packet(_packet);
+ }
+ /**
+ * Called upon engine `open`.
+ *
+ * @private
+ */
+
+ }, {
+ key: "onopen",
+ value: function onopen() {
+ var _this2 = this;
+
+ debug("transport is open - connecting");
+
+ if (typeof this.auth == "function") {
+ this.auth(function (data) {
+ _this2.packet({
+ type: socket_io_parser_1.PacketType.CONNECT,
+ data: data
+ });
+ });
+ } else {
+ this.packet({
+ type: socket_io_parser_1.PacketType.CONNECT,
+ data: this.auth
+ });
+ }
+ }
+ /**
+ * Called upon engine or manager `error`.
+ *
+ * @param err
+ * @private
+ */
+
+ }, {
+ key: "onerror",
+ value: function onerror(err) {
+ if (!this.connected) {
+ this.emitReserved("connect_error", err);
+ }
+ }
+ /**
+ * Called upon engine `close`.
+ *
+ * @param reason
+ * @private
+ */
+
+ }, {
+ key: "onclose",
+ value: function onclose(reason) {
+ debug("close (%s)", reason);
+ this.connected = false;
+ this.disconnected = true;
+ delete this.id;
+ this.emitReserved("disconnect", reason);
+ }
+ /**
+ * Called with socket packet.
+ *
+ * @param packet
+ * @private
+ */
+
+ }, {
+ key: "onpacket",
+ value: function onpacket(packet) {
+ var sameNamespace = packet.nsp === this.nsp;
+ if (!sameNamespace) return;
+
+ switch (packet.type) {
+ case socket_io_parser_1.PacketType.CONNECT:
+ if (packet.data && packet.data.sid) {
+ var id = packet.data.sid;
+ this.onconnect(id);
+ } else {
+ this.emitReserved("connect_error", new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));
+ }
+
+ break;
+
+ case socket_io_parser_1.PacketType.EVENT:
+ this.onevent(packet);
+ break;
+
+ case socket_io_parser_1.PacketType.BINARY_EVENT:
+ this.onevent(packet);
+ break;
+
+ case socket_io_parser_1.PacketType.ACK:
+ this.onack(packet);
+ break;
+
+ case socket_io_parser_1.PacketType.BINARY_ACK:
+ this.onack(packet);
+ break;
+
+ case socket_io_parser_1.PacketType.DISCONNECT:
+ this.ondisconnect();
+ break;
+
+ case socket_io_parser_1.PacketType.CONNECT_ERROR:
+ var err = new Error(packet.data.message); // @ts-ignore
+
+ err.data = packet.data.data;
+ this.emitReserved("connect_error", err);
+ break;
+ }
+ }
+ /**
+ * Called upon a server event.
+ *
+ * @param packet
+ * @private
+ */
+
+ }, {
+ key: "onevent",
+ value: function onevent(packet) {
+ var args = packet.data || [];
+ debug("emitting event %j", args);
+
+ if (null != packet.id) {
+ debug("attaching ack callback to event");
+ args.push(this.ack(packet.id));
+ }
+
+ if (this.connected) {
+ this.emitEvent(args);
+ } else {
+ this.receiveBuffer.push(Object.freeze(args));
+ }
+ }
+ }, {
+ key: "emitEvent",
+ value: function emitEvent(args) {
+ if (this._anyListeners && this._anyListeners.length) {
+ var listeners = this._anyListeners.slice();
+
+ var _iterator = _createForOfIteratorHelper(listeners),
+ _step;
+
+ try {
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var listener = _step.value;
+ listener.apply(this, args);
+ }
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
+ }
+
+ _get(_getPrototypeOf(Socket.prototype), "emit", this).apply(this, args);
+ }
+ /**
+ * Produces an ack callback to emit with an event.
+ *
+ * @private
+ */
+
+ }, {
+ key: "ack",
+ value: function ack(id) {
+ var self = this;
+ var sent = false;
+ return function () {
+ // prevent double callbacks
+ if (sent) return;
+ sent = true;
+
+ for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
+ args[_key3] = arguments[_key3];
+ }
+
+ debug("sending ack %j", args);
+ self.packet({
+ type: socket_io_parser_1.PacketType.ACK,
+ id: id,
+ data: args
+ });
+ };
+ }
+ /**
+ * Called upon a server acknowlegement.
+ *
+ * @param packet
+ * @private
+ */
+
+ }, {
+ key: "onack",
+ value: function onack(packet) {
+ var ack = this.acks[packet.id];
+
+ if ("function" === typeof ack) {
+ debug("calling ack %s with %j", packet.id, packet.data);
+ ack.apply(this, packet.data);
+ delete this.acks[packet.id];
+ } else {
+ debug("bad ack %s", packet.id);
+ }
+ }
+ /**
+ * Called upon server connect.
+ *
+ * @private
+ */
+
+ }, {
+ key: "onconnect",
+ value: function onconnect(id) {
+ debug("socket connected with id %s", id);
+ this.id = id;
+ this.connected = true;
+ this.disconnected = false;
+ this.emitBuffered();
+ this.emitReserved("connect");
+ }
+ /**
+ * Emit buffered events (received and emitted).
+ *
+ * @private
+ */
+
+ }, {
+ key: "emitBuffered",
+ value: function emitBuffered() {
+ var _this3 = this;
+
+ this.receiveBuffer.forEach(function (args) {
+ return _this3.emitEvent(args);
+ });
+ this.receiveBuffer = [];
+ this.sendBuffer.forEach(function (packet) {
+ return _this3.packet(packet);
+ });
+ this.sendBuffer = [];
+ }
+ /**
+ * Called upon server disconnect.
+ *
+ * @private
+ */
+
+ }, {
+ key: "ondisconnect",
+ value: function ondisconnect() {
+ debug("server disconnect (%s)", this.nsp);
+ this.destroy();
+ this.onclose("io server disconnect");
+ }
+ /**
+ * Called upon forced client/server side disconnections,
+ * this method ensures the manager stops tracking us and
+ * that reconnections don't get triggered for this.
+ *
+ * @private
+ */
+
+ }, {
+ key: "destroy",
+ value: function destroy() {
+ if (this.subs) {
+ // clean subscriptions to avoid reconnections
+ this.subs.forEach(function (subDestroy) {
+ return subDestroy();
+ });
+ this.subs = undefined;
+ }
+
+ this.io["_destroy"](this);
+ }
+ /**
+ * Disconnects the socket manually.
+ *
+ * @return self
+ * @public
+ */
+
+ }, {
+ key: "disconnect",
+ value: function disconnect() {
+ if (this.connected) {
+ debug("performing disconnect (%s)", this.nsp);
+ this.packet({
+ type: socket_io_parser_1.PacketType.DISCONNECT
+ });
+ } // remove socket from pool
+
+
+ this.destroy();
+
+ if (this.connected) {
+ // fire events
+ this.onclose("io client disconnect");
+ }
+
+ return this;
+ }
+ /**
+ * Alias for disconnect()
+ *
+ * @return self
+ * @public
+ */
+
+ }, {
+ key: "close",
+ value: function close() {
+ return this.disconnect();
+ }
+ /**
+ * Sets the compress flag.
+ *
+ * @param compress - if `true`, compresses the sending data
+ * @return self
+ * @public
+ */
+
+ }, {
+ key: "compress",
+ value: function compress(_compress) {
+ this.flags.compress = _compress;
+ return this;
+ }
+ /**
+ * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not
+ * ready to send messages.
+ *
+ * @returns self
+ * @public
+ */
+
+ }, {
+ key: "volatile",
+ get: function get() {
+ this.flags["volatile"] = true;
+ return this;
+ }
+ /**
+ * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the
+ * callback.
+ *
+ * @param listener
+ * @public
+ */
+
+ }, {
+ key: "onAny",
+ value: function onAny(listener) {
+ this._anyListeners = this._anyListeners || [];
+
+ this._anyListeners.push(listener);
+
+ return this;
+ }
+ /**
+ * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the
+ * callback. The listener is added to the beginning of the listeners array.
+ *
+ * @param listener
+ * @public
+ */
+
+ }, {
+ key: "prependAny",
+ value: function prependAny(listener) {
+ this._anyListeners = this._anyListeners || [];
+
+ this._anyListeners.unshift(listener);
+
+ return this;
+ }
+ /**
+ * Removes the listener that will be fired when any event is emitted.
+ *
+ * @param listener
+ * @public
+ */
+
+ }, {
+ key: "offAny",
+ value: function offAny(listener) {
+ if (!this._anyListeners) {
+ return this;
+ }
+
+ if (listener) {
+ var listeners = this._anyListeners;
+
+ for (var i = 0; i < listeners.length; i++) {
+ if (listener === listeners[i]) {
+ listeners.splice(i, 1);
+ return this;
+ }
+ }
+ } else {
+ this._anyListeners = [];
+ }
+
+ return this;
+ }
+ /**
+ * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,
+ * e.g. to remove listeners.
+ *
+ * @public
+ */
+
+ }, {
+ key: "listenersAny",
+ value: function listenersAny() {
+ return this._anyListeners || [];
+ }
+ }]);
+
+ return Socket;
+}(typed_events_1.StrictEventEmitter);
+
+exports.Socket = Socket;
+
+/***/ }),
+
+/***/ "./build/typed-events.js":
+/*!*******************************!*\
+ !*** ./build/typed-events.js ***!
+ \*******************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }
+
+function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.StrictEventEmitter = void 0;
+
+var Emitter = __webpack_require__(/*! component-emitter */ "./node_modules/component-emitter/index.js");
+/**
+ * Strictly typed version of an `EventEmitter`. A `TypedEventEmitter` takes type
+ * parameters for mappings of event names to event data types, and strictly
+ * types method calls to the `EventEmitter` according to these event maps.
+ *
+ * @typeParam ListenEvents - `EventsMap` of user-defined events that can be
+ * listened to with `on` or `once`
+ * @typeParam EmitEvents - `EventsMap` of user-defined events that can be
+ * emitted with `emit`
+ * @typeParam ReservedEvents - `EventsMap` of reserved events, that can be
+ * emitted by socket.io with `emitReserved`, and can be listened to with
+ * `listen`.
+ */
+
+
+var StrictEventEmitter = /*#__PURE__*/function (_Emitter) {
+ _inherits(StrictEventEmitter, _Emitter);
+
+ var _super = _createSuper(StrictEventEmitter);
+
+ function StrictEventEmitter() {
+ _classCallCheck(this, StrictEventEmitter);
+
+ return _super.apply(this, arguments);
+ }
+
+ _createClass(StrictEventEmitter, [{
+ key: "on",
+ value:
+ /**
+ * Adds the `listener` function as an event listener for `ev`.
+ *
+ * @param ev Name of the event
+ * @param listener Callback function
+ */
+ function on(ev, listener) {
+ _get(_getPrototypeOf(StrictEventEmitter.prototype), "on", this).call(this, ev, listener);
+
+ return this;
+ }
+ /**
+ * Adds a one-time `listener` function as an event listener for `ev`.
+ *
+ * @param ev Name of the event
+ * @param listener Callback function
+ */
+
+ }, {
+ key: "once",
+ value: function once(ev, listener) {
+ _get(_getPrototypeOf(StrictEventEmitter.prototype), "once", this).call(this, ev, listener);
+
+ return this;
+ }
+ /**
+ * Emits an event.
+ *
+ * @param ev Name of the event
+ * @param args Values to send to listeners of this event
+ */
+
+ }, {
+ key: "emit",
+ value: function emit(ev) {
+ var _get2;
+
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+ args[_key - 1] = arguments[_key];
+ }
+
+ (_get2 = _get(_getPrototypeOf(StrictEventEmitter.prototype), "emit", this)).call.apply(_get2, [this, ev].concat(args));
+
+ return this;
+ }
+ /**
+ * Emits a reserved event.
+ *
+ * This method is `protected`, so that only a class extending
+ * `StrictEventEmitter` can emit its own reserved events.
+ *
+ * @param ev Reserved event name
+ * @param args Arguments to emit along with the event
+ */
+
+ }, {
+ key: "emitReserved",
+ value: function emitReserved(ev) {
+ var _get3;
+
+ for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
+ args[_key2 - 1] = arguments[_key2];
+ }
+
+ (_get3 = _get(_getPrototypeOf(StrictEventEmitter.prototype), "emit", this)).call.apply(_get3, [this, ev].concat(args));
+
+ return this;
+ }
+ /**
+ * Returns the listeners listening to an event.
+ *
+ * @param event Event name
+ * @returns Array of listeners subscribed to `event`
+ */
+
+ }, {
+ key: "listeners",
+ value: function listeners(event) {
+ return _get(_getPrototypeOf(StrictEventEmitter.prototype), "listeners", this).call(this, event);
+ }
+ }]);
+
+ return StrictEventEmitter;
+}(Emitter);
+
+exports.StrictEventEmitter = StrictEventEmitter;
+
+/***/ }),
+
+/***/ "./build/url.js":
+/*!**********************!*\
+ !*** ./build/url.js ***!
+ \**********************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.url = void 0;
+
+var parseuri = __webpack_require__(/*! parseuri */ "./node_modules/parseuri/index.js");
+
+var debug = __webpack_require__(/*! debug */ "./node_modules/debug/src/browser.js")("socket.io-client:url");
+/**
+ * URL parser.
+ *
+ * @param uri - url
+ * @param path - the request path of the connection
+ * @param loc - An object meant to mimic window.location.
+ * Defaults to window.location.
+ * @public
+ */
+
+
+function url(uri) {
+ var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
+ var loc = arguments.length > 2 ? arguments[2] : undefined;
+ var obj = uri; // default to window.location
+
+ loc = loc || typeof location !== "undefined" && location;
+ if (null == uri) uri = loc.protocol + "//" + loc.host; // relative path support
+
+ if (typeof uri === "string") {
+ if ("/" === uri.charAt(0)) {
+ if ("/" === uri.charAt(1)) {
+ uri = loc.protocol + uri;
+ } else {
+ uri = loc.host + uri;
+ }
+ }
+
+ if (!/^(https?|wss?):\/\//.test(uri)) {
+ debug("protocol-less url %s", uri);
+
+ if ("undefined" !== typeof loc) {
+ uri = loc.protocol + "//" + uri;
+ } else {
+ uri = "https://" + uri;
+ }
+ } // parse
+
+
+ debug("parse %s", uri);
+ obj = parseuri(uri);
+ } // make sure we treat `localhost:80` and `localhost` equally
+
+
+ if (!obj.port) {
+ if (/^(http|ws)$/.test(obj.protocol)) {
+ obj.port = "80";
+ } else if (/^(http|ws)s$/.test(obj.protocol)) {
+ obj.port = "443";
+ }
+ }
+
+ obj.path = obj.path || "/";
+ var ipv6 = obj.host.indexOf(":") !== -1;
+ var host = ipv6 ? "[" + obj.host + "]" : obj.host; // define unique id
+
+ obj.id = obj.protocol + "://" + host + ":" + obj.port + path; // define href
+
+ obj.href = obj.protocol + "://" + host + (loc && loc.port === obj.port ? "" : ":" + obj.port);
+ return obj;
+}
+
+exports.url = url;
+
+/***/ }),
+
+/***/ "./node_modules/backo2/index.js":
+/*!**************************************!*\
+ !*** ./node_modules/backo2/index.js ***!
+ \**************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+/**
+ * Expose `Backoff`.
+ */
+module.exports = Backoff;
+/**
+ * Initialize backoff timer with `opts`.
+ *
+ * - `min` initial timeout in milliseconds [100]
+ * - `max` max timeout [10000]
+ * - `jitter` [0]
+ * - `factor` [2]
+ *
+ * @param {Object} opts
+ * @api public
+ */
+
+function Backoff(opts) {
+ opts = opts || {};
+ this.ms = opts.min || 100;
+ this.max = opts.max || 10000;
+ this.factor = opts.factor || 2;
+ this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;
+ this.attempts = 0;
+}
+/**
+ * Return the backoff duration.
+ *
+ * @return {Number}
+ * @api public
+ */
+
+
+Backoff.prototype.duration = function () {
+ var ms = this.ms * Math.pow(this.factor, this.attempts++);
+
+ if (this.jitter) {
+ var rand = Math.random();
+ var deviation = Math.floor(rand * this.jitter * ms);
+ ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;
+ }
+
+ return Math.min(ms, this.max) | 0;
+};
+/**
+ * Reset the number of attempts.
+ *
+ * @api public
+ */
+
+
+Backoff.prototype.reset = function () {
+ this.attempts = 0;
+};
+/**
+ * Set the minimum duration
+ *
+ * @api public
+ */
+
+
+Backoff.prototype.setMin = function (min) {
+ this.ms = min;
+};
+/**
+ * Set the maximum duration
+ *
+ * @api public
+ */
+
+
+Backoff.prototype.setMax = function (max) {
+ this.max = max;
+};
+/**
+ * Set the jitter
+ *
+ * @api public
+ */
+
+
+Backoff.prototype.setJitter = function (jitter) {
+ this.jitter = jitter;
+};
+
+/***/ }),
+
+/***/ "./node_modules/component-emitter/index.js":
+/*!*************************************************!*\
+ !*** ./node_modules/component-emitter/index.js ***!
+ \*************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+/**
+ * Expose `Emitter`.
+ */
+if (true) {
+ module.exports = Emitter;
+}
+/**
+ * Initialize a new `Emitter`.
+ *
+ * @api public
+ */
+
+
+function Emitter(obj) {
+ if (obj) return mixin(obj);
+}
+
+;
+/**
+ * Mixin the emitter properties.
+ *
+ * @param {Object} obj
+ * @return {Object}
+ * @api private
+ */
+
+function mixin(obj) {
+ for (var key in Emitter.prototype) {
+ obj[key] = Emitter.prototype[key];
+ }
+
+ return obj;
+}
+/**
+ * Listen on the given `event` with `fn`.
+ *
+ * @param {String} event
+ * @param {Function} fn
+ * @return {Emitter}
+ * @api public
+ */
+
+
+Emitter.prototype.on = Emitter.prototype.addEventListener = function (event, fn) {
+ this._callbacks = this._callbacks || {};
+ (this._callbacks['$' + event] = this._callbacks['$' + event] || []).push(fn);
+ return this;
+};
+/**
+ * Adds an `event` listener that will be invoked a single
+ * time then automatically removed.
+ *
+ * @param {String} event
+ * @param {Function} fn
+ * @return {Emitter}
+ * @api public
+ */
+
+
+Emitter.prototype.once = function (event, fn) {
+ function on() {
+ this.off(event, on);
+ fn.apply(this, arguments);
+ }
+
+ on.fn = fn;
+ this.on(event, on);
+ return this;
+};
+/**
+ * Remove the given callback for `event` or all
+ * registered callbacks.
+ *
+ * @param {String} event
+ * @param {Function} fn
+ * @return {Emitter}
+ * @api public
+ */
+
+
+Emitter.prototype.off = Emitter.prototype.removeListener = Emitter.prototype.removeAllListeners = Emitter.prototype.removeEventListener = function (event, fn) {
+ this._callbacks = this._callbacks || {}; // all
+
+ if (0 == arguments.length) {
+ this._callbacks = {};
+ return this;
+ } // specific event
+
+
+ var callbacks = this._callbacks['$' + event];
+ if (!callbacks) return this; // remove all handlers
+
+ if (1 == arguments.length) {
+ delete this._callbacks['$' + event];
+ return this;
+ } // remove specific handler
+
+
+ var cb;
+
+ for (var i = 0; i < callbacks.length; i++) {
+ cb = callbacks[i];
+
+ if (cb === fn || cb.fn === fn) {
+ callbacks.splice(i, 1);
+ break;
+ }
+ } // Remove event specific arrays for event types that no
+ // one is subscribed for to avoid memory leak.
+
+
+ if (callbacks.length === 0) {
+ delete this._callbacks['$' + event];
+ }
+
+ return this;
+};
+/**
+ * Emit `event` with the given args.
+ *
+ * @param {String} event
+ * @param {Mixed} ...
+ * @return {Emitter}
+ */
+
+
+Emitter.prototype.emit = function (event) {
+ this._callbacks = this._callbacks || {};
+ var args = new Array(arguments.length - 1),
+ callbacks = this._callbacks['$' + event];
+
+ for (var i = 1; i < arguments.length; i++) {
+ args[i - 1] = arguments[i];
+ }
+
+ if (callbacks) {
+ callbacks = callbacks.slice(0);
+
+ for (var i = 0, len = callbacks.length; i < len; ++i) {
+ callbacks[i].apply(this, args);
+ }
+ }
+
+ return this;
+};
+/**
+ * Return array of callbacks for `event`.
+ *
+ * @param {String} event
+ * @return {Array}
+ * @api public
+ */
+
+
+Emitter.prototype.listeners = function (event) {
+ this._callbacks = this._callbacks || {};
+ return this._callbacks['$' + event] || [];
+};
+/**
+ * Check if this emitter has `event` handlers.
+ *
+ * @param {String} event
+ * @return {Boolean}
+ * @api public
+ */
+
+
+Emitter.prototype.hasListeners = function (event) {
+ return !!this.listeners(event).length;
+};
+
+/***/ }),
+
+/***/ "./node_modules/debug/src/browser.js":
+/*!*******************************************!*\
+ !*** ./node_modules/debug/src/browser.js ***!
+ \*******************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+/* eslint-env browser */
+
+/**
+ * This is the web browser implementation of `debug()`.
+ */
+exports.formatArgs = formatArgs;
+exports.save = save;
+exports.load = load;
+exports.useColors = useColors;
+exports.storage = localstorage();
+
+exports.destroy = function () {
+ var warned = false;
+ return function () {
+ if (!warned) {
+ warned = true;
+ console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');
+ }
+ };
+}();
+/**
+ * Colors.
+ */
+
+
+exports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];
+/**
+ * Currently only WebKit-based Web Inspectors, Firefox >= v31,
+ * and the Firebug extension (any Firefox version) are known
+ * to support "%c" CSS customizations.
+ *
+ * TODO: add a `localStorage` variable to explicitly enable/disable colors
+ */
+// eslint-disable-next-line complexity
+
+function useColors() {
+ // NB: In an Electron preload script, document will be defined but not fully
+ // initialized. Since we know we're in Chrome, we'll just detect this case
+ // explicitly
+ if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {
+ return true;
+ } // Internet Explorer and Edge do not support colors.
+
+
+ if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
+ return false;
+ } // Is webkit? http://stackoverflow.com/a/16459606/376773
+ // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
+
+
+ return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773
+ typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31?
+ // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
+ typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker
+ typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
+}
+/**
+ * Colorize log arguments if enabled.
+ *
+ * @api public
+ */
+
+
+function formatArgs(args) {
+ args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff);
+
+ if (!this.useColors) {
+ return;
+ }
+
+ var c = 'color: ' + this.color;
+ args.splice(1, 0, c, 'color: inherit'); // The final "%c" is somewhat tricky, because there could be other
+ // arguments passed either before or after the %c, so we need to
+ // figure out the correct index to insert the CSS into
+
+ var index = 0;
+ var lastC = 0;
+ args[0].replace(/%[a-zA-Z%]/g, function (match) {
+ if (match === '%%') {
+ return;
+ }
+
+ index++;
+
+ if (match === '%c') {
+ // We only are interested in the *last* %c
+ // (the user may have provided their own)
+ lastC = index;
+ }
+ });
+ args.splice(lastC, 0, c);
+}
+/**
+ * Invokes `console.debug()` when available.
+ * No-op when `console.debug` is not a "function".
+ * If `console.debug` is not available, falls back
+ * to `console.log`.
+ *
+ * @api public
+ */
+
+
+exports.log = console.debug || console.log || function () {};
+/**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+
+
+function save(namespaces) {
+ try {
+ if (namespaces) {
+ exports.storage.setItem('debug', namespaces);
+ } else {
+ exports.storage.removeItem('debug');
+ }
+ } catch (error) {// Swallow
+ // XXX (@Qix-) should we be logging these?
+ }
+}
+/**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+
+
+function load() {
+ var r;
+
+ try {
+ r = exports.storage.getItem('debug');
+ } catch (error) {// Swallow
+ // XXX (@Qix-) should we be logging these?
+ } // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
+
+
+ if (!r && typeof process !== 'undefined' && 'env' in process) {
+ r = process.env.DEBUG;
+ }
+
+ return r;
+}
+/**
+ * Localstorage attempts to return the localstorage.
+ *
+ * This is necessary because safari throws
+ * when a user disables cookies/localstorage
+ * and you attempt to access it.
+ *
+ * @return {LocalStorage}
+ * @api private
+ */
+
+
+function localstorage() {
+ try {
+ // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context
+ // The Browser also has localStorage in the global context.
+ return localStorage;
+ } catch (error) {// Swallow
+ // XXX (@Qix-) should we be logging these?
+ }
+}
+
+module.exports = __webpack_require__(/*! ./common */ "./node_modules/debug/src/common.js")(exports);
+var formatters = module.exports.formatters;
+/**
+ * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
+ */
+
+formatters.j = function (v) {
+ try {
+ return JSON.stringify(v);
+ } catch (error) {
+ return '[UnexpectedJSONParseError]: ' + error.message;
+ }
+};
+
+/***/ }),
+
+/***/ "./node_modules/debug/src/common.js":
+/*!******************************************!*\
+ !*** ./node_modules/debug/src/common.js ***!
+ \******************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
+
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+/**
+ * This is the common logic for both the Node.js and web browser
+ * implementations of `debug()`.
+ */
+function setup(env) {
+ createDebug.debug = createDebug;
+ createDebug["default"] = createDebug;
+ createDebug.coerce = coerce;
+ createDebug.disable = disable;
+ createDebug.enable = enable;
+ createDebug.enabled = enabled;
+ createDebug.humanize = __webpack_require__(/*! ms */ "./node_modules/ms/index.js");
+ createDebug.destroy = destroy;
+ Object.keys(env).forEach(function (key) {
+ createDebug[key] = env[key];
+ });
+ /**
+ * The currently active debug mode names, and names to skip.
+ */
+
+ createDebug.names = [];
+ createDebug.skips = [];
+ /**
+ * Map of special "%n" handling functions, for the debug "format" argument.
+ *
+ * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
+ */
+
+ createDebug.formatters = {};
+ /**
+ * Selects a color for a debug namespace
+ * @param {String} namespace The namespace string for the for the debug instance to be colored
+ * @return {Number|String} An ANSI color code for the given namespace
+ * @api private
+ */
+
+ function selectColor(namespace) {
+ var hash = 0;
+
+ for (var i = 0; i < namespace.length; i++) {
+ hash = (hash << 5) - hash + namespace.charCodeAt(i);
+ hash |= 0; // Convert to 32bit integer
+ }
+
+ return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
+ }
+
+ createDebug.selectColor = selectColor;
+ /**
+ * Create a debugger with the given `namespace`.
+ *
+ * @param {String} namespace
+ * @return {Function}
+ * @api public
+ */
+
+ function createDebug(namespace) {
+ var prevTime;
+ var enableOverride = null;
+
+ function debug() {
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+
+ // Disabled?
+ if (!debug.enabled) {
+ return;
+ }
+
+ var self = debug; // Set `diff` timestamp
+
+ var curr = Number(new Date());
+ var ms = curr - (prevTime || curr);
+ self.diff = ms;
+ self.prev = prevTime;
+ self.curr = curr;
+ prevTime = curr;
+ args[0] = createDebug.coerce(args[0]);
+
+ if (typeof args[0] !== 'string') {
+ // Anything else let's inspect with %O
+ args.unshift('%O');
+ } // Apply any `formatters` transformations
+
+
+ var index = 0;
+ args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {
+ // If we encounter an escaped % then don't increase the array index
+ if (match === '%%') {
+ return '%';
+ }
+
+ index++;
+ var formatter = createDebug.formatters[format];
+
+ if (typeof formatter === 'function') {
+ var val = args[index];
+ match = formatter.call(self, val); // Now we need to remove `args[index]` since it's inlined in the `format`
+
+ args.splice(index, 1);
+ index--;
+ }
+
+ return match;
+ }); // Apply env-specific formatting (colors, etc.)
+
+ createDebug.formatArgs.call(self, args);
+ var logFn = self.log || createDebug.log;
+ logFn.apply(self, args);
+ }
+
+ debug.namespace = namespace;
+ debug.useColors = createDebug.useColors();
+ debug.color = createDebug.selectColor(namespace);
+ debug.extend = extend;
+ debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.
+
+ Object.defineProperty(debug, 'enabled', {
+ enumerable: true,
+ configurable: false,
+ get: function get() {
+ return enableOverride === null ? createDebug.enabled(namespace) : enableOverride;
+ },
+ set: function set(v) {
+ enableOverride = v;
+ }
+ }); // Env-specific initialization logic for debug instances
+
+ if (typeof createDebug.init === 'function') {
+ createDebug.init(debug);
+ }
+
+ return debug;
+ }
+
+ function extend(namespace, delimiter) {
+ var newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);
+ newDebug.log = this.log;
+ return newDebug;
+ }
+ /**
+ * Enables a debug mode by namespaces. This can include modes
+ * separated by a colon and wildcards.
+ *
+ * @param {String} namespaces
+ * @api public
+ */
+
+
+ function enable(namespaces) {
+ createDebug.save(namespaces);
+ createDebug.names = [];
+ createDebug.skips = [];
+ var i;
+ var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
+ var len = split.length;
+
+ for (i = 0; i < len; i++) {
+ if (!split[i]) {
+ // ignore empty strings
+ continue;
+ }
+
+ namespaces = split[i].replace(/\*/g, '.*?');
+
+ if (namespaces[0] === '-') {
+ createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
+ } else {
+ createDebug.names.push(new RegExp('^' + namespaces + '$'));
+ }
+ }
+ }
+ /**
+ * Disable debug output.
+ *
+ * @return {String} namespaces
+ * @api public
+ */
+
+
+ function disable() {
+ var namespaces = [].concat(_toConsumableArray(createDebug.names.map(toNamespace)), _toConsumableArray(createDebug.skips.map(toNamespace).map(function (namespace) {
+ return '-' + namespace;
+ }))).join(',');
+ createDebug.enable('');
+ return namespaces;
+ }
+ /**
+ * Returns true if the given mode name is enabled, false otherwise.
+ *
+ * @param {String} name
+ * @return {Boolean}
+ * @api public
+ */
+
+
+ function enabled(name) {
+ if (name[name.length - 1] === '*') {
+ return true;
+ }
+
+ var i;
+ var len;
+
+ for (i = 0, len = createDebug.skips.length; i < len; i++) {
+ if (createDebug.skips[i].test(name)) {
+ return false;
+ }
+ }
+
+ for (i = 0, len = createDebug.names.length; i < len; i++) {
+ if (createDebug.names[i].test(name)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+ /**
+ * Convert regexp to namespace
+ *
+ * @param {RegExp} regxep
+ * @return {String} namespace
+ * @api private
+ */
+
+
+ function toNamespace(regexp) {
+ return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, '*');
+ }
+ /**
+ * Coerce `val`.
+ *
+ * @param {Mixed} val
+ * @return {Mixed}
+ * @api private
+ */
+
+
+ function coerce(val) {
+ if (val instanceof Error) {
+ return val.stack || val.message;
+ }
+
+ return val;
+ }
+ /**
+ * XXX DO NOT USE. This is a temporary stub function.
+ * XXX It WILL be removed in the next major release.
+ */
+
+
+ function destroy() {
+ console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');
+ }
+
+ createDebug.enable(createDebug.load());
+ return createDebug;
+}
+
+module.exports = setup;
+
+/***/ }),
+
+/***/ "./node_modules/engine.io-client/lib/globalThis.browser.js":
+/*!*****************************************************************!*\
+ !*** ./node_modules/engine.io-client/lib/globalThis.browser.js ***!
+ \*****************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+module.exports = function () {
+ if (typeof self !== "undefined") {
+ return self;
+ } else if (typeof window !== "undefined") {
+ return window;
+ } else {
+ return Function("return this")();
+ }
+}();
+
+/***/ }),
+
+/***/ "./node_modules/engine.io-client/lib/index.js":
+/*!****************************************************!*\
+ !*** ./node_modules/engine.io-client/lib/index.js ***!
+ \****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var Socket = __webpack_require__(/*! ./socket */ "./node_modules/engine.io-client/lib/socket.js");
+
+module.exports = function (uri, opts) {
+ return new Socket(uri, opts);
+};
+/**
+ * Expose deps for legacy compatibility
+ * and standalone browser access.
+ */
+
+
+module.exports.Socket = Socket;
+module.exports.protocol = Socket.protocol; // this is an int
+
+module.exports.Transport = __webpack_require__(/*! ./transport */ "./node_modules/engine.io-client/lib/transport.js");
+module.exports.transports = __webpack_require__(/*! ./transports/index */ "./node_modules/engine.io-client/lib/transports/index.js");
+module.exports.parser = __webpack_require__(/*! engine.io-parser */ "./node_modules/engine.io-parser/lib/index.js");
+
+/***/ }),
+
+/***/ "./node_modules/engine.io-client/lib/socket.js":
+/*!*****************************************************!*\
+ !*** ./node_modules/engine.io-client/lib/socket.js ***!
+ \*****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+var transports = __webpack_require__(/*! ./transports/index */ "./node_modules/engine.io-client/lib/transports/index.js");
+
+var Emitter = __webpack_require__(/*! component-emitter */ "./node_modules/component-emitter/index.js");
+
+var debug = __webpack_require__(/*! debug */ "./node_modules/debug/src/browser.js")("engine.io-client:socket");
+
+var parser = __webpack_require__(/*! engine.io-parser */ "./node_modules/engine.io-parser/lib/index.js");
+
+var parseuri = __webpack_require__(/*! parseuri */ "./node_modules/parseuri/index.js");
+
+var parseqs = __webpack_require__(/*! parseqs */ "./node_modules/parseqs/index.js");
+
+var Socket = /*#__PURE__*/function (_Emitter) {
+ _inherits(Socket, _Emitter);
+
+ var _super = _createSuper(Socket);
+
+ /**
+ * Socket constructor.
+ *
+ * @param {String|Object} uri or options
+ * @param {Object} options
+ * @api public
+ */
+ function Socket(uri) {
+ var _this;
+
+ var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ _classCallCheck(this, Socket);
+
+ _this = _super.call(this);
+
+ if (uri && "object" === _typeof(uri)) {
+ opts = uri;
+ uri = null;
+ }
+
+ if (uri) {
+ uri = parseuri(uri);
+ opts.hostname = uri.host;
+ opts.secure = uri.protocol === "https" || uri.protocol === "wss";
+ opts.port = uri.port;
+ if (uri.query) opts.query = uri.query;
+ } else if (opts.host) {
+ opts.hostname = parseuri(opts.host).host;
+ }
+
+ _this.secure = null != opts.secure ? opts.secure : typeof location !== "undefined" && "https:" === location.protocol;
+
+ if (opts.hostname && !opts.port) {
+ // if no port is specified manually, use the protocol default
+ opts.port = _this.secure ? "443" : "80";
+ }
+
+ _this.hostname = opts.hostname || (typeof location !== "undefined" ? location.hostname : "localhost");
+ _this.port = opts.port || (typeof location !== "undefined" && location.port ? location.port : _this.secure ? 443 : 80);
+ _this.transports = opts.transports || ["polling", "websocket"];
+ _this.readyState = "";
+ _this.writeBuffer = [];
+ _this.prevBufferLen = 0;
+ _this.opts = _extends({
+ path: "/engine.io",
+ agent: false,
+ withCredentials: false,
+ upgrade: true,
+ jsonp: true,
+ timestampParam: "t",
+ rememberUpgrade: false,
+ rejectUnauthorized: true,
+ perMessageDeflate: {
+ threshold: 1024
+ },
+ transportOptions: {},
+ closeOnBeforeunload: true
+ }, opts);
+ _this.opts.path = _this.opts.path.replace(/\/$/, "") + "/";
+
+ if (typeof _this.opts.query === "string") {
+ _this.opts.query = parseqs.decode(_this.opts.query);
+ } // set on handshake
+
+
+ _this.id = null;
+ _this.upgrades = null;
+ _this.pingInterval = null;
+ _this.pingTimeout = null; // set on heartbeat
+
+ _this.pingTimeoutTimer = null;
+
+ if (typeof addEventListener === "function") {
+ if (_this.opts.closeOnBeforeunload) {
+ // Firefox closes the connection when the "beforeunload" event is emitted but not Chrome. This event listener
+ // ensures every browser behaves the same (no "disconnect" event at the Socket.IO level when the page is
+ // closed/reloaded)
+ addEventListener("beforeunload", function () {
+ if (_this.transport) {
+ // silently close the transport
+ _this.transport.removeAllListeners();
+
+ _this.transport.close();
+ }
+ }, false);
+ }
+
+ if (_this.hostname !== "localhost") {
+ _this.offlineEventListener = function () {
+ _this.onClose("transport close");
+ };
+
+ addEventListener("offline", _this.offlineEventListener, false);
+ }
+ }
+
+ _this.open();
+
+ return _this;
+ }
+ /**
+ * Creates transport of the given type.
+ *
+ * @param {String} transport name
+ * @return {Transport}
+ * @api private
+ */
+
+
+ _createClass(Socket, [{
+ key: "createTransport",
+ value: function createTransport(name) {
+ debug('creating transport "%s"', name);
+ var query = clone(this.opts.query); // append engine.io protocol identifier
+
+ query.EIO = parser.protocol; // transport name
+
+ query.transport = name; // session id if we already have one
+
+ if (this.id) query.sid = this.id;
+
+ var opts = _extends({}, this.opts.transportOptions[name], this.opts, {
+ query: query,
+ socket: this,
+ hostname: this.hostname,
+ secure: this.secure,
+ port: this.port
+ });
+
+ debug("options: %j", opts);
+ return new transports[name](opts);
+ }
+ /**
+ * Initializes transport to use and starts probe.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "open",
+ value: function open() {
+ var _this2 = this;
+
+ var transport;
+
+ if (this.opts.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf("websocket") !== -1) {
+ transport = "websocket";
+ } else if (0 === this.transports.length) {
+ // Emit error on next tick so it can be listened to
+ setTimeout(function () {
+ _this2.emit("error", "No transports available");
+ }, 0);
+ return;
+ } else {
+ transport = this.transports[0];
+ }
+
+ this.readyState = "opening"; // Retry with the next transport if the transport is disabled (jsonp: false)
+
+ try {
+ transport = this.createTransport(transport);
+ } catch (e) {
+ debug("error while creating transport: %s", e);
+ this.transports.shift();
+ this.open();
+ return;
+ }
+
+ transport.open();
+ this.setTransport(transport);
+ }
+ /**
+ * Sets the current transport. Disables the existing one (if any).
+ *
+ * @api private
+ */
+
+ }, {
+ key: "setTransport",
+ value: function setTransport(transport) {
+ var _this3 = this;
+
+ debug("setting transport %s", transport.name);
+
+ if (this.transport) {
+ debug("clearing existing transport %s", this.transport.name);
+ this.transport.removeAllListeners();
+ } // set up transport
+
+
+ this.transport = transport; // set up transport listeners
+
+ transport.on("drain", this.onDrain.bind(this)).on("packet", this.onPacket.bind(this)).on("error", this.onError.bind(this)).on("close", function () {
+ _this3.onClose("transport close");
+ });
+ }
+ /**
+ * Probes a transport.
+ *
+ * @param {String} transport name
+ * @api private
+ */
+
+ }, {
+ key: "probe",
+ value: function probe(name) {
+ var _this4 = this;
+
+ debug('probing transport "%s"', name);
+ var transport = this.createTransport(name, {
+ probe: 1
+ });
+ var failed = false;
+ Socket.priorWebsocketSuccess = false;
+
+ var onTransportOpen = function onTransportOpen() {
+ if (failed) return;
+ debug('probe transport "%s" opened', name);
+ transport.send([{
+ type: "ping",
+ data: "probe"
+ }]);
+ transport.once("packet", function (msg) {
+ if (failed) return;
+
+ if ("pong" === msg.type && "probe" === msg.data) {
+ debug('probe transport "%s" pong', name);
+ _this4.upgrading = true;
+
+ _this4.emit("upgrading", transport);
+
+ if (!transport) return;
+ Socket.priorWebsocketSuccess = "websocket" === transport.name;
+ debug('pausing current transport "%s"', _this4.transport.name);
+
+ _this4.transport.pause(function () {
+ if (failed) return;
+ if ("closed" === _this4.readyState) return;
+ debug("changing transport and sending upgrade packet");
+ cleanup();
+
+ _this4.setTransport(transport);
+
+ transport.send([{
+ type: "upgrade"
+ }]);
+
+ _this4.emit("upgrade", transport);
+
+ transport = null;
+ _this4.upgrading = false;
+
+ _this4.flush();
+ });
+ } else {
+ debug('probe transport "%s" failed', name);
+ var err = new Error("probe error");
+ err.transport = transport.name;
+
+ _this4.emit("upgradeError", err);
+ }
+ });
+ };
+
+ function freezeTransport() {
+ if (failed) return; // Any callback called by transport should be ignored since now
+
+ failed = true;
+ cleanup();
+ transport.close();
+ transport = null;
+ } // Handle any error that happens while probing
+
+
+ var onerror = function onerror(err) {
+ var error = new Error("probe error: " + err);
+ error.transport = transport.name;
+ freezeTransport();
+ debug('probe transport "%s" failed because of error: %s', name, err);
+
+ _this4.emit("upgradeError", error);
+ };
+
+ function onTransportClose() {
+ onerror("transport closed");
+ } // When the socket is closed while we're probing
+
+
+ function onclose() {
+ onerror("socket closed");
+ } // When the socket is upgraded while we're probing
+
+
+ function onupgrade(to) {
+ if (transport && to.name !== transport.name) {
+ debug('"%s" works - aborting "%s"', to.name, transport.name);
+ freezeTransport();
+ }
+ } // Remove all listeners on the transport and on self
+
+
+ var cleanup = function cleanup() {
+ transport.removeListener("open", onTransportOpen);
+ transport.removeListener("error", onerror);
+ transport.removeListener("close", onTransportClose);
+
+ _this4.removeListener("close", onclose);
+
+ _this4.removeListener("upgrading", onupgrade);
+ };
+
+ transport.once("open", onTransportOpen);
+ transport.once("error", onerror);
+ transport.once("close", onTransportClose);
+ this.once("close", onclose);
+ this.once("upgrading", onupgrade);
+ transport.open();
+ }
+ /**
+ * Called when connection is deemed open.
+ *
+ * @api public
+ */
+
+ }, {
+ key: "onOpen",
+ value: function onOpen() {
+ debug("socket open");
+ this.readyState = "open";
+ Socket.priorWebsocketSuccess = "websocket" === this.transport.name;
+ this.emit("open");
+ this.flush(); // we check for `readyState` in case an `open`
+ // listener already closed the socket
+
+ if ("open" === this.readyState && this.opts.upgrade && this.transport.pause) {
+ debug("starting upgrade probes");
+ var i = 0;
+ var l = this.upgrades.length;
+
+ for (; i < l; i++) {
+ this.probe(this.upgrades[i]);
+ }
+ }
+ }
+ /**
+ * Handles a packet.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "onPacket",
+ value: function onPacket(packet) {
+ if ("opening" === this.readyState || "open" === this.readyState || "closing" === this.readyState) {
+ debug('socket receive: type "%s", data "%s"', packet.type, packet.data);
+ this.emit("packet", packet); // Socket is live - any packet counts
+
+ this.emit("heartbeat");
+
+ switch (packet.type) {
+ case "open":
+ this.onHandshake(JSON.parse(packet.data));
+ break;
+
+ case "ping":
+ this.resetPingTimeout();
+ this.sendPacket("pong");
+ this.emit("ping");
+ this.emit("pong");
+ break;
+
+ case "error":
+ var err = new Error("server error");
+ err.code = packet.data;
+ this.onError(err);
+ break;
+
+ case "message":
+ this.emit("data", packet.data);
+ this.emit("message", packet.data);
+ break;
+ }
+ } else {
+ debug('packet received with socket readyState "%s"', this.readyState);
+ }
+ }
+ /**
+ * Called upon handshake completion.
+ *
+ * @param {Object} handshake obj
+ * @api private
+ */
+
+ }, {
+ key: "onHandshake",
+ value: function onHandshake(data) {
+ this.emit("handshake", data);
+ this.id = data.sid;
+ this.transport.query.sid = data.sid;
+ this.upgrades = this.filterUpgrades(data.upgrades);
+ this.pingInterval = data.pingInterval;
+ this.pingTimeout = data.pingTimeout;
+ this.onOpen(); // In case open handler closes socket
+
+ if ("closed" === this.readyState) return;
+ this.resetPingTimeout();
+ }
+ /**
+ * Sets and resets ping timeout timer based on server pings.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "resetPingTimeout",
+ value: function resetPingTimeout() {
+ var _this5 = this;
+
+ clearTimeout(this.pingTimeoutTimer);
+ this.pingTimeoutTimer = setTimeout(function () {
+ _this5.onClose("ping timeout");
+ }, this.pingInterval + this.pingTimeout);
+
+ if (this.opts.autoUnref) {
+ this.pingTimeoutTimer.unref();
+ }
+ }
+ /**
+ * Called on `drain` event
+ *
+ * @api private
+ */
+
+ }, {
+ key: "onDrain",
+ value: function onDrain() {
+ this.writeBuffer.splice(0, this.prevBufferLen); // setting prevBufferLen = 0 is very important
+ // for example, when upgrading, upgrade packet is sent over,
+ // and a nonzero prevBufferLen could cause problems on `drain`
+
+ this.prevBufferLen = 0;
+
+ if (0 === this.writeBuffer.length) {
+ this.emit("drain");
+ } else {
+ this.flush();
+ }
+ }
+ /**
+ * Flush write buffers.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "flush",
+ value: function flush() {
+ if ("closed" !== this.readyState && this.transport.writable && !this.upgrading && this.writeBuffer.length) {
+ debug("flushing %d packets in socket", this.writeBuffer.length);
+ this.transport.send(this.writeBuffer); // keep track of current length of writeBuffer
+ // splice writeBuffer and callbackBuffer on `drain`
+
+ this.prevBufferLen = this.writeBuffer.length;
+ this.emit("flush");
+ }
+ }
+ /**
+ * Sends a message.
+ *
+ * @param {String} message.
+ * @param {Function} callback function.
+ * @param {Object} options.
+ * @return {Socket} for chaining.
+ * @api public
+ */
+
+ }, {
+ key: "write",
+ value: function write(msg, options, fn) {
+ this.sendPacket("message", msg, options, fn);
+ return this;
+ }
+ }, {
+ key: "send",
+ value: function send(msg, options, fn) {
+ this.sendPacket("message", msg, options, fn);
+ return this;
+ }
+ /**
+ * Sends a packet.
+ *
+ * @param {String} packet type.
+ * @param {String} data.
+ * @param {Object} options.
+ * @param {Function} callback function.
+ * @api private
+ */
+
+ }, {
+ key: "sendPacket",
+ value: function sendPacket(type, data, options, fn) {
+ if ("function" === typeof data) {
+ fn = data;
+ data = undefined;
+ }
+
+ if ("function" === typeof options) {
+ fn = options;
+ options = null;
+ }
+
+ if ("closing" === this.readyState || "closed" === this.readyState) {
+ return;
+ }
+
+ options = options || {};
+ options.compress = false !== options.compress;
+ var packet = {
+ type: type,
+ data: data,
+ options: options
+ };
+ this.emit("packetCreate", packet);
+ this.writeBuffer.push(packet);
+ if (fn) this.once("flush", fn);
+ this.flush();
+ }
+ /**
+ * Closes the connection.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "close",
+ value: function close() {
+ var _this6 = this;
+
+ var close = function close() {
+ _this6.onClose("forced close");
+
+ debug("socket closing - telling transport to close");
+
+ _this6.transport.close();
+ };
+
+ var cleanupAndClose = function cleanupAndClose() {
+ _this6.removeListener("upgrade", cleanupAndClose);
+
+ _this6.removeListener("upgradeError", cleanupAndClose);
+
+ close();
+ };
+
+ var waitForUpgrade = function waitForUpgrade() {
+ // wait for upgrade to finish since we can't send packets while pausing a transport
+ _this6.once("upgrade", cleanupAndClose);
+
+ _this6.once("upgradeError", cleanupAndClose);
+ };
+
+ if ("opening" === this.readyState || "open" === this.readyState) {
+ this.readyState = "closing";
+
+ if (this.writeBuffer.length) {
+ this.once("drain", function () {
+ if (_this6.upgrading) {
+ waitForUpgrade();
+ } else {
+ close();
+ }
+ });
+ } else if (this.upgrading) {
+ waitForUpgrade();
+ } else {
+ close();
+ }
+ }
+
+ return this;
+ }
+ /**
+ * Called upon transport error
+ *
+ * @api private
+ */
+
+ }, {
+ key: "onError",
+ value: function onError(err) {
+ debug("socket error %j", err);
+ Socket.priorWebsocketSuccess = false;
+ this.emit("error", err);
+ this.onClose("transport error", err);
+ }
+ /**
+ * Called upon transport close.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "onClose",
+ value: function onClose(reason, desc) {
+ if ("opening" === this.readyState || "open" === this.readyState || "closing" === this.readyState) {
+ debug('socket close with reason: "%s"', reason); // clear timers
+
+ clearTimeout(this.pingIntervalTimer);
+ clearTimeout(this.pingTimeoutTimer); // stop event from firing again for transport
+
+ this.transport.removeAllListeners("close"); // ensure transport won't stay open
+
+ this.transport.close(); // ignore further transport communication
+
+ this.transport.removeAllListeners();
+
+ if (typeof removeEventListener === "function") {
+ removeEventListener("offline", this.offlineEventListener, false);
+ } // set ready state
+
+
+ this.readyState = "closed"; // clear session id
+
+ this.id = null; // emit close event
+
+ this.emit("close", reason, desc); // clean buffers after, so users can still
+ // grab the buffers on `close` event
+
+ this.writeBuffer = [];
+ this.prevBufferLen = 0;
+ }
+ }
+ /**
+ * Filters upgrades, returning only those matching client transports.
+ *
+ * @param {Array} server upgrades
+ * @api private
+ *
+ */
+
+ }, {
+ key: "filterUpgrades",
+ value: function filterUpgrades(upgrades) {
+ var filteredUpgrades = [];
+ var i = 0;
+ var j = upgrades.length;
+
+ for (; i < j; i++) {
+ if (~this.transports.indexOf(upgrades[i])) filteredUpgrades.push(upgrades[i]);
+ }
+
+ return filteredUpgrades;
+ }
+ }]);
+
+ return Socket;
+}(Emitter);
+
+Socket.priorWebsocketSuccess = false;
+/**
+ * Protocol version.
+ *
+ * @api public
+ */
+
+Socket.protocol = parser.protocol; // this is an int
+
+function clone(obj) {
+ var o = {};
+
+ for (var i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ o[i] = obj[i];
+ }
+ }
+
+ return o;
+}
+
+module.exports = Socket;
+
+/***/ }),
+
+/***/ "./node_modules/engine.io-client/lib/transport.js":
+/*!********************************************************!*\
+ !*** ./node_modules/engine.io-client/lib/transport.js ***!
+ \********************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+var parser = __webpack_require__(/*! engine.io-parser */ "./node_modules/engine.io-parser/lib/index.js");
+
+var Emitter = __webpack_require__(/*! component-emitter */ "./node_modules/component-emitter/index.js");
+
+var debug = __webpack_require__(/*! debug */ "./node_modules/debug/src/browser.js")("engine.io-client:transport");
+
+var Transport = /*#__PURE__*/function (_Emitter) {
+ _inherits(Transport, _Emitter);
+
+ var _super = _createSuper(Transport);
+
+ /**
+ * Transport abstract constructor.
+ *
+ * @param {Object} options.
+ * @api private
+ */
+ function Transport(opts) {
+ var _this;
+
+ _classCallCheck(this, Transport);
+
+ _this = _super.call(this);
+ _this.opts = opts;
+ _this.query = opts.query;
+ _this.readyState = "";
+ _this.socket = opts.socket;
+ return _this;
+ }
+ /**
+ * Emits an error.
+ *
+ * @param {String} str
+ * @return {Transport} for chaining
+ * @api public
+ */
+
+
+ _createClass(Transport, [{
+ key: "onError",
+ value: function onError(msg, desc) {
+ var err = new Error(msg);
+ err.type = "TransportError";
+ err.description = desc;
+ this.emit("error", err);
+ return this;
+ }
+ /**
+ * Opens the transport.
+ *
+ * @api public
+ */
+
+ }, {
+ key: "open",
+ value: function open() {
+ if ("closed" === this.readyState || "" === this.readyState) {
+ this.readyState = "opening";
+ this.doOpen();
+ }
+
+ return this;
+ }
+ /**
+ * Closes the transport.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "close",
+ value: function close() {
+ if ("opening" === this.readyState || "open" === this.readyState) {
+ this.doClose();
+ this.onClose();
+ }
+
+ return this;
+ }
+ /**
+ * Sends multiple packets.
+ *
+ * @param {Array} packets
+ * @api private
+ */
+
+ }, {
+ key: "send",
+ value: function send(packets) {
+ if ("open" === this.readyState) {
+ this.write(packets);
+ } else {
+ // this might happen if the transport was silently closed in the beforeunload event handler
+ debug("transport is not open, discarding packets");
+ }
+ }
+ /**
+ * Called upon open
+ *
+ * @api private
+ */
+
+ }, {
+ key: "onOpen",
+ value: function onOpen() {
+ this.readyState = "open";
+ this.writable = true;
+ this.emit("open");
+ }
+ /**
+ * Called with data.
+ *
+ * @param {String} data
+ * @api private
+ */
+
+ }, {
+ key: "onData",
+ value: function onData(data) {
+ var packet = parser.decodePacket(data, this.socket.binaryType);
+ this.onPacket(packet);
+ }
+ /**
+ * Called with a decoded packet.
+ */
+
+ }, {
+ key: "onPacket",
+ value: function onPacket(packet) {
+ this.emit("packet", packet);
+ }
+ /**
+ * Called upon close.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "onClose",
+ value: function onClose() {
+ this.readyState = "closed";
+ this.emit("close");
+ }
+ }]);
+
+ return Transport;
+}(Emitter);
+
+module.exports = Transport;
+
+/***/ }),
+
+/***/ "./node_modules/engine.io-client/lib/transports/index.js":
+/*!***************************************************************!*\
+ !*** ./node_modules/engine.io-client/lib/transports/index.js ***!
+ \***************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var XMLHttpRequest = __webpack_require__(/*! ../../contrib/xmlhttprequest-ssl/XMLHttpRequest */ "./node_modules/engine.io-client/lib/xmlhttprequest.js");
+
+var XHR = __webpack_require__(/*! ./polling-xhr */ "./node_modules/engine.io-client/lib/transports/polling-xhr.js");
+
+var JSONP = __webpack_require__(/*! ./polling-jsonp */ "./node_modules/engine.io-client/lib/transports/polling-jsonp.js");
+
+var websocket = __webpack_require__(/*! ./websocket */ "./node_modules/engine.io-client/lib/transports/websocket.js");
+
+exports.polling = polling;
+exports.websocket = websocket;
+/**
+ * Polling transport polymorphic constructor.
+ * Decides on xhr vs jsonp based on feature detection.
+ *
+ * @api private
+ */
+
+function polling(opts) {
+ var xhr;
+ var xd = false;
+ var xs = false;
+ var jsonp = false !== opts.jsonp;
+
+ if (typeof location !== "undefined") {
+ var isSSL = "https:" === location.protocol;
+ var port = location.port; // some user agents have empty `location.port`
+
+ if (!port) {
+ port = isSSL ? 443 : 80;
+ }
+
+ xd = opts.hostname !== location.hostname || port !== opts.port;
+ xs = opts.secure !== isSSL;
+ }
+
+ opts.xdomain = xd;
+ opts.xscheme = xs;
+ xhr = new XMLHttpRequest(opts);
+
+ if ("open" in xhr && !opts.forceJSONP) {
+ return new XHR(opts);
+ } else {
+ if (!jsonp) throw new Error("JSONP disabled");
+ return new JSONP(opts);
+ }
+}
+
+/***/ }),
+
+/***/ "./node_modules/engine.io-client/lib/transports/polling-jsonp.js":
+/*!***********************************************************************!*\
+ !*** ./node_modules/engine.io-client/lib/transports/polling-jsonp.js ***!
+ \***********************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }
+
+function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+var Polling = __webpack_require__(/*! ./polling */ "./node_modules/engine.io-client/lib/transports/polling.js");
+
+var globalThis = __webpack_require__(/*! ../globalThis */ "./node_modules/engine.io-client/lib/globalThis.browser.js");
+
+var rNewline = /\n/g;
+var rEscapedNewline = /\\n/g;
+/**
+ * Global JSONP callbacks.
+ */
+
+var callbacks;
+
+var JSONPPolling = /*#__PURE__*/function (_Polling) {
+ _inherits(JSONPPolling, _Polling);
+
+ var _super = _createSuper(JSONPPolling);
+
+ /**
+ * JSONP Polling constructor.
+ *
+ * @param {Object} opts.
+ * @api public
+ */
+ function JSONPPolling(opts) {
+ var _this;
+
+ _classCallCheck(this, JSONPPolling);
+
+ _this = _super.call(this, opts);
+ _this.query = _this.query || {}; // define global callbacks array if not present
+ // we do this here (lazily) to avoid unneeded global pollution
+
+ if (!callbacks) {
+ // we need to consider multiple engines in the same page
+ callbacks = globalThis.___eio = globalThis.___eio || [];
+ } // callback identifier
+
+
+ _this.index = callbacks.length; // add callback to jsonp global
+
+ callbacks.push(_this.onData.bind(_assertThisInitialized(_this))); // append to query string
+
+ _this.query.j = _this.index;
+ return _this;
+ }
+ /**
+ * JSONP only supports binary as base64 encoded strings
+ */
+
+
+ _createClass(JSONPPolling, [{
+ key: "supportsBinary",
+ get: function get() {
+ return false;
+ }
+ /**
+ * Closes the socket.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "doClose",
+ value: function doClose() {
+ if (this.script) {
+ // prevent spurious errors from being emitted when the window is unloaded
+ this.script.onerror = function () {};
+
+ this.script.parentNode.removeChild(this.script);
+ this.script = null;
+ }
+
+ if (this.form) {
+ this.form.parentNode.removeChild(this.form);
+ this.form = null;
+ this.iframe = null;
+ }
+
+ _get(_getPrototypeOf(JSONPPolling.prototype), "doClose", this).call(this);
+ }
+ /**
+ * Starts a poll cycle.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "doPoll",
+ value: function doPoll() {
+ var _this2 = this;
+
+ var script = document.createElement("script");
+
+ if (this.script) {
+ this.script.parentNode.removeChild(this.script);
+ this.script = null;
+ }
+
+ script.async = true;
+ script.src = this.uri();
+
+ script.onerror = function (e) {
+ _this2.onError("jsonp poll error", e);
+ };
+
+ var insertAt = document.getElementsByTagName("script")[0];
+
+ if (insertAt) {
+ insertAt.parentNode.insertBefore(script, insertAt);
+ } else {
+ (document.head || document.body).appendChild(script);
+ }
+
+ this.script = script;
+ var isUAgecko = "undefined" !== typeof navigator && /gecko/i.test(navigator.userAgent);
+
+ if (isUAgecko) {
+ setTimeout(function () {
+ var iframe = document.createElement("iframe");
+ document.body.appendChild(iframe);
+ document.body.removeChild(iframe);
+ }, 100);
+ }
+ }
+ /**
+ * Writes with a hidden iframe.
+ *
+ * @param {String} data to send
+ * @param {Function} called upon flush.
+ * @api private
+ */
+
+ }, {
+ key: "doWrite",
+ value: function doWrite(data, fn) {
+ var _this3 = this;
+
+ var iframe;
+
+ if (!this.form) {
+ var form = document.createElement("form");
+ var area = document.createElement("textarea");
+ var id = this.iframeId = "eio_iframe_" + this.index;
+ form.className = "socketio";
+ form.style.position = "absolute";
+ form.style.top = "-1000px";
+ form.style.left = "-1000px";
+ form.target = id;
+ form.method = "POST";
+ form.setAttribute("accept-charset", "utf-8");
+ area.name = "d";
+ form.appendChild(area);
+ document.body.appendChild(form);
+ this.form = form;
+ this.area = area;
+ }
+
+ this.form.action = this.uri();
+
+ function complete() {
+ initIframe();
+ fn();
+ }
+
+ var initIframe = function initIframe() {
+ if (_this3.iframe) {
+ try {
+ _this3.form.removeChild(_this3.iframe);
+ } catch (e) {
+ _this3.onError("jsonp polling iframe removal error", e);
+ }
+ }
+
+ try {
+ // ie6 dynamic iframes with target="" support (thanks Chris Lambacher)
+ var html = '<iframe src="javascript:0" name="' + _this3.iframeId + '">';
+ iframe = document.createElement(html);
+ } catch (e) {
+ iframe = document.createElement("iframe");
+ iframe.name = _this3.iframeId;
+ iframe.src = "javascript:0";
+ }
+
+ iframe.id = _this3.iframeId;
+
+ _this3.form.appendChild(iframe);
+
+ _this3.iframe = iframe;
+ };
+
+ initIframe(); // escape \n to prevent it from being converted into \r\n by some UAs
+ // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side
+
+ data = data.replace(rEscapedNewline, "\\\n");
+ this.area.value = data.replace(rNewline, "\\n");
+
+ try {
+ this.form.submit();
+ } catch (e) {}
+
+ if (this.iframe.attachEvent) {
+ this.iframe.onreadystatechange = function () {
+ if (_this3.iframe.readyState === "complete") {
+ complete();
+ }
+ };
+ } else {
+ this.iframe.onload = complete;
+ }
+ }
+ }]);
+
+ return JSONPPolling;
+}(Polling);
+
+module.exports = JSONPPolling;
+
+/***/ }),
+
+/***/ "./node_modules/engine.io-client/lib/transports/polling-xhr.js":
+/*!*********************************************************************!*\
+ !*** ./node_modules/engine.io-client/lib/transports/polling-xhr.js ***!
+ \*********************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+/* global attachEvent */
+var XMLHttpRequest = __webpack_require__(/*! ../../contrib/xmlhttprequest-ssl/XMLHttpRequest */ "./node_modules/engine.io-client/lib/xmlhttprequest.js");
+
+var Polling = __webpack_require__(/*! ./polling */ "./node_modules/engine.io-client/lib/transports/polling.js");
+
+var Emitter = __webpack_require__(/*! component-emitter */ "./node_modules/component-emitter/index.js");
+
+var _require = __webpack_require__(/*! ../util */ "./node_modules/engine.io-client/lib/util.js"),
+ pick = _require.pick;
+
+var globalThis = __webpack_require__(/*! ../globalThis */ "./node_modules/engine.io-client/lib/globalThis.browser.js");
+
+var debug = __webpack_require__(/*! debug */ "./node_modules/debug/src/browser.js")("engine.io-client:polling-xhr");
+/**
+ * Empty function
+ */
+
+
+function empty() {}
+
+var hasXHR2 = function () {
+ var xhr = new XMLHttpRequest({
+ xdomain: false
+ });
+ return null != xhr.responseType;
+}();
+
+var XHR = /*#__PURE__*/function (_Polling) {
+ _inherits(XHR, _Polling);
+
+ var _super = _createSuper(XHR);
+
+ /**
+ * XHR Polling constructor.
+ *
+ * @param {Object} opts
+ * @api public
+ */
+ function XHR(opts) {
+ var _this;
+
+ _classCallCheck(this, XHR);
+
+ _this = _super.call(this, opts);
+
+ if (typeof location !== "undefined") {
+ var isSSL = "https:" === location.protocol;
+ var port = location.port; // some user agents have empty `location.port`
+
+ if (!port) {
+ port = isSSL ? 443 : 80;
+ }
+
+ _this.xd = typeof location !== "undefined" && opts.hostname !== location.hostname || port !== opts.port;
+ _this.xs = opts.secure !== isSSL;
+ }
+ /**
+ * XHR supports binary
+ */
+
+
+ var forceBase64 = opts && opts.forceBase64;
+ _this.supportsBinary = hasXHR2 && !forceBase64;
+ return _this;
+ }
+ /**
+ * Creates a request.
+ *
+ * @param {String} method
+ * @api private
+ */
+
+
+ _createClass(XHR, [{
+ key: "request",
+ value: function request() {
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ _extends(opts, {
+ xd: this.xd,
+ xs: this.xs
+ }, this.opts);
+
+ return new Request(this.uri(), opts);
+ }
+ /**
+ * Sends data.
+ *
+ * @param {String} data to send.
+ * @param {Function} called upon flush.
+ * @api private
+ */
+
+ }, {
+ key: "doWrite",
+ value: function doWrite(data, fn) {
+ var _this2 = this;
+
+ var req = this.request({
+ method: "POST",
+ data: data
+ });
+ req.on("success", fn);
+ req.on("error", function (err) {
+ _this2.onError("xhr post error", err);
+ });
+ }
+ /**
+ * Starts a poll cycle.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "doPoll",
+ value: function doPoll() {
+ var _this3 = this;
+
+ debug("xhr poll");
+ var req = this.request();
+ req.on("data", this.onData.bind(this));
+ req.on("error", function (err) {
+ _this3.onError("xhr poll error", err);
+ });
+ this.pollXhr = req;
+ }
+ }]);
+
+ return XHR;
+}(Polling);
+
+var Request = /*#__PURE__*/function (_Emitter) {
+ _inherits(Request, _Emitter);
+
+ var _super2 = _createSuper(Request);
+
+ /**
+ * Request constructor
+ *
+ * @param {Object} options
+ * @api public
+ */
+ function Request(uri, opts) {
+ var _this4;
+
+ _classCallCheck(this, Request);
+
+ _this4 = _super2.call(this);
+ _this4.opts = opts;
+ _this4.method = opts.method || "GET";
+ _this4.uri = uri;
+ _this4.async = false !== opts.async;
+ _this4.data = undefined !== opts.data ? opts.data : null;
+
+ _this4.create();
+
+ return _this4;
+ }
+ /**
+ * Creates the XHR object and sends the request.
+ *
+ * @api private
+ */
+
+
+ _createClass(Request, [{
+ key: "create",
+ value: function create() {
+ var _this5 = this;
+
+ var opts = pick(this.opts, "agent", "enablesXDR", "pfx", "key", "passphrase", "cert", "ca", "ciphers", "rejectUnauthorized", "autoUnref");
+ opts.xdomain = !!this.opts.xd;
+ opts.xscheme = !!this.opts.xs;
+ var xhr = this.xhr = new XMLHttpRequest(opts);
+
+ try {
+ debug("xhr open %s: %s", this.method, this.uri);
+ xhr.open(this.method, this.uri, this.async);
+
+ try {
+ if (this.opts.extraHeaders) {
+ xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);
+
+ for (var i in this.opts.extraHeaders) {
+ if (this.opts.extraHeaders.hasOwnProperty(i)) {
+ xhr.setRequestHeader(i, this.opts.extraHeaders[i]);
+ }
+ }
+ }
+ } catch (e) {}
+
+ if ("POST" === this.method) {
+ try {
+ xhr.setRequestHeader("Content-type", "text/plain;charset=UTF-8");
+ } catch (e) {}
+ }
+
+ try {
+ xhr.setRequestHeader("Accept", "*/*");
+ } catch (e) {} // ie6 check
+
+
+ if ("withCredentials" in xhr) {
+ xhr.withCredentials = this.opts.withCredentials;
+ }
+
+ if (this.opts.requestTimeout) {
+ xhr.timeout = this.opts.requestTimeout;
+ }
+
+ if (this.hasXDR()) {
+ xhr.onload = function () {
+ _this5.onLoad();
+ };
+
+ xhr.onerror = function () {
+ _this5.onError(xhr.responseText);
+ };
+ } else {
+ xhr.onreadystatechange = function () {
+ if (4 !== xhr.readyState) return;
+
+ if (200 === xhr.status || 1223 === xhr.status) {
+ _this5.onLoad();
+ } else {
+ // make sure the `error` event handler that's user-set
+ // does not throw in the same tick and gets caught here
+ setTimeout(function () {
+ _this5.onError(typeof xhr.status === "number" ? xhr.status : 0);
+ }, 0);
+ }
+ };
+ }
+
+ debug("xhr data %s", this.data);
+ xhr.send(this.data);
+ } catch (e) {
+ // Need to defer since .create() is called directly from the constructor
+ // and thus the 'error' event can only be only bound *after* this exception
+ // occurs. Therefore, also, we cannot throw here at all.
+ setTimeout(function () {
+ _this5.onError(e);
+ }, 0);
+ return;
+ }
+
+ if (typeof document !== "undefined") {
+ this.index = Request.requestsCount++;
+ Request.requests[this.index] = this;
+ }
+ }
+ /**
+ * Called upon successful response.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "onSuccess",
+ value: function onSuccess() {
+ this.emit("success");
+ this.cleanup();
+ }
+ /**
+ * Called if we have data.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "onData",
+ value: function onData(data) {
+ this.emit("data", data);
+ this.onSuccess();
+ }
+ /**
+ * Called upon error.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "onError",
+ value: function onError(err) {
+ this.emit("error", err);
+ this.cleanup(true);
+ }
+ /**
+ * Cleans up house.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "cleanup",
+ value: function cleanup(fromError) {
+ if ("undefined" === typeof this.xhr || null === this.xhr) {
+ return;
+ } // xmlhttprequest
+
+
+ if (this.hasXDR()) {
+ this.xhr.onload = this.xhr.onerror = empty;
+ } else {
+ this.xhr.onreadystatechange = empty;
+ }
+
+ if (fromError) {
+ try {
+ this.xhr.abort();
+ } catch (e) {}
+ }
+
+ if (typeof document !== "undefined") {
+ delete Request.requests[this.index];
+ }
+
+ this.xhr = null;
+ }
+ /**
+ * Called upon load.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "onLoad",
+ value: function onLoad() {
+ var data = this.xhr.responseText;
+
+ if (data !== null) {
+ this.onData(data);
+ }
+ }
+ /**
+ * Check if it has XDomainRequest.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "hasXDR",
+ value: function hasXDR() {
+ return typeof XDomainRequest !== "undefined" && !this.xs && this.enablesXDR;
+ }
+ /**
+ * Aborts the request.
+ *
+ * @api public
+ */
+
+ }, {
+ key: "abort",
+ value: function abort() {
+ this.cleanup();
+ }
+ }]);
+
+ return Request;
+}(Emitter);
+/**
+ * Aborts pending requests when unloading the window. This is needed to prevent
+ * memory leaks (e.g. when using IE) and to ensure that no spurious error is
+ * emitted.
+ */
+
+
+Request.requestsCount = 0;
+Request.requests = {};
+
+if (typeof document !== "undefined") {
+ if (typeof attachEvent === "function") {
+ attachEvent("onunload", unloadHandler);
+ } else if (typeof addEventListener === "function") {
+ var terminationEvent = "onpagehide" in globalThis ? "pagehide" : "unload";
+ addEventListener(terminationEvent, unloadHandler, false);
+ }
+}
+
+function unloadHandler() {
+ for (var i in Request.requests) {
+ if (Request.requests.hasOwnProperty(i)) {
+ Request.requests[i].abort();
+ }
+ }
+}
+
+module.exports = XHR;
+module.exports.Request = Request;
+
+/***/ }),
+
+/***/ "./node_modules/engine.io-client/lib/transports/polling.js":
+/*!*****************************************************************!*\
+ !*** ./node_modules/engine.io-client/lib/transports/polling.js ***!
+ \*****************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+var Transport = __webpack_require__(/*! ../transport */ "./node_modules/engine.io-client/lib/transport.js");
+
+var parseqs = __webpack_require__(/*! parseqs */ "./node_modules/parseqs/index.js");
+
+var parser = __webpack_require__(/*! engine.io-parser */ "./node_modules/engine.io-parser/lib/index.js");
+
+var yeast = __webpack_require__(/*! yeast */ "./node_modules/yeast/index.js");
+
+var debug = __webpack_require__(/*! debug */ "./node_modules/debug/src/browser.js")("engine.io-client:polling");
+
+var Polling = /*#__PURE__*/function (_Transport) {
+ _inherits(Polling, _Transport);
+
+ var _super = _createSuper(Polling);
+
+ function Polling() {
+ _classCallCheck(this, Polling);
+
+ return _super.apply(this, arguments);
+ }
+
+ _createClass(Polling, [{
+ key: "name",
+ get:
+ /**
+ * Transport name.
+ */
+ function get() {
+ return "polling";
+ }
+ /**
+ * Opens the socket (triggers polling). We write a PING message to determine
+ * when the transport is open.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "doOpen",
+ value: function doOpen() {
+ this.poll();
+ }
+ /**
+ * Pauses polling.
+ *
+ * @param {Function} callback upon buffers are flushed and transport is paused
+ * @api private
+ */
+
+ }, {
+ key: "pause",
+ value: function pause(onPause) {
+ var _this = this;
+
+ this.readyState = "pausing";
+
+ var pause = function pause() {
+ debug("paused");
+ _this.readyState = "paused";
+ onPause();
+ };
+
+ if (this.polling || !this.writable) {
+ var total = 0;
+
+ if (this.polling) {
+ debug("we are currently polling - waiting to pause");
+ total++;
+ this.once("pollComplete", function () {
+ debug("pre-pause polling complete");
+ --total || pause();
+ });
+ }
+
+ if (!this.writable) {
+ debug("we are currently writing - waiting to pause");
+ total++;
+ this.once("drain", function () {
+ debug("pre-pause writing complete");
+ --total || pause();
+ });
+ }
+ } else {
+ pause();
+ }
+ }
+ /**
+ * Starts polling cycle.
+ *
+ * @api public
+ */
+
+ }, {
+ key: "poll",
+ value: function poll() {
+ debug("polling");
+ this.polling = true;
+ this.doPoll();
+ this.emit("poll");
+ }
+ /**
+ * Overloads onData to detect payloads.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "onData",
+ value: function onData(data) {
+ var _this2 = this;
+
+ debug("polling got data %s", data);
+
+ var callback = function callback(packet) {
+ // if its the first message we consider the transport open
+ if ("opening" === _this2.readyState && packet.type === "open") {
+ _this2.onOpen();
+ } // if its a close packet, we close the ongoing requests
+
+
+ if ("close" === packet.type) {
+ _this2.onClose();
+
+ return false;
+ } // otherwise bypass onData and handle the message
+
+
+ _this2.onPacket(packet);
+ }; // decode payload
+
+
+ parser.decodePayload(data, this.socket.binaryType).forEach(callback); // if an event did not trigger closing
+
+ if ("closed" !== this.readyState) {
+ // if we got data we're not polling
+ this.polling = false;
+ this.emit("pollComplete");
+
+ if ("open" === this.readyState) {
+ this.poll();
+ } else {
+ debug('ignoring poll - transport state "%s"', this.readyState);
+ }
+ }
+ }
+ /**
+ * For polling, send a close packet.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "doClose",
+ value: function doClose() {
+ var _this3 = this;
+
+ var close = function close() {
+ debug("writing close packet");
+
+ _this3.write([{
+ type: "close"
+ }]);
+ };
+
+ if ("open" === this.readyState) {
+ debug("transport open - closing");
+ close();
+ } else {
+ // in case we're trying to close while
+ // handshaking is in progress (GH-164)
+ debug("transport not open - deferring close");
+ this.once("open", close);
+ }
+ }
+ /**
+ * Writes a packets payload.
+ *
+ * @param {Array} data packets
+ * @param {Function} drain callback
+ * @api private
+ */
+
+ }, {
+ key: "write",
+ value: function write(packets) {
+ var _this4 = this;
+
+ this.writable = false;
+ parser.encodePayload(packets, function (data) {
+ _this4.doWrite(data, function () {
+ _this4.writable = true;
+
+ _this4.emit("drain");
+ });
+ });
+ }
+ /**
+ * Generates uri for connection.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "uri",
+ value: function uri() {
+ var query = this.query || {};
+ var schema = this.opts.secure ? "https" : "http";
+ var port = ""; // cache busting is forced
+
+ if (false !== this.opts.timestampRequests) {
+ query[this.opts.timestampParam] = yeast();
+ }
+
+ if (!this.supportsBinary && !query.sid) {
+ query.b64 = 1;
+ }
+
+ query = parseqs.encode(query); // avoid port if default for schema
+
+ if (this.opts.port && ("https" === schema && Number(this.opts.port) !== 443 || "http" === schema && Number(this.opts.port) !== 80)) {
+ port = ":" + this.opts.port;
+ } // prepend ? to query
+
+
+ if (query.length) {
+ query = "?" + query;
+ }
+
+ var ipv6 = this.opts.hostname.indexOf(":") !== -1;
+ return schema + "://" + (ipv6 ? "[" + this.opts.hostname + "]" : this.opts.hostname) + port + this.opts.path + query;
+ }
+ }]);
+
+ return Polling;
+}(Transport);
+
+module.exports = Polling;
+
+/***/ }),
+
+/***/ "./node_modules/engine.io-client/lib/transports/websocket-constructor.browser.js":
+/*!***************************************************************************************!*\
+ !*** ./node_modules/engine.io-client/lib/transports/websocket-constructor.browser.js ***!
+ \***************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var globalThis = __webpack_require__(/*! ../globalThis */ "./node_modules/engine.io-client/lib/globalThis.browser.js");
+
+var nextTick = function () {
+ var isPromiseAvailable = typeof Promise === "function" && typeof Promise.resolve === "function";
+
+ if (isPromiseAvailable) {
+ return function (cb) {
+ return Promise.resolve().then(cb);
+ };
+ } else {
+ return function (cb) {
+ return setTimeout(cb, 0);
+ };
+ }
+}();
+
+module.exports = {
+ WebSocket: globalThis.WebSocket || globalThis.MozWebSocket,
+ usingBrowserWebSocket: true,
+ defaultBinaryType: "arraybuffer",
+ nextTick: nextTick
+};
+
+/***/ }),
+
+/***/ "./node_modules/engine.io-client/lib/transports/websocket.js":
+/*!*******************************************************************!*\
+ !*** ./node_modules/engine.io-client/lib/transports/websocket.js ***!
+ \*******************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+var Transport = __webpack_require__(/*! ../transport */ "./node_modules/engine.io-client/lib/transport.js");
+
+var parser = __webpack_require__(/*! engine.io-parser */ "./node_modules/engine.io-parser/lib/index.js");
+
+var parseqs = __webpack_require__(/*! parseqs */ "./node_modules/parseqs/index.js");
+
+var yeast = __webpack_require__(/*! yeast */ "./node_modules/yeast/index.js");
+
+var _require = __webpack_require__(/*! ../util */ "./node_modules/engine.io-client/lib/util.js"),
+ pick = _require.pick;
+
+var _require2 = __webpack_require__(/*! ./websocket-constructor */ "./node_modules/engine.io-client/lib/transports/websocket-constructor.browser.js"),
+ WebSocket = _require2.WebSocket,
+ usingBrowserWebSocket = _require2.usingBrowserWebSocket,
+ defaultBinaryType = _require2.defaultBinaryType,
+ nextTick = _require2.nextTick;
+
+var debug = __webpack_require__(/*! debug */ "./node_modules/debug/src/browser.js")("engine.io-client:websocket"); // detect ReactNative environment
+
+
+var isReactNative = typeof navigator !== "undefined" && typeof navigator.product === "string" && navigator.product.toLowerCase() === "reactnative";
+
+var WS = /*#__PURE__*/function (_Transport) {
+ _inherits(WS, _Transport);
+
+ var _super = _createSuper(WS);
+
+ /**
+ * WebSocket transport constructor.
+ *
+ * @api {Object} connection options
+ * @api public
+ */
+ function WS(opts) {
+ var _this;
+
+ _classCallCheck(this, WS);
+
+ _this = _super.call(this, opts);
+ _this.supportsBinary = !opts.forceBase64;
+ return _this;
+ }
+ /**
+ * Transport name.
+ *
+ * @api public
+ */
+
+
+ _createClass(WS, [{
+ key: "name",
+ get: function get() {
+ return "websocket";
+ }
+ /**
+ * Opens socket.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "doOpen",
+ value: function doOpen() {
+ if (!this.check()) {
+ // let probe timeout
+ return;
+ }
+
+ var uri = this.uri();
+ var protocols = this.opts.protocols; // React Native only supports the 'headers' option, and will print a warning if anything else is passed
+
+ var opts = isReactNative ? {} : pick(this.opts, "agent", "perMessageDeflate", "pfx", "key", "passphrase", "cert", "ca", "ciphers", "rejectUnauthorized", "localAddress", "protocolVersion", "origin", "maxPayload", "family", "checkServerIdentity");
+
+ if (this.opts.extraHeaders) {
+ opts.headers = this.opts.extraHeaders;
+ }
+
+ try {
+ this.ws = usingBrowserWebSocket && !isReactNative ? protocols ? new WebSocket(uri, protocols) : new WebSocket(uri) : new WebSocket(uri, protocols, opts);
+ } catch (err) {
+ return this.emit("error", err);
+ }
+
+ this.ws.binaryType = this.socket.binaryType || defaultBinaryType;
+ this.addEventListeners();
+ }
+ /**
+ * Adds event listeners to the socket
+ *
+ * @api private
+ */
+
+ }, {
+ key: "addEventListeners",
+ value: function addEventListeners() {
+ var _this2 = this;
+
+ this.ws.onopen = function () {
+ if (_this2.opts.autoUnref) {
+ _this2.ws._socket.unref();
+ }
+
+ _this2.onOpen();
+ };
+
+ this.ws.onclose = this.onClose.bind(this);
+
+ this.ws.onmessage = function (ev) {
+ return _this2.onData(ev.data);
+ };
+
+ this.ws.onerror = function (e) {
+ return _this2.onError("websocket error", e);
+ };
+ }
+ /**
+ * Writes data to socket.
+ *
+ * @param {Array} array of packets.
+ * @api private
+ */
+
+ }, {
+ key: "write",
+ value: function write(packets) {
+ var _this3 = this;
+
+ this.writable = false; // encodePacket efficient as it uses WS framing
+ // no need for encodePayload
+
+ var _loop = function _loop(i) {
+ var packet = packets[i];
+ var lastPacket = i === packets.length - 1;
+ parser.encodePacket(packet, _this3.supportsBinary, function (data) {
+ // always create a new object (GH-437)
+ var opts = {};
+
+ if (!usingBrowserWebSocket) {
+ if (packet.options) {
+ opts.compress = packet.options.compress;
+ }
+
+ if (_this3.opts.perMessageDeflate) {
+ var len = "string" === typeof data ? Buffer.byteLength(data) : data.length;
+
+ if (len < _this3.opts.perMessageDeflate.threshold) {
+ opts.compress = false;
+ }
+ }
+ } // Sometimes the websocket has already been closed but the browser didn't
+ // have a chance of informing us about it yet, in that case send will
+ // throw an error
+
+
+ try {
+ if (usingBrowserWebSocket) {
+ // TypeError is thrown when passing the second argument on Safari
+ _this3.ws.send(data);
+ } else {
+ _this3.ws.send(data, opts);
+ }
+ } catch (e) {
+ debug("websocket closed before onclose event");
+ }
+
+ if (lastPacket) {
+ // fake drain
+ // defer to next tick to allow Socket to clear writeBuffer
+ nextTick(function () {
+ _this3.writable = true;
+
+ _this3.emit("drain");
+ });
+ }
+ });
+ };
+
+ for (var i = 0; i < packets.length; i++) {
+ _loop(i);
+ }
+ }
+ /**
+ * Called upon close
+ *
+ * @api private
+ */
+
+ }, {
+ key: "onClose",
+ value: function onClose() {
+ Transport.prototype.onClose.call(this);
+ }
+ /**
+ * Closes socket.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "doClose",
+ value: function doClose() {
+ if (typeof this.ws !== "undefined") {
+ this.ws.close();
+ this.ws = null;
+ }
+ }
+ /**
+ * Generates uri for connection.
+ *
+ * @api private
+ */
+
+ }, {
+ key: "uri",
+ value: function uri() {
+ var query = this.query || {};
+ var schema = this.opts.secure ? "wss" : "ws";
+ var port = ""; // avoid port if default for schema
+
+ if (this.opts.port && ("wss" === schema && Number(this.opts.port) !== 443 || "ws" === schema && Number(this.opts.port) !== 80)) {
+ port = ":" + this.opts.port;
+ } // append timestamp to URI
+
+
+ if (this.opts.timestampRequests) {
+ query[this.opts.timestampParam] = yeast();
+ } // communicate binary support capabilities
+
+
+ if (!this.supportsBinary) {
+ query.b64 = 1;
+ }
+
+ query = parseqs.encode(query); // prepend ? to query
+
+ if (query.length) {
+ query = "?" + query;
+ }
+
+ var ipv6 = this.opts.hostname.indexOf(":") !== -1;
+ return schema + "://" + (ipv6 ? "[" + this.opts.hostname + "]" : this.opts.hostname) + port + this.opts.path + query;
+ }
+ /**
+ * Feature detection for WebSocket.
+ *
+ * @return {Boolean} whether this transport is available.
+ * @api public
+ */
+
+ }, {
+ key: "check",
+ value: function check() {
+ return !!WebSocket && !("__initialize" in WebSocket && this.name === WS.prototype.name);
+ }
+ }]);
+
+ return WS;
+}(Transport);
+
+module.exports = WS;
+
+/***/ }),
+
+/***/ "./node_modules/engine.io-client/lib/util.js":
+/*!***************************************************!*\
+ !*** ./node_modules/engine.io-client/lib/util.js ***!
+ \***************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+module.exports.pick = function (obj) {
+ for (var _len = arguments.length, attr = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+ attr[_key - 1] = arguments[_key];
+ }
+
+ return attr.reduce(function (acc, k) {
+ if (obj.hasOwnProperty(k)) {
+ acc[k] = obj[k];
+ }
+
+ return acc;
+ }, {});
+};
+
+/***/ }),
+
+/***/ "./node_modules/engine.io-client/lib/xmlhttprequest.js":
+/*!*************************************************************!*\
+ !*** ./node_modules/engine.io-client/lib/xmlhttprequest.js ***!
+ \*************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+// browser shim for xmlhttprequest module
+var hasCORS = __webpack_require__(/*! has-cors */ "./node_modules/has-cors/index.js");
+
+var globalThis = __webpack_require__(/*! ./globalThis */ "./node_modules/engine.io-client/lib/globalThis.browser.js");
+
+module.exports = function (opts) {
+ var xdomain = opts.xdomain; // scheme must be same when usign XDomainRequest
+ // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
+
+ var xscheme = opts.xscheme; // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.
+ // https://github.com/Automattic/engine.io-client/pull/217
+
+ var enablesXDR = opts.enablesXDR; // XMLHttpRequest can be disabled on IE
+
+ try {
+ if ("undefined" !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {
+ return new XMLHttpRequest();
+ }
+ } catch (e) {} // Use XDomainRequest for IE8 if enablesXDR is true
+ // because loading bar keeps flashing when using jsonp-polling
+ // https://github.com/yujiosaka/socke.io-ie8-loading-example
+
+
+ try {
+ if ("undefined" !== typeof XDomainRequest && !xscheme && enablesXDR) {
+ return new XDomainRequest();
+ }
+ } catch (e) {}
+
+ if (!xdomain) {
+ try {
+ return new globalThis[["Active"].concat("Object").join("X")]("Microsoft.XMLHTTP");
+ } catch (e) {}
+ }
+};
+
+/***/ }),
+
+/***/ "./node_modules/engine.io-parser/lib/commons.js":
+/*!******************************************************!*\
+ !*** ./node_modules/engine.io-parser/lib/commons.js ***!
+ \******************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+var PACKET_TYPES = Object.create(null); // no Map = no polyfill
+
+PACKET_TYPES["open"] = "0";
+PACKET_TYPES["close"] = "1";
+PACKET_TYPES["ping"] = "2";
+PACKET_TYPES["pong"] = "3";
+PACKET_TYPES["message"] = "4";
+PACKET_TYPES["upgrade"] = "5";
+PACKET_TYPES["noop"] = "6";
+var PACKET_TYPES_REVERSE = Object.create(null);
+Object.keys(PACKET_TYPES).forEach(function (key) {
+ PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key;
+});
+var ERROR_PACKET = {
+ type: "error",
+ data: "parser error"
+};
+module.exports = {
+ PACKET_TYPES: PACKET_TYPES,
+ PACKET_TYPES_REVERSE: PACKET_TYPES_REVERSE,
+ ERROR_PACKET: ERROR_PACKET
+};
+
+/***/ }),
+
+/***/ "./node_modules/engine.io-parser/lib/decodePacket.browser.js":
+/*!*******************************************************************!*\
+ !*** ./node_modules/engine.io-parser/lib/decodePacket.browser.js ***!
+ \*******************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var _require = __webpack_require__(/*! ./commons */ "./node_modules/engine.io-parser/lib/commons.js"),
+ PACKET_TYPES_REVERSE = _require.PACKET_TYPES_REVERSE,
+ ERROR_PACKET = _require.ERROR_PACKET;
+
+var withNativeArrayBuffer = typeof ArrayBuffer === "function";
+var base64decoder;
+
+if (withNativeArrayBuffer) {
+ base64decoder = __webpack_require__(/*! base64-arraybuffer */ "./node_modules/engine.io-parser/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js");
+}
+
+var decodePacket = function decodePacket(encodedPacket, binaryType) {
+ if (typeof encodedPacket !== "string") {
+ return {
+ type: "message",
+ data: mapBinary(encodedPacket, binaryType)
+ };
+ }
+
+ var type = encodedPacket.charAt(0);
+
+ if (type === "b") {
+ return {
+ type: "message",
+ data: decodeBase64Packet(encodedPacket.substring(1), binaryType)
+ };
+ }
+
+ var packetType = PACKET_TYPES_REVERSE[type];
+
+ if (!packetType) {
+ return ERROR_PACKET;
+ }
+
+ return encodedPacket.length > 1 ? {
+ type: PACKET_TYPES_REVERSE[type],
+ data: encodedPacket.substring(1)
+ } : {
+ type: PACKET_TYPES_REVERSE[type]
+ };
+};
+
+var decodeBase64Packet = function decodeBase64Packet(data, binaryType) {
+ if (base64decoder) {
+ var decoded = base64decoder.decode(data);
+ return mapBinary(decoded, binaryType);
+ } else {
+ return {
+ base64: true,
+ data: data
+ }; // fallback for old browsers
+ }
+};
+
+var mapBinary = function mapBinary(data, binaryType) {
+ switch (binaryType) {
+ case "blob":
+ return data instanceof ArrayBuffer ? new Blob([data]) : data;
+
+ case "arraybuffer":
+ default:
+ return data;
+ // assuming the data is already an ArrayBuffer
+ }
+};
+
+module.exports = decodePacket;
+
+/***/ }),
+
+/***/ "./node_modules/engine.io-parser/lib/encodePacket.browser.js":
+/*!*******************************************************************!*\
+ !*** ./node_modules/engine.io-parser/lib/encodePacket.browser.js ***!
+ \*******************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var _require = __webpack_require__(/*! ./commons */ "./node_modules/engine.io-parser/lib/commons.js"),
+ PACKET_TYPES = _require.PACKET_TYPES;
+
+var withNativeBlob = typeof Blob === "function" || typeof Blob !== "undefined" && Object.prototype.toString.call(Blob) === "[object BlobConstructor]";
+var withNativeArrayBuffer = typeof ArrayBuffer === "function"; // ArrayBuffer.isView method is not defined in IE10
+
+var isView = function isView(obj) {
+ return typeof ArrayBuffer.isView === "function" ? ArrayBuffer.isView(obj) : obj && obj.buffer instanceof ArrayBuffer;
+};
+
+var encodePacket = function encodePacket(_ref, supportsBinary, callback) {
+ var type = _ref.type,
+ data = _ref.data;
+
+ if (withNativeBlob && data instanceof Blob) {
+ if (supportsBinary) {
+ return callback(data);
+ } else {
+ return encodeBlobAsBase64(data, callback);
+ }
+ } else if (withNativeArrayBuffer && (data instanceof ArrayBuffer || isView(data))) {
+ if (supportsBinary) {
+ return callback(data instanceof ArrayBuffer ? data : data.buffer);
+ } else {
+ return encodeBlobAsBase64(new Blob([data]), callback);
+ }
+ } // plain string
+
+
+ return callback(PACKET_TYPES[type] + (data || ""));
+};
+
+var encodeBlobAsBase64 = function encodeBlobAsBase64(data, callback) {
+ var fileReader = new FileReader();
+
+ fileReader.onload = function () {
+ var content = fileReader.result.split(",")[1];
+ callback("b" + content);
+ };
+
+ return fileReader.readAsDataURL(data);
+};
+
+module.exports = encodePacket;
+
+/***/ }),
+
+/***/ "./node_modules/engine.io-parser/lib/index.js":
+/*!****************************************************!*\
+ !*** ./node_modules/engine.io-parser/lib/index.js ***!
+ \****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+var encodePacket = __webpack_require__(/*! ./encodePacket */ "./node_modules/engine.io-parser/lib/encodePacket.browser.js");
+
+var decodePacket = __webpack_require__(/*! ./decodePacket */ "./node_modules/engine.io-parser/lib/decodePacket.browser.js");
+
+var SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text
+
+var encodePayload = function encodePayload(packets, callback) {
+ // some packets may be added to the array while encoding, so the initial length must be saved
+ var length = packets.length;
+ var encodedPackets = new Array(length);
+ var count = 0;
+ packets.forEach(function (packet, i) {
+ // force base64 encoding for binary packets
+ encodePacket(packet, false, function (encodedPacket) {
+ encodedPackets[i] = encodedPacket;
+
+ if (++count === length) {
+ callback(encodedPackets.join(SEPARATOR));
+ }
+ });
+ });
+};
+
+var decodePayload = function decodePayload(encodedPayload, binaryType) {
+ var encodedPackets = encodedPayload.split(SEPARATOR);
+ var packets = [];
+
+ for (var i = 0; i < encodedPackets.length; i++) {
+ var decodedPacket = decodePacket(encodedPackets[i], binaryType);
+ packets.push(decodedPacket);
+
+ if (decodedPacket.type === "error") {
+ break;
+ }
+ }
+
+ return packets;
+};
+
+module.exports = {
+ protocol: 4,
+ encodePacket: encodePacket,
+ encodePayload: encodePayload,
+ decodePacket: decodePacket,
+ decodePayload: decodePayload
+};
+
+/***/ }),
+
+/***/ "./node_modules/engine.io-parser/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js":
+/*!*************************************************************************************************!*\
+ !*** ./node_modules/engine.io-parser/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js ***!
+ \*************************************************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+/*
+ * base64-arraybuffer
+ * https://github.com/niklasvh/base64-arraybuffer
+ *
+ * Copyright (c) 2012 Niklas von Hertzen
+ * Licensed under the MIT license.
+ */
+(function (chars) {
+ "use strict";
+
+ exports.encode = function (arraybuffer) {
+ var bytes = new Uint8Array(arraybuffer),
+ i,
+ len = bytes.length,
+ base64 = "";
+
+ for (i = 0; i < len; i += 3) {
+ base64 += chars[bytes[i] >> 2];
+ base64 += chars[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4];
+ base64 += chars[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6];
+ base64 += chars[bytes[i + 2] & 63];
+ }
+
+ if (len % 3 === 2) {
+ base64 = base64.substring(0, base64.length - 1) + "=";
+ } else if (len % 3 === 1) {
+ base64 = base64.substring(0, base64.length - 2) + "==";
+ }
+
+ return base64;
+ };
+
+ exports.decode = function (base64) {
+ var bufferLength = base64.length * 0.75,
+ len = base64.length,
+ i,
+ p = 0,
+ encoded1,
+ encoded2,
+ encoded3,
+ encoded4;
+
+ if (base64[base64.length - 1] === "=") {
+ bufferLength--;
+
+ if (base64[base64.length - 2] === "=") {
+ bufferLength--;
+ }
+ }
+
+ var arraybuffer = new ArrayBuffer(bufferLength),
+ bytes = new Uint8Array(arraybuffer);
+
+ for (i = 0; i < len; i += 4) {
+ encoded1 = chars.indexOf(base64[i]);
+ encoded2 = chars.indexOf(base64[i + 1]);
+ encoded3 = chars.indexOf(base64[i + 2]);
+ encoded4 = chars.indexOf(base64[i + 3]);
+ bytes[p++] = encoded1 << 2 | encoded2 >> 4;
+ bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;
+ bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;
+ }
+
+ return arraybuffer;
+ };
+})("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
+
+/***/ }),
+
+/***/ "./node_modules/has-cors/index.js":
+/*!****************************************!*\
+ !*** ./node_modules/has-cors/index.js ***!
+ \****************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+/**
+ * Module exports.
+ *
+ * Logic borrowed from Modernizr:
+ *
+ * - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js
+ */
+try {
+ module.exports = typeof XMLHttpRequest !== 'undefined' && 'withCredentials' in new XMLHttpRequest();
+} catch (err) {
+ // if XMLHttp support is disabled in IE then it will throw
+ // when trying to create
+ module.exports = false;
+}
+
+/***/ }),
+
+/***/ "./node_modules/ms/index.js":
+/*!**********************************!*\
+ !*** ./node_modules/ms/index.js ***!
+ \**********************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+/**
+ * Helpers.
+ */
+var s = 1000;
+var m = s * 60;
+var h = m * 60;
+var d = h * 24;
+var w = d * 7;
+var y = d * 365.25;
+/**
+ * Parse or format the given `val`.
+ *
+ * Options:
+ *
+ * - `long` verbose formatting [false]
+ *
+ * @param {String|Number} val
+ * @param {Object} [options]
+ * @throws {Error} throw an error if val is not a non-empty string or a number
+ * @return {String|Number}
+ * @api public
+ */
+
+module.exports = function (val, options) {
+ options = options || {};
+
+ var type = _typeof(val);
+
+ if (type === 'string' && val.length > 0) {
+ return parse(val);
+ } else if (type === 'number' && isFinite(val)) {
+ return options["long"] ? fmtLong(val) : fmtShort(val);
+ }
+
+ throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val));
+};
+/**
+ * Parse the given `str` and return milliseconds.
+ *
+ * @param {String} str
+ * @return {Number}
+ * @api private
+ */
+
+
+function parse(str) {
+ str = String(str);
+
+ if (str.length > 100) {
+ return;
+ }
+
+ var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str);
+
+ if (!match) {
+ return;
+ }
+
+ var n = parseFloat(match[1]);
+ var type = (match[2] || 'ms').toLowerCase();
+
+ switch (type) {
+ case 'years':
+ case 'year':
+ case 'yrs':
+ case 'yr':
+ case 'y':
+ return n * y;
+
+ case 'weeks':
+ case 'week':
+ case 'w':
+ return n * w;
+
+ case 'days':
+ case 'day':
+ case 'd':
+ return n * d;
+
+ case 'hours':
+ case 'hour':
+ case 'hrs':
+ case 'hr':
+ case 'h':
+ return n * h;
+
+ case 'minutes':
+ case 'minute':
+ case 'mins':
+ case 'min':
+ case 'm':
+ return n * m;
+
+ case 'seconds':
+ case 'second':
+ case 'secs':
+ case 'sec':
+ case 's':
+ return n * s;
+
+ case 'milliseconds':
+ case 'millisecond':
+ case 'msecs':
+ case 'msec':
+ case 'ms':
+ return n;
+
+ default:
+ return undefined;
+ }
+}
+/**
+ * Short format for `ms`.
+ *
+ * @param {Number} ms
+ * @return {String}
+ * @api private
+ */
+
+
+function fmtShort(ms) {
+ var msAbs = Math.abs(ms);
+
+ if (msAbs >= d) {
+ return Math.round(ms / d) + 'd';
+ }
+
+ if (msAbs >= h) {
+ return Math.round(ms / h) + 'h';
+ }
+
+ if (msAbs >= m) {
+ return Math.round(ms / m) + 'm';
+ }
+
+ if (msAbs >= s) {
+ return Math.round(ms / s) + 's';
+ }
+
+ return ms + 'ms';
+}
+/**
+ * Long format for `ms`.
+ *
+ * @param {Number} ms
+ * @return {String}
+ * @api private
+ */
+
+
+function fmtLong(ms) {
+ var msAbs = Math.abs(ms);
+
+ if (msAbs >= d) {
+ return plural(ms, msAbs, d, 'day');
+ }
+
+ if (msAbs >= h) {
+ return plural(ms, msAbs, h, 'hour');
+ }
+
+ if (msAbs >= m) {
+ return plural(ms, msAbs, m, 'minute');
+ }
+
+ if (msAbs >= s) {
+ return plural(ms, msAbs, s, 'second');
+ }
+
+ return ms + ' ms';
+}
+/**
+ * Pluralization helper.
+ */
+
+
+function plural(ms, msAbs, n, name) {
+ var isPlural = msAbs >= n * 1.5;
+ return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');
+}
+
+/***/ }),
+
+/***/ "./node_modules/parseqs/index.js":
+/*!***************************************!*\
+ !*** ./node_modules/parseqs/index.js ***!
+ \***************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+/**
+ * Compiles a querystring
+ * Returns string representation of the object
+ *
+ * @param {Object}
+ * @api private
+ */
+exports.encode = function (obj) {
+ var str = '';
+
+ for (var i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ if (str.length) str += '&';
+ str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);
+ }
+ }
+
+ return str;
+};
+/**
+ * Parses a simple querystring into an object
+ *
+ * @param {String} qs
+ * @api private
+ */
+
+
+exports.decode = function (qs) {
+ var qry = {};
+ var pairs = qs.split('&');
+
+ for (var i = 0, l = pairs.length; i < l; i++) {
+ var pair = pairs[i].split('=');
+ qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
+ }
+
+ return qry;
+};
+
+/***/ }),
+
+/***/ "./node_modules/parseuri/index.js":
+/*!****************************************!*\
+ !*** ./node_modules/parseuri/index.js ***!
+ \****************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+/**
+ * Parses an URI
+ *
+ * @author Steven Levithan <stevenlevithan.com> (MIT license)
+ * @api private
+ */
+var re = /^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;
+var parts = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'];
+
+module.exports = function parseuri(str) {
+ var src = str,
+ b = str.indexOf('['),
+ e = str.indexOf(']');
+
+ if (b != -1 && e != -1) {
+ str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);
+ }
+
+ var m = re.exec(str || ''),
+ uri = {},
+ i = 14;
+
+ while (i--) {
+ uri[parts[i]] = m[i] || '';
+ }
+
+ if (b != -1 && e != -1) {
+ uri.source = src;
+ uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');
+ uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');
+ uri.ipv6uri = true;
+ }
+
+ uri.pathNames = pathNames(uri, uri['path']);
+ uri.queryKey = queryKey(uri, uri['query']);
+ return uri;
+};
+
+function pathNames(obj, path) {
+ var regx = /\/{2,9}/g,
+ names = path.replace(regx, "/").split("/");
+
+ if (path.substr(0, 1) == '/' || path.length === 0) {
+ names.splice(0, 1);
+ }
+
+ if (path.substr(path.length - 1, 1) == '/') {
+ names.splice(names.length - 1, 1);
+ }
+
+ return names;
+}
+
+function queryKey(uri, query) {
+ var data = {};
+ query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {
+ if ($1) {
+ data[$1] = $2;
+ }
+ });
+ return data;
+}
+
+/***/ }),
+
+/***/ "./node_modules/socket.io-parser/dist/binary.js":
+/*!******************************************************!*\
+ !*** ./node_modules/socket.io-parser/dist/binary.js ***!
+ \******************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.reconstructPacket = exports.deconstructPacket = void 0;
+
+var is_binary_1 = __webpack_require__(/*! ./is-binary */ "./node_modules/socket.io-parser/dist/is-binary.js");
+/**
+ * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder.
+ *
+ * @param {Object} packet - socket.io event packet
+ * @return {Object} with deconstructed packet and list of buffers
+ * @public
+ */
+
+
+function deconstructPacket(packet) {
+ var buffers = [];
+ var packetData = packet.data;
+ var pack = packet;
+ pack.data = _deconstructPacket(packetData, buffers);
+ pack.attachments = buffers.length; // number of binary 'attachments'
+
+ return {
+ packet: pack,
+ buffers: buffers
+ };
+}
+
+exports.deconstructPacket = deconstructPacket;
+
+function _deconstructPacket(data, buffers) {
+ if (!data) return data;
+
+ if (is_binary_1.isBinary(data)) {
+ var placeholder = {
+ _placeholder: true,
+ num: buffers.length
+ };
+ buffers.push(data);
+ return placeholder;
+ } else if (Array.isArray(data)) {
+ var newData = new Array(data.length);
+
+ for (var i = 0; i < data.length; i++) {
+ newData[i] = _deconstructPacket(data[i], buffers);
+ }
+
+ return newData;
+ } else if (_typeof(data) === "object" && !(data instanceof Date)) {
+ var _newData = {};
+
+ for (var key in data) {
+ if (data.hasOwnProperty(key)) {
+ _newData[key] = _deconstructPacket(data[key], buffers);
+ }
+ }
+
+ return _newData;
+ }
+
+ return data;
+}
+/**
+ * Reconstructs a binary packet from its placeholder packet and buffers
+ *
+ * @param {Object} packet - event packet with placeholders
+ * @param {Array} buffers - binary buffers to put in placeholder positions
+ * @return {Object} reconstructed packet
+ * @public
+ */
+
+
+function reconstructPacket(packet, buffers) {
+ packet.data = _reconstructPacket(packet.data, buffers);
+ packet.attachments = undefined; // no longer useful
+
+ return packet;
+}
+
+exports.reconstructPacket = reconstructPacket;
+
+function _reconstructPacket(data, buffers) {
+ if (!data) return data;
+
+ if (data && data._placeholder) {
+ return buffers[data.num]; // appropriate buffer (should be natural order anyway)
+ } else if (Array.isArray(data)) {
+ for (var i = 0; i < data.length; i++) {
+ data[i] = _reconstructPacket(data[i], buffers);
+ }
+ } else if (_typeof(data) === "object") {
+ for (var key in data) {
+ if (data.hasOwnProperty(key)) {
+ data[key] = _reconstructPacket(data[key], buffers);
+ }
+ }
+ }
+
+ return data;
+}
+
+/***/ }),
+
+/***/ "./node_modules/socket.io-parser/dist/index.js":
+/*!*****************************************************!*\
+ !*** ./node_modules/socket.io-parser/dist/index.js ***!
+ \*****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }
+
+function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.Decoder = exports.Encoder = exports.PacketType = exports.protocol = void 0;
+
+var Emitter = __webpack_require__(/*! component-emitter */ "./node_modules/component-emitter/index.js");
+
+var binary_1 = __webpack_require__(/*! ./binary */ "./node_modules/socket.io-parser/dist/binary.js");
+
+var is_binary_1 = __webpack_require__(/*! ./is-binary */ "./node_modules/socket.io-parser/dist/is-binary.js");
+
+var debug = __webpack_require__(/*! debug */ "./node_modules/debug/src/browser.js")("socket.io-parser");
+/**
+ * Protocol version.
+ *
+ * @public
+ */
+
+
+exports.protocol = 5;
+var PacketType;
+
+(function (PacketType) {
+ PacketType[PacketType["CONNECT"] = 0] = "CONNECT";
+ PacketType[PacketType["DISCONNECT"] = 1] = "DISCONNECT";
+ PacketType[PacketType["EVENT"] = 2] = "EVENT";
+ PacketType[PacketType["ACK"] = 3] = "ACK";
+ PacketType[PacketType["CONNECT_ERROR"] = 4] = "CONNECT_ERROR";
+ PacketType[PacketType["BINARY_EVENT"] = 5] = "BINARY_EVENT";
+ PacketType[PacketType["BINARY_ACK"] = 6] = "BINARY_ACK";
+})(PacketType = exports.PacketType || (exports.PacketType = {}));
+/**
+ * A socket.io Encoder instance
+ */
+
+
+var Encoder = /*#__PURE__*/function () {
+ function Encoder() {
+ _classCallCheck(this, Encoder);
+ }
+
+ _createClass(Encoder, [{
+ key: "encode",
+ value:
+ /**
+ * Encode a packet as a single string if non-binary, or as a
+ * buffer sequence, depending on packet type.
+ *
+ * @param {Object} obj - packet object
+ */
+ function encode(obj) {
+ debug("encoding packet %j", obj);
+
+ if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) {
+ if (is_binary_1.hasBinary(obj)) {
+ obj.type = obj.type === PacketType.EVENT ? PacketType.BINARY_EVENT : PacketType.BINARY_ACK;
+ return this.encodeAsBinary(obj);
+ }
+ }
+
+ return [this.encodeAsString(obj)];
+ }
+ /**
+ * Encode packet as string.
+ */
+
+ }, {
+ key: "encodeAsString",
+ value: function encodeAsString(obj) {
+ // first is type
+ var str = "" + obj.type; // attachments if we have them
+
+ if (obj.type === PacketType.BINARY_EVENT || obj.type === PacketType.BINARY_ACK) {
+ str += obj.attachments + "-";
+ } // if we have a namespace other than `/`
+ // we append it followed by a comma `,`
+
+
+ if (obj.nsp && "/" !== obj.nsp) {
+ str += obj.nsp + ",";
+ } // immediately followed by the id
+
+
+ if (null != obj.id) {
+ str += obj.id;
+ } // json data
+
+
+ if (null != obj.data) {
+ str += JSON.stringify(obj.data);
+ }
+
+ debug("encoded %j as %s", obj, str);
+ return str;
+ }
+ /**
+ * Encode packet as 'buffer sequence' by removing blobs, and
+ * deconstructing packet into object with placeholders and
+ * a list of buffers.
+ */
+
+ }, {
+ key: "encodeAsBinary",
+ value: function encodeAsBinary(obj) {
+ var deconstruction = binary_1.deconstructPacket(obj);
+ var pack = this.encodeAsString(deconstruction.packet);
+ var buffers = deconstruction.buffers;
+ buffers.unshift(pack); // add packet info to beginning of data list
+
+ return buffers; // write all the buffers
+ }
+ }]);
+
+ return Encoder;
+}();
+
+exports.Encoder = Encoder;
+/**
+ * A socket.io Decoder instance
+ *
+ * @return {Object} decoder
+ */
+
+var Decoder = /*#__PURE__*/function (_Emitter) {
+ _inherits(Decoder, _Emitter);
+
+ var _super = _createSuper(Decoder);
+
+ function Decoder() {
+ _classCallCheck(this, Decoder);
+
+ return _super.call(this);
+ }
+ /**
+ * Decodes an encoded packet string into packet JSON.
+ *
+ * @param {String} obj - encoded packet
+ */
+
+
+ _createClass(Decoder, [{
+ key: "add",
+ value: function add(obj) {
+ var packet;
+
+ if (typeof obj === "string") {
+ packet = this.decodeString(obj);
+
+ if (packet.type === PacketType.BINARY_EVENT || packet.type === PacketType.BINARY_ACK) {
+ // binary packet's json
+ this.reconstructor = new BinaryReconstructor(packet); // no attachments, labeled binary but no binary data to follow
+
+ if (packet.attachments === 0) {
+ _get(_getPrototypeOf(Decoder.prototype), "emit", this).call(this, "decoded", packet);
+ }
+ } else {
+ // non-binary full packet
+ _get(_getPrototypeOf(Decoder.prototype), "emit", this).call(this, "decoded", packet);
+ }
+ } else if (is_binary_1.isBinary(obj) || obj.base64) {
+ // raw binary data
+ if (!this.reconstructor) {
+ throw new Error("got binary data when not reconstructing a packet");
+ } else {
+ packet = this.reconstructor.takeBinaryData(obj);
+
+ if (packet) {
+ // received final buffer
+ this.reconstructor = null;
+
+ _get(_getPrototypeOf(Decoder.prototype), "emit", this).call(this, "decoded", packet);
+ }
+ }
+ } else {
+ throw new Error("Unknown type: " + obj);
+ }
+ }
+ /**
+ * Decode a packet String (JSON data)
+ *
+ * @param {String} str
+ * @return {Object} packet
+ */
+
+ }, {
+ key: "decodeString",
+ value: function decodeString(str) {
+ var i = 0; // look up type
+
+ var p = {
+ type: Number(str.charAt(0))
+ };
+
+ if (PacketType[p.type] === undefined) {
+ throw new Error("unknown packet type " + p.type);
+ } // look up attachments if type binary
+
+
+ if (p.type === PacketType.BINARY_EVENT || p.type === PacketType.BINARY_ACK) {
+ var start = i + 1;
+
+ while (str.charAt(++i) !== "-" && i != str.length) {}
+
+ var buf = str.substring(start, i);
+
+ if (buf != Number(buf) || str.charAt(i) !== "-") {
+ throw new Error("Illegal attachments");
+ }
+
+ p.attachments = Number(buf);
+ } // look up namespace (if any)
+
+
+ if ("/" === str.charAt(i + 1)) {
+ var _start = i + 1;
+
+ while (++i) {
+ var c = str.charAt(i);
+ if ("," === c) break;
+ if (i === str.length) break;
+ }
+
+ p.nsp = str.substring(_start, i);
+ } else {
+ p.nsp = "/";
+ } // look up id
+
+
+ var next = str.charAt(i + 1);
+
+ if ("" !== next && Number(next) == next) {
+ var _start2 = i + 1;
+
+ while (++i) {
+ var _c = str.charAt(i);
+
+ if (null == _c || Number(_c) != _c) {
+ --i;
+ break;
+ }
+
+ if (i === str.length) break;
+ }
+
+ p.id = Number(str.substring(_start2, i + 1));
+ } // look up json data
+
+
+ if (str.charAt(++i)) {
+ var payload = tryParse(str.substr(i));
+
+ if (Decoder.isPayloadValid(p.type, payload)) {
+ p.data = payload;
+ } else {
+ throw new Error("invalid payload");
+ }
+ }
+
+ debug("decoded %s as %j", str, p);
+ return p;
+ }
+ }, {
+ key: "destroy",
+ value:
+ /**
+ * Deallocates a parser's resources
+ */
+ function destroy() {
+ if (this.reconstructor) {
+ this.reconstructor.finishedReconstruction();
+ }
+ }
+ }], [{
+ key: "isPayloadValid",
+ value: function isPayloadValid(type, payload) {
+ switch (type) {
+ case PacketType.CONNECT:
+ return _typeof(payload) === "object";
+
+ case PacketType.DISCONNECT:
+ return payload === undefined;
+
+ case PacketType.CONNECT_ERROR:
+ return typeof payload === "string" || _typeof(payload) === "object";
+
+ case PacketType.EVENT:
+ case PacketType.BINARY_EVENT:
+ return Array.isArray(payload) && payload.length > 0;
+
+ case PacketType.ACK:
+ case PacketType.BINARY_ACK:
+ return Array.isArray(payload);
+ }
+ }
+ }]);
+
+ return Decoder;
+}(Emitter);
+
+exports.Decoder = Decoder;
+
+function tryParse(str) {
+ try {
+ return JSON.parse(str);
+ } catch (e) {
+ return false;
+ }
+}
+/**
+ * A manager of a binary event's 'buffer sequence'. Should
+ * be constructed whenever a packet of type BINARY_EVENT is
+ * decoded.
+ *
+ * @param {Object} packet
+ * @return {BinaryReconstructor} initialized reconstructor
+ */
+
+
+var BinaryReconstructor = /*#__PURE__*/function () {
+ function BinaryReconstructor(packet) {
+ _classCallCheck(this, BinaryReconstructor);
+
+ this.packet = packet;
+ this.buffers = [];
+ this.reconPack = packet;
+ }
+ /**
+ * Method to be called when binary data received from connection
+ * after a BINARY_EVENT packet.
+ *
+ * @param {Buffer | ArrayBuffer} binData - the raw binary data received
+ * @return {null | Object} returns null if more binary data is expected or
+ * a reconstructed packet object if all buffers have been received.
+ */
+
+
+ _createClass(BinaryReconstructor, [{
+ key: "takeBinaryData",
+ value: function takeBinaryData(binData) {
+ this.buffers.push(binData);
+
+ if (this.buffers.length === this.reconPack.attachments) {
+ // done with buffer list
+ var packet = binary_1.reconstructPacket(this.reconPack, this.buffers);
+ this.finishedReconstruction();
+ return packet;
+ }
+
+ return null;
+ }
+ /**
+ * Cleans up binary packet reconstruction variables.
+ */
+
+ }, {
+ key: "finishedReconstruction",
+ value: function finishedReconstruction() {
+ this.reconPack = null;
+ this.buffers = [];
+ }
+ }]);
+
+ return BinaryReconstructor;
+}();
+
+/***/ }),
+
+/***/ "./node_modules/socket.io-parser/dist/is-binary.js":
+/*!*********************************************************!*\
+ !*** ./node_modules/socket.io-parser/dist/is-binary.js ***!
+ \*********************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.hasBinary = exports.isBinary = void 0;
+var withNativeArrayBuffer = typeof ArrayBuffer === "function";
+
+var isView = function isView(obj) {
+ return typeof ArrayBuffer.isView === "function" ? ArrayBuffer.isView(obj) : obj.buffer instanceof ArrayBuffer;
+};
+
+var toString = Object.prototype.toString;
+var withNativeBlob = typeof Blob === "function" || typeof Blob !== "undefined" && toString.call(Blob) === "[object BlobConstructor]";
+var withNativeFile = typeof File === "function" || typeof File !== "undefined" && toString.call(File) === "[object FileConstructor]";
+/**
+ * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File.
+ *
+ * @private
+ */
+
+function isBinary(obj) {
+ return withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)) || withNativeBlob && obj instanceof Blob || withNativeFile && obj instanceof File;
+}
+
+exports.isBinary = isBinary;
+
+function hasBinary(obj, toJSON) {
+ if (!obj || _typeof(obj) !== "object") {
+ return false;
+ }
+
+ if (Array.isArray(obj)) {
+ for (var i = 0, l = obj.length; i < l; i++) {
+ if (hasBinary(obj[i])) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ if (isBinary(obj)) {
+ return true;
+ }
+
+ if (obj.toJSON && typeof obj.toJSON === "function" && arguments.length === 1) {
+ return hasBinary(obj.toJSON(), true);
+ }
+
+ for (var key in obj) {
+ if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+exports.hasBinary = hasBinary;
+
+/***/ }),
+
+/***/ "./node_modules/yeast/index.js":
+/*!*************************************!*\
+ !*** ./node_modules/yeast/index.js ***!
+ \*************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''),
+ length = 64,
+ map = {},
+ seed = 0,
+ i = 0,
+ prev;
+/**
+ * Return a string representing the specified number.
+ *
+ * @param {Number} num The number to convert.
+ * @returns {String} The string representation of the number.
+ * @api public
+ */
+
+function encode(num) {
+ var encoded = '';
+
+ do {
+ encoded = alphabet[num % length] + encoded;
+ num = Math.floor(num / length);
+ } while (num > 0);
+
+ return encoded;
+}
+/**
+ * Return the integer value specified by the given string.
+ *
+ * @param {String} str The string to convert.
+ * @returns {Number} The integer value represented by the string.
+ * @api public
+ */
+
+
+function decode(str) {
+ var decoded = 0;
+
+ for (i = 0; i < str.length; i++) {
+ decoded = decoded * length + map[str.charAt(i)];
+ }
+
+ return decoded;
+}
+/**
+ * Yeast: A tiny growing id generator.
+ *
+ * @returns {String} A unique id.
+ * @api public
+ */
+
+
+function yeast() {
+ var now = encode(+new Date());
+ if (now !== prev) return seed = 0, prev = now;
+ return now + '.' + encode(seed++);
+} //
+// Map each character to its index.
+//
+
+
+for (; i < length; i++) {
+ map[alphabet[i]] = i;
+} //
+// Expose the `yeast`, `encode` and `decode` functions.
+//
+
+
+yeast.encode = encode;
+yeast.decode = decode;
+module.exports = yeast;
+
+/***/ })
+
+/******/ });
+});
+//# sourceMappingURL=socket.io.js.map \ No newline at end of file
diff --git a/client/lib/socket.io.js.map b/client/lib/socket.io.js.map
new file mode 100644
index 0000000..b7ef5ba
--- /dev/null
+++ b/client/lib/socket.io.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack://io/webpack/universalModuleDefinition","webpack://io/webpack/bootstrap","webpack://io/./build/index.js","webpack://io/./build/manager.js","webpack://io/./build/on.js","webpack://io/./build/socket.js","webpack://io/./build/typed-events.js","webpack://io/./build/url.js","webpack://io/./node_modules/backo2/index.js","webpack://io/./node_modules/component-emitter/index.js","webpack://io/./node_modules/debug/src/browser.js","webpack://io/./node_modules/debug/src/common.js","webpack://io/./node_modules/engine.io-client/lib/globalThis.browser.js","webpack://io/./node_modules/engine.io-client/lib/index.js","webpack://io/./node_modules/engine.io-client/lib/socket.js","webpack://io/./node_modules/engine.io-client/lib/transport.js","webpack://io/./node_modules/engine.io-client/lib/transports/index.js","webpack://io/./node_modules/engine.io-client/lib/transports/polling-jsonp.js","webpack://io/./node_modules/engine.io-client/lib/transports/polling-xhr.js","webpack://io/./node_modules/engine.io-client/lib/transports/polling.js","webpack://io/./node_modules/engine.io-client/lib/transports/websocket-constructor.browser.js","webpack://io/./node_modules/engine.io-client/lib/transports/websocket.js","webpack://io/./node_modules/engine.io-client/lib/util.js","webpack://io/./node_modules/engine.io-client/lib/xmlhttprequest.js","webpack://io/./node_modules/engine.io-parser/lib/commons.js","webpack://io/./node_modules/engine.io-parser/lib/decodePacket.browser.js","webpack://io/./node_modules/engine.io-parser/lib/encodePacket.browser.js","webpack://io/./node_modules/engine.io-parser/lib/index.js","webpack://io/./node_modules/engine.io-parser/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js","webpack://io/./node_modules/has-cors/index.js","webpack://io/./node_modules/ms/index.js","webpack://io/./node_modules/parseqs/index.js","webpack://io/./node_modules/parseuri/index.js","webpack://io/./node_modules/socket.io-parser/dist/binary.js","webpack://io/./node_modules/socket.io-parser/dist/index.js","webpack://io/./node_modules/socket.io-parser/dist/is-binary.js","webpack://io/./node_modules/yeast/index.js"],"names":["Object","defineProperty","exports","value","io","Socket","Manager","protocol","url_1","require","manager_1","debug","module","lookup","cache","managers","uri","opts","undefined","parsed","url","path","source","id","sameNamespace","newConnection","forceNew","multiplex","query","queryKey","socket","socket_io_parser_1","enumerable","get","connect","manager_2","socket_1","eio","parser","on_1","Backoff","typed_events_1","nsps","subs","reconnection","reconnectionAttempts","Infinity","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","min","max","jitter","timeout","_readyState","_parser","encoder","Encoder","decoder","Decoder","_autoConnect","autoConnect","open","v","arguments","length","_reconnection","_reconnectionAttempts","_a","_reconnectionDelay","setMin","_randomizationFactor","setJitter","_reconnectionDelayMax","setMax","_timeout","_reconnecting","attempts","reconnect","fn","indexOf","engine","self","skipReconnect","openSubDestroy","on","onopen","errorSub","err","cleanup","emitReserved","maybeReconnectOnOpen","timer","setTimeout","close","emit","Error","autoUnref","unref","push","subDestroy","clearTimeout","onping","bind","ondata","onerror","onclose","ondecoded","data","add","packet","nsp","keys","active","_close","encodedPackets","encode","i","write","options","forEach","destroy","reset","reason","delay","duration","onreconnect","attempt","StrictEventEmitter","obj","ev","off","RESERVED_EVENTS","freeze","connect_error","disconnect","disconnecting","newListener","removeListener","receiveBuffer","sendBuffer","ids","acks","flags","connected","disconnected","auth","onpacket","subEvents","args","unshift","apply","hasOwnProperty","type","PacketType","EVENT","compress","pop","isTransportWritable","transport","writable","discardPacket","_packet","CONNECT","sid","onconnect","onevent","BINARY_EVENT","ACK","onack","BINARY_ACK","DISCONNECT","ondisconnect","CONNECT_ERROR","message","ack","emitEvent","_anyListeners","listeners","slice","listener","sent","emitBuffered","splice","Emitter","event","parseuri","loc","location","host","charAt","test","port","ipv6","href","ms","factor","prototype","Math","pow","rand","random","deviation","floor","mixin","key","addEventListener","_callbacks","once","removeAllListeners","removeEventListener","callbacks","cb","Array","len","hasListeners","formatArgs","save","load","useColors","storage","localstorage","warned","console","warn","colors","window","process","__nwjs","navigator","userAgent","toLowerCase","match","document","documentElement","style","WebkitAppearance","firebug","exception","table","parseInt","RegExp","$1","namespace","humanize","diff","c","color","index","lastC","replace","log","namespaces","setItem","removeItem","error","r","getItem","env","DEBUG","localStorage","formatters","j","JSON","stringify","setup","createDebug","coerce","disable","enable","enabled","names","skips","selectColor","hash","charCodeAt","abs","prevTime","enableOverride","curr","Number","Date","prev","format","formatter","val","call","logFn","extend","configurable","set","init","delimiter","newDebug","split","substr","map","toNamespace","join","name","regexp","toString","substring","stack","Function","Transport","transports","parseqs","hostname","secure","readyState","writeBuffer","prevBufferLen","agent","withCredentials","upgrade","jsonp","timestampParam","rememberUpgrade","rejectUnauthorized","perMessageDeflate","threshold","transportOptions","closeOnBeforeunload","decode","upgrades","pingInterval","pingTimeout","pingTimeoutTimer","offlineEventListener","onClose","clone","EIO","priorWebsocketSuccess","createTransport","e","shift","setTransport","onDrain","onPacket","onError","probe","failed","onTransportOpen","send","msg","upgrading","pause","flush","freezeTransport","onTransportClose","onupgrade","to","l","onHandshake","parse","resetPingTimeout","sendPacket","code","filterUpgrades","onOpen","cleanupAndClose","waitForUpgrade","desc","pingIntervalTimer","filteredUpgrades","o","description","doOpen","doClose","packets","decodePacket","binaryType","XMLHttpRequest","XHR","JSONP","websocket","polling","xhr","xd","xs","isSSL","xdomain","xscheme","forceJSONP","Polling","globalThis","rNewline","rEscapedNewline","JSONPPolling","___eio","onData","script","parentNode","removeChild","form","iframe","createElement","async","src","insertAt","getElementsByTagName","insertBefore","head","body","appendChild","isUAgecko","area","iframeId","className","position","top","left","target","method","setAttribute","action","complete","initIframe","html","submit","attachEvent","onreadystatechange","onload","pick","empty","hasXHR2","responseType","forceBase64","supportsBinary","Request","req","request","pollXhr","create","extraHeaders","setDisableHeaderCheck","setRequestHeader","requestTimeout","hasXDR","onLoad","responseText","status","requestsCount","requests","onSuccess","fromError","abort","XDomainRequest","enablesXDR","unloadHandler","terminationEvent","yeast","poll","onPause","total","doPoll","callback","decodePayload","encodePayload","doWrite","schema","timestampRequests","b64","nextTick","isPromiseAvailable","Promise","resolve","then","WebSocket","MozWebSocket","usingBrowserWebSocket","defaultBinaryType","isReactNative","product","WS","check","protocols","headers","ws","addEventListeners","_socket","onmessage","lastPacket","encodePacket","Buffer","byteLength","attr","reduce","acc","k","hasCORS","concat","PACKET_TYPES","PACKET_TYPES_REVERSE","ERROR_PACKET","withNativeArrayBuffer","ArrayBuffer","base64decoder","encodedPacket","mapBinary","decodeBase64Packet","packetType","decoded","base64","Blob","withNativeBlob","isView","buffer","encodeBlobAsBase64","fileReader","FileReader","content","result","readAsDataURL","SEPARATOR","String","fromCharCode","count","encodedPayload","decodedPacket","chars","arraybuffer","bytes","Uint8Array","bufferLength","p","encoded1","encoded2","encoded3","encoded4","s","m","h","d","w","y","isFinite","fmtLong","fmtShort","str","exec","n","parseFloat","msAbs","round","plural","isPlural","encodeURIComponent","qs","qry","pairs","pair","decodeURIComponent","re","parts","b","authority","ipv6uri","pathNames","regx","$0","$2","reconstructPacket","deconstructPacket","is_binary_1","buffers","packetData","pack","_deconstructPacket","attachments","isBinary","placeholder","_placeholder","num","isArray","newData","_reconstructPacket","binary_1","hasBinary","encodeAsBinary","encodeAsString","deconstruction","decodeString","reconstructor","BinaryReconstructor","takeBinaryData","start","buf","next","payload","tryParse","isPayloadValid","finishedReconstruction","reconPack","binData","withNativeFile","File","toJSON","alphabet","seed","encoded","now"],"mappings":"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","file":"socket.io.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(self, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./build/index.js\");\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.io = exports.Socket = exports.Manager = exports.protocol = void 0;\nconst url_1 = require(\"./url\");\nconst manager_1 = require(\"./manager\");\nconst debug = require(\"debug\")(\"socket.io-client\");\n/**\n * Module exports.\n */\nmodule.exports = exports = lookup;\n/**\n * Managers cache.\n */\nconst cache = (exports.managers = {});\nfunction lookup(uri, opts) {\n if (typeof uri === \"object\") {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n const parsed = url_1.url(uri, opts.path || \"/socket.io\");\n const source = parsed.source;\n const id = parsed.id;\n const path = parsed.path;\n const sameNamespace = cache[id] && path in cache[id][\"nsps\"];\n const newConnection = opts.forceNew ||\n opts[\"force new connection\"] ||\n false === opts.multiplex ||\n sameNamespace;\n let io;\n if (newConnection) {\n debug(\"ignoring socket cache for %s\", source);\n io = new manager_1.Manager(source, opts);\n }\n else {\n if (!cache[id]) {\n debug(\"new io instance for %s\", source);\n cache[id] = new manager_1.Manager(source, opts);\n }\n io = cache[id];\n }\n if (parsed.query && !opts.query) {\n opts.query = parsed.queryKey;\n }\n return io.socket(parsed.path, opts);\n}\nexports.io = lookup;\n/**\n * Protocol version.\n *\n * @public\n */\nvar socket_io_parser_1 = require(\"socket.io-parser\");\nObject.defineProperty(exports, \"protocol\", { enumerable: true, get: function () { return socket_io_parser_1.protocol; } });\n/**\n * `connect`.\n *\n * @param {String} uri\n * @public\n */\nexports.connect = lookup;\n/**\n * Expose constructors for standalone build.\n *\n * @public\n */\nvar manager_2 = require(\"./manager\");\nObject.defineProperty(exports, \"Manager\", { enumerable: true, get: function () { return manager_2.Manager; } });\nvar socket_1 = require(\"./socket\");\nObject.defineProperty(exports, \"Socket\", { enumerable: true, get: function () { return socket_1.Socket; } });\nexports.default = lookup;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Manager = void 0;\nconst eio = require(\"engine.io-client\");\nconst socket_1 = require(\"./socket\");\nconst parser = require(\"socket.io-parser\");\nconst on_1 = require(\"./on\");\nconst Backoff = require(\"backo2\");\nconst typed_events_1 = require(\"./typed-events\");\nconst debug = require(\"debug\")(\"socket.io-client:manager\");\nclass Manager extends typed_events_1.StrictEventEmitter {\n constructor(uri, opts) {\n super();\n this.nsps = {};\n this.subs = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n opts.path = opts.path || \"/socket.io\";\n this.opts = opts;\n this.reconnection(opts.reconnection !== false);\n this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n this.reconnectionDelay(opts.reconnectionDelay || 1000);\n this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n this.randomizationFactor(opts.randomizationFactor || 0.5);\n this.backoff = new Backoff({\n min: this.reconnectionDelay(),\n max: this.reconnectionDelayMax(),\n jitter: this.randomizationFactor(),\n });\n this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n this._readyState = \"closed\";\n this.uri = uri;\n const _parser = opts.parser || parser;\n this.encoder = new _parser.Encoder();\n this.decoder = new _parser.Decoder();\n this._autoConnect = opts.autoConnect !== false;\n if (this._autoConnect)\n this.open();\n }\n reconnection(v) {\n if (!arguments.length)\n return this._reconnection;\n this._reconnection = !!v;\n return this;\n }\n reconnectionAttempts(v) {\n if (v === undefined)\n return this._reconnectionAttempts;\n this._reconnectionAttempts = v;\n return this;\n }\n reconnectionDelay(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelay;\n this._reconnectionDelay = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v);\n return this;\n }\n randomizationFactor(v) {\n var _a;\n if (v === undefined)\n return this._randomizationFactor;\n this._randomizationFactor = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v);\n return this;\n }\n reconnectionDelayMax(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelayMax;\n this._reconnectionDelayMax = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v);\n return this;\n }\n timeout(v) {\n if (!arguments.length)\n return this._timeout;\n this._timeout = v;\n return this;\n }\n /**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @private\n */\n maybeReconnectOnOpen() {\n // Only try to reconnect if it's the first time we're connecting\n if (!this._reconnecting &&\n this._reconnection &&\n this.backoff.attempts === 0) {\n // keeps reconnection from firing twice for the same reconnection loop\n this.reconnect();\n }\n }\n /**\n * Sets the current transport `socket`.\n *\n * @param {Function} fn - optional, callback\n * @return self\n * @public\n */\n open(fn) {\n debug(\"readyState %s\", this._readyState);\n if (~this._readyState.indexOf(\"open\"))\n return this;\n debug(\"opening %s\", this.uri);\n this.engine = eio(this.uri, this.opts);\n const socket = this.engine;\n const self = this;\n this._readyState = \"opening\";\n this.skipReconnect = false;\n // emit `open`\n const openSubDestroy = on_1.on(socket, \"open\", function () {\n self.onopen();\n fn && fn();\n });\n // emit `error`\n const errorSub = on_1.on(socket, \"error\", (err) => {\n debug(\"error\");\n self.cleanup();\n self._readyState = \"closed\";\n this.emitReserved(\"error\", err);\n if (fn) {\n fn(err);\n }\n else {\n // Only do this if there is no fn to handle the error\n self.maybeReconnectOnOpen();\n }\n });\n if (false !== this._timeout) {\n const timeout = this._timeout;\n debug(\"connect attempt will timeout after %d\", timeout);\n if (timeout === 0) {\n openSubDestroy(); // prevents a race condition with the 'open' event\n }\n // set timer\n const timer = setTimeout(() => {\n debug(\"connect attempt timed out after %d\", timeout);\n openSubDestroy();\n socket.close();\n socket.emit(\"error\", new Error(\"timeout\"));\n }, timeout);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(function subDestroy() {\n clearTimeout(timer);\n });\n }\n this.subs.push(openSubDestroy);\n this.subs.push(errorSub);\n return this;\n }\n /**\n * Alias for open()\n *\n * @return self\n * @public\n */\n connect(fn) {\n return this.open(fn);\n }\n /**\n * Called upon transport open.\n *\n * @private\n */\n onopen() {\n debug(\"open\");\n // clear old subs\n this.cleanup();\n // mark as open\n this._readyState = \"open\";\n this.emitReserved(\"open\");\n // add new subs\n const socket = this.engine;\n this.subs.push(on_1.on(socket, \"ping\", this.onping.bind(this)), on_1.on(socket, \"data\", this.ondata.bind(this)), on_1.on(socket, \"error\", this.onerror.bind(this)), on_1.on(socket, \"close\", this.onclose.bind(this)), on_1.on(this.decoder, \"decoded\", this.ondecoded.bind(this)));\n }\n /**\n * Called upon a ping.\n *\n * @private\n */\n onping() {\n this.emitReserved(\"ping\");\n }\n /**\n * Called with data.\n *\n * @private\n */\n ondata(data) {\n this.decoder.add(data);\n }\n /**\n * Called when parser fully decodes a packet.\n *\n * @private\n */\n ondecoded(packet) {\n this.emitReserved(\"packet\", packet);\n }\n /**\n * Called upon socket error.\n *\n * @private\n */\n onerror(err) {\n debug(\"error\", err);\n this.emitReserved(\"error\", err);\n }\n /**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @public\n */\n socket(nsp, opts) {\n let socket = this.nsps[nsp];\n if (!socket) {\n socket = new socket_1.Socket(this, nsp, opts);\n this.nsps[nsp] = socket;\n }\n return socket;\n }\n /**\n * Called upon a socket close.\n *\n * @param socket\n * @private\n */\n _destroy(socket) {\n const nsps = Object.keys(this.nsps);\n for (const nsp of nsps) {\n const socket = this.nsps[nsp];\n if (socket.active) {\n debug(\"socket %s is still active, skipping close\", nsp);\n return;\n }\n }\n this._close();\n }\n /**\n * Writes a packet.\n *\n * @param packet\n * @private\n */\n _packet(packet) {\n debug(\"writing packet %j\", packet);\n const encodedPackets = this.encoder.encode(packet);\n for (let i = 0; i < encodedPackets.length; i++) {\n this.engine.write(encodedPackets[i], packet.options);\n }\n }\n /**\n * Clean up transport subscriptions and packet buffer.\n *\n * @private\n */\n cleanup() {\n debug(\"cleanup\");\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs.length = 0;\n this.decoder.destroy();\n }\n /**\n * Close the current socket.\n *\n * @private\n */\n _close() {\n debug(\"disconnect\");\n this.skipReconnect = true;\n this._reconnecting = false;\n if (\"opening\" === this._readyState) {\n // `onclose` will not fire because\n // an open event never happened\n this.cleanup();\n }\n this.backoff.reset();\n this._readyState = \"closed\";\n if (this.engine)\n this.engine.close();\n }\n /**\n * Alias for close()\n *\n * @private\n */\n disconnect() {\n return this._close();\n }\n /**\n * Called upon engine close.\n *\n * @private\n */\n onclose(reason) {\n debug(\"onclose\");\n this.cleanup();\n this.backoff.reset();\n this._readyState = \"closed\";\n this.emitReserved(\"close\", reason);\n if (this._reconnection && !this.skipReconnect) {\n this.reconnect();\n }\n }\n /**\n * Attempt a reconnection.\n *\n * @private\n */\n reconnect() {\n if (this._reconnecting || this.skipReconnect)\n return this;\n const self = this;\n if (this.backoff.attempts >= this._reconnectionAttempts) {\n debug(\"reconnect failed\");\n this.backoff.reset();\n this.emitReserved(\"reconnect_failed\");\n this._reconnecting = false;\n }\n else {\n const delay = this.backoff.duration();\n debug(\"will wait %dms before reconnect attempt\", delay);\n this._reconnecting = true;\n const timer = setTimeout(() => {\n if (self.skipReconnect)\n return;\n debug(\"attempting reconnect\");\n this.emitReserved(\"reconnect_attempt\", self.backoff.attempts);\n // check again for the case socket closed in above events\n if (self.skipReconnect)\n return;\n self.open((err) => {\n if (err) {\n debug(\"reconnect attempt error\");\n self._reconnecting = false;\n self.reconnect();\n this.emitReserved(\"reconnect_error\", err);\n }\n else {\n debug(\"reconnect success\");\n self.onreconnect();\n }\n });\n }, delay);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(function subDestroy() {\n clearTimeout(timer);\n });\n }\n }\n /**\n * Called upon successful reconnect.\n *\n * @private\n */\n onreconnect() {\n const attempt = this.backoff.attempts;\n this._reconnecting = false;\n this.backoff.reset();\n this.emitReserved(\"reconnect\", attempt);\n }\n}\nexports.Manager = Manager;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.on = void 0;\nfunction on(obj, ev, fn) {\n obj.on(ev, fn);\n return function subDestroy() {\n obj.off(ev, fn);\n };\n}\nexports.on = on;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Socket = void 0;\nconst socket_io_parser_1 = require(\"socket.io-parser\");\nconst on_1 = require(\"./on\");\nconst typed_events_1 = require(\"./typed-events\");\nconst debug = require(\"debug\")(\"socket.io-client:socket\");\n/**\n * Internal events.\n * These events can't be emitted by the user.\n */\nconst RESERVED_EVENTS = Object.freeze({\n connect: 1,\n connect_error: 1,\n disconnect: 1,\n disconnecting: 1,\n // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener\n newListener: 1,\n removeListener: 1,\n});\nclass Socket extends typed_events_1.StrictEventEmitter {\n /**\n * `Socket` constructor.\n *\n * @public\n */\n constructor(io, nsp, opts) {\n super();\n this.receiveBuffer = [];\n this.sendBuffer = [];\n this.ids = 0;\n this.acks = {};\n this.flags = {};\n this.io = io;\n this.nsp = nsp;\n this.ids = 0;\n this.acks = {};\n this.receiveBuffer = [];\n this.sendBuffer = [];\n this.connected = false;\n this.disconnected = true;\n this.flags = {};\n if (opts && opts.auth) {\n this.auth = opts.auth;\n }\n if (this.io._autoConnect)\n this.open();\n }\n /**\n * Subscribe to open, close and packet events\n *\n * @private\n */\n subEvents() {\n if (this.subs)\n return;\n const io = this.io;\n this.subs = [\n on_1.on(io, \"open\", this.onopen.bind(this)),\n on_1.on(io, \"packet\", this.onpacket.bind(this)),\n on_1.on(io, \"error\", this.onerror.bind(this)),\n on_1.on(io, \"close\", this.onclose.bind(this)),\n ];\n }\n /**\n * Whether the Socket will try to reconnect when its Manager connects or reconnects\n */\n get active() {\n return !!this.subs;\n }\n /**\n * \"Opens\" the socket.\n *\n * @public\n */\n connect() {\n if (this.connected)\n return this;\n this.subEvents();\n if (!this.io[\"_reconnecting\"])\n this.io.open(); // ensure open\n if (\"open\" === this.io._readyState)\n this.onopen();\n return this;\n }\n /**\n * Alias for connect()\n */\n open() {\n return this.connect();\n }\n /**\n * Sends a `message` event.\n *\n * @return self\n * @public\n */\n send(...args) {\n args.unshift(\"message\");\n this.emit.apply(this, args);\n return this;\n }\n /**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @return self\n * @public\n */\n emit(ev, ...args) {\n if (RESERVED_EVENTS.hasOwnProperty(ev)) {\n throw new Error('\"' + ev + '\" is a reserved event name');\n }\n args.unshift(ev);\n const packet = {\n type: socket_io_parser_1.PacketType.EVENT,\n data: args,\n };\n packet.options = {};\n packet.options.compress = this.flags.compress !== false;\n // event ack callback\n if (\"function\" === typeof args[args.length - 1]) {\n debug(\"emitting packet with ack id %d\", this.ids);\n this.acks[this.ids] = args.pop();\n packet.id = this.ids++;\n }\n const isTransportWritable = this.io.engine &&\n this.io.engine.transport &&\n this.io.engine.transport.writable;\n const discardPacket = this.flags.volatile && (!isTransportWritable || !this.connected);\n if (discardPacket) {\n debug(\"discard packet as the transport is not currently writable\");\n }\n else if (this.connected) {\n this.packet(packet);\n }\n else {\n this.sendBuffer.push(packet);\n }\n this.flags = {};\n return this;\n }\n /**\n * Sends a packet.\n *\n * @param packet\n * @private\n */\n packet(packet) {\n packet.nsp = this.nsp;\n this.io._packet(packet);\n }\n /**\n * Called upon engine `open`.\n *\n * @private\n */\n onopen() {\n debug(\"transport is open - connecting\");\n if (typeof this.auth == \"function\") {\n this.auth((data) => {\n this.packet({ type: socket_io_parser_1.PacketType.CONNECT, data });\n });\n }\n else {\n this.packet({ type: socket_io_parser_1.PacketType.CONNECT, data: this.auth });\n }\n }\n /**\n * Called upon engine or manager `error`.\n *\n * @param err\n * @private\n */\n onerror(err) {\n if (!this.connected) {\n this.emitReserved(\"connect_error\", err);\n }\n }\n /**\n * Called upon engine `close`.\n *\n * @param reason\n * @private\n */\n onclose(reason) {\n debug(\"close (%s)\", reason);\n this.connected = false;\n this.disconnected = true;\n delete this.id;\n this.emitReserved(\"disconnect\", reason);\n }\n /**\n * Called with socket packet.\n *\n * @param packet\n * @private\n */\n onpacket(packet) {\n const sameNamespace = packet.nsp === this.nsp;\n if (!sameNamespace)\n return;\n switch (packet.type) {\n case socket_io_parser_1.PacketType.CONNECT:\n if (packet.data && packet.data.sid) {\n const id = packet.data.sid;\n this.onconnect(id);\n }\n else {\n this.emitReserved(\"connect_error\", new Error(\"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)\"));\n }\n break;\n case socket_io_parser_1.PacketType.EVENT:\n this.onevent(packet);\n break;\n case socket_io_parser_1.PacketType.BINARY_EVENT:\n this.onevent(packet);\n break;\n case socket_io_parser_1.PacketType.ACK:\n this.onack(packet);\n break;\n case socket_io_parser_1.PacketType.BINARY_ACK:\n this.onack(packet);\n break;\n case socket_io_parser_1.PacketType.DISCONNECT:\n this.ondisconnect();\n break;\n case socket_io_parser_1.PacketType.CONNECT_ERROR:\n const err = new Error(packet.data.message);\n // @ts-ignore\n err.data = packet.data.data;\n this.emitReserved(\"connect_error\", err);\n break;\n }\n }\n /**\n * Called upon a server event.\n *\n * @param packet\n * @private\n */\n onevent(packet) {\n const args = packet.data || [];\n debug(\"emitting event %j\", args);\n if (null != packet.id) {\n debug(\"attaching ack callback to event\");\n args.push(this.ack(packet.id));\n }\n if (this.connected) {\n this.emitEvent(args);\n }\n else {\n this.receiveBuffer.push(Object.freeze(args));\n }\n }\n emitEvent(args) {\n if (this._anyListeners && this._anyListeners.length) {\n const listeners = this._anyListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, args);\n }\n }\n super.emit.apply(this, args);\n }\n /**\n * Produces an ack callback to emit with an event.\n *\n * @private\n */\n ack(id) {\n const self = this;\n let sent = false;\n return function (...args) {\n // prevent double callbacks\n if (sent)\n return;\n sent = true;\n debug(\"sending ack %j\", args);\n self.packet({\n type: socket_io_parser_1.PacketType.ACK,\n id: id,\n data: args,\n });\n };\n }\n /**\n * Called upon a server acknowlegement.\n *\n * @param packet\n * @private\n */\n onack(packet) {\n const ack = this.acks[packet.id];\n if (\"function\" === typeof ack) {\n debug(\"calling ack %s with %j\", packet.id, packet.data);\n ack.apply(this, packet.data);\n delete this.acks[packet.id];\n }\n else {\n debug(\"bad ack %s\", packet.id);\n }\n }\n /**\n * Called upon server connect.\n *\n * @private\n */\n onconnect(id) {\n debug(\"socket connected with id %s\", id);\n this.id = id;\n this.connected = true;\n this.disconnected = false;\n this.emitBuffered();\n this.emitReserved(\"connect\");\n }\n /**\n * Emit buffered events (received and emitted).\n *\n * @private\n */\n emitBuffered() {\n this.receiveBuffer.forEach((args) => this.emitEvent(args));\n this.receiveBuffer = [];\n this.sendBuffer.forEach((packet) => this.packet(packet));\n this.sendBuffer = [];\n }\n /**\n * Called upon server disconnect.\n *\n * @private\n */\n ondisconnect() {\n debug(\"server disconnect (%s)\", this.nsp);\n this.destroy();\n this.onclose(\"io server disconnect\");\n }\n /**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @private\n */\n destroy() {\n if (this.subs) {\n // clean subscriptions to avoid reconnections\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs = undefined;\n }\n this.io[\"_destroy\"](this);\n }\n /**\n * Disconnects the socket manually.\n *\n * @return self\n * @public\n */\n disconnect() {\n if (this.connected) {\n debug(\"performing disconnect (%s)\", this.nsp);\n this.packet({ type: socket_io_parser_1.PacketType.DISCONNECT });\n }\n // remove socket from pool\n this.destroy();\n if (this.connected) {\n // fire events\n this.onclose(\"io client disconnect\");\n }\n return this;\n }\n /**\n * Alias for disconnect()\n *\n * @return self\n * @public\n */\n close() {\n return this.disconnect();\n }\n /**\n * Sets the compress flag.\n *\n * @param compress - if `true`, compresses the sending data\n * @return self\n * @public\n */\n compress(compress) {\n this.flags.compress = compress;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not\n * ready to send messages.\n *\n * @returns self\n * @public\n */\n get volatile() {\n this.flags.volatile = true;\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * @param listener\n * @public\n */\n onAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * @param listener\n * @public\n */\n prependAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @param listener\n * @public\n */\n offAny(listener) {\n if (!this._anyListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n *\n * @public\n */\n listenersAny() {\n return this._anyListeners || [];\n }\n}\nexports.Socket = Socket;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StrictEventEmitter = void 0;\nconst Emitter = require(\"component-emitter\");\n/**\n * Strictly typed version of an `EventEmitter`. A `TypedEventEmitter` takes type\n * parameters for mappings of event names to event data types, and strictly\n * types method calls to the `EventEmitter` according to these event maps.\n *\n * @typeParam ListenEvents - `EventsMap` of user-defined events that can be\n * listened to with `on` or `once`\n * @typeParam EmitEvents - `EventsMap` of user-defined events that can be\n * emitted with `emit`\n * @typeParam ReservedEvents - `EventsMap` of reserved events, that can be\n * emitted by socket.io with `emitReserved`, and can be listened to with\n * `listen`.\n */\nclass StrictEventEmitter extends Emitter {\n /**\n * Adds the `listener` function as an event listener for `ev`.\n *\n * @param ev Name of the event\n * @param listener Callback function\n */\n on(ev, listener) {\n super.on(ev, listener);\n return this;\n }\n /**\n * Adds a one-time `listener` function as an event listener for `ev`.\n *\n * @param ev Name of the event\n * @param listener Callback function\n */\n once(ev, listener) {\n super.once(ev, listener);\n return this;\n }\n /**\n * Emits an event.\n *\n * @param ev Name of the event\n * @param args Values to send to listeners of this event\n */\n emit(ev, ...args) {\n super.emit(ev, ...args);\n return this;\n }\n /**\n * Emits a reserved event.\n *\n * This method is `protected`, so that only a class extending\n * `StrictEventEmitter` can emit its own reserved events.\n *\n * @param ev Reserved event name\n * @param args Arguments to emit along with the event\n */\n emitReserved(ev, ...args) {\n super.emit(ev, ...args);\n return this;\n }\n /**\n * Returns the listeners listening to an event.\n *\n * @param event Event name\n * @returns Array of listeners subscribed to `event`\n */\n listeners(event) {\n return super.listeners(event);\n }\n}\nexports.StrictEventEmitter = StrictEventEmitter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.url = void 0;\nconst parseuri = require(\"parseuri\");\nconst debug = require(\"debug\")(\"socket.io-client:url\");\n/**\n * URL parser.\n *\n * @param uri - url\n * @param path - the request path of the connection\n * @param loc - An object meant to mimic window.location.\n * Defaults to window.location.\n * @public\n */\nfunction url(uri, path = \"\", loc) {\n let obj = uri;\n // default to window.location\n loc = loc || (typeof location !== \"undefined\" && location);\n if (null == uri)\n uri = loc.protocol + \"//\" + loc.host;\n // relative path support\n if (typeof uri === \"string\") {\n if (\"/\" === uri.charAt(0)) {\n if (\"/\" === uri.charAt(1)) {\n uri = loc.protocol + uri;\n }\n else {\n uri = loc.host + uri;\n }\n }\n if (!/^(https?|wss?):\\/\\//.test(uri)) {\n debug(\"protocol-less url %s\", uri);\n if (\"undefined\" !== typeof loc) {\n uri = loc.protocol + \"//\" + uri;\n }\n else {\n uri = \"https://\" + uri;\n }\n }\n // parse\n debug(\"parse %s\", uri);\n obj = parseuri(uri);\n }\n // make sure we treat `localhost:80` and `localhost` equally\n if (!obj.port) {\n if (/^(http|ws)$/.test(obj.protocol)) {\n obj.port = \"80\";\n }\n else if (/^(http|ws)s$/.test(obj.protocol)) {\n obj.port = \"443\";\n }\n }\n obj.path = obj.path || \"/\";\n const ipv6 = obj.host.indexOf(\":\") !== -1;\n const host = ipv6 ? \"[\" + obj.host + \"]\" : obj.host;\n // define unique id\n obj.id = obj.protocol + \"://\" + host + \":\" + obj.port + path;\n // define href\n obj.href =\n obj.protocol +\n \"://\" +\n host +\n (loc && loc.port === obj.port ? \"\" : \":\" + obj.port);\n return obj;\n}\nexports.url = url;\n","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n opts = opts || {};\n this.ms = opts.min || 100;\n this.max = opts.max || 10000;\n this.factor = opts.factor || 2;\n this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n var ms = this.ms * Math.pow(this.factor, this.attempts++);\n if (this.jitter) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.jitter * ms);\n ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;\n }\n return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n this.jitter = jitter;\n};\n\n","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n for (var key in Emitter.prototype) {\r\n obj[key] = Emitter.prototype[key];\r\n }\r\n return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n .push(fn);\r\n return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n function on() {\r\n this.off(event, on);\r\n fn.apply(this, arguments);\r\n }\r\n\r\n on.fn = fn;\r\n this.on(event, on);\r\n return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n\r\n // all\r\n if (0 == arguments.length) {\r\n this._callbacks = {};\r\n return this;\r\n }\r\n\r\n // specific event\r\n var callbacks = this._callbacks['$' + event];\r\n if (!callbacks) return this;\r\n\r\n // remove all handlers\r\n if (1 == arguments.length) {\r\n delete this._callbacks['$' + event];\r\n return this;\r\n }\r\n\r\n // remove specific handler\r\n var cb;\r\n for (var i = 0; i < callbacks.length; i++) {\r\n cb = callbacks[i];\r\n if (cb === fn || cb.fn === fn) {\r\n callbacks.splice(i, 1);\r\n break;\r\n }\r\n }\r\n\r\n // Remove event specific arrays for event types that no\r\n // one is subscribed for to avoid memory leak.\r\n if (callbacks.length === 0) {\r\n delete this._callbacks['$' + event];\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n this._callbacks = this._callbacks || {};\r\n\r\n var args = new Array(arguments.length - 1)\r\n , callbacks = this._callbacks['$' + event];\r\n\r\n for (var i = 1; i < arguments.length; i++) {\r\n args[i - 1] = arguments[i];\r\n }\r\n\r\n if (callbacks) {\r\n callbacks = callbacks.slice(0);\r\n for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n callbacks[i].apply(this, args);\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n this._callbacks = this._callbacks || {};\r\n return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n return !! this.listeners(event).length;\r\n};\r\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => enableOverride === null ? createDebug.enabled(namespace) : enableOverride,\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","module.exports = (() => {\n if (typeof self !== \"undefined\") {\n return self;\n } else if (typeof window !== \"undefined\") {\n return window;\n } else {\n return Function(\"return this\")();\n }\n})();\n","const Socket = require(\"./socket\");\n\nmodule.exports = (uri, opts) => new Socket(uri, opts);\n\n/**\n * Expose deps for legacy compatibility\n * and standalone browser access.\n */\n\nmodule.exports.Socket = Socket;\nmodule.exports.protocol = Socket.protocol; // this is an int\nmodule.exports.Transport = require(\"./transport\");\nmodule.exports.transports = require(\"./transports/index\");\nmodule.exports.parser = require(\"engine.io-parser\");\n","const transports = require(\"./transports/index\");\nconst Emitter = require(\"component-emitter\");\nconst debug = require(\"debug\")(\"engine.io-client:socket\");\nconst parser = require(\"engine.io-parser\");\nconst parseuri = require(\"parseuri\");\nconst parseqs = require(\"parseqs\");\n\nclass Socket extends Emitter {\n /**\n * Socket constructor.\n *\n * @param {String|Object} uri or options\n * @param {Object} options\n * @api public\n */\n constructor(uri, opts = {}) {\n super();\n\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n\n if (uri) {\n uri = parseuri(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query) opts.query = uri.query;\n } else if (opts.host) {\n opts.hostname = parseuri(opts.host).host;\n }\n\n this.secure =\n null != opts.secure\n ? opts.secure\n : typeof location !== \"undefined\" && \"https:\" === location.protocol;\n\n if (opts.hostname && !opts.port) {\n // if no port is specified manually, use the protocol default\n opts.port = this.secure ? \"443\" : \"80\";\n }\n\n this.hostname =\n opts.hostname ||\n (typeof location !== \"undefined\" ? location.hostname : \"localhost\");\n this.port =\n opts.port ||\n (typeof location !== \"undefined\" && location.port\n ? location.port\n : this.secure\n ? 443\n : 80);\n\n this.transports = opts.transports || [\"polling\", \"websocket\"];\n this.readyState = \"\";\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n\n this.opts = Object.assign(\n {\n path: \"/engine.io\",\n agent: false,\n withCredentials: false,\n upgrade: true,\n jsonp: true,\n timestampParam: \"t\",\n rememberUpgrade: false,\n rejectUnauthorized: true,\n perMessageDeflate: {\n threshold: 1024\n },\n transportOptions: {},\n closeOnBeforeunload: true\n },\n opts\n );\n\n this.opts.path = this.opts.path.replace(/\\/$/, \"\") + \"/\";\n\n if (typeof this.opts.query === \"string\") {\n this.opts.query = parseqs.decode(this.opts.query);\n }\n\n // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n\n // set on heartbeat\n this.pingTimeoutTimer = null;\n\n if (typeof addEventListener === \"function\") {\n if (this.opts.closeOnBeforeunload) {\n // Firefox closes the connection when the \"beforeunload\" event is emitted but not Chrome. This event listener\n // ensures every browser behaves the same (no \"disconnect\" event at the Socket.IO level when the page is\n // closed/reloaded)\n addEventListener(\n \"beforeunload\",\n () => {\n if (this.transport) {\n // silently close the transport\n this.transport.removeAllListeners();\n this.transport.close();\n }\n },\n false\n );\n }\n if (this.hostname !== \"localhost\") {\n this.offlineEventListener = () => {\n this.onClose(\"transport close\");\n };\n addEventListener(\"offline\", this.offlineEventListener, false);\n }\n }\n\n this.open();\n }\n\n /**\n * Creates transport of the given type.\n *\n * @param {String} transport name\n * @return {Transport}\n * @api private\n */\n createTransport(name) {\n debug('creating transport \"%s\"', name);\n const query = clone(this.opts.query);\n\n // append engine.io protocol identifier\n query.EIO = parser.protocol;\n\n // transport name\n query.transport = name;\n\n // session id if we already have one\n if (this.id) query.sid = this.id;\n\n const opts = Object.assign(\n {},\n this.opts.transportOptions[name],\n this.opts,\n {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port\n }\n );\n\n debug(\"options: %j\", opts);\n\n return new transports[name](opts);\n }\n\n /**\n * Initializes transport to use and starts probe.\n *\n * @api private\n */\n open() {\n let transport;\n if (\n this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1\n ) {\n transport = \"websocket\";\n } else if (0 === this.transports.length) {\n // Emit error on next tick so it can be listened to\n setTimeout(() => {\n this.emit(\"error\", \"No transports available\");\n }, 0);\n return;\n } else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n } catch (e) {\n debug(\"error while creating transport: %s\", e);\n this.transports.shift();\n this.open();\n return;\n }\n\n transport.open();\n this.setTransport(transport);\n }\n\n /**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @api private\n */\n setTransport(transport) {\n debug(\"setting transport %s\", transport.name);\n\n if (this.transport) {\n debug(\"clearing existing transport %s\", this.transport.name);\n this.transport.removeAllListeners();\n }\n\n // set up transport\n this.transport = transport;\n\n // set up transport listeners\n transport\n .on(\"drain\", this.onDrain.bind(this))\n .on(\"packet\", this.onPacket.bind(this))\n .on(\"error\", this.onError.bind(this))\n .on(\"close\", () => {\n this.onClose(\"transport close\");\n });\n }\n\n /**\n * Probes a transport.\n *\n * @param {String} transport name\n * @api private\n */\n probe(name) {\n debug('probing transport \"%s\"', name);\n let transport = this.createTransport(name, { probe: 1 });\n let failed = false;\n\n Socket.priorWebsocketSuccess = false;\n\n const onTransportOpen = () => {\n if (failed) return;\n\n debug('probe transport \"%s\" opened', name);\n transport.send([{ type: \"ping\", data: \"probe\" }]);\n transport.once(\"packet\", msg => {\n if (failed) return;\n if (\"pong\" === msg.type && \"probe\" === msg.data) {\n debug('probe transport \"%s\" pong', name);\n this.upgrading = true;\n this.emit(\"upgrading\", transport);\n if (!transport) return;\n Socket.priorWebsocketSuccess = \"websocket\" === transport.name;\n\n debug('pausing current transport \"%s\"', this.transport.name);\n this.transport.pause(() => {\n if (failed) return;\n if (\"closed\" === this.readyState) return;\n debug(\"changing transport and sending upgrade packet\");\n\n cleanup();\n\n this.setTransport(transport);\n transport.send([{ type: \"upgrade\" }]);\n this.emit(\"upgrade\", transport);\n transport = null;\n this.upgrading = false;\n this.flush();\n });\n } else {\n debug('probe transport \"%s\" failed', name);\n const err = new Error(\"probe error\");\n err.transport = transport.name;\n this.emit(\"upgradeError\", err);\n }\n });\n };\n\n function freezeTransport() {\n if (failed) return;\n\n // Any callback called by transport should be ignored since now\n failed = true;\n\n cleanup();\n\n transport.close();\n transport = null;\n }\n\n // Handle any error that happens while probing\n const onerror = err => {\n const error = new Error(\"probe error: \" + err);\n error.transport = transport.name;\n\n freezeTransport();\n\n debug('probe transport \"%s\" failed because of error: %s', name, err);\n\n this.emit(\"upgradeError\", error);\n };\n\n function onTransportClose() {\n onerror(\"transport closed\");\n }\n\n // When the socket is closed while we're probing\n function onclose() {\n onerror(\"socket closed\");\n }\n\n // When the socket is upgraded while we're probing\n function onupgrade(to) {\n if (transport && to.name !== transport.name) {\n debug('\"%s\" works - aborting \"%s\"', to.name, transport.name);\n freezeTransport();\n }\n }\n\n // Remove all listeners on the transport and on self\n const cleanup = () => {\n transport.removeListener(\"open\", onTransportOpen);\n transport.removeListener(\"error\", onerror);\n transport.removeListener(\"close\", onTransportClose);\n this.removeListener(\"close\", onclose);\n this.removeListener(\"upgrading\", onupgrade);\n };\n\n transport.once(\"open\", onTransportOpen);\n transport.once(\"error\", onerror);\n transport.once(\"close\", onTransportClose);\n\n this.once(\"close\", onclose);\n this.once(\"upgrading\", onupgrade);\n\n transport.open();\n }\n\n /**\n * Called when connection is deemed open.\n *\n * @api public\n */\n onOpen() {\n debug(\"socket open\");\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emit(\"open\");\n this.flush();\n\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\n \"open\" === this.readyState &&\n this.opts.upgrade &&\n this.transport.pause\n ) {\n debug(\"starting upgrade probes\");\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\n }\n\n /**\n * Handles a packet.\n *\n * @api private\n */\n onPacket(packet) {\n if (\n \"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState\n ) {\n debug('socket receive: type \"%s\", data \"%s\"', packet.type, packet.data);\n\n this.emit(\"packet\", packet);\n\n // Socket is live - any packet counts\n this.emit(\"heartbeat\");\n\n switch (packet.type) {\n case \"open\":\n this.onHandshake(JSON.parse(packet.data));\n break;\n\n case \"ping\":\n this.resetPingTimeout();\n this.sendPacket(\"pong\");\n this.emit(\"ping\");\n this.emit(\"pong\");\n break;\n\n case \"error\":\n const err = new Error(\"server error\");\n err.code = packet.data;\n this.onError(err);\n break;\n\n case \"message\":\n this.emit(\"data\", packet.data);\n this.emit(\"message\", packet.data);\n break;\n }\n } else {\n debug('packet received with socket readyState \"%s\"', this.readyState);\n }\n }\n\n /**\n * Called upon handshake completion.\n *\n * @param {Object} handshake obj\n * @api private\n */\n onHandshake(data) {\n this.emit(\"handshake\", data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this.upgrades = this.filterUpgrades(data.upgrades);\n this.pingInterval = data.pingInterval;\n this.pingTimeout = data.pingTimeout;\n this.onOpen();\n // In case open handler closes socket\n if (\"closed\" === this.readyState) return;\n this.resetPingTimeout();\n }\n\n /**\n * Sets and resets ping timeout timer based on server pings.\n *\n * @api private\n */\n resetPingTimeout() {\n clearTimeout(this.pingTimeoutTimer);\n this.pingTimeoutTimer = setTimeout(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\n if (this.opts.autoUnref) {\n this.pingTimeoutTimer.unref();\n }\n }\n\n /**\n * Called on `drain` event\n *\n * @api private\n */\n onDrain() {\n this.writeBuffer.splice(0, this.prevBufferLen);\n\n // setting prevBufferLen = 0 is very important\n // for example, when upgrading, upgrade packet is sent over,\n // and a nonzero prevBufferLen could cause problems on `drain`\n this.prevBufferLen = 0;\n\n if (0 === this.writeBuffer.length) {\n this.emit(\"drain\");\n } else {\n this.flush();\n }\n }\n\n /**\n * Flush write buffers.\n *\n * @api private\n */\n flush() {\n if (\n \"closed\" !== this.readyState &&\n this.transport.writable &&\n !this.upgrading &&\n this.writeBuffer.length\n ) {\n debug(\"flushing %d packets in socket\", this.writeBuffer.length);\n this.transport.send(this.writeBuffer);\n // keep track of current length of writeBuffer\n // splice writeBuffer and callbackBuffer on `drain`\n this.prevBufferLen = this.writeBuffer.length;\n this.emit(\"flush\");\n }\n }\n\n /**\n * Sends a message.\n *\n * @param {String} message.\n * @param {Function} callback function.\n * @param {Object} options.\n * @return {Socket} for chaining.\n * @api public\n */\n write(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\n }\n\n send(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\n }\n\n /**\n * Sends a packet.\n *\n * @param {String} packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} callback function.\n * @api private\n */\n sendPacket(type, data, options, fn) {\n if (\"function\" === typeof data) {\n fn = data;\n data = undefined;\n }\n\n if (\"function\" === typeof options) {\n fn = options;\n options = null;\n }\n\n if (\"closing\" === this.readyState || \"closed\" === this.readyState) {\n return;\n }\n\n options = options || {};\n options.compress = false !== options.compress;\n\n const packet = {\n type: type,\n data: data,\n options: options\n };\n this.emit(\"packetCreate\", packet);\n this.writeBuffer.push(packet);\n if (fn) this.once(\"flush\", fn);\n this.flush();\n }\n\n /**\n * Closes the connection.\n *\n * @api private\n */\n close() {\n const close = () => {\n this.onClose(\"forced close\");\n debug(\"socket closing - telling transport to close\");\n this.transport.close();\n };\n\n const cleanupAndClose = () => {\n this.removeListener(\"upgrade\", cleanupAndClose);\n this.removeListener(\"upgradeError\", cleanupAndClose);\n close();\n };\n\n const waitForUpgrade = () => {\n // wait for upgrade to finish since we can't send packets while pausing a transport\n this.once(\"upgrade\", cleanupAndClose);\n this.once(\"upgradeError\", cleanupAndClose);\n };\n\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.readyState = \"closing\";\n\n if (this.writeBuffer.length) {\n this.once(\"drain\", () => {\n if (this.upgrading) {\n waitForUpgrade();\n } else {\n close();\n }\n });\n } else if (this.upgrading) {\n waitForUpgrade();\n } else {\n close();\n }\n }\n\n return this;\n }\n\n /**\n * Called upon transport error\n *\n * @api private\n */\n onError(err) {\n debug(\"socket error %j\", err);\n Socket.priorWebsocketSuccess = false;\n this.emit(\"error\", err);\n this.onClose(\"transport error\", err);\n }\n\n /**\n * Called upon transport close.\n *\n * @api private\n */\n onClose(reason, desc) {\n if (\n \"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState\n ) {\n debug('socket close with reason: \"%s\"', reason);\n\n // clear timers\n clearTimeout(this.pingIntervalTimer);\n clearTimeout(this.pingTimeoutTimer);\n\n // stop event from firing again for transport\n this.transport.removeAllListeners(\"close\");\n\n // ensure transport won't stay open\n this.transport.close();\n\n // ignore further transport communication\n this.transport.removeAllListeners();\n\n if (typeof removeEventListener === \"function\") {\n removeEventListener(\"offline\", this.offlineEventListener, false);\n }\n\n // set ready state\n this.readyState = \"closed\";\n\n // clear session id\n this.id = null;\n\n // emit close event\n this.emit(\"close\", reason, desc);\n\n // clean buffers after, so users can still\n // grab the buffers on `close` event\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n }\n }\n\n /**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} server upgrades\n * @api private\n *\n */\n filterUpgrades(upgrades) {\n const filteredUpgrades = [];\n let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\n\nSocket.priorWebsocketSuccess = false;\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nSocket.protocol = parser.protocol; // this is an int\n\nfunction clone(obj) {\n const o = {};\n for (let i in obj) {\n if (obj.hasOwnProperty(i)) {\n o[i] = obj[i];\n }\n }\n return o;\n}\n\nmodule.exports = Socket;\n","const parser = require(\"engine.io-parser\");\nconst Emitter = require(\"component-emitter\");\nconst debug = require(\"debug\")(\"engine.io-client:transport\");\n\nclass Transport extends Emitter {\n /**\n * Transport abstract constructor.\n *\n * @param {Object} options.\n * @api private\n */\n constructor(opts) {\n super();\n\n this.opts = opts;\n this.query = opts.query;\n this.readyState = \"\";\n this.socket = opts.socket;\n }\n\n /**\n * Emits an error.\n *\n * @param {String} str\n * @return {Transport} for chaining\n * @api public\n */\n onError(msg, desc) {\n const err = new Error(msg);\n err.type = \"TransportError\";\n err.description = desc;\n this.emit(\"error\", err);\n return this;\n }\n\n /**\n * Opens the transport.\n *\n * @api public\n */\n open() {\n if (\"closed\" === this.readyState || \"\" === this.readyState) {\n this.readyState = \"opening\";\n this.doOpen();\n }\n\n return this;\n }\n\n /**\n * Closes the transport.\n *\n * @api private\n */\n close() {\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.doClose();\n this.onClose();\n }\n\n return this;\n }\n\n /**\n * Sends multiple packets.\n *\n * @param {Array} packets\n * @api private\n */\n send(packets) {\n if (\"open\" === this.readyState) {\n this.write(packets);\n } else {\n // this might happen if the transport was silently closed in the beforeunload event handler\n debug(\"transport is not open, discarding packets\");\n }\n }\n\n /**\n * Called upon open\n *\n * @api private\n */\n onOpen() {\n this.readyState = \"open\";\n this.writable = true;\n this.emit(\"open\");\n }\n\n /**\n * Called with data.\n *\n * @param {String} data\n * @api private\n */\n onData(data) {\n const packet = parser.decodePacket(data, this.socket.binaryType);\n this.onPacket(packet);\n }\n\n /**\n * Called with a decoded packet.\n */\n onPacket(packet) {\n this.emit(\"packet\", packet);\n }\n\n /**\n * Called upon close.\n *\n * @api private\n */\n onClose() {\n this.readyState = \"closed\";\n this.emit(\"close\");\n }\n}\n\nmodule.exports = Transport;\n","const XMLHttpRequest = require(\"../../contrib/xmlhttprequest-ssl/XMLHttpRequest\");\nconst XHR = require(\"./polling-xhr\");\nconst JSONP = require(\"./polling-jsonp\");\nconst websocket = require(\"./websocket\");\n\nexports.polling = polling;\nexports.websocket = websocket;\n\n/**\n * Polling transport polymorphic constructor.\n * Decides on xhr vs jsonp based on feature detection.\n *\n * @api private\n */\n\nfunction polling(opts) {\n let xhr;\n let xd = false;\n let xs = false;\n const jsonp = false !== opts.jsonp;\n\n if (typeof location !== \"undefined\") {\n const isSSL = \"https:\" === location.protocol;\n let port = location.port;\n\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? 443 : 80;\n }\n\n xd = opts.hostname !== location.hostname || port !== opts.port;\n xs = opts.secure !== isSSL;\n }\n\n opts.xdomain = xd;\n opts.xscheme = xs;\n xhr = new XMLHttpRequest(opts);\n\n if (\"open\" in xhr && !opts.forceJSONP) {\n return new XHR(opts);\n } else {\n if (!jsonp) throw new Error(\"JSONP disabled\");\n return new JSONP(opts);\n }\n}\n","const Polling = require(\"./polling\");\nconst globalThis = require(\"../globalThis\");\n\nconst rNewline = /\\n/g;\nconst rEscapedNewline = /\\\\n/g;\n\n/**\n * Global JSONP callbacks.\n */\n\nlet callbacks;\n\nclass JSONPPolling extends Polling {\n /**\n * JSONP Polling constructor.\n *\n * @param {Object} opts.\n * @api public\n */\n constructor(opts) {\n super(opts);\n\n this.query = this.query || {};\n\n // define global callbacks array if not present\n // we do this here (lazily) to avoid unneeded global pollution\n if (!callbacks) {\n // we need to consider multiple engines in the same page\n callbacks = globalThis.___eio = globalThis.___eio || [];\n }\n\n // callback identifier\n this.index = callbacks.length;\n\n // add callback to jsonp global\n callbacks.push(this.onData.bind(this));\n\n // append to query string\n this.query.j = this.index;\n }\n\n /**\n * JSONP only supports binary as base64 encoded strings\n */\n get supportsBinary() {\n return false;\n }\n\n /**\n * Closes the socket.\n *\n * @api private\n */\n doClose() {\n if (this.script) {\n // prevent spurious errors from being emitted when the window is unloaded\n this.script.onerror = () => {};\n this.script.parentNode.removeChild(this.script);\n this.script = null;\n }\n\n if (this.form) {\n this.form.parentNode.removeChild(this.form);\n this.form = null;\n this.iframe = null;\n }\n\n super.doClose();\n }\n\n /**\n * Starts a poll cycle.\n *\n * @api private\n */\n doPoll() {\n const script = document.createElement(\"script\");\n\n if (this.script) {\n this.script.parentNode.removeChild(this.script);\n this.script = null;\n }\n\n script.async = true;\n script.src = this.uri();\n script.onerror = e => {\n this.onError(\"jsonp poll error\", e);\n };\n\n const insertAt = document.getElementsByTagName(\"script\")[0];\n if (insertAt) {\n insertAt.parentNode.insertBefore(script, insertAt);\n } else {\n (document.head || document.body).appendChild(script);\n }\n this.script = script;\n\n const isUAgecko =\n \"undefined\" !== typeof navigator && /gecko/i.test(navigator.userAgent);\n\n if (isUAgecko) {\n setTimeout(function() {\n const iframe = document.createElement(\"iframe\");\n document.body.appendChild(iframe);\n document.body.removeChild(iframe);\n }, 100);\n }\n }\n\n /**\n * Writes with a hidden iframe.\n *\n * @param {String} data to send\n * @param {Function} called upon flush.\n * @api private\n */\n doWrite(data, fn) {\n let iframe;\n\n if (!this.form) {\n const form = document.createElement(\"form\");\n const area = document.createElement(\"textarea\");\n const id = (this.iframeId = \"eio_iframe_\" + this.index);\n\n form.className = \"socketio\";\n form.style.position = \"absolute\";\n form.style.top = \"-1000px\";\n form.style.left = \"-1000px\";\n form.target = id;\n form.method = \"POST\";\n form.setAttribute(\"accept-charset\", \"utf-8\");\n area.name = \"d\";\n form.appendChild(area);\n document.body.appendChild(form);\n\n this.form = form;\n this.area = area;\n }\n\n this.form.action = this.uri();\n\n function complete() {\n initIframe();\n fn();\n }\n\n const initIframe = () => {\n if (this.iframe) {\n try {\n this.form.removeChild(this.iframe);\n } catch (e) {\n this.onError(\"jsonp polling iframe removal error\", e);\n }\n }\n\n try {\n // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n const html = '<iframe src=\"javascript:0\" name=\"' + this.iframeId + '\">';\n iframe = document.createElement(html);\n } catch (e) {\n iframe = document.createElement(\"iframe\");\n iframe.name = this.iframeId;\n iframe.src = \"javascript:0\";\n }\n\n iframe.id = this.iframeId;\n\n this.form.appendChild(iframe);\n this.iframe = iframe;\n };\n\n initIframe();\n\n // escape \\n to prevent it from being converted into \\r\\n by some UAs\n // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side\n data = data.replace(rEscapedNewline, \"\\\\\\n\");\n this.area.value = data.replace(rNewline, \"\\\\n\");\n\n try {\n this.form.submit();\n } catch (e) {}\n\n if (this.iframe.attachEvent) {\n this.iframe.onreadystatechange = () => {\n if (this.iframe.readyState === \"complete\") {\n complete();\n }\n };\n } else {\n this.iframe.onload = complete;\n }\n }\n}\n\nmodule.exports = JSONPPolling;\n","/* global attachEvent */\n\nconst XMLHttpRequest = require(\"../../contrib/xmlhttprequest-ssl/XMLHttpRequest\");\nconst Polling = require(\"./polling\");\nconst Emitter = require(\"component-emitter\");\nconst { pick } = require(\"../util\");\nconst globalThis = require(\"../globalThis\");\n\nconst debug = require(\"debug\")(\"engine.io-client:polling-xhr\");\n\n/**\n * Empty function\n */\n\nfunction empty() {}\n\nconst hasXHR2 = (function() {\n const xhr = new XMLHttpRequest({ xdomain: false });\n return null != xhr.responseType;\n})();\n\nclass XHR extends Polling {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @api public\n */\n constructor(opts) {\n super(opts);\n\n if (typeof location !== \"undefined\") {\n const isSSL = \"https:\" === location.protocol;\n let port = location.port;\n\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? 443 : 80;\n }\n\n this.xd =\n (typeof location !== \"undefined\" &&\n opts.hostname !== location.hostname) ||\n port !== opts.port;\n this.xs = opts.secure !== isSSL;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\n }\n\n /**\n * Creates a request.\n *\n * @param {String} method\n * @api private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, xs: this.xs }, this.opts);\n return new Request(this.uri(), opts);\n }\n\n /**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @api private\n */\n doWrite(data, fn) {\n const req = this.request({\n method: \"POST\",\n data: data\n });\n req.on(\"success\", fn);\n req.on(\"error\", err => {\n this.onError(\"xhr post error\", err);\n });\n }\n\n /**\n * Starts a poll cycle.\n *\n * @api private\n */\n doPoll() {\n debug(\"xhr poll\");\n const req = this.request();\n req.on(\"data\", this.onData.bind(this));\n req.on(\"error\", err => {\n this.onError(\"xhr poll error\", err);\n });\n this.pollXhr = req;\n }\n}\n\nclass Request extends Emitter {\n /**\n * Request constructor\n *\n * @param {Object} options\n * @api public\n */\n constructor(uri, opts) {\n super();\n this.opts = opts;\n\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.async = false !== opts.async;\n this.data = undefined !== opts.data ? opts.data : null;\n\n this.create();\n }\n\n /**\n * Creates the XHR object and sends the request.\n *\n * @api private\n */\n create() {\n const opts = pick(\n this.opts,\n \"agent\",\n \"enablesXDR\",\n \"pfx\",\n \"key\",\n \"passphrase\",\n \"cert\",\n \"ca\",\n \"ciphers\",\n \"rejectUnauthorized\",\n \"autoUnref\"\n );\n opts.xdomain = !!this.opts.xd;\n opts.xscheme = !!this.opts.xs;\n\n const xhr = (this.xhr = new XMLHttpRequest(opts));\n\n try {\n debug(\"xhr open %s: %s\", this.method, this.uri);\n xhr.open(this.method, this.uri, this.async);\n try {\n if (this.opts.extraHeaders) {\n xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n for (let i in this.opts.extraHeaders) {\n if (this.opts.extraHeaders.hasOwnProperty(i)) {\n xhr.setRequestHeader(i, this.opts.extraHeaders[i]);\n }\n }\n }\n } catch (e) {}\n\n if (\"POST\" === this.method) {\n try {\n xhr.setRequestHeader(\"Content-type\", \"text/plain;charset=UTF-8\");\n } catch (e) {}\n }\n\n try {\n xhr.setRequestHeader(\"Accept\", \"*/*\");\n } catch (e) {}\n\n // ie6 check\n if (\"withCredentials\" in xhr) {\n xhr.withCredentials = this.opts.withCredentials;\n }\n\n if (this.opts.requestTimeout) {\n xhr.timeout = this.opts.requestTimeout;\n }\n\n if (this.hasXDR()) {\n xhr.onload = () => {\n this.onLoad();\n };\n xhr.onerror = () => {\n this.onError(xhr.responseText);\n };\n } else {\n xhr.onreadystatechange = () => {\n if (4 !== xhr.readyState) return;\n if (200 === xhr.status || 1223 === xhr.status) {\n this.onLoad();\n } else {\n // make sure the `error` event handler that's user-set\n // does not throw in the same tick and gets caught here\n setTimeout(() => {\n this.onError(typeof xhr.status === \"number\" ? xhr.status : 0);\n }, 0);\n }\n };\n }\n\n debug(\"xhr data %s\", this.data);\n xhr.send(this.data);\n } catch (e) {\n // Need to defer since .create() is called directly from the constructor\n // and thus the 'error' event can only be only bound *after* this exception\n // occurs. Therefore, also, we cannot throw here at all.\n setTimeout(() => {\n this.onError(e);\n }, 0);\n return;\n }\n\n if (typeof document !== \"undefined\") {\n this.index = Request.requestsCount++;\n Request.requests[this.index] = this;\n }\n }\n\n /**\n * Called upon successful response.\n *\n * @api private\n */\n onSuccess() {\n this.emit(\"success\");\n this.cleanup();\n }\n\n /**\n * Called if we have data.\n *\n * @api private\n */\n onData(data) {\n this.emit(\"data\", data);\n this.onSuccess();\n }\n\n /**\n * Called upon error.\n *\n * @api private\n */\n onError(err) {\n this.emit(\"error\", err);\n this.cleanup(true);\n }\n\n /**\n * Cleans up house.\n *\n * @api private\n */\n cleanup(fromError) {\n if (\"undefined\" === typeof this.xhr || null === this.xhr) {\n return;\n }\n // xmlhttprequest\n if (this.hasXDR()) {\n this.xhr.onload = this.xhr.onerror = empty;\n } else {\n this.xhr.onreadystatechange = empty;\n }\n\n if (fromError) {\n try {\n this.xhr.abort();\n } catch (e) {}\n }\n\n if (typeof document !== \"undefined\") {\n delete Request.requests[this.index];\n }\n\n this.xhr = null;\n }\n\n /**\n * Called upon load.\n *\n * @api private\n */\n onLoad() {\n const data = this.xhr.responseText;\n if (data !== null) {\n this.onData(data);\n }\n }\n\n /**\n * Check if it has XDomainRequest.\n *\n * @api private\n */\n hasXDR() {\n return typeof XDomainRequest !== \"undefined\" && !this.xs && this.enablesXDR;\n }\n\n /**\n * Aborts the request.\n *\n * @api public\n */\n abort() {\n this.cleanup();\n }\n}\n\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\n\nRequest.requestsCount = 0;\nRequest.requests = {};\n\nif (typeof document !== \"undefined\") {\n if (typeof attachEvent === \"function\") {\n attachEvent(\"onunload\", unloadHandler);\n } else if (typeof addEventListener === \"function\") {\n const terminationEvent = \"onpagehide\" in globalThis ? \"pagehide\" : \"unload\";\n addEventListener(terminationEvent, unloadHandler, false);\n }\n}\n\nfunction unloadHandler() {\n for (let i in Request.requests) {\n if (Request.requests.hasOwnProperty(i)) {\n Request.requests[i].abort();\n }\n }\n}\n\nmodule.exports = XHR;\nmodule.exports.Request = Request;\n","const Transport = require(\"../transport\");\nconst parseqs = require(\"parseqs\");\nconst parser = require(\"engine.io-parser\");\nconst yeast = require(\"yeast\");\n\nconst debug = require(\"debug\")(\"engine.io-client:polling\");\n\nclass Polling extends Transport {\n /**\n * Transport name.\n */\n get name() {\n return \"polling\";\n }\n\n /**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @api private\n */\n doOpen() {\n this.poll();\n }\n\n /**\n * Pauses polling.\n *\n * @param {Function} callback upon buffers are flushed and transport is paused\n * @api private\n */\n pause(onPause) {\n this.readyState = \"pausing\";\n\n const pause = () => {\n debug(\"paused\");\n this.readyState = \"paused\";\n onPause();\n };\n\n if (this.polling || !this.writable) {\n let total = 0;\n\n if (this.polling) {\n debug(\"we are currently polling - waiting to pause\");\n total++;\n this.once(\"pollComplete\", function() {\n debug(\"pre-pause polling complete\");\n --total || pause();\n });\n }\n\n if (!this.writable) {\n debug(\"we are currently writing - waiting to pause\");\n total++;\n this.once(\"drain\", function() {\n debug(\"pre-pause writing complete\");\n --total || pause();\n });\n }\n } else {\n pause();\n }\n }\n\n /**\n * Starts polling cycle.\n *\n * @api public\n */\n poll() {\n debug(\"polling\");\n this.polling = true;\n this.doPoll();\n this.emit(\"poll\");\n }\n\n /**\n * Overloads onData to detect payloads.\n *\n * @api private\n */\n onData(data) {\n debug(\"polling got data %s\", data);\n const callback = packet => {\n // if its the first message we consider the transport open\n if (\"opening\" === this.readyState && packet.type === \"open\") {\n this.onOpen();\n }\n\n // if its a close packet, we close the ongoing requests\n if (\"close\" === packet.type) {\n this.onClose();\n return false;\n }\n\n // otherwise bypass onData and handle the message\n this.onPacket(packet);\n };\n\n // decode payload\n parser.decodePayload(data, this.socket.binaryType).forEach(callback);\n\n // if an event did not trigger closing\n if (\"closed\" !== this.readyState) {\n // if we got data we're not polling\n this.polling = false;\n this.emit(\"pollComplete\");\n\n if (\"open\" === this.readyState) {\n this.poll();\n } else {\n debug('ignoring poll - transport state \"%s\"', this.readyState);\n }\n }\n }\n\n /**\n * For polling, send a close packet.\n *\n * @api private\n */\n doClose() {\n const close = () => {\n debug(\"writing close packet\");\n this.write([{ type: \"close\" }]);\n };\n\n if (\"open\" === this.readyState) {\n debug(\"transport open - closing\");\n close();\n } else {\n // in case we're trying to close while\n // handshaking is in progress (GH-164)\n debug(\"transport not open - deferring close\");\n this.once(\"open\", close);\n }\n }\n\n /**\n * Writes a packets payload.\n *\n * @param {Array} data packets\n * @param {Function} drain callback\n * @api private\n */\n write(packets) {\n this.writable = false;\n\n parser.encodePayload(packets, data => {\n this.doWrite(data, () => {\n this.writable = true;\n this.emit(\"drain\");\n });\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 ? \"https\" : \"http\";\n let port = \"\";\n\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n\n query = parseqs.encode(query);\n\n // avoid port if default for schema\n if (\n this.opts.port &&\n ((\"https\" === schema && Number(this.opts.port) !== 443) ||\n (\"http\" === schema && Number(this.opts.port) !== 80))\n ) {\n port = \":\" + this.opts.port;\n }\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\nmodule.exports = Polling;\n","const globalThis = require(\"../globalThis\");\nconst nextTick = (() => {\n const isPromiseAvailable =\n typeof Promise === \"function\" && typeof Promise.resolve === \"function\";\n if (isPromiseAvailable) {\n return cb => Promise.resolve().then(cb);\n } else {\n return cb => setTimeout(cb, 0);\n }\n})();\n\nmodule.exports = {\n WebSocket: globalThis.WebSocket || globalThis.MozWebSocket,\n usingBrowserWebSocket: true,\n defaultBinaryType: \"arraybuffer\",\n nextTick\n};\n","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 nextTick\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 this.writable = false;\n\n // encodePacket efficient as it uses WS framing\n // no need for encodePayload\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n\n parser.encodePacket(packet, this.supportsBinary, 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 (this.opts.perMessageDeflate) {\n const len =\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.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 this.ws.send(data);\n } else {\n this.ws.send(data, opts);\n }\n } catch (e) {\n debug(\"websocket closed before onclose event\");\n }\n\n if (lastPacket) {\n // fake drain\n // defer to next tick to allow Socket to clear writeBuffer\n nextTick(() => {\n this.writable = true;\n this.emit(\"drain\");\n });\n }\n });\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","module.exports.pick = (obj, ...attr) => {\n return attr.reduce((acc, k) => {\n if (obj.hasOwnProperty(k)) {\n acc[k] = obj[k];\n }\n return acc;\n }, {});\n};\n","// browser shim for xmlhttprequest module\n\nconst hasCORS = require(\"has-cors\");\nconst globalThis = require(\"./globalThis\");\n\nmodule.exports = function(opts) {\n const xdomain = opts.xdomain;\n\n // scheme must be same when usign XDomainRequest\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n const xscheme = opts.xscheme;\n\n // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.\n // https://github.com/Automattic/engine.io-client/pull/217\n const enablesXDR = opts.enablesXDR;\n\n // XMLHttpRequest can be disabled on IE\n try {\n if (\"undefined\" !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n return new XMLHttpRequest();\n }\n } catch (e) {}\n\n // Use XDomainRequest for IE8 if enablesXDR is true\n // because loading bar keeps flashing when using jsonp-polling\n // https://github.com/yujiosaka/socke.io-ie8-loading-example\n try {\n if (\"undefined\" !== typeof XDomainRequest && !xscheme && enablesXDR) {\n return new XDomainRequest();\n }\n } catch (e) {}\n\n if (!xdomain) {\n try {\n return new globalThis[[\"Active\"].concat(\"Object\").join(\"X\")](\n \"Microsoft.XMLHTTP\"\n );\n } catch (e) {}\n }\n};\n","const PACKET_TYPES = Object.create(null); // no Map = no polyfill\nPACKET_TYPES[\"open\"] = \"0\";\nPACKET_TYPES[\"close\"] = \"1\";\nPACKET_TYPES[\"ping\"] = \"2\";\nPACKET_TYPES[\"pong\"] = \"3\";\nPACKET_TYPES[\"message\"] = \"4\";\nPACKET_TYPES[\"upgrade\"] = \"5\";\nPACKET_TYPES[\"noop\"] = \"6\";\n\nconst PACKET_TYPES_REVERSE = Object.create(null);\nObject.keys(PACKET_TYPES).forEach(key => {\n PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key;\n});\n\nconst ERROR_PACKET = { type: \"error\", data: \"parser error\" };\n\nmodule.exports = {\n PACKET_TYPES,\n PACKET_TYPES_REVERSE,\n ERROR_PACKET\n};\n","const { PACKET_TYPES_REVERSE, ERROR_PACKET } = require(\"./commons\");\n\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n\nlet base64decoder;\nif (withNativeArrayBuffer) {\n base64decoder = require(\"base64-arraybuffer\");\n}\n\nconst decodePacket = (encodedPacket, binaryType) => {\n if (typeof encodedPacket !== \"string\") {\n return {\n type: \"message\",\n data: mapBinary(encodedPacket, binaryType)\n };\n }\n const type = encodedPacket.charAt(0);\n if (type === \"b\") {\n return {\n type: \"message\",\n data: decodeBase64Packet(encodedPacket.substring(1), binaryType)\n };\n }\n const packetType = PACKET_TYPES_REVERSE[type];\n if (!packetType) {\n return ERROR_PACKET;\n }\n return encodedPacket.length > 1\n ? {\n type: PACKET_TYPES_REVERSE[type],\n data: encodedPacket.substring(1)\n }\n : {\n type: PACKET_TYPES_REVERSE[type]\n };\n};\n\nconst decodeBase64Packet = (data, binaryType) => {\n if (base64decoder) {\n const decoded = base64decoder.decode(data);\n return mapBinary(decoded, binaryType);\n } else {\n return { base64: true, data }; // fallback for old browsers\n }\n};\n\nconst mapBinary = (data, binaryType) => {\n switch (binaryType) {\n case \"blob\":\n return data instanceof ArrayBuffer ? new Blob([data]) : data;\n case \"arraybuffer\":\n default:\n return data; // assuming the data is already an ArrayBuffer\n }\n};\n\nmodule.exports = decodePacket;\n","const { PACKET_TYPES } = require(\"./commons\");\n\nconst withNativeBlob =\n typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n Object.prototype.toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n\n// ArrayBuffer.isView method is not defined in IE10\nconst isView = obj => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj && obj.buffer instanceof ArrayBuffer;\n};\n\nconst encodePacket = ({ type, data }, supportsBinary, callback) => {\n if (withNativeBlob && data instanceof Blob) {\n if (supportsBinary) {\n return callback(data);\n } else {\n return encodeBlobAsBase64(data, callback);\n }\n } else if (\n withNativeArrayBuffer &&\n (data instanceof ArrayBuffer || isView(data))\n ) {\n if (supportsBinary) {\n return callback(data instanceof ArrayBuffer ? data : data.buffer);\n } else {\n return encodeBlobAsBase64(new Blob([data]), callback);\n }\n }\n // plain string\n return callback(PACKET_TYPES[type] + (data || \"\"));\n};\n\nconst encodeBlobAsBase64 = (data, callback) => {\n const fileReader = new FileReader();\n fileReader.onload = function() {\n const content = fileReader.result.split(\",\")[1];\n callback(\"b\" + content);\n };\n return fileReader.readAsDataURL(data);\n};\n\nmodule.exports = encodePacket;\n","const encodePacket = require(\"./encodePacket\");\nconst decodePacket = require(\"./decodePacket\");\n\nconst SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text\n\nconst encodePayload = (packets, callback) => {\n // some packets may be added to the array while encoding, so the initial length must be saved\n const length = packets.length;\n const encodedPackets = new Array(length);\n let count = 0;\n\n packets.forEach((packet, i) => {\n // force base64 encoding for binary packets\n encodePacket(packet, false, encodedPacket => {\n encodedPackets[i] = encodedPacket;\n if (++count === length) {\n callback(encodedPackets.join(SEPARATOR));\n }\n });\n });\n};\n\nconst decodePayload = (encodedPayload, binaryType) => {\n const encodedPackets = encodedPayload.split(SEPARATOR);\n const packets = [];\n for (let i = 0; i < encodedPackets.length; i++) {\n const decodedPacket = decodePacket(encodedPackets[i], binaryType);\n packets.push(decodedPacket);\n if (decodedPacket.type === \"error\") {\n break;\n }\n }\n return packets;\n};\n\nmodule.exports = {\n protocol: 4,\n encodePacket,\n encodePayload,\n decodePacket,\n decodePayload\n};\n","/*\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n(function(chars){\n \"use strict\";\n\n exports.encode = function(arraybuffer) {\n var bytes = new Uint8Array(arraybuffer),\n i, len = bytes.length, base64 = \"\";\n\n for (i = 0; i < len; i+=3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n\n if ((len % 3) === 2) {\n base64 = base64.substring(0, base64.length - 1) + \"=\";\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + \"==\";\n }\n\n return base64;\n };\n\n exports.decode = function(base64) {\n var bufferLength = base64.length * 0.75,\n len = base64.length, i, p = 0,\n encoded1, encoded2, encoded3, encoded4;\n\n if (base64[base64.length - 1] === \"=\") {\n bufferLength--;\n if (base64[base64.length - 2] === \"=\") {\n bufferLength--;\n }\n }\n\n var arraybuffer = new ArrayBuffer(bufferLength),\n bytes = new Uint8Array(arraybuffer);\n\n for (i = 0; i < len; i+=4) {\n encoded1 = chars.indexOf(base64[i]);\n encoded2 = chars.indexOf(base64[i+1]);\n encoded3 = chars.indexOf(base64[i+2]);\n encoded4 = chars.indexOf(base64[i+3]);\n\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n\n return arraybuffer;\n };\n})(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\");\n","\n/**\n * Module exports.\n *\n * Logic borrowed from Modernizr:\n *\n * - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js\n */\n\ntry {\n module.exports = typeof XMLHttpRequest !== 'undefined' &&\n 'withCredentials' in new XMLHttpRequest();\n} catch (err) {\n // if XMLHttp support is disabled in IE then it will throw\n // when trying to create\n module.exports = false;\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\n\nexports.encode = function (obj) {\n var str = '';\n\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n if (str.length) str += '&';\n str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n }\n }\n\n return str;\n};\n\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\n\nexports.decode = function(qs){\n var qry = {};\n var pairs = qs.split('&');\n for (var i = 0, l = pairs.length; i < l; i++) {\n var pair = pairs[i].split('=');\n qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n return qry;\n};\n","/**\n * Parses an URI\n *\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\n * @api private\n */\n\nvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\n\nvar parts = [\n 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\n\nmodule.exports = function parseuri(str) {\n var src = str,\n b = str.indexOf('['),\n e = str.indexOf(']');\n\n if (b != -1 && e != -1) {\n str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n }\n\n var m = re.exec(str || ''),\n uri = {},\n i = 14;\n\n while (i--) {\n uri[parts[i]] = m[i] || '';\n }\n\n if (b != -1 && e != -1) {\n uri.source = src;\n uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n uri.ipv6uri = true;\n }\n\n uri.pathNames = pathNames(uri, uri['path']);\n uri.queryKey = queryKey(uri, uri['query']);\n\n return uri;\n};\n\nfunction pathNames(obj, path) {\n var regx = /\\/{2,9}/g,\n names = path.replace(regx, \"/\").split(\"/\");\n\n if (path.substr(0, 1) == '/' || path.length === 0) {\n names.splice(0, 1);\n }\n if (path.substr(path.length - 1, 1) == '/') {\n names.splice(names.length - 1, 1);\n }\n\n return names;\n}\n\nfunction queryKey(uri, query) {\n var data = {};\n\n query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n if ($1) {\n data[$1] = $2;\n }\n });\n\n return data;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reconstructPacket = exports.deconstructPacket = void 0;\nconst is_binary_1 = require(\"./is-binary\");\n/**\n * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @public\n */\nfunction deconstructPacket(packet) {\n const buffers = [];\n const packetData = packet.data;\n const pack = packet;\n pack.data = _deconstructPacket(packetData, buffers);\n pack.attachments = buffers.length; // number of binary 'attachments'\n return { packet: pack, buffers: buffers };\n}\nexports.deconstructPacket = deconstructPacket;\nfunction _deconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (is_binary_1.isBinary(data)) {\n const placeholder = { _placeholder: true, num: buffers.length };\n buffers.push(data);\n return placeholder;\n }\n else if (Array.isArray(data)) {\n const newData = new Array(data.length);\n for (let i = 0; i < data.length; i++) {\n newData[i] = _deconstructPacket(data[i], buffers);\n }\n return newData;\n }\n else if (typeof data === \"object\" && !(data instanceof Date)) {\n const newData = {};\n for (const key in data) {\n if (data.hasOwnProperty(key)) {\n newData[key] = _deconstructPacket(data[key], buffers);\n }\n }\n return newData;\n }\n return data;\n}\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @public\n */\nfunction reconstructPacket(packet, buffers) {\n packet.data = _reconstructPacket(packet.data, buffers);\n packet.attachments = undefined; // no longer useful\n return packet;\n}\nexports.reconstructPacket = reconstructPacket;\nfunction _reconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (data && data._placeholder) {\n return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n }\n else if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n data[i] = _reconstructPacket(data[i], buffers);\n }\n }\n else if (typeof data === \"object\") {\n for (const key in data) {\n if (data.hasOwnProperty(key)) {\n data[key] = _reconstructPacket(data[key], buffers);\n }\n }\n }\n return data;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Decoder = exports.Encoder = exports.PacketType = exports.protocol = void 0;\nconst Emitter = require(\"component-emitter\");\nconst binary_1 = require(\"./binary\");\nconst is_binary_1 = require(\"./is-binary\");\nconst debug = require(\"debug\")(\"socket.io-parser\");\n/**\n * Protocol version.\n *\n * @public\n */\nexports.protocol = 5;\nvar PacketType;\n(function (PacketType) {\n PacketType[PacketType[\"CONNECT\"] = 0] = \"CONNECT\";\n PacketType[PacketType[\"DISCONNECT\"] = 1] = \"DISCONNECT\";\n PacketType[PacketType[\"EVENT\"] = 2] = \"EVENT\";\n PacketType[PacketType[\"ACK\"] = 3] = \"ACK\";\n PacketType[PacketType[\"CONNECT_ERROR\"] = 4] = \"CONNECT_ERROR\";\n PacketType[PacketType[\"BINARY_EVENT\"] = 5] = \"BINARY_EVENT\";\n PacketType[PacketType[\"BINARY_ACK\"] = 6] = \"BINARY_ACK\";\n})(PacketType = exports.PacketType || (exports.PacketType = {}));\n/**\n * A socket.io Encoder instance\n */\nclass Encoder {\n /**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n */\n encode(obj) {\n debug(\"encoding packet %j\", obj);\n if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) {\n if (is_binary_1.hasBinary(obj)) {\n obj.type =\n obj.type === PacketType.EVENT\n ? PacketType.BINARY_EVENT\n : PacketType.BINARY_ACK;\n return this.encodeAsBinary(obj);\n }\n }\n return [this.encodeAsString(obj)];\n }\n /**\n * Encode packet as string.\n */\n encodeAsString(obj) {\n // first is type\n let str = \"\" + obj.type;\n // attachments if we have them\n if (obj.type === PacketType.BINARY_EVENT ||\n obj.type === PacketType.BINARY_ACK) {\n str += obj.attachments + \"-\";\n }\n // if we have a namespace other than `/`\n // we append it followed by a comma `,`\n if (obj.nsp && \"/\" !== obj.nsp) {\n str += obj.nsp + \",\";\n }\n // immediately followed by the id\n if (null != obj.id) {\n str += obj.id;\n }\n // json data\n if (null != obj.data) {\n str += JSON.stringify(obj.data);\n }\n debug(\"encoded %j as %s\", obj, str);\n return str;\n }\n /**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n */\n encodeAsBinary(obj) {\n const deconstruction = binary_1.deconstructPacket(obj);\n const pack = this.encodeAsString(deconstruction.packet);\n const buffers = deconstruction.buffers;\n buffers.unshift(pack); // add packet info to beginning of data list\n return buffers; // write all the buffers\n }\n}\nexports.Encoder = Encoder;\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n */\nclass Decoder extends Emitter {\n constructor() {\n super();\n }\n /**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n */\n add(obj) {\n let packet;\n if (typeof obj === \"string\") {\n packet = this.decodeString(obj);\n if (packet.type === PacketType.BINARY_EVENT ||\n packet.type === PacketType.BINARY_ACK) {\n // binary packet's json\n this.reconstructor = new BinaryReconstructor(packet);\n // no attachments, labeled binary but no binary data to follow\n if (packet.attachments === 0) {\n super.emit(\"decoded\", packet);\n }\n }\n else {\n // non-binary full packet\n super.emit(\"decoded\", packet);\n }\n }\n else if (is_binary_1.isBinary(obj) || obj.base64) {\n // raw binary data\n if (!this.reconstructor) {\n throw new Error(\"got binary data when not reconstructing a packet\");\n }\n else {\n packet = this.reconstructor.takeBinaryData(obj);\n if (packet) {\n // received final buffer\n this.reconstructor = null;\n super.emit(\"decoded\", packet);\n }\n }\n }\n else {\n throw new Error(\"Unknown type: \" + obj);\n }\n }\n /**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n */\n decodeString(str) {\n let i = 0;\n // look up type\n const p = {\n type: Number(str.charAt(0)),\n };\n if (PacketType[p.type] === undefined) {\n throw new Error(\"unknown packet type \" + p.type);\n }\n // look up attachments if type binary\n if (p.type === PacketType.BINARY_EVENT ||\n p.type === PacketType.BINARY_ACK) {\n const start = i + 1;\n while (str.charAt(++i) !== \"-\" && i != str.length) { }\n const buf = str.substring(start, i);\n if (buf != Number(buf) || str.charAt(i) !== \"-\") {\n throw new Error(\"Illegal attachments\");\n }\n p.attachments = Number(buf);\n }\n // look up namespace (if any)\n if (\"/\" === str.charAt(i + 1)) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (\",\" === c)\n break;\n if (i === str.length)\n break;\n }\n p.nsp = str.substring(start, i);\n }\n else {\n p.nsp = \"/\";\n }\n // look up id\n const next = str.charAt(i + 1);\n if (\"\" !== next && Number(next) == next) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (null == c || Number(c) != c) {\n --i;\n break;\n }\n if (i === str.length)\n break;\n }\n p.id = Number(str.substring(start, i + 1));\n }\n // look up json data\n if (str.charAt(++i)) {\n const payload = tryParse(str.substr(i));\n if (Decoder.isPayloadValid(p.type, payload)) {\n p.data = payload;\n }\n else {\n throw new Error(\"invalid payload\");\n }\n }\n debug(\"decoded %s as %j\", str, p);\n return p;\n }\n static isPayloadValid(type, payload) {\n switch (type) {\n case PacketType.CONNECT:\n return typeof payload === \"object\";\n case PacketType.DISCONNECT:\n return payload === undefined;\n case PacketType.CONNECT_ERROR:\n return typeof payload === \"string\" || typeof payload === \"object\";\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n return Array.isArray(payload) && payload.length > 0;\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n return Array.isArray(payload);\n }\n }\n /**\n * Deallocates a parser's resources\n */\n destroy() {\n if (this.reconstructor) {\n this.reconstructor.finishedReconstruction();\n }\n }\n}\nexports.Decoder = Decoder;\nfunction tryParse(str) {\n try {\n return JSON.parse(str);\n }\n catch (e) {\n return false;\n }\n}\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n */\nclass BinaryReconstructor {\n constructor(packet) {\n this.packet = packet;\n this.buffers = [];\n this.reconPack = packet;\n }\n /**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n * a reconstructed packet object if all buffers have been received.\n */\n takeBinaryData(binData) {\n this.buffers.push(binData);\n if (this.buffers.length === this.reconPack.attachments) {\n // done with buffer list\n const packet = binary_1.reconstructPacket(this.reconPack, this.buffers);\n this.finishedReconstruction();\n return packet;\n }\n return null;\n }\n /**\n * Cleans up binary packet reconstruction variables.\n */\n finishedReconstruction() {\n this.reconPack = null;\n this.buffers = [];\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hasBinary = exports.isBinary = void 0;\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst isView = (obj) => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj.buffer instanceof ArrayBuffer;\n};\nconst toString = Object.prototype.toString;\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeFile = typeof File === \"function\" ||\n (typeof File !== \"undefined\" &&\n toString.call(File) === \"[object FileConstructor]\");\n/**\n * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File.\n *\n * @private\n */\nfunction isBinary(obj) {\n return ((withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj))) ||\n (withNativeBlob && obj instanceof Blob) ||\n (withNativeFile && obj instanceof File));\n}\nexports.isBinary = isBinary;\nfunction hasBinary(obj, toJSON) {\n if (!obj || typeof obj !== \"object\") {\n return false;\n }\n if (Array.isArray(obj)) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (hasBinary(obj[i])) {\n return true;\n }\n }\n return false;\n }\n if (isBinary(obj)) {\n return true;\n }\n if (obj.toJSON &&\n typeof obj.toJSON === \"function\" &&\n arguments.length === 1) {\n return hasBinary(obj.toJSON(), true);\n }\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n return true;\n }\n }\n return false;\n}\nexports.hasBinary = hasBinary;\n","'use strict';\n\nvar alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')\n , length = 64\n , map = {}\n , seed = 0\n , i = 0\n , prev;\n\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nfunction encode(num) {\n var encoded = '';\n\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n\n return encoded;\n}\n\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nfunction decode(str) {\n var decoded = 0;\n\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n\n return decoded;\n}\n\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nfunction yeast() {\n var now = encode(+new Date());\n\n if (now !== prev) return seed = 0, prev = now;\n return now +'.'+ encode(seed++);\n}\n\n//\n// Map each character to its index.\n//\nfor (; i < length; i++) map[alphabet[i]] = i;\n\n//\n// Expose the `yeast`, `encode` and `decode` functions.\n//\nyeast.encode = encode;\nyeast.decode = decode;\nmodule.exports = yeast;\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/client/lib/socket.io.min.js b/client/lib/socket.io.min.js
new file mode 100644
index 0000000..bc1643f
--- /dev/null
+++ b/client/lib/socket.io.min.js
@@ -0,0 +1,7 @@
+/*!
+ * Socket.IO v4.1.3
+ * (c) 2014-2021 Guillermo Rauch
+ * Released under the MIT License.
+ */
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.io=e():t.io=e()}(self,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=18)}([function(t,e,n){var r=n(24),o=n(25),i=String.fromCharCode(30);t.exports={protocol:4,encodePacket:r,encodePayload:function(t,e){var n=t.length,o=new Array(n),s=0;t.forEach((function(t,c){r(t,!1,(function(t){o[c]=t,++s===n&&e(o.join(i))}))}))},decodePacket:o,decodePayload:function(t,e){for(var n=t.split(i),r=[],s=0;s<n.length;s++){var c=o(n[s],e);if(r.push(c),"error"===c.type)break}return r}}},function(t,e,n){function r(t){if(t)return function(t){for(var e in r.prototype)t[e]=r.prototype[e];return t}(t)}t.exports=r,r.prototype.on=r.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},r.prototype.once=function(t,e){function n(){this.off(t,n),e.apply(this,arguments)}return n.fn=e,this.on(t,n),this},r.prototype.off=r.prototype.removeListener=r.prototype.removeAllListeners=r.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n,r=this._callbacks["$"+t];if(!r)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var o=0;o<r.length;o++)if((n=r[o])===e||n.fn===e){r.splice(o,1);break}return 0===r.length&&delete this._callbacks["$"+t],this},r.prototype.emit=function(t){this._callbacks=this._callbacks||{};for(var e=new Array(arguments.length-1),n=this._callbacks["$"+t],r=1;r<arguments.length;r++)e[r-1]=arguments[r];if(n){r=0;for(var o=(n=n.slice(0)).length;r<o;++r)n[r].apply(this,e)}return this},r.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks["$"+t]||[]},r.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t,e){t.exports="undefined"!=typeof self?self:"undefined"!=typeof window?window:Function("return this")()},function(t,e,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function i(t,e){return(i=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function s(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=a(t);if(e){var o=a(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return c(this,n)}}function c(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function a(t){return(a=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}var u=n(0),f=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&i(t,e)}(a,t);var e,n,r,c=s(a);function a(t){var e;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,a),(e=c.call(this)).opts=t,e.query=t.query,e.readyState="",e.socket=t.socket,e}return e=a,(n=[{key:"onError",value:function(t,e){var n=new Error(t);return n.type="TransportError",n.description=e,this.emit("error",n),this}},{key:"open",value:function(){return"closed"!==this.readyState&&""!==this.readyState||(this.readyState="opening",this.doOpen()),this}},{key:"close",value:function(){return"opening"!==this.readyState&&"open"!==this.readyState||(this.doClose(),this.onClose()),this}},{key:"send",value:function(t){"open"===this.readyState&&this.write(t)}},{key:"onOpen",value:function(){this.readyState="open",this.writable=!0,this.emit("open")}},{key:"onData",value:function(t){var e=u.decodePacket(t,this.socket.binaryType);this.onPacket(e)}},{key:"onPacket",value:function(t){this.emit("packet",t)}},{key:"onClose",value:function(){this.readyState="closed",this.emit("close")}}])&&o(e.prototype,n),r&&o(e,r),a}(n(1));t.exports=f},function(t,e){e.encode=function(t){var e="";for(var n in t)t.hasOwnProperty(n)&&(e.length&&(e+="&"),e+=encodeURIComponent(n)+"="+encodeURIComponent(t[n]));return e},e.decode=function(t){for(var e={},n=t.split("&"),r=0,o=n.length;r<o;r++){var i=n[r].split("=");e[decodeURIComponent(i[0])]=decodeURIComponent(i[1])}return e}},function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e,n){return(o="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,n){var r=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=a(t)););return t}(t,e);if(r){var o=Object.getOwnPropertyDescriptor(r,e);return o.get?o.get.call(n):o.value}})(t,e,n||t)}function i(t,e){return(i=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function s(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=a(t);if(e){var o=a(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return c(this,n)}}function c(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function a(t){return(a=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function u(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function f(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function l(t,e,n){return e&&f(t.prototype,e),n&&f(t,n),t}Object.defineProperty(e,"__esModule",{value:!0}),e.Decoder=e.Encoder=e.PacketType=e.protocol=void 0;var p,h=n(1),y=n(30),d=n(15);e.protocol=5,function(t){t[t.CONNECT=0]="CONNECT",t[t.DISCONNECT=1]="DISCONNECT",t[t.EVENT=2]="EVENT",t[t.ACK=3]="ACK",t[t.CONNECT_ERROR=4]="CONNECT_ERROR",t[t.BINARY_EVENT=5]="BINARY_EVENT",t[t.BINARY_ACK=6]="BINARY_ACK"}(p=e.PacketType||(e.PacketType={}));var v=function(){function t(){u(this,t)}return l(t,[{key:"encode",value:function(t){return t.type!==p.EVENT&&t.type!==p.ACK||!d.hasBinary(t)?[this.encodeAsString(t)]:(t.type=t.type===p.EVENT?p.BINARY_EVENT:p.BINARY_ACK,this.encodeAsBinary(t))}},{key:"encodeAsString",value:function(t){var e=""+t.type;return t.type!==p.BINARY_EVENT&&t.type!==p.BINARY_ACK||(e+=t.attachments+"-"),t.nsp&&"/"!==t.nsp&&(e+=t.nsp+","),null!=t.id&&(e+=t.id),null!=t.data&&(e+=JSON.stringify(t.data)),e}},{key:"encodeAsBinary",value:function(t){var e=y.deconstructPacket(t),n=this.encodeAsString(e.packet),r=e.buffers;return r.unshift(n),r}}]),t}();e.Encoder=v;var b=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&i(t,e)}(n,t);var e=s(n);function n(){return u(this,n),e.call(this)}return l(n,[{key:"add",value:function(t){var e;if("string"==typeof t)(e=this.decodeString(t)).type===p.BINARY_EVENT||e.type===p.BINARY_ACK?(this.reconstructor=new m(e),0===e.attachments&&o(a(n.prototype),"emit",this).call(this,"decoded",e)):o(a(n.prototype),"emit",this).call(this,"decoded",e);else{if(!d.isBinary(t)&&!t.base64)throw new Error("Unknown type: "+t);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");(e=this.reconstructor.takeBinaryData(t))&&(this.reconstructor=null,o(a(n.prototype),"emit",this).call(this,"decoded",e))}}},{key:"decodeString",value:function(t){var e=0,r={type:Number(t.charAt(0))};if(void 0===p[r.type])throw new Error("unknown packet type "+r.type);if(r.type===p.BINARY_EVENT||r.type===p.BINARY_ACK){for(var o=e+1;"-"!==t.charAt(++e)&&e!=t.length;);var i=t.substring(o,e);if(i!=Number(i)||"-"!==t.charAt(e))throw new Error("Illegal attachments");r.attachments=Number(i)}if("/"===t.charAt(e+1)){for(var s=e+1;++e;){if(","===t.charAt(e))break;if(e===t.length)break}r.nsp=t.substring(s,e)}else r.nsp="/";var c=t.charAt(e+1);if(""!==c&&Number(c)==c){for(var a=e+1;++e;){var u=t.charAt(e);if(null==u||Number(u)!=u){--e;break}if(e===t.length)break}r.id=Number(t.substring(a,e+1))}if(t.charAt(++e)){var f=function(t){try{return JSON.parse(t)}catch(t){return!1}}(t.substr(e));if(!n.isPayloadValid(r.type,f))throw new Error("invalid payload");r.data=f}return r}},{key:"destroy",value:function(){this.reconstructor&&this.reconstructor.finishedReconstruction()}}],[{key:"isPayloadValid",value:function(t,e){switch(t){case p.CONNECT:return"object"===r(e);case p.DISCONNECT:return void 0===e;case p.CONNECT_ERROR:return"string"==typeof e||"object"===r(e);case p.EVENT:case p.BINARY_EVENT:return Array.isArray(e)&&e.length>0;case p.ACK:case p.BINARY_ACK:return Array.isArray(e)}}}]),n}(h);e.Decoder=b;var m=function(){function t(e){u(this,t),this.packet=e,this.buffers=[],this.reconPack=e}return l(t,[{key:"takeBinaryData",value:function(t){if(this.buffers.push(t),this.buffers.length===this.reconPack.attachments){var e=y.reconstructPacket(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null}},{key:"finishedReconstruction",value:function(){this.reconPack=null,this.buffers=[]}}]),t}()},function(t,e){var n=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,r=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];t.exports=function(t){var e=t,o=t.indexOf("["),i=t.indexOf("]");-1!=o&&-1!=i&&(t=t.substring(0,o)+t.substring(o,i).replace(/:/g,";")+t.substring(i,t.length));for(var s,c,a=n.exec(t||""),u={},f=14;f--;)u[r[f]]=a[f]||"";return-1!=o&&-1!=i&&(u.source=e,u.host=u.host.substring(1,u.host.length-1).replace(/;/g,":"),u.authority=u.authority.replace("[","").replace("]","").replace(/;/g,":"),u.ipv6uri=!0),u.pathNames=function(t,e){var n=e.replace(/\/{2,9}/g,"/").split("/");"/"!=e.substr(0,1)&&0!==e.length||n.splice(0,1);"/"==e.substr(e.length-1,1)&&n.splice(n.length-1,1);return n}(0,u.path),u.queryKey=(s=u.query,c={},s.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,(function(t,e,n){e&&(c[e]=n)})),c),u}},function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function i(t,e){return(i=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function s(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=a(t);if(e){var o=a(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return c(this,n)}}function c(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function a(t){return(a=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.Manager=void 0;var u=n(20),f=n(14),l=n(5),p=n(16),h=n(31),y=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&i(t,e)}(y,t);var e,n,c,a=s(y);function y(t,e){var n;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,y),(n=a.call(this)).nsps={},n.subs=[],t&&"object"===r(t)&&(e=t,t=void 0),(e=e||{}).path=e.path||"/socket.io",n.opts=e,n.reconnection(!1!==e.reconnection),n.reconnectionAttempts(e.reconnectionAttempts||1/0),n.reconnectionDelay(e.reconnectionDelay||1e3),n.reconnectionDelayMax(e.reconnectionDelayMax||5e3),n.randomizationFactor(e.randomizationFactor||.5),n.backoff=new h({min:n.reconnectionDelay(),max:n.reconnectionDelayMax(),jitter:n.randomizationFactor()}),n.timeout(null==e.timeout?2e4:e.timeout),n._readyState="closed",n.uri=t;var o=e.parser||l;return n.encoder=new o.Encoder,n.decoder=new o.Decoder,n._autoConnect=!1!==e.autoConnect,n._autoConnect&&n.open(),n}return e=y,(n=[{key:"reconnection",value:function(t){return arguments.length?(this._reconnection=!!t,this):this._reconnection}},{key:"reconnectionAttempts",value:function(t){return void 0===t?this._reconnectionAttempts:(this._reconnectionAttempts=t,this)}},{key:"reconnectionDelay",value:function(t){var e;return void 0===t?this._reconnectionDelay:(this._reconnectionDelay=t,null===(e=this.backoff)||void 0===e||e.setMin(t),this)}},{key:"randomizationFactor",value:function(t){var e;return void 0===t?this._randomizationFactor:(this._randomizationFactor=t,null===(e=this.backoff)||void 0===e||e.setJitter(t),this)}},{key:"reconnectionDelayMax",value:function(t){var e;return void 0===t?this._reconnectionDelayMax:(this._reconnectionDelayMax=t,null===(e=this.backoff)||void 0===e||e.setMax(t),this)}},{key:"timeout",value:function(t){return arguments.length?(this._timeout=t,this):this._timeout}},{key:"maybeReconnectOnOpen",value:function(){!this._reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()}},{key:"open",value:function(t){var e=this;if(~this._readyState.indexOf("open"))return this;this.engine=u(this.uri,this.opts);var n=this.engine,r=this;this._readyState="opening",this.skipReconnect=!1;var o=p.on(n,"open",(function(){r.onopen(),t&&t()})),i=p.on(n,"error",(function(n){r.cleanup(),r._readyState="closed",e.emitReserved("error",n),t?t(n):r.maybeReconnectOnOpen()}));if(!1!==this._timeout){var s=this._timeout;0===s&&o();var c=setTimeout((function(){o(),n.close(),n.emit("error",new Error("timeout"))}),s);this.opts.autoUnref&&c.unref(),this.subs.push((function(){clearTimeout(c)}))}return this.subs.push(o),this.subs.push(i),this}},{key:"connect",value:function(t){return this.open(t)}},{key:"onopen",value:function(){this.cleanup(),this._readyState="open",this.emitReserved("open");var t=this.engine;this.subs.push(p.on(t,"ping",this.onping.bind(this)),p.on(t,"data",this.ondata.bind(this)),p.on(t,"error",this.onerror.bind(this)),p.on(t,"close",this.onclose.bind(this)),p.on(this.decoder,"decoded",this.ondecoded.bind(this)))}},{key:"onping",value:function(){this.emitReserved("ping")}},{key:"ondata",value:function(t){this.decoder.add(t)}},{key:"ondecoded",value:function(t){this.emitReserved("packet",t)}},{key:"onerror",value:function(t){this.emitReserved("error",t)}},{key:"socket",value:function(t,e){var n=this.nsps[t];return n||(n=new f.Socket(this,t,e),this.nsps[t]=n),n}},{key:"_destroy",value:function(t){for(var e=0,n=Object.keys(this.nsps);e<n.length;e++){var r=n[e];if(this.nsps[r].active)return}this._close()}},{key:"_packet",value:function(t){for(var e=this.encoder.encode(t),n=0;n<e.length;n++)this.engine.write(e[n],t.options)}},{key:"cleanup",value:function(){this.subs.forEach((function(t){return t()})),this.subs.length=0,this.decoder.destroy()}},{key:"_close",value:function(){this.skipReconnect=!0,this._reconnecting=!1,"opening"===this._readyState&&this.cleanup(),this.backoff.reset(),this._readyState="closed",this.engine&&this.engine.close()}},{key:"disconnect",value:function(){return this._close()}},{key:"onclose",value:function(t){this.cleanup(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",t),this._reconnection&&!this.skipReconnect&&this.reconnect()}},{key:"reconnect",value:function(){var t=this;if(this._reconnecting||this.skipReconnect)return this;var e=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{var n=this.backoff.duration();this._reconnecting=!0;var r=setTimeout((function(){e.skipReconnect||(t.emitReserved("reconnect_attempt",e.backoff.attempts),e.skipReconnect||e.open((function(n){n?(e._reconnecting=!1,e.reconnect(),t.emitReserved("reconnect_error",n)):e.onreconnect()})))}),n);this.opts.autoUnref&&r.unref(),this.subs.push((function(){clearTimeout(r)}))}}},{key:"onreconnect",value:function(){var t=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",t)}}])&&o(e.prototype,n),c&&o(e,c),y}(n(17).StrictEventEmitter);e.Manager=y},function(t,e,n){var r=n(9),o=n(23),i=n(27),s=n(28);e.polling=function(t){var e=!1,n=!1,s=!1!==t.jsonp;if("undefined"!=typeof location){var c="https:"===location.protocol,a=location.port;a||(a=c?443:80),e=t.hostname!==location.hostname||a!==t.port,n=t.secure!==c}if(t.xdomain=e,t.xscheme=n,"open"in new r(t)&&!t.forceJSONP)return new o(t);if(!s)throw new Error("JSONP disabled");return new i(t)},e.websocket=s},function(t,e,n){var r=n(22),o=n(2);t.exports=function(t){var e=t.xdomain,n=t.xscheme,i=t.enablesXDR;try{if("undefined"!=typeof XMLHttpRequest&&(!e||r))return new XMLHttpRequest}catch(t){}try{if("undefined"!=typeof XDomainRequest&&!n&&i)return new XDomainRequest}catch(t){}if(!e)try{return new(o[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(t){}}},function(t,e,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function s(t,e){return(s=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function c(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=u(t);if(e){var o=u(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return a(this,n)}}function a(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function u(t){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}var f=n(3),l=n(4),p=n(0),h=n(12),y=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&s(t,e)}(u,t);var e,n,r,a=c(u);function u(){return o(this,u),a.apply(this,arguments)}return e=u,(n=[{key:"name",get:function(){return"polling"}},{key:"doOpen",value:function(){this.poll()}},{key:"pause",value:function(t){var e=this;this.readyState="pausing";var n=function(){e.readyState="paused",t()};if(this.polling||!this.writable){var r=0;this.polling&&(r++,this.once("pollComplete",(function(){--r||n()}))),this.writable||(r++,this.once("drain",(function(){--r||n()})))}else n()}},{key:"poll",value:function(){this.polling=!0,this.doPoll(),this.emit("poll")}},{key:"onData",value:function(t){var e=this;p.decodePayload(t,this.socket.binaryType).forEach((function(t){if("opening"===e.readyState&&"open"===t.type&&e.onOpen(),"close"===t.type)return e.onClose(),!1;e.onPacket(t)})),"closed"!==this.readyState&&(this.polling=!1,this.emit("pollComplete"),"open"===this.readyState&&this.poll())}},{key:"doClose",value:function(){var t=this,e=function(){t.write([{type:"close"}])};"open"===this.readyState?e():this.once("open",e)}},{key:"write",value:function(t){var e=this;this.writable=!1,p.encodePayload(t,(function(t){e.doWrite(t,(function(){e.writable=!0,e.emit("drain")}))}))}},{key:"uri",value:function(){var t=this.query||{},e=this.opts.secure?"https":"http",n="";return!1!==this.opts.timestampRequests&&(t[this.opts.timestampParam]=h()),this.supportsBinary||t.sid||(t.b64=1),t=l.encode(t),this.opts.port&&("https"===e&&443!==Number(this.opts.port)||"http"===e&&80!==Number(this.opts.port))&&(n=":"+this.opts.port),t.length&&(t="?"+t),e+"://"+(-1!==this.opts.hostname.indexOf(":")?"["+this.opts.hostname+"]":this.opts.hostname)+n+this.opts.path+t}}])&&i(e.prototype,n),r&&i(e,r),u}(f);t.exports=y},function(t,e){var n=Object.create(null);n.open="0",n.close="1",n.ping="2",n.pong="3",n.message="4",n.upgrade="5",n.noop="6";var r=Object.create(null);Object.keys(n).forEach((function(t){r[n[t]]=t}));t.exports={PACKET_TYPES:n,PACKET_TYPES_REVERSE:r,ERROR_PACKET:{type:"error",data:"parser error"}}},function(t,e,n){"use strict";var r,o="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),i={},s=0,c=0;function a(t){var e="";do{e=o[t%64]+e,t=Math.floor(t/64)}while(t>0);return e}function u(){var t=a(+new Date);return t!==r?(s=0,r=t):t+"."+a(s++)}for(;c<64;c++)i[o[c]]=c;u.encode=a,u.decode=function(t){var e=0;for(c=0;c<t.length;c++)e=64*e+i[t.charAt(c)];return e},t.exports=u},function(t,e){t.exports.pick=function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r<e;r++)n[r-1]=arguments[r];return n.reduce((function(e,n){return t.hasOwnProperty(n)&&(e[n]=t[n]),e}),{})}},function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return i(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return i(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,o=function(){};return{s:o,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,c=!0,a=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return c=t.done,t},e:function(t){a=!0,s=t},f:function(){try{c||null==n.return||n.return()}finally{if(a)throw s}}}}function i(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function s(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function c(t,e,n){return(c="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,n){var r=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=l(t)););return t}(t,e);if(r){var o=Object.getOwnPropertyDescriptor(r,e);return o.get?o.get.call(n):o.value}})(t,e,n||t)}function a(t,e){return(a=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function u(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=l(t);if(e){var o=l(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return f(this,n)}}function f(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function l(t){return(l=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.Socket=void 0;var p=n(5),h=n(16),y=n(17),d=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1}),v=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&a(t,e)}(f,t);var e,n,r,i=u(f);function f(t,e,n){var r;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,f),(r=i.call(this)).receiveBuffer=[],r.sendBuffer=[],r.ids=0,r.acks={},r.flags={},r.io=t,r.nsp=e,r.ids=0,r.acks={},r.receiveBuffer=[],r.sendBuffer=[],r.connected=!1,r.disconnected=!0,r.flags={},n&&n.auth&&(r.auth=n.auth),r.io._autoConnect&&r.open(),r}return e=f,(n=[{key:"subEvents",value:function(){if(!this.subs){var t=this.io;this.subs=[h.on(t,"open",this.onopen.bind(this)),h.on(t,"packet",this.onpacket.bind(this)),h.on(t,"error",this.onerror.bind(this)),h.on(t,"close",this.onclose.bind(this))]}}},{key:"active",get:function(){return!!this.subs}},{key:"connect",value:function(){return this.connected||(this.subEvents(),this.io._reconnecting||this.io.open(),"open"===this.io._readyState&&this.onopen()),this}},{key:"open",value:function(){return this.connect()}},{key:"send",value:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return e.unshift("message"),this.emit.apply(this,e),this}},{key:"emit",value:function(t){if(d.hasOwnProperty(t))throw new Error('"'+t+'" is a reserved event name');for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r<e;r++)n[r-1]=arguments[r];n.unshift(t);var o={type:p.PacketType.EVENT,data:n,options:{}};o.options.compress=!1!==this.flags.compress,"function"==typeof n[n.length-1]&&(this.acks[this.ids]=n.pop(),o.id=this.ids++);var i=this.io.engine&&this.io.engine.transport&&this.io.engine.transport.writable,s=this.flags.volatile&&(!i||!this.connected);return s||(this.connected?this.packet(o):this.sendBuffer.push(o)),this.flags={},this}},{key:"packet",value:function(t){t.nsp=this.nsp,this.io._packet(t)}},{key:"onopen",value:function(){var t=this;"function"==typeof this.auth?this.auth((function(e){t.packet({type:p.PacketType.CONNECT,data:e})})):this.packet({type:p.PacketType.CONNECT,data:this.auth})}},{key:"onerror",value:function(t){this.connected||this.emitReserved("connect_error",t)}},{key:"onclose",value:function(t){this.connected=!1,this.disconnected=!0,delete this.id,this.emitReserved("disconnect",t)}},{key:"onpacket",value:function(t){if(t.nsp===this.nsp)switch(t.type){case p.PacketType.CONNECT:if(t.data&&t.data.sid){var e=t.data.sid;this.onconnect(e)}else this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case p.PacketType.EVENT:case p.PacketType.BINARY_EVENT:this.onevent(t);break;case p.PacketType.ACK:case p.PacketType.BINARY_ACK:this.onack(t);break;case p.PacketType.DISCONNECT:this.ondisconnect();break;case p.PacketType.CONNECT_ERROR:var n=new Error(t.data.message);n.data=t.data.data,this.emitReserved("connect_error",n)}}},{key:"onevent",value:function(t){var e=t.data||[];null!=t.id&&e.push(this.ack(t.id)),this.connected?this.emitEvent(e):this.receiveBuffer.push(Object.freeze(e))}},{key:"emitEvent",value:function(t){if(this._anyListeners&&this._anyListeners.length){var e,n=o(this._anyListeners.slice());try{for(n.s();!(e=n.n()).done;)e.value.apply(this,t)}catch(t){n.e(t)}finally{n.f()}}c(l(f.prototype),"emit",this).apply(this,t)}},{key:"ack",value:function(t){var e=this,n=!1;return function(){if(!n){n=!0;for(var r=arguments.length,o=new Array(r),i=0;i<r;i++)o[i]=arguments[i];e.packet({type:p.PacketType.ACK,id:t,data:o})}}}},{key:"onack",value:function(t){var e=this.acks[t.id];"function"==typeof e&&(e.apply(this,t.data),delete this.acks[t.id])}},{key:"onconnect",value:function(t){this.id=t,this.connected=!0,this.disconnected=!1,this.emitBuffered(),this.emitReserved("connect")}},{key:"emitBuffered",value:function(){var t=this;this.receiveBuffer.forEach((function(e){return t.emitEvent(e)})),this.receiveBuffer=[],this.sendBuffer.forEach((function(e){return t.packet(e)})),this.sendBuffer=[]}},{key:"ondisconnect",value:function(){this.destroy(),this.onclose("io server disconnect")}},{key:"destroy",value:function(){this.subs&&(this.subs.forEach((function(t){return t()})),this.subs=void 0),this.io._destroy(this)}},{key:"disconnect",value:function(){return this.connected&&this.packet({type:p.PacketType.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}},{key:"close",value:function(){return this.disconnect()}},{key:"compress",value:function(t){return this.flags.compress=t,this}},{key:"volatile",get:function(){return this.flags.volatile=!0,this}},{key:"onAny",value:function(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(t),this}},{key:"prependAny",value:function(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(t),this}},{key:"offAny",value:function(t){if(!this._anyListeners)return this;if(t){for(var e=this._anyListeners,n=0;n<e.length;n++)if(t===e[n])return e.splice(n,1),this}else this._anyListeners=[];return this}},{key:"listenersAny",value:function(){return this._anyListeners||[]}}])&&s(e.prototype,n),r&&s(e,r),f}(y.StrictEventEmitter);e.Socket=v},function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.hasBinary=e.isBinary=void 0;var o="function"==typeof ArrayBuffer,i=Object.prototype.toString,s="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===i.call(Blob),c="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===i.call(File);function a(t){return o&&(t instanceof ArrayBuffer||function(t){return"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(t):t.buffer instanceof ArrayBuffer}(t))||s&&t instanceof Blob||c&&t instanceof File}e.isBinary=a,e.hasBinary=function t(e,n){if(!e||"object"!==r(e))return!1;if(Array.isArray(e)){for(var o=0,i=e.length;o<i;o++)if(t(e[o]))return!0;return!1}if(a(e))return!0;if(e.toJSON&&"function"==typeof e.toJSON&&1===arguments.length)return t(e.toJSON(),!0);for(var s in e)if(Object.prototype.hasOwnProperty.call(e,s)&&t(e[s]))return!0;return!1}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.on=void 0,e.on=function(t,e,n){return t.on(e,n),function(){t.off(e,n)}}},function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function s(t,e,n){return(s="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,n){var r=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=f(t)););return t}(t,e);if(r){var o=Object.getOwnPropertyDescriptor(r,e);return o.get?o.get.call(n):o.value}})(t,e,n||t)}function c(t,e){return(c=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function a(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=f(t);if(e){var o=f(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return u(this,n)}}function u(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function f(t){return(f=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.StrictEventEmitter=void 0;var l=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&c(t,e)}(l,t);var e,n,r,u=a(l);function l(){return o(this,l),u.apply(this,arguments)}return e=l,(n=[{key:"on",value:function(t,e){return s(f(l.prototype),"on",this).call(this,t,e),this}},{key:"once",value:function(t,e){return s(f(l.prototype),"once",this).call(this,t,e),this}},{key:"emit",value:function(t){for(var e,n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return(e=s(f(l.prototype),"emit",this)).call.apply(e,[this,t].concat(r)),this}},{key:"emitReserved",value:function(t){for(var e,n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return(e=s(f(l.prototype),"emit",this)).call.apply(e,[this,t].concat(r)),this}},{key:"listeners",value:function(t){return s(f(l.prototype),"listeners",this).call(this,t)}}])&&i(e.prototype,n),r&&i(e,r),l}(n(1));e.StrictEventEmitter=l},function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.io=e.Socket=e.Manager=e.protocol=void 0;var o=n(19),i=n(7);t.exports=e=c;var s=e.managers={};function c(t,e){"object"===r(t)&&(e=t,t=void 0),e=e||{};var n,c=o.url(t,e.path||"/socket.io"),a=c.source,u=c.id,f=c.path,l=s[u]&&f in s[u].nsps;return e.forceNew||e["force new connection"]||!1===e.multiplex||l?n=new i.Manager(a,e):(s[u]||(s[u]=new i.Manager(a,e)),n=s[u]),c.query&&!e.query&&(e.query=c.queryKey),n.socket(c.path,e)}e.io=c;var a=n(5);Object.defineProperty(e,"protocol",{enumerable:!0,get:function(){return a.protocol}}),e.connect=c;var u=n(7);Object.defineProperty(e,"Manager",{enumerable:!0,get:function(){return u.Manager}});var f=n(14);Object.defineProperty(e,"Socket",{enumerable:!0,get:function(){return f.Socket}}),e.default=c},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.url=void 0;var r=n(6);e.url=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,o=t;n=n||"undefined"!=typeof location&&location,null==t&&(t=n.protocol+"//"+n.host),"string"==typeof t&&("/"===t.charAt(0)&&(t="/"===t.charAt(1)?n.protocol+t:n.host+t),/^(https?|wss?):\/\//.test(t)||(t=void 0!==n?n.protocol+"//"+t:"https://"+t),o=r(t)),o.port||(/^(http|ws)$/.test(o.protocol)?o.port="80":/^(http|ws)s$/.test(o.protocol)&&(o.port="443")),o.path=o.path||"/";var i=-1!==o.host.indexOf(":"),s=i?"["+o.host+"]":o.host;return o.id=o.protocol+"://"+s+":"+o.port+e,o.href=o.protocol+"://"+s+(n&&n.port===o.port?"":":"+o.port),o}},function(t,e,n){var r=n(21);t.exports=function(t,e){return new r(t,e)},t.exports.Socket=r,t.exports.protocol=r.protocol,t.exports.Transport=n(3),t.exports.transports=n(8),t.exports.parser=n(0)},function(t,e,n){function r(){return(r=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t}).apply(this,arguments)}function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function c(t,e){return(c=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function a(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=f(t);if(e){var o=f(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return u(this,n)}}function u(t,e){return!e||"object"!==o(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function f(t){return(f=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}var l=n(8),p=n(1),h=n(0),y=n(6),d=n(4),v=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&c(t,e)}(p,t);var e,n,u,f=a(p);function p(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return i(this,p),e=f.call(this),t&&"object"===o(t)&&(n=t,t=null),t?(t=y(t),n.hostname=t.host,n.secure="https"===t.protocol||"wss"===t.protocol,n.port=t.port,t.query&&(n.query=t.query)):n.host&&(n.hostname=y(n.host).host),e.secure=null!=n.secure?n.secure:"undefined"!=typeof location&&"https:"===location.protocol,n.hostname&&!n.port&&(n.port=e.secure?"443":"80"),e.hostname=n.hostname||("undefined"!=typeof location?location.hostname:"localhost"),e.port=n.port||("undefined"!=typeof location&&location.port?location.port:e.secure?443:80),e.transports=n.transports||["polling","websocket"],e.readyState="",e.writeBuffer=[],e.prevBufferLen=0,e.opts=r({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,jsonp:!0,timestampParam:"t",rememberUpgrade:!1,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!0},n),e.opts.path=e.opts.path.replace(/\/$/,"")+"/","string"==typeof e.opts.query&&(e.opts.query=d.decode(e.opts.query)),e.id=null,e.upgrades=null,e.pingInterval=null,e.pingTimeout=null,e.pingTimeoutTimer=null,"function"==typeof addEventListener&&(e.opts.closeOnBeforeunload&&addEventListener("beforeunload",(function(){e.transport&&(e.transport.removeAllListeners(),e.transport.close())}),!1),"localhost"!==e.hostname&&(e.offlineEventListener=function(){e.onClose("transport close")},addEventListener("offline",e.offlineEventListener,!1))),e.open(),e}return e=p,(n=[{key:"createTransport",value:function(t){var e=function(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}(this.opts.query);e.EIO=h.protocol,e.transport=t,this.id&&(e.sid=this.id);var n=r({},this.opts.transportOptions[t],this.opts,{query:e,socket:this,hostname:this.hostname,secure:this.secure,port:this.port});return new l[t](n)}},{key:"open",value:function(){var t,e=this;if(this.opts.rememberUpgrade&&p.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket"))t="websocket";else{if(0===this.transports.length)return void setTimeout((function(){e.emit("error","No transports available")}),0);t=this.transports[0]}this.readyState="opening";try{t=this.createTransport(t)}catch(t){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)}},{key:"setTransport",value:function(t){var e=this;this.transport&&this.transport.removeAllListeners(),this.transport=t,t.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",(function(){e.onClose("transport close")}))}},{key:"probe",value:function(t){var e=this,n=this.createTransport(t,{probe:1}),r=!1;p.priorWebsocketSuccess=!1;var o=function(){r||(n.send([{type:"ping",data:"probe"}]),n.once("packet",(function(t){if(!r)if("pong"===t.type&&"probe"===t.data){if(e.upgrading=!0,e.emit("upgrading",n),!n)return;p.priorWebsocketSuccess="websocket"===n.name,e.transport.pause((function(){r||"closed"!==e.readyState&&(f(),e.setTransport(n),n.send([{type:"upgrade"}]),e.emit("upgrade",n),n=null,e.upgrading=!1,e.flush())}))}else{var o=new Error("probe error");o.transport=n.name,e.emit("upgradeError",o)}})))};function i(){r||(r=!0,f(),n.close(),n=null)}var s=function(t){var r=new Error("probe error: "+t);r.transport=n.name,i(),e.emit("upgradeError",r)};function c(){s("transport closed")}function a(){s("socket closed")}function u(t){n&&t.name!==n.name&&i()}var f=function(){n.removeListener("open",o),n.removeListener("error",s),n.removeListener("close",c),e.removeListener("close",a),e.removeListener("upgrading",u)};n.once("open",o),n.once("error",s),n.once("close",c),this.once("close",a),this.once("upgrading",u),n.open()}},{key:"onOpen",value:function(){if(this.readyState="open",p.priorWebsocketSuccess="websocket"===this.transport.name,this.emit("open"),this.flush(),"open"===this.readyState&&this.opts.upgrade&&this.transport.pause)for(var t=0,e=this.upgrades.length;t<e;t++)this.probe(this.upgrades[t])}},{key:"onPacket",value:function(t){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState)switch(this.emit("packet",t),this.emit("heartbeat"),t.type){case"open":this.onHandshake(JSON.parse(t.data));break;case"ping":this.resetPingTimeout(),this.sendPacket("pong"),this.emit("ping"),this.emit("pong");break;case"error":var e=new Error("server error");e.code=t.data,this.onError(e);break;case"message":this.emit("data",t.data),this.emit("message",t.data)}}},{key:"onHandshake",value:function(t){this.emit("handshake",t),this.id=t.sid,this.transport.query.sid=t.sid,this.upgrades=this.filterUpgrades(t.upgrades),this.pingInterval=t.pingInterval,this.pingTimeout=t.pingTimeout,this.onOpen(),"closed"!==this.readyState&&this.resetPingTimeout()}},{key:"resetPingTimeout",value:function(){var t=this;clearTimeout(this.pingTimeoutTimer),this.pingTimeoutTimer=setTimeout((function(){t.onClose("ping timeout")}),this.pingInterval+this.pingTimeout),this.opts.autoUnref&&this.pingTimeoutTimer.unref()}},{key:"onDrain",value:function(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,0===this.writeBuffer.length?this.emit("drain"):this.flush()}},{key:"flush",value:function(){"closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length&&(this.transport.send(this.writeBuffer),this.prevBufferLen=this.writeBuffer.length,this.emit("flush"))}},{key:"write",value:function(t,e,n){return this.sendPacket("message",t,e,n),this}},{key:"send",value:function(t,e,n){return this.sendPacket("message",t,e,n),this}},{key:"sendPacket",value:function(t,e,n,r){if("function"==typeof e&&(r=e,e=void 0),"function"==typeof n&&(r=n,n=null),"closing"!==this.readyState&&"closed"!==this.readyState){(n=n||{}).compress=!1!==n.compress;var o={type:t,data:e,options:n};this.emit("packetCreate",o),this.writeBuffer.push(o),r&&this.once("flush",r),this.flush()}}},{key:"close",value:function(){var t=this,e=function(){t.onClose("forced close"),t.transport.close()},n=function n(){t.removeListener("upgrade",n),t.removeListener("upgradeError",n),e()},r=function(){t.once("upgrade",n),t.once("upgradeError",n)};return"opening"!==this.readyState&&"open"!==this.readyState||(this.readyState="closing",this.writeBuffer.length?this.once("drain",(function(){t.upgrading?r():e()})):this.upgrading?r():e()),this}},{key:"onError",value:function(t){p.priorWebsocketSuccess=!1,this.emit("error",t),this.onClose("transport error",t)}},{key:"onClose",value:function(t,e){"opening"!==this.readyState&&"open"!==this.readyState&&"closing"!==this.readyState||(clearTimeout(this.pingIntervalTimer),clearTimeout(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),"function"==typeof removeEventListener&&removeEventListener("offline",this.offlineEventListener,!1),this.readyState="closed",this.id=null,this.emit("close",t,e),this.writeBuffer=[],this.prevBufferLen=0)}},{key:"filterUpgrades",value:function(t){for(var e=[],n=0,r=t.length;n<r;n++)~this.transports.indexOf(t[n])&&e.push(t[n]);return e}}])&&s(e.prototype,n),u&&s(e,u),p}(p);v.priorWebsocketSuccess=!1,v.protocol=h.protocol,t.exports=v},function(t,e){try{t.exports="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(e){t.exports=!1}},function(t,e,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(){return(o=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t}).apply(this,arguments)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function c(t,e,n){return e&&s(t.prototype,e),n&&s(t,n),t}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&u(t,e)}function u(t,e){return(u=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function f(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=p(t);if(e){var o=p(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return l(this,n)}}function l(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function p(t){return(p=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}var h=n(9),y=n(10),d=n(1),v=n(13).pick,b=n(2);function m(){}var g=null!=new h({xdomain:!1}).responseType,k=function(t){a(n,t);var e=f(n);function n(t){var r;if(i(this,n),r=e.call(this,t),"undefined"!=typeof location){var o="https:"===location.protocol,s=location.port;s||(s=o?443:80),r.xd="undefined"!=typeof location&&t.hostname!==location.hostname||s!==t.port,r.xs=t.secure!==o}var c=t&&t.forceBase64;return r.supportsBinary=g&&!c,r}return c(n,[{key:"request",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return o(t,{xd:this.xd,xs:this.xs},this.opts),new w(this.uri(),t)}},{key:"doWrite",value:function(t,e){var n=this,r=this.request({method:"POST",data:t});r.on("success",e),r.on("error",(function(t){n.onError("xhr post error",t)}))}},{key:"doPoll",value:function(){var t=this,e=this.request();e.on("data",this.onData.bind(this)),e.on("error",(function(e){t.onError("xhr poll error",e)})),this.pollXhr=e}}]),n}(y),w=function(t){a(n,t);var e=f(n);function n(t,r){var o;return i(this,n),(o=e.call(this)).opts=r,o.method=r.method||"GET",o.uri=t,o.async=!1!==r.async,o.data=void 0!==r.data?r.data:null,o.create(),o}return c(n,[{key:"create",value:function(){var t=this,e=v(this.opts,"agent","enablesXDR","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");e.xdomain=!!this.opts.xd,e.xscheme=!!this.opts.xs;var r=this.xhr=new h(e);try{r.open(this.method,this.uri,this.async);try{if(this.opts.extraHeaders)for(var o in r.setDisableHeaderCheck&&r.setDisableHeaderCheck(!0),this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(o)&&r.setRequestHeader(o,this.opts.extraHeaders[o])}catch(t){}if("POST"===this.method)try{r.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(t){}try{r.setRequestHeader("Accept","*/*")}catch(t){}"withCredentials"in r&&(r.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(r.timeout=this.opts.requestTimeout),this.hasXDR()?(r.onload=function(){t.onLoad()},r.onerror=function(){t.onError(r.responseText)}):r.onreadystatechange=function(){4===r.readyState&&(200===r.status||1223===r.status?t.onLoad():setTimeout((function(){t.onError("number"==typeof r.status?r.status:0)}),0))},r.send(this.data)}catch(e){return void setTimeout((function(){t.onError(e)}),0)}"undefined"!=typeof document&&(this.index=n.requestsCount++,n.requests[this.index]=this)}},{key:"onSuccess",value:function(){this.emit("success"),this.cleanup()}},{key:"onData",value:function(t){this.emit("data",t),this.onSuccess()}},{key:"onError",value:function(t){this.emit("error",t),this.cleanup(!0)}},{key:"cleanup",value:function(t){if(void 0!==this.xhr&&null!==this.xhr){if(this.hasXDR()?this.xhr.onload=this.xhr.onerror=m:this.xhr.onreadystatechange=m,t)try{this.xhr.abort()}catch(t){}"undefined"!=typeof document&&delete n.requests[this.index],this.xhr=null}}},{key:"onLoad",value:function(){var t=this.xhr.responseText;null!==t&&this.onData(t)}},{key:"hasXDR",value:function(){return"undefined"!=typeof XDomainRequest&&!this.xs&&this.enablesXDR}},{key:"abort",value:function(){this.cleanup()}}]),n}(d);if(w.requestsCount=0,w.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",O);else if("function"==typeof addEventListener){addEventListener("onpagehide"in b?"pagehide":"unload",O,!1)}function O(){for(var t in w.requests)w.requests.hasOwnProperty(t)&&w.requests[t].abort()}t.exports=k,t.exports.Request=w},function(t,e,n){var r=n(11).PACKET_TYPES,o="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===Object.prototype.toString.call(Blob),i="function"==typeof ArrayBuffer,s=function(t,e){var n=new FileReader;return n.onload=function(){var t=n.result.split(",")[1];e("b"+t)},n.readAsDataURL(t)};t.exports=function(t,e,n){var c,a=t.type,u=t.data;return o&&u instanceof Blob?e?n(u):s(u,n):i&&(u instanceof ArrayBuffer||(c=u,"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(c):c&&c.buffer instanceof ArrayBuffer))?e?n(u instanceof ArrayBuffer?u:u.buffer):s(new Blob([u]),n):n(r[a]+(u||""))}},function(t,e,n){var r,o=n(11),i=o.PACKET_TYPES_REVERSE,s=o.ERROR_PACKET;"function"==typeof ArrayBuffer&&(r=n(26));var c=function(t,e){if(r){var n=r.decode(t);return a(n,e)}return{base64:!0,data:t}},a=function(t,e){switch(e){case"blob":return t instanceof ArrayBuffer?new Blob([t]):t;case"arraybuffer":default:return t}};t.exports=function(t,e){if("string"!=typeof t)return{type:"message",data:a(t,e)};var n=t.charAt(0);return"b"===n?{type:"message",data:c(t.substring(1),e)}:i[n]?t.length>1?{type:i[n],data:t.substring(1)}:{type:i[n]}:s}},function(t,e){!function(t){"use strict";e.encode=function(e){var n,r=new Uint8Array(e),o=r.length,i="";for(n=0;n<o;n+=3)i+=t[r[n]>>2],i+=t[(3&r[n])<<4|r[n+1]>>4],i+=t[(15&r[n+1])<<2|r[n+2]>>6],i+=t[63&r[n+2]];return o%3==2?i=i.substring(0,i.length-1)+"=":o%3==1&&(i=i.substring(0,i.length-2)+"=="),i},e.decode=function(e){var n,r,o,i,s,c=.75*e.length,a=e.length,u=0;"="===e[e.length-1]&&(c--,"="===e[e.length-2]&&c--);var f=new ArrayBuffer(c),l=new Uint8Array(f);for(n=0;n<a;n+=4)r=t.indexOf(e[n]),o=t.indexOf(e[n+1]),i=t.indexOf(e[n+2]),s=t.indexOf(e[n+3]),l[u++]=r<<2|o>>4,l[u++]=(15&o)<<4|i>>2,l[u++]=(3&i)<<6|63&s;return f}}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")},function(t,e,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function i(t,e,n){return(i="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,n){var r=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=f(t)););return t}(t,e);if(r){var o=Object.getOwnPropertyDescriptor(r,e);return o.get?o.get.call(n):o.value}})(t,e,n||t)}function s(t,e){return(s=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function c(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=f(t);if(e){var o=f(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return a(this,n)}}function a(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?u(t):e}function u(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function f(t){return(f=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}var l,p=n(10),h=n(2),y=/\n/g,d=/\\n/g,v=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&s(t,e)}(p,t);var e,n,r,a=c(p);function p(t){var e;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,p),(e=a.call(this,t)).query=e.query||{},l||(l=h.___eio=h.___eio||[]),e.index=l.length,l.push(e.onData.bind(u(e))),e.query.j=e.index,e}return e=p,(n=[{key:"supportsBinary",get:function(){return!1}},{key:"doClose",value:function(){this.script&&(this.script.onerror=function(){},this.script.parentNode.removeChild(this.script),this.script=null),this.form&&(this.form.parentNode.removeChild(this.form),this.form=null,this.iframe=null),i(f(p.prototype),"doClose",this).call(this)}},{key:"doPoll",value:function(){var t=this,e=document.createElement("script");this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),e.async=!0,e.src=this.uri(),e.onerror=function(e){t.onError("jsonp poll error",e)};var n=document.getElementsByTagName("script")[0];n?n.parentNode.insertBefore(e,n):(document.head||document.body).appendChild(e),this.script=e,"undefined"!=typeof navigator&&/gecko/i.test(navigator.userAgent)&&setTimeout((function(){var t=document.createElement("iframe");document.body.appendChild(t),document.body.removeChild(t)}),100)}},{key:"doWrite",value:function(t,e){var n,r=this;if(!this.form){var o=document.createElement("form"),i=document.createElement("textarea"),s=this.iframeId="eio_iframe_"+this.index;o.className="socketio",o.style.position="absolute",o.style.top="-1000px",o.style.left="-1000px",o.target=s,o.method="POST",o.setAttribute("accept-charset","utf-8"),i.name="d",o.appendChild(i),document.body.appendChild(o),this.form=o,this.area=i}function c(){a(),e()}this.form.action=this.uri();var a=function(){if(r.iframe)try{r.form.removeChild(r.iframe)}catch(t){r.onError("jsonp polling iframe removal error",t)}try{var t='<iframe src="javascript:0" name="'+r.iframeId+'">';n=document.createElement(t)}catch(t){(n=document.createElement("iframe")).name=r.iframeId,n.src="javascript:0"}n.id=r.iframeId,r.form.appendChild(n),r.iframe=n};a(),t=t.replace(d,"\\\n"),this.area.value=t.replace(y,"\\n");try{this.form.submit()}catch(t){}this.iframe.attachEvent?this.iframe.onreadystatechange=function(){"complete"===r.iframe.readyState&&c()}:this.iframe.onload=c}}])&&o(e.prototype,n),r&&o(e,r),p}(p);t.exports=v},function(t,e,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function i(t,e){return(i=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function s(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=a(t);if(e){var o=a(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return c(this,n)}}function c(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function a(t){return(a=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}var u=n(3),f=n(0),l=n(4),p=n(12),h=n(13).pick,y=n(29),d=y.WebSocket,v=y.usingBrowserWebSocket,b=y.defaultBinaryType,m=y.nextTick,g="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),k=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&i(t,e)}(a,t);var e,n,r,c=s(a);function a(t){var e;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,a),(e=c.call(this,t)).supportsBinary=!t.forceBase64,e}return e=a,(n=[{key:"name",get:function(){return"websocket"}},{key:"doOpen",value:function(){if(this.check()){var t=this.uri(),e=this.opts.protocols,n=g?{}:h(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(n.headers=this.opts.extraHeaders);try{this.ws=v&&!g?e?new d(t,e):new d(t):new d(t,e,n)}catch(t){return this.emit("error",t)}this.ws.binaryType=this.socket.binaryType||b,this.addEventListeners()}}},{key:"addEventListeners",value:function(){var t=this;this.ws.onopen=function(){t.opts.autoUnref&&t.ws._socket.unref(),t.onOpen()},this.ws.onclose=this.onClose.bind(this),this.ws.onmessage=function(e){return t.onData(e.data)},this.ws.onerror=function(e){return t.onError("websocket error",e)}}},{key:"write",value:function(t){var e=this;this.writable=!1;for(var n=function(n){var r=t[n],o=n===t.length-1;f.encodePacket(r,e.supportsBinary,(function(t){var n={};v||(r.options&&(n.compress=r.options.compress),e.opts.perMessageDeflate&&("string"==typeof t?Buffer.byteLength(t):t.length)<e.opts.perMessageDeflate.threshold&&(n.compress=!1));try{v?e.ws.send(t):e.ws.send(t,n)}catch(t){}o&&m((function(){e.writable=!0,e.emit("drain")}))}))},r=0;r<t.length;r++)n(r)}},{key:"onClose",value:function(){u.prototype.onClose.call(this)}},{key:"doClose",value:function(){void 0!==this.ws&&(this.ws.close(),this.ws=null)}},{key:"uri",value:function(){var t=this.query||{},e=this.opts.secure?"wss":"ws",n="";return this.opts.port&&("wss"===e&&443!==Number(this.opts.port)||"ws"===e&&80!==Number(this.opts.port))&&(n=":"+this.opts.port),this.opts.timestampRequests&&(t[this.opts.timestampParam]=p()),this.supportsBinary||(t.b64=1),(t=l.encode(t)).length&&(t="?"+t),e+"://"+(-1!==this.opts.hostname.indexOf(":")?"["+this.opts.hostname+"]":this.opts.hostname)+n+this.opts.path+t}},{key:"check",value:function(){return!(!d||"__initialize"in d&&this.name===a.prototype.name)}}])&&o(e.prototype,n),r&&o(e,r),a}(u);t.exports=k},function(t,e,n){var r=n(2),o="function"==typeof Promise&&"function"==typeof Promise.resolve?function(t){return Promise.resolve().then(t)}:function(t){return setTimeout(t,0)};t.exports={WebSocket:r.WebSocket||r.MozWebSocket,usingBrowserWebSocket:!0,defaultBinaryType:"arraybuffer",nextTick:o}},function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.reconstructPacket=e.deconstructPacket=void 0;var o=n(15);e.deconstructPacket=function(t){var e=[],n=t.data,i=t;return i.data=function t(e,n){if(!e)return e;if(o.isBinary(e)){var i={_placeholder:!0,num:n.length};return n.push(e),i}if(Array.isArray(e)){for(var s=new Array(e.length),c=0;c<e.length;c++)s[c]=t(e[c],n);return s}if("object"===r(e)&&!(e instanceof Date)){var a={};for(var u in e)e.hasOwnProperty(u)&&(a[u]=t(e[u],n));return a}return e}(n,e),i.attachments=e.length,{packet:i,buffers:e}},e.reconstructPacket=function(t,e){return t.data=function t(e,n){if(!e)return e;if(e&&e._placeholder)return n[e.num];if(Array.isArray(e))for(var o=0;o<e.length;o++)e[o]=t(e[o],n);else if("object"===r(e))for(var i in e)e.hasOwnProperty(i)&&(e[i]=t(e[i],n));return e}(t.data,e),t.attachments=void 0,t}},function(t,e){function n(t){t=t||{},this.ms=t.min||100,this.max=t.max||1e4,this.factor=t.factor||2,this.jitter=t.jitter>0&&t.jitter<=1?t.jitter:0,this.attempts=0}t.exports=n,n.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),n=Math.floor(e*this.jitter*t);t=0==(1&Math.floor(10*e))?t-n:t+n}return 0|Math.min(t,this.max)},n.prototype.reset=function(){this.attempts=0},n.prototype.setMin=function(t){this.ms=t},n.prototype.setMax=function(t){this.max=t},n.prototype.setJitter=function(t){this.jitter=t}}])}));
+//# sourceMappingURL=socket.io.min.js.map \ No newline at end of file
diff --git a/client/lib/socket.io.min.js.map b/client/lib/socket.io.min.js.map
new file mode 100644
index 0000000..26123ed
--- /dev/null
+++ b/client/lib/socket.io.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack://io/webpack/universalModuleDefinition","webpack://io/webpack/bootstrap","webpack://io/./node_modules/engine.io-parser/lib/index.js","webpack://io/./node_modules/component-emitter/index.js","webpack://io/./node_modules/engine.io-client/lib/globalThis.browser.js","webpack://io/./node_modules/engine.io-client/lib/transport.js","webpack://io/./node_modules/parseqs/index.js","webpack://io/./node_modules/socket.io-parser/dist/index.js","webpack://io/./node_modules/parseuri/index.js","webpack://io/./build/manager.js","webpack://io/./node_modules/engine.io-client/lib/transports/index.js","webpack://io/./node_modules/engine.io-client/lib/xmlhttprequest.js","webpack://io/./node_modules/engine.io-client/lib/transports/polling.js","webpack://io/./node_modules/engine.io-parser/lib/commons.js","webpack://io/./node_modules/yeast/index.js","webpack://io/./node_modules/engine.io-client/lib/util.js","webpack://io/./build/socket.js","webpack://io/./node_modules/socket.io-parser/dist/is-binary.js","webpack://io/./build/on.js","webpack://io/./build/typed-events.js","webpack://io/./build/index.js","webpack://io/./build/url.js","webpack://io/./node_modules/engine.io-client/lib/index.js","webpack://io/./node_modules/engine.io-client/lib/socket.js","webpack://io/./node_modules/has-cors/index.js","webpack://io/./node_modules/engine.io-client/lib/transports/polling-xhr.js","webpack://io/./node_modules/engine.io-parser/lib/encodePacket.browser.js","webpack://io/./node_modules/engine.io-parser/lib/decodePacket.browser.js","webpack://io/./node_modules/engine.io-parser/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js","webpack://io/./node_modules/engine.io-client/lib/transports/polling-jsonp.js","webpack://io/./node_modules/engine.io-client/lib/transports/websocket.js","webpack://io/./node_modules/engine.io-client/lib/transports/websocket-constructor.browser.js","webpack://io/./node_modules/socket.io-parser/dist/binary.js","webpack://io/./node_modules/backo2/index.js"],"names":["root","factory","exports","module","define","amd","self","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","encodePacket","require","decodePacket","SEPARATOR","String","fromCharCode","protocol","encodePayload","packets","callback","length","encodedPackets","Array","count","forEach","packet","encodedPacket","join","decodePayload","encodedPayload","binaryType","split","decodedPacket","push","type","Emitter","obj","mixin","on","addEventListener","event","fn","this","_callbacks","once","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","cb","callbacks","splice","emit","args","len","slice","listeners","hasListeners","window","Function","parser","Transport","opts","query","readyState","socket","msg","desc","err","Error","description","doOpen","doClose","onClose","write","writable","data","onPacket","encode","str","encodeURIComponent","decode","qs","qry","pairs","pair","decodeURIComponent","Decoder","Encoder","PacketType","binary_1","is_binary_1","EVENT","ACK","hasBinary","encodeAsString","BINARY_EVENT","BINARY_ACK","encodeAsBinary","attachments","nsp","id","JSON","stringify","deconstruction","deconstructPacket","pack","buffers","unshift","decodeString","reconstructor","BinaryReconstructor","isBinary","base64","takeBinaryData","Number","charAt","undefined","start","buf","substring","next","payload","parse","e","tryParse","substr","isPayloadValid","finishedReconstruction","CONNECT","DISCONNECT","CONNECT_ERROR","isArray","reconPack","binData","reconstructPacket","re","parts","src","b","indexOf","replace","exec","uri","source","host","authority","ipv6uri","pathNames","path","names","queryKey","$0","$1","$2","Manager","eio","socket_1","on_1","Backoff","nsps","subs","reconnection","reconnectionAttempts","Infinity","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","min","max","jitter","timeout","_readyState","_parser","encoder","decoder","_autoConnect","autoConnect","open","v","_reconnection","_reconnectionAttempts","_a","_reconnectionDelay","setMin","_randomizationFactor","setJitter","_reconnectionDelayMax","setMax","_timeout","_reconnecting","attempts","reconnect","engine","skipReconnect","openSubDestroy","onopen","errorSub","cleanup","emitReserved","maybeReconnectOnOpen","timer","setTimeout","close","autoUnref","unref","clearTimeout","onping","ondata","onerror","onclose","ondecoded","add","Socket","keys","active","_close","options","subDestroy","destroy","reset","reason","delay","duration","onreconnect","attempt","StrictEventEmitter","XMLHttpRequest","XHR","JSONP","websocket","polling","xd","xs","jsonp","location","isSSL","port","hostname","secure","xdomain","xscheme","forceJSONP","hasCORS","globalThis","enablesXDR","XDomainRequest","concat","parseqs","yeast","Polling","poll","onPause","pause","total","doPoll","onOpen","doWrite","schema","timestampRequests","timestampParam","supportsBinary","sid","b64","PACKET_TYPES","PACKET_TYPES_REVERSE","ERROR_PACKET","prev","alphabet","map","seed","num","encoded","Math","floor","now","Date","decoded","pick","attr","reduce","acc","k","socket_io_parser_1","typed_events_1","RESERVED_EVENTS","freeze","connect","connect_error","disconnect","disconnecting","newListener","io","receiveBuffer","sendBuffer","ids","acks","flags","connected","disconnected","auth","onpacket","subEvents","ev","compress","pop","isTransportWritable","transport","discardPacket","_packet","onconnect","onevent","onack","ondisconnect","message","ack","emitEvent","_anyListeners","sent","emitBuffered","listener","withNativeArrayBuffer","ArrayBuffer","toString","withNativeBlob","Blob","withNativeFile","File","isView","buffer","toJSON","url_1","manager_1","lookup","cache","managers","parsed","url","sameNamespace","forceNew","multiplex","manager_2","parseuri","loc","test","ipv6","href","transports","writeBuffer","prevBufferLen","agent","withCredentials","upgrade","rememberUpgrade","rejectUnauthorized","perMessageDeflate","threshold","transportOptions","closeOnBeforeunload","upgrades","pingInterval","pingTimeout","pingTimeoutTimer","offlineEventListener","clone","EIO","priorWebsocketSuccess","createTransport","shift","setTransport","onDrain","onError","probe","failed","onTransportOpen","send","upgrading","flush","freezeTransport","error","onTransportClose","onupgrade","to","onHandshake","resetPingTimeout","sendPacket","code","filterUpgrades","cleanupAndClose","waitForUpgrade","pingIntervalTimer","filteredUpgrades","j","empty","hasXHR2","responseType","forceBase64","Request","req","request","method","onData","pollXhr","async","xhr","extraHeaders","setDisableHeaderCheck","setRequestHeader","requestTimeout","hasXDR","onload","onLoad","responseText","onreadystatechange","status","document","index","requestsCount","requests","onSuccess","fromError","abort","attachEvent","unloadHandler","encodeBlobAsBase64","fileReader","FileReader","content","result","readAsDataURL","base64decoder","decodeBase64Packet","mapBinary","chars","arraybuffer","bytes","Uint8Array","encoded1","encoded2","encoded3","encoded4","bufferLength","rNewline","rEscapedNewline","JSONPPolling","___eio","script","parentNode","removeChild","form","iframe","createElement","insertAt","getElementsByTagName","insertBefore","head","body","appendChild","navigator","userAgent","area","iframeId","className","style","position","top","left","target","setAttribute","complete","initIframe","action","html","submit","WebSocket","usingBrowserWebSocket","defaultBinaryType","nextTick","isReactNative","product","toLowerCase","WS","check","protocols","headers","ws","addEventListeners","_socket","onmessage","lastPacket","Buffer","byteLength","Promise","resolve","then","MozWebSocket","packetData","_deconstructPacket","placeholder","_placeholder","newData","_reconstructPacket","ms","factor","pow","rand","random","deviation"],"mappings":"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","file":"socket.io.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(self, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 18);\n","const encodePacket = require(\"./encodePacket\");\nconst decodePacket = require(\"./decodePacket\");\n\nconst SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text\n\nconst encodePayload = (packets, callback) => {\n // some packets may be added to the array while encoding, so the initial length must be saved\n const length = packets.length;\n const encodedPackets = new Array(length);\n let count = 0;\n\n packets.forEach((packet, i) => {\n // force base64 encoding for binary packets\n encodePacket(packet, false, encodedPacket => {\n encodedPackets[i] = encodedPacket;\n if (++count === length) {\n callback(encodedPackets.join(SEPARATOR));\n }\n });\n });\n};\n\nconst decodePayload = (encodedPayload, binaryType) => {\n const encodedPackets = encodedPayload.split(SEPARATOR);\n const packets = [];\n for (let i = 0; i < encodedPackets.length; i++) {\n const decodedPacket = decodePacket(encodedPackets[i], binaryType);\n packets.push(decodedPacket);\n if (decodedPacket.type === \"error\") {\n break;\n }\n }\n return packets;\n};\n\nmodule.exports = {\n protocol: 4,\n encodePacket,\n encodePayload,\n decodePacket,\n decodePayload\n};\n","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n for (var key in Emitter.prototype) {\r\n obj[key] = Emitter.prototype[key];\r\n }\r\n return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n .push(fn);\r\n return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n function on() {\r\n this.off(event, on);\r\n fn.apply(this, arguments);\r\n }\r\n\r\n on.fn = fn;\r\n this.on(event, on);\r\n return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n\r\n // all\r\n if (0 == arguments.length) {\r\n this._callbacks = {};\r\n return this;\r\n }\r\n\r\n // specific event\r\n var callbacks = this._callbacks['$' + event];\r\n if (!callbacks) return this;\r\n\r\n // remove all handlers\r\n if (1 == arguments.length) {\r\n delete this._callbacks['$' + event];\r\n return this;\r\n }\r\n\r\n // remove specific handler\r\n var cb;\r\n for (var i = 0; i < callbacks.length; i++) {\r\n cb = callbacks[i];\r\n if (cb === fn || cb.fn === fn) {\r\n callbacks.splice(i, 1);\r\n break;\r\n }\r\n }\r\n\r\n // Remove event specific arrays for event types that no\r\n // one is subscribed for to avoid memory leak.\r\n if (callbacks.length === 0) {\r\n delete this._callbacks['$' + event];\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n this._callbacks = this._callbacks || {};\r\n\r\n var args = new Array(arguments.length - 1)\r\n , callbacks = this._callbacks['$' + event];\r\n\r\n for (var i = 1; i < arguments.length; i++) {\r\n args[i - 1] = arguments[i];\r\n }\r\n\r\n if (callbacks) {\r\n callbacks = callbacks.slice(0);\r\n for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n callbacks[i].apply(this, args);\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n this._callbacks = this._callbacks || {};\r\n return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n return !! this.listeners(event).length;\r\n};\r\n","module.exports = (() => {\n if (typeof self !== \"undefined\") {\n return self;\n } else if (typeof window !== \"undefined\") {\n return window;\n } else {\n return Function(\"return this\")();\n }\n})();\n","const parser = require(\"engine.io-parser\");\nconst Emitter = require(\"component-emitter\");\n\n\n\nclass Transport extends Emitter {\n /**\n * Transport abstract constructor.\n *\n * @param {Object} options.\n * @api private\n */\n constructor(opts) {\n super();\n\n this.opts = opts;\n this.query = opts.query;\n this.readyState = \"\";\n this.socket = opts.socket;\n }\n\n /**\n * Emits an error.\n *\n * @param {String} str\n * @return {Transport} for chaining\n * @api public\n */\n onError(msg, desc) {\n const err = new Error(msg);\n err.type = \"TransportError\";\n err.description = desc;\n this.emit(\"error\", err);\n return this;\n }\n\n /**\n * Opens the transport.\n *\n * @api public\n */\n open() {\n if (\"closed\" === this.readyState || \"\" === this.readyState) {\n this.readyState = \"opening\";\n this.doOpen();\n }\n\n return this;\n }\n\n /**\n * Closes the transport.\n *\n * @api private\n */\n close() {\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.doClose();\n this.onClose();\n }\n\n return this;\n }\n\n /**\n * Sends multiple packets.\n *\n * @param {Array} packets\n * @api private\n */\n send(packets) {\n if (\"open\" === this.readyState) {\n this.write(packets);\n } else {\n // this might happen if the transport was silently closed in the beforeunload event handler\n\n\n }\n }\n\n /**\n * Called upon open\n *\n * @api private\n */\n onOpen() {\n this.readyState = \"open\";\n this.writable = true;\n this.emit(\"open\");\n }\n\n /**\n * Called with data.\n *\n * @param {String} data\n * @api private\n */\n onData(data) {\n const packet = parser.decodePacket(data, this.socket.binaryType);\n this.onPacket(packet);\n }\n\n /**\n * Called with a decoded packet.\n */\n onPacket(packet) {\n this.emit(\"packet\", packet);\n }\n\n /**\n * Called upon close.\n *\n * @api private\n */\n onClose() {\n this.readyState = \"closed\";\n this.emit(\"close\");\n }\n}\n\nmodule.exports = Transport;\n","/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\n\nexports.encode = function (obj) {\n var str = '';\n\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n if (str.length) str += '&';\n str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n }\n }\n\n return str;\n};\n\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\n\nexports.decode = function(qs){\n var qry = {};\n var pairs = qs.split('&');\n for (var i = 0, l = pairs.length; i < l; i++) {\n var pair = pairs[i].split('=');\n qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n return qry;\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Decoder = exports.Encoder = exports.PacketType = exports.protocol = void 0;\nconst Emitter = require(\"component-emitter\");\nconst binary_1 = require(\"./binary\");\nconst is_binary_1 = require(\"./is-binary\");\n\n\n/**\n * Protocol version.\n *\n * @public\n */\nexports.protocol = 5;\nvar PacketType;\n(function (PacketType) {\n PacketType[PacketType[\"CONNECT\"] = 0] = \"CONNECT\";\n PacketType[PacketType[\"DISCONNECT\"] = 1] = \"DISCONNECT\";\n PacketType[PacketType[\"EVENT\"] = 2] = \"EVENT\";\n PacketType[PacketType[\"ACK\"] = 3] = \"ACK\";\n PacketType[PacketType[\"CONNECT_ERROR\"] = 4] = \"CONNECT_ERROR\";\n PacketType[PacketType[\"BINARY_EVENT\"] = 5] = \"BINARY_EVENT\";\n PacketType[PacketType[\"BINARY_ACK\"] = 6] = \"BINARY_ACK\";\n})(PacketType = exports.PacketType || (exports.PacketType = {}));\n/**\n * A socket.io Encoder instance\n */\nclass Encoder {\n /**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n */\n encode(obj) {\n\n\n if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) {\n if (is_binary_1.hasBinary(obj)) {\n obj.type =\n obj.type === PacketType.EVENT\n ? PacketType.BINARY_EVENT\n : PacketType.BINARY_ACK;\n return this.encodeAsBinary(obj);\n }\n }\n return [this.encodeAsString(obj)];\n }\n /**\n * Encode packet as string.\n */\n encodeAsString(obj) {\n // first is type\n let str = \"\" + obj.type;\n // attachments if we have them\n if (obj.type === PacketType.BINARY_EVENT ||\n obj.type === PacketType.BINARY_ACK) {\n str += obj.attachments + \"-\";\n }\n // if we have a namespace other than `/`\n // we append it followed by a comma `,`\n if (obj.nsp && \"/\" !== obj.nsp) {\n str += obj.nsp + \",\";\n }\n // immediately followed by the id\n if (null != obj.id) {\n str += obj.id;\n }\n // json data\n if (null != obj.data) {\n str += JSON.stringify(obj.data);\n }\n\n\n return str;\n }\n /**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n */\n encodeAsBinary(obj) {\n const deconstruction = binary_1.deconstructPacket(obj);\n const pack = this.encodeAsString(deconstruction.packet);\n const buffers = deconstruction.buffers;\n buffers.unshift(pack); // add packet info to beginning of data list\n return buffers; // write all the buffers\n }\n}\nexports.Encoder = Encoder;\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n */\nclass Decoder extends Emitter {\n constructor() {\n super();\n }\n /**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n */\n add(obj) {\n let packet;\n if (typeof obj === \"string\") {\n packet = this.decodeString(obj);\n if (packet.type === PacketType.BINARY_EVENT ||\n packet.type === PacketType.BINARY_ACK) {\n // binary packet's json\n this.reconstructor = new BinaryReconstructor(packet);\n // no attachments, labeled binary but no binary data to follow\n if (packet.attachments === 0) {\n super.emit(\"decoded\", packet);\n }\n }\n else {\n // non-binary full packet\n super.emit(\"decoded\", packet);\n }\n }\n else if (is_binary_1.isBinary(obj) || obj.base64) {\n // raw binary data\n if (!this.reconstructor) {\n throw new Error(\"got binary data when not reconstructing a packet\");\n }\n else {\n packet = this.reconstructor.takeBinaryData(obj);\n if (packet) {\n // received final buffer\n this.reconstructor = null;\n super.emit(\"decoded\", packet);\n }\n }\n }\n else {\n throw new Error(\"Unknown type: \" + obj);\n }\n }\n /**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n */\n decodeString(str) {\n let i = 0;\n // look up type\n const p = {\n type: Number(str.charAt(0)),\n };\n if (PacketType[p.type] === undefined) {\n throw new Error(\"unknown packet type \" + p.type);\n }\n // look up attachments if type binary\n if (p.type === PacketType.BINARY_EVENT ||\n p.type === PacketType.BINARY_ACK) {\n const start = i + 1;\n while (str.charAt(++i) !== \"-\" && i != str.length) { }\n const buf = str.substring(start, i);\n if (buf != Number(buf) || str.charAt(i) !== \"-\") {\n throw new Error(\"Illegal attachments\");\n }\n p.attachments = Number(buf);\n }\n // look up namespace (if any)\n if (\"/\" === str.charAt(i + 1)) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (\",\" === c)\n break;\n if (i === str.length)\n break;\n }\n p.nsp = str.substring(start, i);\n }\n else {\n p.nsp = \"/\";\n }\n // look up id\n const next = str.charAt(i + 1);\n if (\"\" !== next && Number(next) == next) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (null == c || Number(c) != c) {\n --i;\n break;\n }\n if (i === str.length)\n break;\n }\n p.id = Number(str.substring(start, i + 1));\n }\n // look up json data\n if (str.charAt(++i)) {\n const payload = tryParse(str.substr(i));\n if (Decoder.isPayloadValid(p.type, payload)) {\n p.data = payload;\n }\n else {\n throw new Error(\"invalid payload\");\n }\n }\n\n\n return p;\n }\n static isPayloadValid(type, payload) {\n switch (type) {\n case PacketType.CONNECT:\n return typeof payload === \"object\";\n case PacketType.DISCONNECT:\n return payload === undefined;\n case PacketType.CONNECT_ERROR:\n return typeof payload === \"string\" || typeof payload === \"object\";\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n return Array.isArray(payload) && payload.length > 0;\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n return Array.isArray(payload);\n }\n }\n /**\n * Deallocates a parser's resources\n */\n destroy() {\n if (this.reconstructor) {\n this.reconstructor.finishedReconstruction();\n }\n }\n}\nexports.Decoder = Decoder;\nfunction tryParse(str) {\n try {\n return JSON.parse(str);\n }\n catch (e) {\n return false;\n }\n}\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n */\nclass BinaryReconstructor {\n constructor(packet) {\n this.packet = packet;\n this.buffers = [];\n this.reconPack = packet;\n }\n /**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n * a reconstructed packet object if all buffers have been received.\n */\n takeBinaryData(binData) {\n this.buffers.push(binData);\n if (this.buffers.length === this.reconPack.attachments) {\n // done with buffer list\n const packet = binary_1.reconstructPacket(this.reconPack, this.buffers);\n this.finishedReconstruction();\n return packet;\n }\n return null;\n }\n /**\n * Cleans up binary packet reconstruction variables.\n */\n finishedReconstruction() {\n this.reconPack = null;\n this.buffers = [];\n }\n}\n","/**\n * Parses an URI\n *\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\n * @api private\n */\n\nvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\n\nvar parts = [\n 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\n\nmodule.exports = function parseuri(str) {\n var src = str,\n b = str.indexOf('['),\n e = str.indexOf(']');\n\n if (b != -1 && e != -1) {\n str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n }\n\n var m = re.exec(str || ''),\n uri = {},\n i = 14;\n\n while (i--) {\n uri[parts[i]] = m[i] || '';\n }\n\n if (b != -1 && e != -1) {\n uri.source = src;\n uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n uri.ipv6uri = true;\n }\n\n uri.pathNames = pathNames(uri, uri['path']);\n uri.queryKey = queryKey(uri, uri['query']);\n\n return uri;\n};\n\nfunction pathNames(obj, path) {\n var regx = /\\/{2,9}/g,\n names = path.replace(regx, \"/\").split(\"/\");\n\n if (path.substr(0, 1) == '/' || path.length === 0) {\n names.splice(0, 1);\n }\n if (path.substr(path.length - 1, 1) == '/') {\n names.splice(names.length - 1, 1);\n }\n\n return names;\n}\n\nfunction queryKey(uri, query) {\n var data = {};\n\n query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n if ($1) {\n data[$1] = $2;\n }\n });\n\n return data;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Manager = void 0;\nconst eio = require(\"engine.io-client\");\nconst socket_1 = require(\"./socket\");\nconst parser = require(\"socket.io-parser\");\nconst on_1 = require(\"./on\");\nconst Backoff = require(\"backo2\");\nconst typed_events_1 = require(\"./typed-events\");\n\n\nclass Manager extends typed_events_1.StrictEventEmitter {\n constructor(uri, opts) {\n super();\n this.nsps = {};\n this.subs = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n opts.path = opts.path || \"/socket.io\";\n this.opts = opts;\n this.reconnection(opts.reconnection !== false);\n this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n this.reconnectionDelay(opts.reconnectionDelay || 1000);\n this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n this.randomizationFactor(opts.randomizationFactor || 0.5);\n this.backoff = new Backoff({\n min: this.reconnectionDelay(),\n max: this.reconnectionDelayMax(),\n jitter: this.randomizationFactor(),\n });\n this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n this._readyState = \"closed\";\n this.uri = uri;\n const _parser = opts.parser || parser;\n this.encoder = new _parser.Encoder();\n this.decoder = new _parser.Decoder();\n this._autoConnect = opts.autoConnect !== false;\n if (this._autoConnect)\n this.open();\n }\n reconnection(v) {\n if (!arguments.length)\n return this._reconnection;\n this._reconnection = !!v;\n return this;\n }\n reconnectionAttempts(v) {\n if (v === undefined)\n return this._reconnectionAttempts;\n this._reconnectionAttempts = v;\n return this;\n }\n reconnectionDelay(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelay;\n this._reconnectionDelay = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v);\n return this;\n }\n randomizationFactor(v) {\n var _a;\n if (v === undefined)\n return this._randomizationFactor;\n this._randomizationFactor = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v);\n return this;\n }\n reconnectionDelayMax(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelayMax;\n this._reconnectionDelayMax = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v);\n return this;\n }\n timeout(v) {\n if (!arguments.length)\n return this._timeout;\n this._timeout = v;\n return this;\n }\n /**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @private\n */\n maybeReconnectOnOpen() {\n // Only try to reconnect if it's the first time we're connecting\n if (!this._reconnecting &&\n this._reconnection &&\n this.backoff.attempts === 0) {\n // keeps reconnection from firing twice for the same reconnection loop\n this.reconnect();\n }\n }\n /**\n * Sets the current transport `socket`.\n *\n * @param {Function} fn - optional, callback\n * @return self\n * @public\n */\n open(fn) {\n\n\n if (~this._readyState.indexOf(\"open\"))\n return this;\n\n\n this.engine = eio(this.uri, this.opts);\n const socket = this.engine;\n const self = this;\n this._readyState = \"opening\";\n this.skipReconnect = false;\n // emit `open`\n const openSubDestroy = on_1.on(socket, \"open\", function () {\n self.onopen();\n fn && fn();\n });\n // emit `error`\n const errorSub = on_1.on(socket, \"error\", (err) => {\n\n\n self.cleanup();\n self._readyState = \"closed\";\n this.emitReserved(\"error\", err);\n if (fn) {\n fn(err);\n }\n else {\n // Only do this if there is no fn to handle the error\n self.maybeReconnectOnOpen();\n }\n });\n if (false !== this._timeout) {\n const timeout = this._timeout;\n\n\n if (timeout === 0) {\n openSubDestroy(); // prevents a race condition with the 'open' event\n }\n // set timer\n const timer = setTimeout(() => {\n\n\n openSubDestroy();\n socket.close();\n socket.emit(\"error\", new Error(\"timeout\"));\n }, timeout);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(function subDestroy() {\n clearTimeout(timer);\n });\n }\n this.subs.push(openSubDestroy);\n this.subs.push(errorSub);\n return this;\n }\n /**\n * Alias for open()\n *\n * @return self\n * @public\n */\n connect(fn) {\n return this.open(fn);\n }\n /**\n * Called upon transport open.\n *\n * @private\n */\n onopen() {\n\n\n // clear old subs\n this.cleanup();\n // mark as open\n this._readyState = \"open\";\n this.emitReserved(\"open\");\n // add new subs\n const socket = this.engine;\n this.subs.push(on_1.on(socket, \"ping\", this.onping.bind(this)), on_1.on(socket, \"data\", this.ondata.bind(this)), on_1.on(socket, \"error\", this.onerror.bind(this)), on_1.on(socket, \"close\", this.onclose.bind(this)), on_1.on(this.decoder, \"decoded\", this.ondecoded.bind(this)));\n }\n /**\n * Called upon a ping.\n *\n * @private\n */\n onping() {\n this.emitReserved(\"ping\");\n }\n /**\n * Called with data.\n *\n * @private\n */\n ondata(data) {\n this.decoder.add(data);\n }\n /**\n * Called when parser fully decodes a packet.\n *\n * @private\n */\n ondecoded(packet) {\n this.emitReserved(\"packet\", packet);\n }\n /**\n * Called upon socket error.\n *\n * @private\n */\n onerror(err) {\n\n\n this.emitReserved(\"error\", err);\n }\n /**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @public\n */\n socket(nsp, opts) {\n let socket = this.nsps[nsp];\n if (!socket) {\n socket = new socket_1.Socket(this, nsp, opts);\n this.nsps[nsp] = socket;\n }\n return socket;\n }\n /**\n * Called upon a socket close.\n *\n * @param socket\n * @private\n */\n _destroy(socket) {\n const nsps = Object.keys(this.nsps);\n for (const nsp of nsps) {\n const socket = this.nsps[nsp];\n if (socket.active) {\n\n\n return;\n }\n }\n this._close();\n }\n /**\n * Writes a packet.\n *\n * @param packet\n * @private\n */\n _packet(packet) {\n\n\n const encodedPackets = this.encoder.encode(packet);\n for (let i = 0; i < encodedPackets.length; i++) {\n this.engine.write(encodedPackets[i], packet.options);\n }\n }\n /**\n * Clean up transport subscriptions and packet buffer.\n *\n * @private\n */\n cleanup() {\n\n\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs.length = 0;\n this.decoder.destroy();\n }\n /**\n * Close the current socket.\n *\n * @private\n */\n _close() {\n\n\n this.skipReconnect = true;\n this._reconnecting = false;\n if (\"opening\" === this._readyState) {\n // `onclose` will not fire because\n // an open event never happened\n this.cleanup();\n }\n this.backoff.reset();\n this._readyState = \"closed\";\n if (this.engine)\n this.engine.close();\n }\n /**\n * Alias for close()\n *\n * @private\n */\n disconnect() {\n return this._close();\n }\n /**\n * Called upon engine close.\n *\n * @private\n */\n onclose(reason) {\n\n\n this.cleanup();\n this.backoff.reset();\n this._readyState = \"closed\";\n this.emitReserved(\"close\", reason);\n if (this._reconnection && !this.skipReconnect) {\n this.reconnect();\n }\n }\n /**\n * Attempt a reconnection.\n *\n * @private\n */\n reconnect() {\n if (this._reconnecting || this.skipReconnect)\n return this;\n const self = this;\n if (this.backoff.attempts >= this._reconnectionAttempts) {\n\n\n this.backoff.reset();\n this.emitReserved(\"reconnect_failed\");\n this._reconnecting = false;\n }\n else {\n const delay = this.backoff.duration();\n\n\n this._reconnecting = true;\n const timer = setTimeout(() => {\n if (self.skipReconnect)\n return;\n\n\n this.emitReserved(\"reconnect_attempt\", self.backoff.attempts);\n // check again for the case socket closed in above events\n if (self.skipReconnect)\n return;\n self.open((err) => {\n if (err) {\n\n\n self._reconnecting = false;\n self.reconnect();\n this.emitReserved(\"reconnect_error\", err);\n }\n else {\n\n\n self.onreconnect();\n }\n });\n }, delay);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(function subDestroy() {\n clearTimeout(timer);\n });\n }\n }\n /**\n * Called upon successful reconnect.\n *\n * @private\n */\n onreconnect() {\n const attempt = this.backoff.attempts;\n this._reconnecting = false;\n this.backoff.reset();\n this.emitReserved(\"reconnect\", attempt);\n }\n}\nexports.Manager = Manager;\n","const XMLHttpRequest = require(\"../../contrib/xmlhttprequest-ssl/XMLHttpRequest\");\nconst XHR = require(\"./polling-xhr\");\nconst JSONP = require(\"./polling-jsonp\");\nconst websocket = require(\"./websocket\");\n\nexports.polling = polling;\nexports.websocket = websocket;\n\n/**\n * Polling transport polymorphic constructor.\n * Decides on xhr vs jsonp based on feature detection.\n *\n * @api private\n */\n\nfunction polling(opts) {\n let xhr;\n let xd = false;\n let xs = false;\n const jsonp = false !== opts.jsonp;\n\n if (typeof location !== \"undefined\") {\n const isSSL = \"https:\" === location.protocol;\n let port = location.port;\n\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? 443 : 80;\n }\n\n xd = opts.hostname !== location.hostname || port !== opts.port;\n xs = opts.secure !== isSSL;\n }\n\n opts.xdomain = xd;\n opts.xscheme = xs;\n xhr = new XMLHttpRequest(opts);\n\n if (\"open\" in xhr && !opts.forceJSONP) {\n return new XHR(opts);\n } else {\n if (!jsonp) throw new Error(\"JSONP disabled\");\n return new JSONP(opts);\n }\n}\n","// browser shim for xmlhttprequest module\n\nconst hasCORS = require(\"has-cors\");\nconst globalThis = require(\"./globalThis\");\n\nmodule.exports = function(opts) {\n const xdomain = opts.xdomain;\n\n // scheme must be same when usign XDomainRequest\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n const xscheme = opts.xscheme;\n\n // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.\n // https://github.com/Automattic/engine.io-client/pull/217\n const enablesXDR = opts.enablesXDR;\n\n // XMLHttpRequest can be disabled on IE\n try {\n if (\"undefined\" !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n return new XMLHttpRequest();\n }\n } catch (e) {}\n\n // Use XDomainRequest for IE8 if enablesXDR is true\n // because loading bar keeps flashing when using jsonp-polling\n // https://github.com/yujiosaka/socke.io-ie8-loading-example\n try {\n if (\"undefined\" !== typeof XDomainRequest && !xscheme && enablesXDR) {\n return new XDomainRequest();\n }\n } catch (e) {}\n\n if (!xdomain) {\n try {\n return new globalThis[[\"Active\"].concat(\"Object\").join(\"X\")](\n \"Microsoft.XMLHTTP\"\n );\n } catch (e) {}\n }\n};\n","const Transport = require(\"../transport\");\nconst parseqs = require(\"parseqs\");\nconst parser = require(\"engine.io-parser\");\nconst yeast = require(\"yeast\");\n\n\n\n\nclass Polling extends Transport {\n /**\n * Transport name.\n */\n get name() {\n return \"polling\";\n }\n\n /**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @api private\n */\n doOpen() {\n this.poll();\n }\n\n /**\n * Pauses polling.\n *\n * @param {Function} callback upon buffers are flushed and transport is paused\n * @api private\n */\n pause(onPause) {\n this.readyState = \"pausing\";\n\n const pause = () => {\n\n\n this.readyState = \"paused\";\n onPause();\n };\n\n if (this.polling || !this.writable) {\n let total = 0;\n\n if (this.polling) {\n\n\n total++;\n this.once(\"pollComplete\", function() {\n\n\n --total || pause();\n });\n }\n\n if (!this.writable) {\n\n\n total++;\n this.once(\"drain\", function() {\n\n\n --total || pause();\n });\n }\n } else {\n pause();\n }\n }\n\n /**\n * Starts polling cycle.\n *\n * @api public\n */\n poll() {\n\n\n this.polling = true;\n this.doPoll();\n this.emit(\"poll\");\n }\n\n /**\n * Overloads onData to detect payloads.\n *\n * @api private\n */\n onData(data) {\n\n\n const callback = packet => {\n // if its the first message we consider the transport open\n if (\"opening\" === this.readyState && packet.type === \"open\") {\n this.onOpen();\n }\n\n // if its a close packet, we close the ongoing requests\n if (\"close\" === packet.type) {\n this.onClose();\n return false;\n }\n\n // otherwise bypass onData and handle the message\n this.onPacket(packet);\n };\n\n // decode payload\n parser.decodePayload(data, this.socket.binaryType).forEach(callback);\n\n // if an event did not trigger closing\n if (\"closed\" !== this.readyState) {\n // if we got data we're not polling\n this.polling = false;\n this.emit(\"pollComplete\");\n\n if (\"open\" === this.readyState) {\n this.poll();\n } else {\n\n\n }\n }\n }\n\n /**\n * For polling, send a close packet.\n *\n * @api private\n */\n doClose() {\n const close = () => {\n\n\n this.write([{ type: \"close\" }]);\n };\n\n if (\"open\" === this.readyState) {\n\n\n close();\n } else {\n // in case we're trying to close while\n // handshaking is in progress (GH-164)\n\n\n this.once(\"open\", close);\n }\n }\n\n /**\n * Writes a packets payload.\n *\n * @param {Array} data packets\n * @param {Function} drain callback\n * @api private\n */\n write(packets) {\n this.writable = false;\n\n parser.encodePayload(packets, data => {\n this.doWrite(data, () => {\n this.writable = true;\n this.emit(\"drain\");\n });\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 ? \"https\" : \"http\";\n let port = \"\";\n\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n\n query = parseqs.encode(query);\n\n // avoid port if default for schema\n if (\n this.opts.port &&\n ((\"https\" === schema && Number(this.opts.port) !== 443) ||\n (\"http\" === schema && Number(this.opts.port) !== 80))\n ) {\n port = \":\" + this.opts.port;\n }\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\nmodule.exports = Polling;\n","const PACKET_TYPES = Object.create(null); // no Map = no polyfill\nPACKET_TYPES[\"open\"] = \"0\";\nPACKET_TYPES[\"close\"] = \"1\";\nPACKET_TYPES[\"ping\"] = \"2\";\nPACKET_TYPES[\"pong\"] = \"3\";\nPACKET_TYPES[\"message\"] = \"4\";\nPACKET_TYPES[\"upgrade\"] = \"5\";\nPACKET_TYPES[\"noop\"] = \"6\";\n\nconst PACKET_TYPES_REVERSE = Object.create(null);\nObject.keys(PACKET_TYPES).forEach(key => {\n PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key;\n});\n\nconst ERROR_PACKET = { type: \"error\", data: \"parser error\" };\n\nmodule.exports = {\n PACKET_TYPES,\n PACKET_TYPES_REVERSE,\n ERROR_PACKET\n};\n","'use strict';\n\nvar alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')\n , length = 64\n , map = {}\n , seed = 0\n , i = 0\n , prev;\n\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nfunction encode(num) {\n var encoded = '';\n\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n\n return encoded;\n}\n\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nfunction decode(str) {\n var decoded = 0;\n\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n\n return decoded;\n}\n\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nfunction yeast() {\n var now = encode(+new Date());\n\n if (now !== prev) return seed = 0, prev = now;\n return now +'.'+ encode(seed++);\n}\n\n//\n// Map each character to its index.\n//\nfor (; i < length; i++) map[alphabet[i]] = i;\n\n//\n// Expose the `yeast`, `encode` and `decode` functions.\n//\nyeast.encode = encode;\nyeast.decode = decode;\nmodule.exports = yeast;\n","module.exports.pick = (obj, ...attr) => {\n return attr.reduce((acc, k) => {\n if (obj.hasOwnProperty(k)) {\n acc[k] = obj[k];\n }\n return acc;\n }, {});\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Socket = void 0;\nconst socket_io_parser_1 = require(\"socket.io-parser\");\nconst on_1 = require(\"./on\");\nconst typed_events_1 = require(\"./typed-events\");\n\n\n/**\n * Internal events.\n * These events can't be emitted by the user.\n */\nconst RESERVED_EVENTS = Object.freeze({\n connect: 1,\n connect_error: 1,\n disconnect: 1,\n disconnecting: 1,\n // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener\n newListener: 1,\n removeListener: 1,\n});\nclass Socket extends typed_events_1.StrictEventEmitter {\n /**\n * `Socket` constructor.\n *\n * @public\n */\n constructor(io, nsp, opts) {\n super();\n this.receiveBuffer = [];\n this.sendBuffer = [];\n this.ids = 0;\n this.acks = {};\n this.flags = {};\n this.io = io;\n this.nsp = nsp;\n this.ids = 0;\n this.acks = {};\n this.receiveBuffer = [];\n this.sendBuffer = [];\n this.connected = false;\n this.disconnected = true;\n this.flags = {};\n if (opts && opts.auth) {\n this.auth = opts.auth;\n }\n if (this.io._autoConnect)\n this.open();\n }\n /**\n * Subscribe to open, close and packet events\n *\n * @private\n */\n subEvents() {\n if (this.subs)\n return;\n const io = this.io;\n this.subs = [\n on_1.on(io, \"open\", this.onopen.bind(this)),\n on_1.on(io, \"packet\", this.onpacket.bind(this)),\n on_1.on(io, \"error\", this.onerror.bind(this)),\n on_1.on(io, \"close\", this.onclose.bind(this)),\n ];\n }\n /**\n * Whether the Socket will try to reconnect when its Manager connects or reconnects\n */\n get active() {\n return !!this.subs;\n }\n /**\n * \"Opens\" the socket.\n *\n * @public\n */\n connect() {\n if (this.connected)\n return this;\n this.subEvents();\n if (!this.io[\"_reconnecting\"])\n this.io.open(); // ensure open\n if (\"open\" === this.io._readyState)\n this.onopen();\n return this;\n }\n /**\n * Alias for connect()\n */\n open() {\n return this.connect();\n }\n /**\n * Sends a `message` event.\n *\n * @return self\n * @public\n */\n send(...args) {\n args.unshift(\"message\");\n this.emit.apply(this, args);\n return this;\n }\n /**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @return self\n * @public\n */\n emit(ev, ...args) {\n if (RESERVED_EVENTS.hasOwnProperty(ev)) {\n throw new Error('\"' + ev + '\" is a reserved event name');\n }\n args.unshift(ev);\n const packet = {\n type: socket_io_parser_1.PacketType.EVENT,\n data: args,\n };\n packet.options = {};\n packet.options.compress = this.flags.compress !== false;\n // event ack callback\n if (\"function\" === typeof args[args.length - 1]) {\n\n\n this.acks[this.ids] = args.pop();\n packet.id = this.ids++;\n }\n const isTransportWritable = this.io.engine &&\n this.io.engine.transport &&\n this.io.engine.transport.writable;\n const discardPacket = this.flags.volatile && (!isTransportWritable || !this.connected);\n if (discardPacket) {\n\n\n }\n else if (this.connected) {\n this.packet(packet);\n }\n else {\n this.sendBuffer.push(packet);\n }\n this.flags = {};\n return this;\n }\n /**\n * Sends a packet.\n *\n * @param packet\n * @private\n */\n packet(packet) {\n packet.nsp = this.nsp;\n this.io._packet(packet);\n }\n /**\n * Called upon engine `open`.\n *\n * @private\n */\n onopen() {\n\n\n if (typeof this.auth == \"function\") {\n this.auth((data) => {\n this.packet({ type: socket_io_parser_1.PacketType.CONNECT, data });\n });\n }\n else {\n this.packet({ type: socket_io_parser_1.PacketType.CONNECT, data: this.auth });\n }\n }\n /**\n * Called upon engine or manager `error`.\n *\n * @param err\n * @private\n */\n onerror(err) {\n if (!this.connected) {\n this.emitReserved(\"connect_error\", err);\n }\n }\n /**\n * Called upon engine `close`.\n *\n * @param reason\n * @private\n */\n onclose(reason) {\n\n\n this.connected = false;\n this.disconnected = true;\n delete this.id;\n this.emitReserved(\"disconnect\", reason);\n }\n /**\n * Called with socket packet.\n *\n * @param packet\n * @private\n */\n onpacket(packet) {\n const sameNamespace = packet.nsp === this.nsp;\n if (!sameNamespace)\n return;\n switch (packet.type) {\n case socket_io_parser_1.PacketType.CONNECT:\n if (packet.data && packet.data.sid) {\n const id = packet.data.sid;\n this.onconnect(id);\n }\n else {\n this.emitReserved(\"connect_error\", new Error(\"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)\"));\n }\n break;\n case socket_io_parser_1.PacketType.EVENT:\n this.onevent(packet);\n break;\n case socket_io_parser_1.PacketType.BINARY_EVENT:\n this.onevent(packet);\n break;\n case socket_io_parser_1.PacketType.ACK:\n this.onack(packet);\n break;\n case socket_io_parser_1.PacketType.BINARY_ACK:\n this.onack(packet);\n break;\n case socket_io_parser_1.PacketType.DISCONNECT:\n this.ondisconnect();\n break;\n case socket_io_parser_1.PacketType.CONNECT_ERROR:\n const err = new Error(packet.data.message);\n // @ts-ignore\n err.data = packet.data.data;\n this.emitReserved(\"connect_error\", err);\n break;\n }\n }\n /**\n * Called upon a server event.\n *\n * @param packet\n * @private\n */\n onevent(packet) {\n const args = packet.data || [];\n\n\n if (null != packet.id) {\n\n\n args.push(this.ack(packet.id));\n }\n if (this.connected) {\n this.emitEvent(args);\n }\n else {\n this.receiveBuffer.push(Object.freeze(args));\n }\n }\n emitEvent(args) {\n if (this._anyListeners && this._anyListeners.length) {\n const listeners = this._anyListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, args);\n }\n }\n super.emit.apply(this, args);\n }\n /**\n * Produces an ack callback to emit with an event.\n *\n * @private\n */\n ack(id) {\n const self = this;\n let sent = false;\n return function (...args) {\n // prevent double callbacks\n if (sent)\n return;\n sent = true;\n\n\n self.packet({\n type: socket_io_parser_1.PacketType.ACK,\n id: id,\n data: args,\n });\n };\n }\n /**\n * Called upon a server acknowlegement.\n *\n * @param packet\n * @private\n */\n onack(packet) {\n const ack = this.acks[packet.id];\n if (\"function\" === typeof ack) {\n\n\n ack.apply(this, packet.data);\n delete this.acks[packet.id];\n }\n else {\n\n\n }\n }\n /**\n * Called upon server connect.\n *\n * @private\n */\n onconnect(id) {\n\n\n this.id = id;\n this.connected = true;\n this.disconnected = false;\n this.emitBuffered();\n this.emitReserved(\"connect\");\n }\n /**\n * Emit buffered events (received and emitted).\n *\n * @private\n */\n emitBuffered() {\n this.receiveBuffer.forEach((args) => this.emitEvent(args));\n this.receiveBuffer = [];\n this.sendBuffer.forEach((packet) => this.packet(packet));\n this.sendBuffer = [];\n }\n /**\n * Called upon server disconnect.\n *\n * @private\n */\n ondisconnect() {\n\n\n this.destroy();\n this.onclose(\"io server disconnect\");\n }\n /**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @private\n */\n destroy() {\n if (this.subs) {\n // clean subscriptions to avoid reconnections\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs = undefined;\n }\n this.io[\"_destroy\"](this);\n }\n /**\n * Disconnects the socket manually.\n *\n * @return self\n * @public\n */\n disconnect() {\n if (this.connected) {\n\n\n this.packet({ type: socket_io_parser_1.PacketType.DISCONNECT });\n }\n // remove socket from pool\n this.destroy();\n if (this.connected) {\n // fire events\n this.onclose(\"io client disconnect\");\n }\n return this;\n }\n /**\n * Alias for disconnect()\n *\n * @return self\n * @public\n */\n close() {\n return this.disconnect();\n }\n /**\n * Sets the compress flag.\n *\n * @param compress - if `true`, compresses the sending data\n * @return self\n * @public\n */\n compress(compress) {\n this.flags.compress = compress;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not\n * ready to send messages.\n *\n * @returns self\n * @public\n */\n get volatile() {\n this.flags.volatile = true;\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * @param listener\n * @public\n */\n onAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * @param listener\n * @public\n */\n prependAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @param listener\n * @public\n */\n offAny(listener) {\n if (!this._anyListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n *\n * @public\n */\n listenersAny() {\n return this._anyListeners || [];\n }\n}\nexports.Socket = Socket;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hasBinary = exports.isBinary = void 0;\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst isView = (obj) => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj.buffer instanceof ArrayBuffer;\n};\nconst toString = Object.prototype.toString;\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeFile = typeof File === \"function\" ||\n (typeof File !== \"undefined\" &&\n toString.call(File) === \"[object FileConstructor]\");\n/**\n * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File.\n *\n * @private\n */\nfunction isBinary(obj) {\n return ((withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj))) ||\n (withNativeBlob && obj instanceof Blob) ||\n (withNativeFile && obj instanceof File));\n}\nexports.isBinary = isBinary;\nfunction hasBinary(obj, toJSON) {\n if (!obj || typeof obj !== \"object\") {\n return false;\n }\n if (Array.isArray(obj)) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (hasBinary(obj[i])) {\n return true;\n }\n }\n return false;\n }\n if (isBinary(obj)) {\n return true;\n }\n if (obj.toJSON &&\n typeof obj.toJSON === \"function\" &&\n arguments.length === 1) {\n return hasBinary(obj.toJSON(), true);\n }\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n return true;\n }\n }\n return false;\n}\nexports.hasBinary = hasBinary;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.on = void 0;\nfunction on(obj, ev, fn) {\n obj.on(ev, fn);\n return function subDestroy() {\n obj.off(ev, fn);\n };\n}\nexports.on = on;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StrictEventEmitter = void 0;\nconst Emitter = require(\"component-emitter\");\n/**\n * Strictly typed version of an `EventEmitter`. A `TypedEventEmitter` takes type\n * parameters for mappings of event names to event data types, and strictly\n * types method calls to the `EventEmitter` according to these event maps.\n *\n * @typeParam ListenEvents - `EventsMap` of user-defined events that can be\n * listened to with `on` or `once`\n * @typeParam EmitEvents - `EventsMap` of user-defined events that can be\n * emitted with `emit`\n * @typeParam ReservedEvents - `EventsMap` of reserved events, that can be\n * emitted by socket.io with `emitReserved`, and can be listened to with\n * `listen`.\n */\nclass StrictEventEmitter extends Emitter {\n /**\n * Adds the `listener` function as an event listener for `ev`.\n *\n * @param ev Name of the event\n * @param listener Callback function\n */\n on(ev, listener) {\n super.on(ev, listener);\n return this;\n }\n /**\n * Adds a one-time `listener` function as an event listener for `ev`.\n *\n * @param ev Name of the event\n * @param listener Callback function\n */\n once(ev, listener) {\n super.once(ev, listener);\n return this;\n }\n /**\n * Emits an event.\n *\n * @param ev Name of the event\n * @param args Values to send to listeners of this event\n */\n emit(ev, ...args) {\n super.emit(ev, ...args);\n return this;\n }\n /**\n * Emits a reserved event.\n *\n * This method is `protected`, so that only a class extending\n * `StrictEventEmitter` can emit its own reserved events.\n *\n * @param ev Reserved event name\n * @param args Arguments to emit along with the event\n */\n emitReserved(ev, ...args) {\n super.emit(ev, ...args);\n return this;\n }\n /**\n * Returns the listeners listening to an event.\n *\n * @param event Event name\n * @returns Array of listeners subscribed to `event`\n */\n listeners(event) {\n return super.listeners(event);\n }\n}\nexports.StrictEventEmitter = StrictEventEmitter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.io = exports.Socket = exports.Manager = exports.protocol = void 0;\nconst url_1 = require(\"./url\");\nconst manager_1 = require(\"./manager\");\n\n\n/**\n * Module exports.\n */\nmodule.exports = exports = lookup;\n/**\n * Managers cache.\n */\nconst cache = (exports.managers = {});\nfunction lookup(uri, opts) {\n if (typeof uri === \"object\") {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n const parsed = url_1.url(uri, opts.path || \"/socket.io\");\n const source = parsed.source;\n const id = parsed.id;\n const path = parsed.path;\n const sameNamespace = cache[id] && path in cache[id][\"nsps\"];\n const newConnection = opts.forceNew ||\n opts[\"force new connection\"] ||\n false === opts.multiplex ||\n sameNamespace;\n let io;\n if (newConnection) {\n\n\n io = new manager_1.Manager(source, opts);\n }\n else {\n if (!cache[id]) {\n\n\n cache[id] = new manager_1.Manager(source, opts);\n }\n io = cache[id];\n }\n if (parsed.query && !opts.query) {\n opts.query = parsed.queryKey;\n }\n return io.socket(parsed.path, opts);\n}\nexports.io = lookup;\n/**\n * Protocol version.\n *\n * @public\n */\nvar socket_io_parser_1 = require(\"socket.io-parser\");\nObject.defineProperty(exports, \"protocol\", { enumerable: true, get: function () { return socket_io_parser_1.protocol; } });\n/**\n * `connect`.\n *\n * @param {String} uri\n * @public\n */\nexports.connect = lookup;\n/**\n * Expose constructors for standalone build.\n *\n * @public\n */\nvar manager_2 = require(\"./manager\");\nObject.defineProperty(exports, \"Manager\", { enumerable: true, get: function () { return manager_2.Manager; } });\nvar socket_1 = require(\"./socket\");\nObject.defineProperty(exports, \"Socket\", { enumerable: true, get: function () { return socket_1.Socket; } });\nexports.default = lookup;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.url = void 0;\nconst parseuri = require(\"parseuri\");\n\n\n/**\n * URL parser.\n *\n * @param uri - url\n * @param path - the request path of the connection\n * @param loc - An object meant to mimic window.location.\n * Defaults to window.location.\n * @public\n */\nfunction url(uri, path = \"\", loc) {\n let obj = uri;\n // default to window.location\n loc = loc || (typeof location !== \"undefined\" && location);\n if (null == uri)\n uri = loc.protocol + \"//\" + loc.host;\n // relative path support\n if (typeof uri === \"string\") {\n if (\"/\" === uri.charAt(0)) {\n if (\"/\" === uri.charAt(1)) {\n uri = loc.protocol + uri;\n }\n else {\n uri = loc.host + uri;\n }\n }\n if (!/^(https?|wss?):\\/\\//.test(uri)) {\n\n\n if (\"undefined\" !== typeof loc) {\n uri = loc.protocol + \"//\" + uri;\n }\n else {\n uri = \"https://\" + uri;\n }\n }\n // parse\n\n\n obj = parseuri(uri);\n }\n // make sure we treat `localhost:80` and `localhost` equally\n if (!obj.port) {\n if (/^(http|ws)$/.test(obj.protocol)) {\n obj.port = \"80\";\n }\n else if (/^(http|ws)s$/.test(obj.protocol)) {\n obj.port = \"443\";\n }\n }\n obj.path = obj.path || \"/\";\n const ipv6 = obj.host.indexOf(\":\") !== -1;\n const host = ipv6 ? \"[\" + obj.host + \"]\" : obj.host;\n // define unique id\n obj.id = obj.protocol + \"://\" + host + \":\" + obj.port + path;\n // define href\n obj.href =\n obj.protocol +\n \"://\" +\n host +\n (loc && loc.port === obj.port ? \"\" : \":\" + obj.port);\n return obj;\n}\nexports.url = url;\n","const Socket = require(\"./socket\");\n\nmodule.exports = (uri, opts) => new Socket(uri, opts);\n\n/**\n * Expose deps for legacy compatibility\n * and standalone browser access.\n */\n\nmodule.exports.Socket = Socket;\nmodule.exports.protocol = Socket.protocol; // this is an int\nmodule.exports.Transport = require(\"./transport\");\nmodule.exports.transports = require(\"./transports/index\");\nmodule.exports.parser = require(\"engine.io-parser\");\n","const transports = require(\"./transports/index\");\nconst Emitter = require(\"component-emitter\");\n\n\nconst parser = require(\"engine.io-parser\");\nconst parseuri = require(\"parseuri\");\nconst parseqs = require(\"parseqs\");\n\nclass Socket extends Emitter {\n /**\n * Socket constructor.\n *\n * @param {String|Object} uri or options\n * @param {Object} options\n * @api public\n */\n constructor(uri, opts = {}) {\n super();\n\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n\n if (uri) {\n uri = parseuri(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query) opts.query = uri.query;\n } else if (opts.host) {\n opts.hostname = parseuri(opts.host).host;\n }\n\n this.secure =\n null != opts.secure\n ? opts.secure\n : typeof location !== \"undefined\" && \"https:\" === location.protocol;\n\n if (opts.hostname && !opts.port) {\n // if no port is specified manually, use the protocol default\n opts.port = this.secure ? \"443\" : \"80\";\n }\n\n this.hostname =\n opts.hostname ||\n (typeof location !== \"undefined\" ? location.hostname : \"localhost\");\n this.port =\n opts.port ||\n (typeof location !== \"undefined\" && location.port\n ? location.port\n : this.secure\n ? 443\n : 80);\n\n this.transports = opts.transports || [\"polling\", \"websocket\"];\n this.readyState = \"\";\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n\n this.opts = Object.assign(\n {\n path: \"/engine.io\",\n agent: false,\n withCredentials: false,\n upgrade: true,\n jsonp: true,\n timestampParam: \"t\",\n rememberUpgrade: false,\n rejectUnauthorized: true,\n perMessageDeflate: {\n threshold: 1024\n },\n transportOptions: {},\n closeOnBeforeunload: true\n },\n opts\n );\n\n this.opts.path = this.opts.path.replace(/\\/$/, \"\") + \"/\";\n\n if (typeof this.opts.query === \"string\") {\n this.opts.query = parseqs.decode(this.opts.query);\n }\n\n // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n\n // set on heartbeat\n this.pingTimeoutTimer = null;\n\n if (typeof addEventListener === \"function\") {\n if (this.opts.closeOnBeforeunload) {\n // Firefox closes the connection when the \"beforeunload\" event is emitted but not Chrome. This event listener\n // ensures every browser behaves the same (no \"disconnect\" event at the Socket.IO level when the page is\n // closed/reloaded)\n addEventListener(\n \"beforeunload\",\n () => {\n if (this.transport) {\n // silently close the transport\n this.transport.removeAllListeners();\n this.transport.close();\n }\n },\n false\n );\n }\n if (this.hostname !== \"localhost\") {\n this.offlineEventListener = () => {\n this.onClose(\"transport close\");\n };\n addEventListener(\"offline\", this.offlineEventListener, false);\n }\n }\n\n this.open();\n }\n\n /**\n * Creates transport of the given type.\n *\n * @param {String} transport name\n * @return {Transport}\n * @api private\n */\n createTransport(name) {\n\n\n const query = clone(this.opts.query);\n\n // append engine.io protocol identifier\n query.EIO = parser.protocol;\n\n // transport name\n query.transport = name;\n\n // session id if we already have one\n if (this.id) query.sid = this.id;\n\n const opts = Object.assign(\n {},\n this.opts.transportOptions[name],\n this.opts,\n {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port\n }\n );\n\n\n\n\n return new transports[name](opts);\n }\n\n /**\n * Initializes transport to use and starts probe.\n *\n * @api private\n */\n open() {\n let transport;\n if (\n this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1\n ) {\n transport = \"websocket\";\n } else if (0 === this.transports.length) {\n // Emit error on next tick so it can be listened to\n setTimeout(() => {\n this.emit(\"error\", \"No transports available\");\n }, 0);\n return;\n } else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n } catch (e) {\n\n\n this.transports.shift();\n this.open();\n return;\n }\n\n transport.open();\n this.setTransport(transport);\n }\n\n /**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @api private\n */\n setTransport(transport) {\n\n\n\n if (this.transport) {\n\n\n this.transport.removeAllListeners();\n }\n\n // set up transport\n this.transport = transport;\n\n // set up transport listeners\n transport\n .on(\"drain\", this.onDrain.bind(this))\n .on(\"packet\", this.onPacket.bind(this))\n .on(\"error\", this.onError.bind(this))\n .on(\"close\", () => {\n this.onClose(\"transport close\");\n });\n }\n\n /**\n * Probes a transport.\n *\n * @param {String} transport name\n * @api private\n */\n probe(name) {\n\n\n let transport = this.createTransport(name, { probe: 1 });\n let failed = false;\n\n Socket.priorWebsocketSuccess = false;\n\n const onTransportOpen = () => {\n if (failed) return;\n\n\n\n transport.send([{ type: \"ping\", data: \"probe\" }]);\n transport.once(\"packet\", msg => {\n if (failed) return;\n if (\"pong\" === msg.type && \"probe\" === msg.data) {\n\n\n this.upgrading = true;\n this.emit(\"upgrading\", transport);\n if (!transport) return;\n Socket.priorWebsocketSuccess = \"websocket\" === transport.name;\n\n\n\n this.transport.pause(() => {\n if (failed) return;\n if (\"closed\" === this.readyState) return;\n\n\n\n cleanup();\n\n this.setTransport(transport);\n transport.send([{ type: \"upgrade\" }]);\n this.emit(\"upgrade\", transport);\n transport = null;\n this.upgrading = false;\n this.flush();\n });\n } else {\n\n\n const err = new Error(\"probe error\");\n err.transport = transport.name;\n this.emit(\"upgradeError\", err);\n }\n });\n };\n\n function freezeTransport() {\n if (failed) return;\n\n // Any callback called by transport should be ignored since now\n failed = true;\n\n cleanup();\n\n transport.close();\n transport = null;\n }\n\n // Handle any error that happens while probing\n const onerror = err => {\n const error = new Error(\"probe error: \" + err);\n error.transport = transport.name;\n\n freezeTransport();\n\n\n\n\n this.emit(\"upgradeError\", error);\n };\n\n function onTransportClose() {\n onerror(\"transport closed\");\n }\n\n // When the socket is closed while we're probing\n function onclose() {\n onerror(\"socket closed\");\n }\n\n // When the socket is upgraded while we're probing\n function onupgrade(to) {\n if (transport && to.name !== transport.name) {\n\n\n freezeTransport();\n }\n }\n\n // Remove all listeners on the transport and on self\n const cleanup = () => {\n transport.removeListener(\"open\", onTransportOpen);\n transport.removeListener(\"error\", onerror);\n transport.removeListener(\"close\", onTransportClose);\n this.removeListener(\"close\", onclose);\n this.removeListener(\"upgrading\", onupgrade);\n };\n\n transport.once(\"open\", onTransportOpen);\n transport.once(\"error\", onerror);\n transport.once(\"close\", onTransportClose);\n\n this.once(\"close\", onclose);\n this.once(\"upgrading\", onupgrade);\n\n transport.open();\n }\n\n /**\n * Called when connection is deemed open.\n *\n * @api public\n */\n onOpen() {\n\n\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emit(\"open\");\n this.flush();\n\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\n \"open\" === this.readyState &&\n this.opts.upgrade &&\n this.transport.pause\n ) {\n\n\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\n }\n\n /**\n * Handles a packet.\n *\n * @api private\n */\n onPacket(packet) {\n if (\n \"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState\n ) {\n\n\n\n this.emit(\"packet\", packet);\n\n // Socket is live - any packet counts\n this.emit(\"heartbeat\");\n\n switch (packet.type) {\n case \"open\":\n this.onHandshake(JSON.parse(packet.data));\n break;\n\n case \"ping\":\n this.resetPingTimeout();\n this.sendPacket(\"pong\");\n this.emit(\"ping\");\n this.emit(\"pong\");\n break;\n\n case \"error\":\n const err = new Error(\"server error\");\n err.code = packet.data;\n this.onError(err);\n break;\n\n case \"message\":\n this.emit(\"data\", packet.data);\n this.emit(\"message\", packet.data);\n break;\n }\n } else {\n\n\n }\n }\n\n /**\n * Called upon handshake completion.\n *\n * @param {Object} handshake obj\n * @api private\n */\n onHandshake(data) {\n this.emit(\"handshake\", data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this.upgrades = this.filterUpgrades(data.upgrades);\n this.pingInterval = data.pingInterval;\n this.pingTimeout = data.pingTimeout;\n this.onOpen();\n // In case open handler closes socket\n if (\"closed\" === this.readyState) return;\n this.resetPingTimeout();\n }\n\n /**\n * Sets and resets ping timeout timer based on server pings.\n *\n * @api private\n */\n resetPingTimeout() {\n clearTimeout(this.pingTimeoutTimer);\n this.pingTimeoutTimer = setTimeout(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\n if (this.opts.autoUnref) {\n this.pingTimeoutTimer.unref();\n }\n }\n\n /**\n * Called on `drain` event\n *\n * @api private\n */\n onDrain() {\n this.writeBuffer.splice(0, this.prevBufferLen);\n\n // setting prevBufferLen = 0 is very important\n // for example, when upgrading, upgrade packet is sent over,\n // and a nonzero prevBufferLen could cause problems on `drain`\n this.prevBufferLen = 0;\n\n if (0 === this.writeBuffer.length) {\n this.emit(\"drain\");\n } else {\n this.flush();\n }\n }\n\n /**\n * Flush write buffers.\n *\n * @api private\n */\n flush() {\n if (\n \"closed\" !== this.readyState &&\n this.transport.writable &&\n !this.upgrading &&\n this.writeBuffer.length\n ) {\n\n\n this.transport.send(this.writeBuffer);\n // keep track of current length of writeBuffer\n // splice writeBuffer and callbackBuffer on `drain`\n this.prevBufferLen = this.writeBuffer.length;\n this.emit(\"flush\");\n }\n }\n\n /**\n * Sends a message.\n *\n * @param {String} message.\n * @param {Function} callback function.\n * @param {Object} options.\n * @return {Socket} for chaining.\n * @api public\n */\n write(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\n }\n\n send(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\n }\n\n /**\n * Sends a packet.\n *\n * @param {String} packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} callback function.\n * @api private\n */\n sendPacket(type, data, options, fn) {\n if (\"function\" === typeof data) {\n fn = data;\n data = undefined;\n }\n\n if (\"function\" === typeof options) {\n fn = options;\n options = null;\n }\n\n if (\"closing\" === this.readyState || \"closed\" === this.readyState) {\n return;\n }\n\n options = options || {};\n options.compress = false !== options.compress;\n\n const packet = {\n type: type,\n data: data,\n options: options\n };\n this.emit(\"packetCreate\", packet);\n this.writeBuffer.push(packet);\n if (fn) this.once(\"flush\", fn);\n this.flush();\n }\n\n /**\n * Closes the connection.\n *\n * @api private\n */\n close() {\n const close = () => {\n this.onClose(\"forced close\");\n\n\n this.transport.close();\n };\n\n const cleanupAndClose = () => {\n this.removeListener(\"upgrade\", cleanupAndClose);\n this.removeListener(\"upgradeError\", cleanupAndClose);\n close();\n };\n\n const waitForUpgrade = () => {\n // wait for upgrade to finish since we can't send packets while pausing a transport\n this.once(\"upgrade\", cleanupAndClose);\n this.once(\"upgradeError\", cleanupAndClose);\n };\n\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.readyState = \"closing\";\n\n if (this.writeBuffer.length) {\n this.once(\"drain\", () => {\n if (this.upgrading) {\n waitForUpgrade();\n } else {\n close();\n }\n });\n } else if (this.upgrading) {\n waitForUpgrade();\n } else {\n close();\n }\n }\n\n return this;\n }\n\n /**\n * Called upon transport error\n *\n * @api private\n */\n onError(err) {\n\n\n Socket.priorWebsocketSuccess = false;\n this.emit(\"error\", err);\n this.onClose(\"transport error\", err);\n }\n\n /**\n * Called upon transport close.\n *\n * @api private\n */\n onClose(reason, desc) {\n if (\n \"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState\n ) {\n\n\n\n // clear timers\n clearTimeout(this.pingIntervalTimer);\n clearTimeout(this.pingTimeoutTimer);\n\n // stop event from firing again for transport\n this.transport.removeAllListeners(\"close\");\n\n // ensure transport won't stay open\n this.transport.close();\n\n // ignore further transport communication\n this.transport.removeAllListeners();\n\n if (typeof removeEventListener === \"function\") {\n removeEventListener(\"offline\", this.offlineEventListener, false);\n }\n\n // set ready state\n this.readyState = \"closed\";\n\n // clear session id\n this.id = null;\n\n // emit close event\n this.emit(\"close\", reason, desc);\n\n // clean buffers after, so users can still\n // grab the buffers on `close` event\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n }\n }\n\n /**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} server upgrades\n * @api private\n *\n */\n filterUpgrades(upgrades) {\n const filteredUpgrades = [];\n let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\n\nSocket.priorWebsocketSuccess = false;\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nSocket.protocol = parser.protocol; // this is an int\n\nfunction clone(obj) {\n const o = {};\n for (let i in obj) {\n if (obj.hasOwnProperty(i)) {\n o[i] = obj[i];\n }\n }\n return o;\n}\n\nmodule.exports = Socket;\n","\n/**\n * Module exports.\n *\n * Logic borrowed from Modernizr:\n *\n * - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js\n */\n\ntry {\n module.exports = typeof XMLHttpRequest !== 'undefined' &&\n 'withCredentials' in new XMLHttpRequest();\n} catch (err) {\n // if XMLHttp support is disabled in IE then it will throw\n // when trying to create\n module.exports = false;\n}\n","/* global attachEvent */\n\nconst XMLHttpRequest = require(\"../../contrib/xmlhttprequest-ssl/XMLHttpRequest\");\nconst Polling = require(\"./polling\");\nconst Emitter = require(\"component-emitter\");\nconst { pick } = require(\"../util\");\nconst globalThis = require(\"../globalThis\");\n\n\n\n\n/**\n * Empty function\n */\n\nfunction empty() {}\n\nconst hasXHR2 = (function() {\n const xhr = new XMLHttpRequest({ xdomain: false });\n return null != xhr.responseType;\n})();\n\nclass XHR extends Polling {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @api public\n */\n constructor(opts) {\n super(opts);\n\n if (typeof location !== \"undefined\") {\n const isSSL = \"https:\" === location.protocol;\n let port = location.port;\n\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? 443 : 80;\n }\n\n this.xd =\n (typeof location !== \"undefined\" &&\n opts.hostname !== location.hostname) ||\n port !== opts.port;\n this.xs = opts.secure !== isSSL;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\n }\n\n /**\n * Creates a request.\n *\n * @param {String} method\n * @api private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, xs: this.xs }, this.opts);\n return new Request(this.uri(), opts);\n }\n\n /**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @api private\n */\n doWrite(data, fn) {\n const req = this.request({\n method: \"POST\",\n data: data\n });\n req.on(\"success\", fn);\n req.on(\"error\", err => {\n this.onError(\"xhr post error\", err);\n });\n }\n\n /**\n * Starts a poll cycle.\n *\n * @api private\n */\n doPoll() {\n\n\n const req = this.request();\n req.on(\"data\", this.onData.bind(this));\n req.on(\"error\", err => {\n this.onError(\"xhr poll error\", err);\n });\n this.pollXhr = req;\n }\n}\n\nclass Request extends Emitter {\n /**\n * Request constructor\n *\n * @param {Object} options\n * @api public\n */\n constructor(uri, opts) {\n super();\n this.opts = opts;\n\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.async = false !== opts.async;\n this.data = undefined !== opts.data ? opts.data : null;\n\n this.create();\n }\n\n /**\n * Creates the XHR object and sends the request.\n *\n * @api private\n */\n create() {\n const opts = pick(\n this.opts,\n \"agent\",\n \"enablesXDR\",\n \"pfx\",\n \"key\",\n \"passphrase\",\n \"cert\",\n \"ca\",\n \"ciphers\",\n \"rejectUnauthorized\",\n \"autoUnref\"\n );\n opts.xdomain = !!this.opts.xd;\n opts.xscheme = !!this.opts.xs;\n\n const xhr = (this.xhr = new XMLHttpRequest(opts));\n\n try {\n\n\n xhr.open(this.method, this.uri, this.async);\n try {\n if (this.opts.extraHeaders) {\n xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n for (let i in this.opts.extraHeaders) {\n if (this.opts.extraHeaders.hasOwnProperty(i)) {\n xhr.setRequestHeader(i, this.opts.extraHeaders[i]);\n }\n }\n }\n } catch (e) {}\n\n if (\"POST\" === this.method) {\n try {\n xhr.setRequestHeader(\"Content-type\", \"text/plain;charset=UTF-8\");\n } catch (e) {}\n }\n\n try {\n xhr.setRequestHeader(\"Accept\", \"*/*\");\n } catch (e) {}\n\n // ie6 check\n if (\"withCredentials\" in xhr) {\n xhr.withCredentials = this.opts.withCredentials;\n }\n\n if (this.opts.requestTimeout) {\n xhr.timeout = this.opts.requestTimeout;\n }\n\n if (this.hasXDR()) {\n xhr.onload = () => {\n this.onLoad();\n };\n xhr.onerror = () => {\n this.onError(xhr.responseText);\n };\n } else {\n xhr.onreadystatechange = () => {\n if (4 !== xhr.readyState) return;\n if (200 === xhr.status || 1223 === xhr.status) {\n this.onLoad();\n } else {\n // make sure the `error` event handler that's user-set\n // does not throw in the same tick and gets caught here\n setTimeout(() => {\n this.onError(typeof xhr.status === \"number\" ? xhr.status : 0);\n }, 0);\n }\n };\n }\n\n\n\n xhr.send(this.data);\n } catch (e) {\n // Need to defer since .create() is called directly from the constructor\n // and thus the 'error' event can only be only bound *after* this exception\n // occurs. Therefore, also, we cannot throw here at all.\n setTimeout(() => {\n this.onError(e);\n }, 0);\n return;\n }\n\n if (typeof document !== \"undefined\") {\n this.index = Request.requestsCount++;\n Request.requests[this.index] = this;\n }\n }\n\n /**\n * Called upon successful response.\n *\n * @api private\n */\n onSuccess() {\n this.emit(\"success\");\n this.cleanup();\n }\n\n /**\n * Called if we have data.\n *\n * @api private\n */\n onData(data) {\n this.emit(\"data\", data);\n this.onSuccess();\n }\n\n /**\n * Called upon error.\n *\n * @api private\n */\n onError(err) {\n this.emit(\"error\", err);\n this.cleanup(true);\n }\n\n /**\n * Cleans up house.\n *\n * @api private\n */\n cleanup(fromError) {\n if (\"undefined\" === typeof this.xhr || null === this.xhr) {\n return;\n }\n // xmlhttprequest\n if (this.hasXDR()) {\n this.xhr.onload = this.xhr.onerror = empty;\n } else {\n this.xhr.onreadystatechange = empty;\n }\n\n if (fromError) {\n try {\n this.xhr.abort();\n } catch (e) {}\n }\n\n if (typeof document !== \"undefined\") {\n delete Request.requests[this.index];\n }\n\n this.xhr = null;\n }\n\n /**\n * Called upon load.\n *\n * @api private\n */\n onLoad() {\n const data = this.xhr.responseText;\n if (data !== null) {\n this.onData(data);\n }\n }\n\n /**\n * Check if it has XDomainRequest.\n *\n * @api private\n */\n hasXDR() {\n return typeof XDomainRequest !== \"undefined\" && !this.xs && this.enablesXDR;\n }\n\n /**\n * Aborts the request.\n *\n * @api public\n */\n abort() {\n this.cleanup();\n }\n}\n\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\n\nRequest.requestsCount = 0;\nRequest.requests = {};\n\nif (typeof document !== \"undefined\") {\n if (typeof attachEvent === \"function\") {\n attachEvent(\"onunload\", unloadHandler);\n } else if (typeof addEventListener === \"function\") {\n const terminationEvent = \"onpagehide\" in globalThis ? \"pagehide\" : \"unload\";\n addEventListener(terminationEvent, unloadHandler, false);\n }\n}\n\nfunction unloadHandler() {\n for (let i in Request.requests) {\n if (Request.requests.hasOwnProperty(i)) {\n Request.requests[i].abort();\n }\n }\n}\n\nmodule.exports = XHR;\nmodule.exports.Request = Request;\n","const { PACKET_TYPES } = require(\"./commons\");\n\nconst withNativeBlob =\n typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n Object.prototype.toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n\n// ArrayBuffer.isView method is not defined in IE10\nconst isView = obj => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj && obj.buffer instanceof ArrayBuffer;\n};\n\nconst encodePacket = ({ type, data }, supportsBinary, callback) => {\n if (withNativeBlob && data instanceof Blob) {\n if (supportsBinary) {\n return callback(data);\n } else {\n return encodeBlobAsBase64(data, callback);\n }\n } else if (\n withNativeArrayBuffer &&\n (data instanceof ArrayBuffer || isView(data))\n ) {\n if (supportsBinary) {\n return callback(data instanceof ArrayBuffer ? data : data.buffer);\n } else {\n return encodeBlobAsBase64(new Blob([data]), callback);\n }\n }\n // plain string\n return callback(PACKET_TYPES[type] + (data || \"\"));\n};\n\nconst encodeBlobAsBase64 = (data, callback) => {\n const fileReader = new FileReader();\n fileReader.onload = function() {\n const content = fileReader.result.split(\",\")[1];\n callback(\"b\" + content);\n };\n return fileReader.readAsDataURL(data);\n};\n\nmodule.exports = encodePacket;\n","const { PACKET_TYPES_REVERSE, ERROR_PACKET } = require(\"./commons\");\n\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n\nlet base64decoder;\nif (withNativeArrayBuffer) {\n base64decoder = require(\"base64-arraybuffer\");\n}\n\nconst decodePacket = (encodedPacket, binaryType) => {\n if (typeof encodedPacket !== \"string\") {\n return {\n type: \"message\",\n data: mapBinary(encodedPacket, binaryType)\n };\n }\n const type = encodedPacket.charAt(0);\n if (type === \"b\") {\n return {\n type: \"message\",\n data: decodeBase64Packet(encodedPacket.substring(1), binaryType)\n };\n }\n const packetType = PACKET_TYPES_REVERSE[type];\n if (!packetType) {\n return ERROR_PACKET;\n }\n return encodedPacket.length > 1\n ? {\n type: PACKET_TYPES_REVERSE[type],\n data: encodedPacket.substring(1)\n }\n : {\n type: PACKET_TYPES_REVERSE[type]\n };\n};\n\nconst decodeBase64Packet = (data, binaryType) => {\n if (base64decoder) {\n const decoded = base64decoder.decode(data);\n return mapBinary(decoded, binaryType);\n } else {\n return { base64: true, data }; // fallback for old browsers\n }\n};\n\nconst mapBinary = (data, binaryType) => {\n switch (binaryType) {\n case \"blob\":\n return data instanceof ArrayBuffer ? new Blob([data]) : data;\n case \"arraybuffer\":\n default:\n return data; // assuming the data is already an ArrayBuffer\n }\n};\n\nmodule.exports = decodePacket;\n","/*\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n(function(chars){\n \"use strict\";\n\n exports.encode = function(arraybuffer) {\n var bytes = new Uint8Array(arraybuffer),\n i, len = bytes.length, base64 = \"\";\n\n for (i = 0; i < len; i+=3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n\n if ((len % 3) === 2) {\n base64 = base64.substring(0, base64.length - 1) + \"=\";\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + \"==\";\n }\n\n return base64;\n };\n\n exports.decode = function(base64) {\n var bufferLength = base64.length * 0.75,\n len = base64.length, i, p = 0,\n encoded1, encoded2, encoded3, encoded4;\n\n if (base64[base64.length - 1] === \"=\") {\n bufferLength--;\n if (base64[base64.length - 2] === \"=\") {\n bufferLength--;\n }\n }\n\n var arraybuffer = new ArrayBuffer(bufferLength),\n bytes = new Uint8Array(arraybuffer);\n\n for (i = 0; i < len; i+=4) {\n encoded1 = chars.indexOf(base64[i]);\n encoded2 = chars.indexOf(base64[i+1]);\n encoded3 = chars.indexOf(base64[i+2]);\n encoded4 = chars.indexOf(base64[i+3]);\n\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n\n return arraybuffer;\n };\n})(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\");\n","const Polling = require(\"./polling\");\nconst globalThis = require(\"../globalThis\");\n\nconst rNewline = /\\n/g;\nconst rEscapedNewline = /\\\\n/g;\n\n/**\n * Global JSONP callbacks.\n */\n\nlet callbacks;\n\nclass JSONPPolling extends Polling {\n /**\n * JSONP Polling constructor.\n *\n * @param {Object} opts.\n * @api public\n */\n constructor(opts) {\n super(opts);\n\n this.query = this.query || {};\n\n // define global callbacks array if not present\n // we do this here (lazily) to avoid unneeded global pollution\n if (!callbacks) {\n // we need to consider multiple engines in the same page\n callbacks = globalThis.___eio = globalThis.___eio || [];\n }\n\n // callback identifier\n this.index = callbacks.length;\n\n // add callback to jsonp global\n callbacks.push(this.onData.bind(this));\n\n // append to query string\n this.query.j = this.index;\n }\n\n /**\n * JSONP only supports binary as base64 encoded strings\n */\n get supportsBinary() {\n return false;\n }\n\n /**\n * Closes the socket.\n *\n * @api private\n */\n doClose() {\n if (this.script) {\n // prevent spurious errors from being emitted when the window is unloaded\n this.script.onerror = () => {};\n this.script.parentNode.removeChild(this.script);\n this.script = null;\n }\n\n if (this.form) {\n this.form.parentNode.removeChild(this.form);\n this.form = null;\n this.iframe = null;\n }\n\n super.doClose();\n }\n\n /**\n * Starts a poll cycle.\n *\n * @api private\n */\n doPoll() {\n const script = document.createElement(\"script\");\n\n if (this.script) {\n this.script.parentNode.removeChild(this.script);\n this.script = null;\n }\n\n script.async = true;\n script.src = this.uri();\n script.onerror = e => {\n this.onError(\"jsonp poll error\", e);\n };\n\n const insertAt = document.getElementsByTagName(\"script\")[0];\n if (insertAt) {\n insertAt.parentNode.insertBefore(script, insertAt);\n } else {\n (document.head || document.body).appendChild(script);\n }\n this.script = script;\n\n const isUAgecko =\n \"undefined\" !== typeof navigator && /gecko/i.test(navigator.userAgent);\n\n if (isUAgecko) {\n setTimeout(function() {\n const iframe = document.createElement(\"iframe\");\n document.body.appendChild(iframe);\n document.body.removeChild(iframe);\n }, 100);\n }\n }\n\n /**\n * Writes with a hidden iframe.\n *\n * @param {String} data to send\n * @param {Function} called upon flush.\n * @api private\n */\n doWrite(data, fn) {\n let iframe;\n\n if (!this.form) {\n const form = document.createElement(\"form\");\n const area = document.createElement(\"textarea\");\n const id = (this.iframeId = \"eio_iframe_\" + this.index);\n\n form.className = \"socketio\";\n form.style.position = \"absolute\";\n form.style.top = \"-1000px\";\n form.style.left = \"-1000px\";\n form.target = id;\n form.method = \"POST\";\n form.setAttribute(\"accept-charset\", \"utf-8\");\n area.name = \"d\";\n form.appendChild(area);\n document.body.appendChild(form);\n\n this.form = form;\n this.area = area;\n }\n\n this.form.action = this.uri();\n\n function complete() {\n initIframe();\n fn();\n }\n\n const initIframe = () => {\n if (this.iframe) {\n try {\n this.form.removeChild(this.iframe);\n } catch (e) {\n this.onError(\"jsonp polling iframe removal error\", e);\n }\n }\n\n try {\n // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n const html = '<iframe src=\"javascript:0\" name=\"' + this.iframeId + '\">';\n iframe = document.createElement(html);\n } catch (e) {\n iframe = document.createElement(\"iframe\");\n iframe.name = this.iframeId;\n iframe.src = \"javascript:0\";\n }\n\n iframe.id = this.iframeId;\n\n this.form.appendChild(iframe);\n this.iframe = iframe;\n };\n\n initIframe();\n\n // escape \\n to prevent it from being converted into \\r\\n by some UAs\n // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side\n data = data.replace(rEscapedNewline, \"\\\\\\n\");\n this.area.value = data.replace(rNewline, \"\\\\n\");\n\n try {\n this.form.submit();\n } catch (e) {}\n\n if (this.iframe.attachEvent) {\n this.iframe.onreadystatechange = () => {\n if (this.iframe.readyState === \"complete\") {\n complete();\n }\n };\n } else {\n this.iframe.onload = complete;\n }\n }\n}\n\nmodule.exports = JSONPPolling;\n","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 nextTick\n} = require(\"./websocket-constructor\");\n\n\n\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 this.writable = false;\n\n // encodePacket efficient as it uses WS framing\n // no need for encodePayload\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n\n parser.encodePacket(packet, this.supportsBinary, 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 (this.opts.perMessageDeflate) {\n const len =\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.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 this.ws.send(data);\n } else {\n this.ws.send(data, opts);\n }\n } catch (e) {\n\n\n }\n\n if (lastPacket) {\n // fake drain\n // defer to next tick to allow Socket to clear writeBuffer\n nextTick(() => {\n this.writable = true;\n this.emit(\"drain\");\n });\n }\n });\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","const globalThis = require(\"../globalThis\");\nconst nextTick = (() => {\n const isPromiseAvailable =\n typeof Promise === \"function\" && typeof Promise.resolve === \"function\";\n if (isPromiseAvailable) {\n return cb => Promise.resolve().then(cb);\n } else {\n return cb => setTimeout(cb, 0);\n }\n})();\n\nmodule.exports = {\n WebSocket: globalThis.WebSocket || globalThis.MozWebSocket,\n usingBrowserWebSocket: true,\n defaultBinaryType: \"arraybuffer\",\n nextTick\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reconstructPacket = exports.deconstructPacket = void 0;\nconst is_binary_1 = require(\"./is-binary\");\n/**\n * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @public\n */\nfunction deconstructPacket(packet) {\n const buffers = [];\n const packetData = packet.data;\n const pack = packet;\n pack.data = _deconstructPacket(packetData, buffers);\n pack.attachments = buffers.length; // number of binary 'attachments'\n return { packet: pack, buffers: buffers };\n}\nexports.deconstructPacket = deconstructPacket;\nfunction _deconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (is_binary_1.isBinary(data)) {\n const placeholder = { _placeholder: true, num: buffers.length };\n buffers.push(data);\n return placeholder;\n }\n else if (Array.isArray(data)) {\n const newData = new Array(data.length);\n for (let i = 0; i < data.length; i++) {\n newData[i] = _deconstructPacket(data[i], buffers);\n }\n return newData;\n }\n else if (typeof data === \"object\" && !(data instanceof Date)) {\n const newData = {};\n for (const key in data) {\n if (data.hasOwnProperty(key)) {\n newData[key] = _deconstructPacket(data[key], buffers);\n }\n }\n return newData;\n }\n return data;\n}\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @public\n */\nfunction reconstructPacket(packet, buffers) {\n packet.data = _reconstructPacket(packet.data, buffers);\n packet.attachments = undefined; // no longer useful\n return packet;\n}\nexports.reconstructPacket = reconstructPacket;\nfunction _reconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (data && data._placeholder) {\n return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n }\n else if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n data[i] = _reconstructPacket(data[i], buffers);\n }\n }\n else if (typeof data === \"object\") {\n for (const key in data) {\n if (data.hasOwnProperty(key)) {\n data[key] = _reconstructPacket(data[key], buffers);\n }\n }\n }\n return data;\n}\n","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n opts = opts || {};\n this.ms = opts.min || 100;\n this.max = opts.max || 10000;\n this.factor = opts.factor || 2;\n this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n var ms = this.ms * Math.pow(this.factor, this.attempts++);\n if (this.jitter) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.jitter * ms);\n ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;\n }\n return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n this.jitter = jitter;\n};\n\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/client/lib/socket.io.msgpack.min.js b/client/lib/socket.io.msgpack.min.js
new file mode 100644
index 0000000..1c623e0
--- /dev/null
+++ b/client/lib/socket.io.msgpack.min.js
@@ -0,0 +1,7 @@
+/*!
+ * Socket.IO v4.1.3
+ * (c) 2014-2021 Guillermo Rauch
+ * Released under the MIT License.
+ */
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.io=e():t.io=e()}(self,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=17)}([function(t,e,n){var r=n(23),o=n(24),i=String.fromCharCode(30);t.exports={protocol:4,encodePacket:r,encodePayload:function(t,e){var n=t.length,o=new Array(n),s=0;t.forEach((function(t,c){r(t,!1,(function(t){o[c]=t,++s===n&&e(o.join(i))}))}))},decodePacket:o,decodePayload:function(t,e){for(var n=t.split(i),r=[],s=0;s<n.length;s++){var c=o(n[s],e);if(r.push(c),"error"===c.type)break}return r}}},function(t,e,n){function r(t){if(t)return function(t){for(var e in r.prototype)t[e]=r.prototype[e];return t}(t)}t.exports=r,r.prototype.on=r.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},r.prototype.once=function(t,e){function n(){this.off(t,n),e.apply(this,arguments)}return n.fn=e,this.on(t,n),this},r.prototype.off=r.prototype.removeListener=r.prototype.removeAllListeners=r.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n,r=this._callbacks["$"+t];if(!r)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var o=0;o<r.length;o++)if((n=r[o])===e||n.fn===e){r.splice(o,1);break}return 0===r.length&&delete this._callbacks["$"+t],this},r.prototype.emit=function(t){this._callbacks=this._callbacks||{};for(var e=new Array(arguments.length-1),n=this._callbacks["$"+t],r=1;r<arguments.length;r++)e[r-1]=arguments[r];if(n){r=0;for(var o=(n=n.slice(0)).length;r<o;++r)n[r].apply(this,e)}return this},r.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks["$"+t]||[]},r.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t,e){t.exports="undefined"!=typeof self?self:"undefined"!=typeof window?window:Function("return this")()},function(t,e,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function i(t,e){return(i=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function s(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=a(t);if(e){var o=a(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return c(this,n)}}function c(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function a(t){return(a=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}var u=n(0),f=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&i(t,e)}(a,t);var e,n,r,c=s(a);function a(t){var e;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,a),(e=c.call(this)).opts=t,e.query=t.query,e.readyState="",e.socket=t.socket,e}return e=a,(n=[{key:"onError",value:function(t,e){var n=new Error(t);return n.type="TransportError",n.description=e,this.emit("error",n),this}},{key:"open",value:function(){return"closed"!==this.readyState&&""!==this.readyState||(this.readyState="opening",this.doOpen()),this}},{key:"close",value:function(){return"opening"!==this.readyState&&"open"!==this.readyState||(this.doClose(),this.onClose()),this}},{key:"send",value:function(t){"open"===this.readyState&&this.write(t)}},{key:"onOpen",value:function(){this.readyState="open",this.writable=!0,this.emit("open")}},{key:"onData",value:function(t){var e=u.decodePacket(t,this.socket.binaryType);this.onPacket(e)}},{key:"onPacket",value:function(t){this.emit("packet",t)}},{key:"onClose",value:function(){this.readyState="closed",this.emit("close")}}])&&o(e.prototype,n),r&&o(e,r),a}(n(1));t.exports=f},function(t,e){e.encode=function(t){var e="";for(var n in t)t.hasOwnProperty(n)&&(e.length&&(e+="&"),e+=encodeURIComponent(n)+"="+encodeURIComponent(t[n]));return e},e.decode=function(t){for(var e={},n=t.split("&"),r=0,o=n.length;r<o;r++){var i=n[r].split("=");e[decodeURIComponent(i[0])]=decodeURIComponent(i[1])}return e}},function(t,e,n){var r=n(29),o=n(1);e.protocol=5;var i=e.PacketType={CONNECT:0,DISCONNECT:1,EVENT:2,ACK:3,CONNECT_ERROR:4},s=Number.isInteger||function(t){return"number"==typeof t&&isFinite(t)&&Math.floor(t)===t},c=function(t){return"string"==typeof t},a=function(t){return"[object Object]"===Object.prototype.toString.call(t)};function u(){}function f(){}u.prototype.encode=function(t){return[r.encode(t)]},o(f.prototype),f.prototype.add=function(t){var e=r.decode(t);this.checkPacket(e),this.emit("decoded",e)},f.prototype.checkPacket=function(t){if(!(s(t.type)&&t.type>=i.CONNECT&&t.type<=i.CONNECT_ERROR))throw new Error("invalid packet type");if(!c(t.nsp))throw new Error("invalid namespace");if(!function(t){switch(t.type){case i.CONNECT:return void 0===t.data||a(t.data);case i.DISCONNECT:return void 0===t.data;case i.CONNECT_ERROR:return c(t.data)||a(t.data);default:return Array.isArray(t.data)}}(t))throw new Error("invalid payload");if(!(void 0===t.id||s(t.id)))throw new Error("invalid packet id")},f.prototype.destroy=function(){},e.Encoder=u,e.Decoder=f},function(t,e){var n=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,r=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];t.exports=function(t){var e=t,o=t.indexOf("["),i=t.indexOf("]");-1!=o&&-1!=i&&(t=t.substring(0,o)+t.substring(o,i).replace(/:/g,";")+t.substring(i,t.length));for(var s,c,a=n.exec(t||""),u={},f=14;f--;)u[r[f]]=a[f]||"";return-1!=o&&-1!=i&&(u.source=e,u.host=u.host.substring(1,u.host.length-1).replace(/;/g,":"),u.authority=u.authority.replace("[","").replace("]","").replace(/;/g,":"),u.ipv6uri=!0),u.pathNames=function(t,e){var n=e.replace(/\/{2,9}/g,"/").split("/");"/"!=e.substr(0,1)&&0!==e.length||n.splice(0,1);"/"==e.substr(e.length-1,1)&&n.splice(n.length-1,1);return n}(0,u.path),u.queryKey=(s=u.query,c={},s.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,(function(t,e,n){e&&(c[e]=n)})),c),u}},function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function i(t,e){return(i=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function s(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=a(t);if(e){var o=a(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return c(this,n)}}function c(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function a(t){return(a=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.Manager=void 0;var u=n(19),f=n(14),h=n(5),p=n(15),l=n(32),y=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&i(t,e)}(y,t);var e,n,c,a=s(y);function y(t,e){var n;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,y),(n=a.call(this)).nsps={},n.subs=[],t&&"object"===r(t)&&(e=t,t=void 0),(e=e||{}).path=e.path||"/socket.io",n.opts=e,n.reconnection(!1!==e.reconnection),n.reconnectionAttempts(e.reconnectionAttempts||1/0),n.reconnectionDelay(e.reconnectionDelay||1e3),n.reconnectionDelayMax(e.reconnectionDelayMax||5e3),n.randomizationFactor(e.randomizationFactor||.5),n.backoff=new l({min:n.reconnectionDelay(),max:n.reconnectionDelayMax(),jitter:n.randomizationFactor()}),n.timeout(null==e.timeout?2e4:e.timeout),n._readyState="closed",n.uri=t;var o=e.parser||h;return n.encoder=new o.Encoder,n.decoder=new o.Decoder,n._autoConnect=!1!==e.autoConnect,n._autoConnect&&n.open(),n}return e=y,(n=[{key:"reconnection",value:function(t){return arguments.length?(this._reconnection=!!t,this):this._reconnection}},{key:"reconnectionAttempts",value:function(t){return void 0===t?this._reconnectionAttempts:(this._reconnectionAttempts=t,this)}},{key:"reconnectionDelay",value:function(t){var e;return void 0===t?this._reconnectionDelay:(this._reconnectionDelay=t,null===(e=this.backoff)||void 0===e||e.setMin(t),this)}},{key:"randomizationFactor",value:function(t){var e;return void 0===t?this._randomizationFactor:(this._randomizationFactor=t,null===(e=this.backoff)||void 0===e||e.setJitter(t),this)}},{key:"reconnectionDelayMax",value:function(t){var e;return void 0===t?this._reconnectionDelayMax:(this._reconnectionDelayMax=t,null===(e=this.backoff)||void 0===e||e.setMax(t),this)}},{key:"timeout",value:function(t){return arguments.length?(this._timeout=t,this):this._timeout}},{key:"maybeReconnectOnOpen",value:function(){!this._reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()}},{key:"open",value:function(t){var e=this;if(~this._readyState.indexOf("open"))return this;this.engine=u(this.uri,this.opts);var n=this.engine,r=this;this._readyState="opening",this.skipReconnect=!1;var o=p.on(n,"open",(function(){r.onopen(),t&&t()})),i=p.on(n,"error",(function(n){r.cleanup(),r._readyState="closed",e.emitReserved("error",n),t?t(n):r.maybeReconnectOnOpen()}));if(!1!==this._timeout){var s=this._timeout;0===s&&o();var c=setTimeout((function(){o(),n.close(),n.emit("error",new Error("timeout"))}),s);this.opts.autoUnref&&c.unref(),this.subs.push((function(){clearTimeout(c)}))}return this.subs.push(o),this.subs.push(i),this}},{key:"connect",value:function(t){return this.open(t)}},{key:"onopen",value:function(){this.cleanup(),this._readyState="open",this.emitReserved("open");var t=this.engine;this.subs.push(p.on(t,"ping",this.onping.bind(this)),p.on(t,"data",this.ondata.bind(this)),p.on(t,"error",this.onerror.bind(this)),p.on(t,"close",this.onclose.bind(this)),p.on(this.decoder,"decoded",this.ondecoded.bind(this)))}},{key:"onping",value:function(){this.emitReserved("ping")}},{key:"ondata",value:function(t){this.decoder.add(t)}},{key:"ondecoded",value:function(t){this.emitReserved("packet",t)}},{key:"onerror",value:function(t){this.emitReserved("error",t)}},{key:"socket",value:function(t,e){var n=this.nsps[t];return n||(n=new f.Socket(this,t,e),this.nsps[t]=n),n}},{key:"_destroy",value:function(t){for(var e=0,n=Object.keys(this.nsps);e<n.length;e++){var r=n[e];if(this.nsps[r].active)return}this._close()}},{key:"_packet",value:function(t){for(var e=this.encoder.encode(t),n=0;n<e.length;n++)this.engine.write(e[n],t.options)}},{key:"cleanup",value:function(){this.subs.forEach((function(t){return t()})),this.subs.length=0,this.decoder.destroy()}},{key:"_close",value:function(){this.skipReconnect=!0,this._reconnecting=!1,"opening"===this._readyState&&this.cleanup(),this.backoff.reset(),this._readyState="closed",this.engine&&this.engine.close()}},{key:"disconnect",value:function(){return this._close()}},{key:"onclose",value:function(t){this.cleanup(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",t),this._reconnection&&!this.skipReconnect&&this.reconnect()}},{key:"reconnect",value:function(){var t=this;if(this._reconnecting||this.skipReconnect)return this;var e=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{var n=this.backoff.duration();this._reconnecting=!0;var r=setTimeout((function(){e.skipReconnect||(t.emitReserved("reconnect_attempt",e.backoff.attempts),e.skipReconnect||e.open((function(n){n?(e._reconnecting=!1,e.reconnect(),t.emitReserved("reconnect_error",n)):e.onreconnect()})))}),n);this.opts.autoUnref&&r.unref(),this.subs.push((function(){clearTimeout(r)}))}}},{key:"onreconnect",value:function(){var t=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",t)}}])&&o(e.prototype,n),c&&o(e,c),y}(n(16).StrictEventEmitter);e.Manager=y},function(t,e,n){var r=n(9),o=n(22),i=n(26),s=n(27);e.polling=function(t){var e=!1,n=!1,s=!1!==t.jsonp;if("undefined"!=typeof location){var c="https:"===location.protocol,a=location.port;a||(a=c?443:80),e=t.hostname!==location.hostname||a!==t.port,n=t.secure!==c}if(t.xdomain=e,t.xscheme=n,"open"in new r(t)&&!t.forceJSONP)return new o(t);if(!s)throw new Error("JSONP disabled");return new i(t)},e.websocket=s},function(t,e,n){var r=n(21),o=n(2);t.exports=function(t){var e=t.xdomain,n=t.xscheme,i=t.enablesXDR;try{if("undefined"!=typeof XMLHttpRequest&&(!e||r))return new XMLHttpRequest}catch(t){}try{if("undefined"!=typeof XDomainRequest&&!n&&i)return new XDomainRequest}catch(t){}if(!e)try{return new(o[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(t){}}},function(t,e,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function s(t,e){return(s=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function c(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=u(t);if(e){var o=u(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return a(this,n)}}function a(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function u(t){return(u=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}var f=n(3),h=n(4),p=n(0),l=n(12),y=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&s(t,e)}(u,t);var e,n,r,a=c(u);function u(){return o(this,u),a.apply(this,arguments)}return e=u,(n=[{key:"name",get:function(){return"polling"}},{key:"doOpen",value:function(){this.poll()}},{key:"pause",value:function(t){var e=this;this.readyState="pausing";var n=function(){e.readyState="paused",t()};if(this.polling||!this.writable){var r=0;this.polling&&(r++,this.once("pollComplete",(function(){--r||n()}))),this.writable||(r++,this.once("drain",(function(){--r||n()})))}else n()}},{key:"poll",value:function(){this.polling=!0,this.doPoll(),this.emit("poll")}},{key:"onData",value:function(t){var e=this;p.decodePayload(t,this.socket.binaryType).forEach((function(t){if("opening"===e.readyState&&"open"===t.type&&e.onOpen(),"close"===t.type)return e.onClose(),!1;e.onPacket(t)})),"closed"!==this.readyState&&(this.polling=!1,this.emit("pollComplete"),"open"===this.readyState&&this.poll())}},{key:"doClose",value:function(){var t=this,e=function(){t.write([{type:"close"}])};"open"===this.readyState?e():this.once("open",e)}},{key:"write",value:function(t){var e=this;this.writable=!1,p.encodePayload(t,(function(t){e.doWrite(t,(function(){e.writable=!0,e.emit("drain")}))}))}},{key:"uri",value:function(){var t=this.query||{},e=this.opts.secure?"https":"http",n="";return!1!==this.opts.timestampRequests&&(t[this.opts.timestampParam]=l()),this.supportsBinary||t.sid||(t.b64=1),t=h.encode(t),this.opts.port&&("https"===e&&443!==Number(this.opts.port)||"http"===e&&80!==Number(this.opts.port))&&(n=":"+this.opts.port),t.length&&(t="?"+t),e+"://"+(-1!==this.opts.hostname.indexOf(":")?"["+this.opts.hostname+"]":this.opts.hostname)+n+this.opts.path+t}}])&&i(e.prototype,n),r&&i(e,r),u}(f);t.exports=y},function(t,e){var n=Object.create(null);n.open="0",n.close="1",n.ping="2",n.pong="3",n.message="4",n.upgrade="5",n.noop="6";var r=Object.create(null);Object.keys(n).forEach((function(t){r[n[t]]=t}));t.exports={PACKET_TYPES:n,PACKET_TYPES_REVERSE:r,ERROR_PACKET:{type:"error",data:"parser error"}}},function(t,e,n){"use strict";var r,o="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),i={},s=0,c=0;function a(t){var e="";do{e=o[t%64]+e,t=Math.floor(t/64)}while(t>0);return e}function u(){var t=a(+new Date);return t!==r?(s=0,r=t):t+"."+a(s++)}for(;c<64;c++)i[o[c]]=c;u.encode=a,u.decode=function(t){var e=0;for(c=0;c<t.length;c++)e=64*e+i[t.charAt(c)];return e},t.exports=u},function(t,e){t.exports.pick=function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r<e;r++)n[r-1]=arguments[r];return n.reduce((function(e,n){return t.hasOwnProperty(n)&&(e[n]=t[n]),e}),{})}},function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(!t)return;if("string"==typeof t)return i(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return i(t,e)}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,o=function(){};return{s:o,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,c=!0,a=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return c=t.done,t},e:function(t){a=!0,s=t},f:function(){try{c||null==n.return||n.return()}finally{if(a)throw s}}}}function i(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function s(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function c(t,e,n){return(c="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,n){var r=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=h(t)););return t}(t,e);if(r){var o=Object.getOwnPropertyDescriptor(r,e);return o.get?o.get.call(n):o.value}})(t,e,n||t)}function a(t,e){return(a=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function u(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=h(t);if(e){var o=h(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return f(this,n)}}function f(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function h(t){return(h=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.Socket=void 0;var p=n(5),l=n(15),y=n(16),d=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1}),v=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&a(t,e)}(f,t);var e,n,r,i=u(f);function f(t,e,n){var r;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,f),(r=i.call(this)).receiveBuffer=[],r.sendBuffer=[],r.ids=0,r.acks={},r.flags={},r.io=t,r.nsp=e,r.ids=0,r.acks={},r.receiveBuffer=[],r.sendBuffer=[],r.connected=!1,r.disconnected=!0,r.flags={},n&&n.auth&&(r.auth=n.auth),r.io._autoConnect&&r.open(),r}return e=f,(n=[{key:"subEvents",value:function(){if(!this.subs){var t=this.io;this.subs=[l.on(t,"open",this.onopen.bind(this)),l.on(t,"packet",this.onpacket.bind(this)),l.on(t,"error",this.onerror.bind(this)),l.on(t,"close",this.onclose.bind(this))]}}},{key:"active",get:function(){return!!this.subs}},{key:"connect",value:function(){return this.connected||(this.subEvents(),this.io._reconnecting||this.io.open(),"open"===this.io._readyState&&this.onopen()),this}},{key:"open",value:function(){return this.connect()}},{key:"send",value:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return e.unshift("message"),this.emit.apply(this,e),this}},{key:"emit",value:function(t){if(d.hasOwnProperty(t))throw new Error('"'+t+'" is a reserved event name');for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r<e;r++)n[r-1]=arguments[r];n.unshift(t);var o={type:p.PacketType.EVENT,data:n,options:{}};o.options.compress=!1!==this.flags.compress,"function"==typeof n[n.length-1]&&(this.acks[this.ids]=n.pop(),o.id=this.ids++);var i=this.io.engine&&this.io.engine.transport&&this.io.engine.transport.writable,s=this.flags.volatile&&(!i||!this.connected);return s||(this.connected?this.packet(o):this.sendBuffer.push(o)),this.flags={},this}},{key:"packet",value:function(t){t.nsp=this.nsp,this.io._packet(t)}},{key:"onopen",value:function(){var t=this;"function"==typeof this.auth?this.auth((function(e){t.packet({type:p.PacketType.CONNECT,data:e})})):this.packet({type:p.PacketType.CONNECT,data:this.auth})}},{key:"onerror",value:function(t){this.connected||this.emitReserved("connect_error",t)}},{key:"onclose",value:function(t){this.connected=!1,this.disconnected=!0,delete this.id,this.emitReserved("disconnect",t)}},{key:"onpacket",value:function(t){if(t.nsp===this.nsp)switch(t.type){case p.PacketType.CONNECT:if(t.data&&t.data.sid){var e=t.data.sid;this.onconnect(e)}else this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case p.PacketType.EVENT:case p.PacketType.BINARY_EVENT:this.onevent(t);break;case p.PacketType.ACK:case p.PacketType.BINARY_ACK:this.onack(t);break;case p.PacketType.DISCONNECT:this.ondisconnect();break;case p.PacketType.CONNECT_ERROR:var n=new Error(t.data.message);n.data=t.data.data,this.emitReserved("connect_error",n)}}},{key:"onevent",value:function(t){var e=t.data||[];null!=t.id&&e.push(this.ack(t.id)),this.connected?this.emitEvent(e):this.receiveBuffer.push(Object.freeze(e))}},{key:"emitEvent",value:function(t){if(this._anyListeners&&this._anyListeners.length){var e,n=o(this._anyListeners.slice());try{for(n.s();!(e=n.n()).done;)e.value.apply(this,t)}catch(t){n.e(t)}finally{n.f()}}c(h(f.prototype),"emit",this).apply(this,t)}},{key:"ack",value:function(t){var e=this,n=!1;return function(){if(!n){n=!0;for(var r=arguments.length,o=new Array(r),i=0;i<r;i++)o[i]=arguments[i];e.packet({type:p.PacketType.ACK,id:t,data:o})}}}},{key:"onack",value:function(t){var e=this.acks[t.id];"function"==typeof e&&(e.apply(this,t.data),delete this.acks[t.id])}},{key:"onconnect",value:function(t){this.id=t,this.connected=!0,this.disconnected=!1,this.emitBuffered(),this.emitReserved("connect")}},{key:"emitBuffered",value:function(){var t=this;this.receiveBuffer.forEach((function(e){return t.emitEvent(e)})),this.receiveBuffer=[],this.sendBuffer.forEach((function(e){return t.packet(e)})),this.sendBuffer=[]}},{key:"ondisconnect",value:function(){this.destroy(),this.onclose("io server disconnect")}},{key:"destroy",value:function(){this.subs&&(this.subs.forEach((function(t){return t()})),this.subs=void 0),this.io._destroy(this)}},{key:"disconnect",value:function(){return this.connected&&this.packet({type:p.PacketType.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}},{key:"close",value:function(){return this.disconnect()}},{key:"compress",value:function(t){return this.flags.compress=t,this}},{key:"volatile",get:function(){return this.flags.volatile=!0,this}},{key:"onAny",value:function(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(t),this}},{key:"prependAny",value:function(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(t),this}},{key:"offAny",value:function(t){if(!this._anyListeners)return this;if(t){for(var e=this._anyListeners,n=0;n<e.length;n++)if(t===e[n])return e.splice(n,1),this}else this._anyListeners=[];return this}},{key:"listenersAny",value:function(){return this._anyListeners||[]}}])&&s(e.prototype,n),r&&s(e,r),f}(y.StrictEventEmitter);e.Socket=v},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.on=void 0,e.on=function(t,e,n){return t.on(e,n),function(){t.off(e,n)}}},function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function s(t,e,n){return(s="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,n){var r=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=f(t)););return t}(t,e);if(r){var o=Object.getOwnPropertyDescriptor(r,e);return o.get?o.get.call(n):o.value}})(t,e,n||t)}function c(t,e){return(c=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function a(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=f(t);if(e){var o=f(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return u(this,n)}}function u(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function f(t){return(f=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.StrictEventEmitter=void 0;var h=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&c(t,e)}(h,t);var e,n,r,u=a(h);function h(){return o(this,h),u.apply(this,arguments)}return e=h,(n=[{key:"on",value:function(t,e){return s(f(h.prototype),"on",this).call(this,t,e),this}},{key:"once",value:function(t,e){return s(f(h.prototype),"once",this).call(this,t,e),this}},{key:"emit",value:function(t){for(var e,n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return(e=s(f(h.prototype),"emit",this)).call.apply(e,[this,t].concat(r)),this}},{key:"emitReserved",value:function(t){for(var e,n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return(e=s(f(h.prototype),"emit",this)).call.apply(e,[this,t].concat(r)),this}},{key:"listeners",value:function(t){return s(f(h.prototype),"listeners",this).call(this,t)}}])&&i(e.prototype,n),r&&i(e,r),h}(n(1));e.StrictEventEmitter=h},function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.io=e.Socket=e.Manager=e.protocol=void 0;var o=n(18),i=n(7);t.exports=e=c;var s=e.managers={};function c(t,e){"object"===r(t)&&(e=t,t=void 0),e=e||{};var n,c=o.url(t,e.path||"/socket.io"),a=c.source,u=c.id,f=c.path,h=s[u]&&f in s[u].nsps;return e.forceNew||e["force new connection"]||!1===e.multiplex||h?n=new i.Manager(a,e):(s[u]||(s[u]=new i.Manager(a,e)),n=s[u]),c.query&&!e.query&&(e.query=c.queryKey),n.socket(c.path,e)}e.io=c;var a=n(5);Object.defineProperty(e,"protocol",{enumerable:!0,get:function(){return a.protocol}}),e.connect=c;var u=n(7);Object.defineProperty(e,"Manager",{enumerable:!0,get:function(){return u.Manager}});var f=n(14);Object.defineProperty(e,"Socket",{enumerable:!0,get:function(){return f.Socket}}),e.default=c},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.url=void 0;var r=n(6);e.url=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,o=t;n=n||"undefined"!=typeof location&&location,null==t&&(t=n.protocol+"//"+n.host),"string"==typeof t&&("/"===t.charAt(0)&&(t="/"===t.charAt(1)?n.protocol+t:n.host+t),/^(https?|wss?):\/\//.test(t)||(t=void 0!==n?n.protocol+"//"+t:"https://"+t),o=r(t)),o.port||(/^(http|ws)$/.test(o.protocol)?o.port="80":/^(http|ws)s$/.test(o.protocol)&&(o.port="443")),o.path=o.path||"/";var i=-1!==o.host.indexOf(":"),s=i?"["+o.host+"]":o.host;return o.id=o.protocol+"://"+s+":"+o.port+e,o.href=o.protocol+"://"+s+(n&&n.port===o.port?"":":"+o.port),o}},function(t,e,n){var r=n(20);t.exports=function(t,e){return new r(t,e)},t.exports.Socket=r,t.exports.protocol=r.protocol,t.exports.Transport=n(3),t.exports.transports=n(8),t.exports.parser=n(0)},function(t,e,n){function r(){return(r=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t}).apply(this,arguments)}function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function c(t,e){return(c=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function a(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=f(t);if(e){var o=f(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return u(this,n)}}function u(t,e){return!e||"object"!==o(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function f(t){return(f=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}var h=n(8),p=n(1),l=n(0),y=n(6),d=n(4),v=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&c(t,e)}(p,t);var e,n,u,f=a(p);function p(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return i(this,p),e=f.call(this),t&&"object"===o(t)&&(n=t,t=null),t?(t=y(t),n.hostname=t.host,n.secure="https"===t.protocol||"wss"===t.protocol,n.port=t.port,t.query&&(n.query=t.query)):n.host&&(n.hostname=y(n.host).host),e.secure=null!=n.secure?n.secure:"undefined"!=typeof location&&"https:"===location.protocol,n.hostname&&!n.port&&(n.port=e.secure?"443":"80"),e.hostname=n.hostname||("undefined"!=typeof location?location.hostname:"localhost"),e.port=n.port||("undefined"!=typeof location&&location.port?location.port:e.secure?443:80),e.transports=n.transports||["polling","websocket"],e.readyState="",e.writeBuffer=[],e.prevBufferLen=0,e.opts=r({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,jsonp:!0,timestampParam:"t",rememberUpgrade:!1,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!0},n),e.opts.path=e.opts.path.replace(/\/$/,"")+"/","string"==typeof e.opts.query&&(e.opts.query=d.decode(e.opts.query)),e.id=null,e.upgrades=null,e.pingInterval=null,e.pingTimeout=null,e.pingTimeoutTimer=null,"function"==typeof addEventListener&&(e.opts.closeOnBeforeunload&&addEventListener("beforeunload",(function(){e.transport&&(e.transport.removeAllListeners(),e.transport.close())}),!1),"localhost"!==e.hostname&&(e.offlineEventListener=function(){e.onClose("transport close")},addEventListener("offline",e.offlineEventListener,!1))),e.open(),e}return e=p,(n=[{key:"createTransport",value:function(t){var e=function(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}(this.opts.query);e.EIO=l.protocol,e.transport=t,this.id&&(e.sid=this.id);var n=r({},this.opts.transportOptions[t],this.opts,{query:e,socket:this,hostname:this.hostname,secure:this.secure,port:this.port});return new h[t](n)}},{key:"open",value:function(){var t,e=this;if(this.opts.rememberUpgrade&&p.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket"))t="websocket";else{if(0===this.transports.length)return void setTimeout((function(){e.emit("error","No transports available")}),0);t=this.transports[0]}this.readyState="opening";try{t=this.createTransport(t)}catch(t){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)}},{key:"setTransport",value:function(t){var e=this;this.transport&&this.transport.removeAllListeners(),this.transport=t,t.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",(function(){e.onClose("transport close")}))}},{key:"probe",value:function(t){var e=this,n=this.createTransport(t,{probe:1}),r=!1;p.priorWebsocketSuccess=!1;var o=function(){r||(n.send([{type:"ping",data:"probe"}]),n.once("packet",(function(t){if(!r)if("pong"===t.type&&"probe"===t.data){if(e.upgrading=!0,e.emit("upgrading",n),!n)return;p.priorWebsocketSuccess="websocket"===n.name,e.transport.pause((function(){r||"closed"!==e.readyState&&(f(),e.setTransport(n),n.send([{type:"upgrade"}]),e.emit("upgrade",n),n=null,e.upgrading=!1,e.flush())}))}else{var o=new Error("probe error");o.transport=n.name,e.emit("upgradeError",o)}})))};function i(){r||(r=!0,f(),n.close(),n=null)}var s=function(t){var r=new Error("probe error: "+t);r.transport=n.name,i(),e.emit("upgradeError",r)};function c(){s("transport closed")}function a(){s("socket closed")}function u(t){n&&t.name!==n.name&&i()}var f=function(){n.removeListener("open",o),n.removeListener("error",s),n.removeListener("close",c),e.removeListener("close",a),e.removeListener("upgrading",u)};n.once("open",o),n.once("error",s),n.once("close",c),this.once("close",a),this.once("upgrading",u),n.open()}},{key:"onOpen",value:function(){if(this.readyState="open",p.priorWebsocketSuccess="websocket"===this.transport.name,this.emit("open"),this.flush(),"open"===this.readyState&&this.opts.upgrade&&this.transport.pause)for(var t=0,e=this.upgrades.length;t<e;t++)this.probe(this.upgrades[t])}},{key:"onPacket",value:function(t){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState)switch(this.emit("packet",t),this.emit("heartbeat"),t.type){case"open":this.onHandshake(JSON.parse(t.data));break;case"ping":this.resetPingTimeout(),this.sendPacket("pong"),this.emit("ping"),this.emit("pong");break;case"error":var e=new Error("server error");e.code=t.data,this.onError(e);break;case"message":this.emit("data",t.data),this.emit("message",t.data)}}},{key:"onHandshake",value:function(t){this.emit("handshake",t),this.id=t.sid,this.transport.query.sid=t.sid,this.upgrades=this.filterUpgrades(t.upgrades),this.pingInterval=t.pingInterval,this.pingTimeout=t.pingTimeout,this.onOpen(),"closed"!==this.readyState&&this.resetPingTimeout()}},{key:"resetPingTimeout",value:function(){var t=this;clearTimeout(this.pingTimeoutTimer),this.pingTimeoutTimer=setTimeout((function(){t.onClose("ping timeout")}),this.pingInterval+this.pingTimeout),this.opts.autoUnref&&this.pingTimeoutTimer.unref()}},{key:"onDrain",value:function(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,0===this.writeBuffer.length?this.emit("drain"):this.flush()}},{key:"flush",value:function(){"closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length&&(this.transport.send(this.writeBuffer),this.prevBufferLen=this.writeBuffer.length,this.emit("flush"))}},{key:"write",value:function(t,e,n){return this.sendPacket("message",t,e,n),this}},{key:"send",value:function(t,e,n){return this.sendPacket("message",t,e,n),this}},{key:"sendPacket",value:function(t,e,n,r){if("function"==typeof e&&(r=e,e=void 0),"function"==typeof n&&(r=n,n=null),"closing"!==this.readyState&&"closed"!==this.readyState){(n=n||{}).compress=!1!==n.compress;var o={type:t,data:e,options:n};this.emit("packetCreate",o),this.writeBuffer.push(o),r&&this.once("flush",r),this.flush()}}},{key:"close",value:function(){var t=this,e=function(){t.onClose("forced close"),t.transport.close()},n=function n(){t.removeListener("upgrade",n),t.removeListener("upgradeError",n),e()},r=function(){t.once("upgrade",n),t.once("upgradeError",n)};return"opening"!==this.readyState&&"open"!==this.readyState||(this.readyState="closing",this.writeBuffer.length?this.once("drain",(function(){t.upgrading?r():e()})):this.upgrading?r():e()),this}},{key:"onError",value:function(t){p.priorWebsocketSuccess=!1,this.emit("error",t),this.onClose("transport error",t)}},{key:"onClose",value:function(t,e){"opening"!==this.readyState&&"open"!==this.readyState&&"closing"!==this.readyState||(clearTimeout(this.pingIntervalTimer),clearTimeout(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),"function"==typeof removeEventListener&&removeEventListener("offline",this.offlineEventListener,!1),this.readyState="closed",this.id=null,this.emit("close",t,e),this.writeBuffer=[],this.prevBufferLen=0)}},{key:"filterUpgrades",value:function(t){for(var e=[],n=0,r=t.length;n<r;n++)~this.transports.indexOf(t[n])&&e.push(t[n]);return e}}])&&s(e.prototype,n),u&&s(e,u),p}(p);v.priorWebsocketSuccess=!1,v.protocol=l.protocol,t.exports=v},function(t,e){try{t.exports="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(e){t.exports=!1}},function(t,e,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(){return(o=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t}).apply(this,arguments)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function c(t,e,n){return e&&s(t.prototype,e),n&&s(t,n),t}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&u(t,e)}function u(t,e){return(u=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function f(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=p(t);if(e){var o=p(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return h(this,n)}}function h(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function p(t){return(p=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}var l=n(9),y=n(10),d=n(1),v=n(13).pick,b=n(2);function m(){}var g=null!=new l({xdomain:!1}).responseType,_=function(t){a(n,t);var e=f(n);function n(t){var r;if(i(this,n),r=e.call(this,t),"undefined"!=typeof location){var o="https:"===location.protocol,s=location.port;s||(s=o?443:80),r.xd="undefined"!=typeof location&&t.hostname!==location.hostname||s!==t.port,r.xs=t.secure!==o}var c=t&&t.forceBase64;return r.supportsBinary=g&&!c,r}return c(n,[{key:"request",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return o(t,{xd:this.xd,xs:this.xs},this.opts),new w(this.uri(),t)}},{key:"doWrite",value:function(t,e){var n=this,r=this.request({method:"POST",data:t});r.on("success",e),r.on("error",(function(t){n.onError("xhr post error",t)}))}},{key:"doPoll",value:function(){var t=this,e=this.request();e.on("data",this.onData.bind(this)),e.on("error",(function(e){t.onError("xhr poll error",e)})),this.pollXhr=e}}]),n}(y),w=function(t){a(n,t);var e=f(n);function n(t,r){var o;return i(this,n),(o=e.call(this)).opts=r,o.method=r.method||"GET",o.uri=t,o.async=!1!==r.async,o.data=void 0!==r.data?r.data:null,o.create(),o}return c(n,[{key:"create",value:function(){var t=this,e=v(this.opts,"agent","enablesXDR","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");e.xdomain=!!this.opts.xd,e.xscheme=!!this.opts.xs;var r=this.xhr=new l(e);try{r.open(this.method,this.uri,this.async);try{if(this.opts.extraHeaders)for(var o in r.setDisableHeaderCheck&&r.setDisableHeaderCheck(!0),this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(o)&&r.setRequestHeader(o,this.opts.extraHeaders[o])}catch(t){}if("POST"===this.method)try{r.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(t){}try{r.setRequestHeader("Accept","*/*")}catch(t){}"withCredentials"in r&&(r.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(r.timeout=this.opts.requestTimeout),this.hasXDR()?(r.onload=function(){t.onLoad()},r.onerror=function(){t.onError(r.responseText)}):r.onreadystatechange=function(){4===r.readyState&&(200===r.status||1223===r.status?t.onLoad():setTimeout((function(){t.onError("number"==typeof r.status?r.status:0)}),0))},r.send(this.data)}catch(e){return void setTimeout((function(){t.onError(e)}),0)}"undefined"!=typeof document&&(this.index=n.requestsCount++,n.requests[this.index]=this)}},{key:"onSuccess",value:function(){this.emit("success"),this.cleanup()}},{key:"onData",value:function(t){this.emit("data",t),this.onSuccess()}},{key:"onError",value:function(t){this.emit("error",t),this.cleanup(!0)}},{key:"cleanup",value:function(t){if(void 0!==this.xhr&&null!==this.xhr){if(this.hasXDR()?this.xhr.onload=this.xhr.onerror=m:this.xhr.onreadystatechange=m,t)try{this.xhr.abort()}catch(t){}"undefined"!=typeof document&&delete n.requests[this.index],this.xhr=null}}},{key:"onLoad",value:function(){var t=this.xhr.responseText;null!==t&&this.onData(t)}},{key:"hasXDR",value:function(){return"undefined"!=typeof XDomainRequest&&!this.xs&&this.enablesXDR}},{key:"abort",value:function(){this.cleanup()}}]),n}(d);if(w.requestsCount=0,w.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",k);else if("function"==typeof addEventListener){addEventListener("onpagehide"in b?"pagehide":"unload",k,!1)}function k(){for(var t in w.requests)w.requests.hasOwnProperty(t)&&w.requests[t].abort()}t.exports=_,t.exports.Request=w},function(t,e,n){var r=n(11).PACKET_TYPES,o="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===Object.prototype.toString.call(Blob),i="function"==typeof ArrayBuffer,s=function(t,e){var n=new FileReader;return n.onload=function(){var t=n.result.split(",")[1];e("b"+t)},n.readAsDataURL(t)};t.exports=function(t,e,n){var c,a=t.type,u=t.data;return o&&u instanceof Blob?e?n(u):s(u,n):i&&(u instanceof ArrayBuffer||(c=u,"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(c):c&&c.buffer instanceof ArrayBuffer))?e?n(u instanceof ArrayBuffer?u:u.buffer):s(new Blob([u]),n):n(r[a]+(u||""))}},function(t,e,n){var r,o=n(11),i=o.PACKET_TYPES_REVERSE,s=o.ERROR_PACKET;"function"==typeof ArrayBuffer&&(r=n(25));var c=function(t,e){if(r){var n=r.decode(t);return a(n,e)}return{base64:!0,data:t}},a=function(t,e){switch(e){case"blob":return t instanceof ArrayBuffer?new Blob([t]):t;case"arraybuffer":default:return t}};t.exports=function(t,e){if("string"!=typeof t)return{type:"message",data:a(t,e)};var n=t.charAt(0);return"b"===n?{type:"message",data:c(t.substring(1),e)}:i[n]?t.length>1?{type:i[n],data:t.substring(1)}:{type:i[n]}:s}},function(t,e){!function(t){"use strict";e.encode=function(e){var n,r=new Uint8Array(e),o=r.length,i="";for(n=0;n<o;n+=3)i+=t[r[n]>>2],i+=t[(3&r[n])<<4|r[n+1]>>4],i+=t[(15&r[n+1])<<2|r[n+2]>>6],i+=t[63&r[n+2]];return o%3==2?i=i.substring(0,i.length-1)+"=":o%3==1&&(i=i.substring(0,i.length-2)+"=="),i},e.decode=function(e){var n,r,o,i,s,c=.75*e.length,a=e.length,u=0;"="===e[e.length-1]&&(c--,"="===e[e.length-2]&&c--);var f=new ArrayBuffer(c),h=new Uint8Array(f);for(n=0;n<a;n+=4)r=t.indexOf(e[n]),o=t.indexOf(e[n+1]),i=t.indexOf(e[n+2]),s=t.indexOf(e[n+3]),h[u++]=r<<2|o>>4,h[u++]=(15&o)<<4|i>>2,h[u++]=(3&i)<<6|63&s;return f}}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")},function(t,e,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function i(t,e,n){return(i="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,n){var r=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=f(t)););return t}(t,e);if(r){var o=Object.getOwnPropertyDescriptor(r,e);return o.get?o.get.call(n):o.value}})(t,e,n||t)}function s(t,e){return(s=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function c(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=f(t);if(e){var o=f(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return a(this,n)}}function a(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?u(t):e}function u(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function f(t){return(f=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}var h,p=n(10),l=n(2),y=/\n/g,d=/\\n/g,v=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&s(t,e)}(p,t);var e,n,r,a=c(p);function p(t){var e;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,p),(e=a.call(this,t)).query=e.query||{},h||(h=l.___eio=l.___eio||[]),e.index=h.length,h.push(e.onData.bind(u(e))),e.query.j=e.index,e}return e=p,(n=[{key:"supportsBinary",get:function(){return!1}},{key:"doClose",value:function(){this.script&&(this.script.onerror=function(){},this.script.parentNode.removeChild(this.script),this.script=null),this.form&&(this.form.parentNode.removeChild(this.form),this.form=null,this.iframe=null),i(f(p.prototype),"doClose",this).call(this)}},{key:"doPoll",value:function(){var t=this,e=document.createElement("script");this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),e.async=!0,e.src=this.uri(),e.onerror=function(e){t.onError("jsonp poll error",e)};var n=document.getElementsByTagName("script")[0];n?n.parentNode.insertBefore(e,n):(document.head||document.body).appendChild(e),this.script=e,"undefined"!=typeof navigator&&/gecko/i.test(navigator.userAgent)&&setTimeout((function(){var t=document.createElement("iframe");document.body.appendChild(t),document.body.removeChild(t)}),100)}},{key:"doWrite",value:function(t,e){var n,r=this;if(!this.form){var o=document.createElement("form"),i=document.createElement("textarea"),s=this.iframeId="eio_iframe_"+this.index;o.className="socketio",o.style.position="absolute",o.style.top="-1000px",o.style.left="-1000px",o.target=s,o.method="POST",o.setAttribute("accept-charset","utf-8"),i.name="d",o.appendChild(i),document.body.appendChild(o),this.form=o,this.area=i}function c(){a(),e()}this.form.action=this.uri();var a=function(){if(r.iframe)try{r.form.removeChild(r.iframe)}catch(t){r.onError("jsonp polling iframe removal error",t)}try{var t='<iframe src="javascript:0" name="'+r.iframeId+'">';n=document.createElement(t)}catch(t){(n=document.createElement("iframe")).name=r.iframeId,n.src="javascript:0"}n.id=r.iframeId,r.form.appendChild(n),r.iframe=n};a(),t=t.replace(d,"\\\n"),this.area.value=t.replace(y,"\\n");try{this.form.submit()}catch(t){}this.iframe.attachEvent?this.iframe.onreadystatechange=function(){"complete"===r.iframe.readyState&&c()}:this.iframe.onload=c}}])&&o(e.prototype,n),r&&o(e,r),p}(p);t.exports=v},function(t,e,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function i(t,e){return(i=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function s(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=a(t);if(e){var o=a(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return c(this,n)}}function c(t,e){return!e||"object"!==r(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function a(t){return(a=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}var u=n(3),f=n(0),h=n(4),p=n(12),l=n(13).pick,y=n(28),d=y.WebSocket,v=y.usingBrowserWebSocket,b=y.defaultBinaryType,m=y.nextTick,g="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),_=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&i(t,e)}(a,t);var e,n,r,c=s(a);function a(t){var e;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,a),(e=c.call(this,t)).supportsBinary=!t.forceBase64,e}return e=a,(n=[{key:"name",get:function(){return"websocket"}},{key:"doOpen",value:function(){if(this.check()){var t=this.uri(),e=this.opts.protocols,n=g?{}:l(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(n.headers=this.opts.extraHeaders);try{this.ws=v&&!g?e?new d(t,e):new d(t):new d(t,e,n)}catch(t){return this.emit("error",t)}this.ws.binaryType=this.socket.binaryType||b,this.addEventListeners()}}},{key:"addEventListeners",value:function(){var t=this;this.ws.onopen=function(){t.opts.autoUnref&&t.ws._socket.unref(),t.onOpen()},this.ws.onclose=this.onClose.bind(this),this.ws.onmessage=function(e){return t.onData(e.data)},this.ws.onerror=function(e){return t.onError("websocket error",e)}}},{key:"write",value:function(t){var e=this;this.writable=!1;for(var n=function(n){var r=t[n],o=n===t.length-1;f.encodePacket(r,e.supportsBinary,(function(t){var n={};v||(r.options&&(n.compress=r.options.compress),e.opts.perMessageDeflate&&("string"==typeof t?Buffer.byteLength(t):t.length)<e.opts.perMessageDeflate.threshold&&(n.compress=!1));try{v?e.ws.send(t):e.ws.send(t,n)}catch(t){}o&&m((function(){e.writable=!0,e.emit("drain")}))}))},r=0;r<t.length;r++)n(r)}},{key:"onClose",value:function(){u.prototype.onClose.call(this)}},{key:"doClose",value:function(){void 0!==this.ws&&(this.ws.close(),this.ws=null)}},{key:"uri",value:function(){var t=this.query||{},e=this.opts.secure?"wss":"ws",n="";return this.opts.port&&("wss"===e&&443!==Number(this.opts.port)||"ws"===e&&80!==Number(this.opts.port))&&(n=":"+this.opts.port),this.opts.timestampRequests&&(t[this.opts.timestampParam]=p()),this.supportsBinary||(t.b64=1),(t=h.encode(t)).length&&(t="?"+t),e+"://"+(-1!==this.opts.hostname.indexOf(":")?"["+this.opts.hostname+"]":this.opts.hostname)+n+this.opts.path+t}},{key:"check",value:function(){return!(!d||"__initialize"in d&&this.name===a.prototype.name)}}])&&o(e.prototype,n),r&&o(e,r),a}(u);t.exports=_},function(t,e,n){var r=n(2),o="function"==typeof Promise&&"function"==typeof Promise.resolve?function(t){return Promise.resolve().then(t)}:function(t){return setTimeout(t,0)};t.exports={WebSocket:r.WebSocket||r.MozWebSocket,usingBrowserWebSocket:!0,defaultBinaryType:"arraybuffer",nextTick:o}},function(t,e,n){e.encode=n(30),e.decode=n(31)},function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e,n){for(var r=0,o=0,i=n.length;o<i;o++)(r=n.charCodeAt(o))<128?t.setUint8(e++,r):r<2048?(t.setUint8(e++,192|r>>6),t.setUint8(e++,128|63&r)):r<55296||r>=57344?(t.setUint8(e++,224|r>>12),t.setUint8(e++,128|r>>6&63),t.setUint8(e++,128|63&r)):(o++,r=65536+((1023&r)<<10|1023&n.charCodeAt(o)),t.setUint8(e++,240|r>>18),t.setUint8(e++,128|r>>12&63),t.setUint8(e++,128|r>>6&63),t.setUint8(e++,128|63&r))}t.exports=function(t){var e=[],n=[],i=function t(e,n,o){var i=r(o),s=0,c=0,a=0,u=0,f=0,h=0;if("string"===i){if((f=function(t){for(var e=0,n=0,r=0,o=t.length;r<o;r++)(e=t.charCodeAt(r))<128?n+=1:e<2048?n+=2:e<55296||e>=57344?n+=3:(r++,n+=4);return n}(o))<32)e.push(160|f),h=1;else if(f<256)e.push(217,f),h=2;else if(f<65536)e.push(218,f>>8,f),h=3;else{if(!(f<4294967296))throw new Error("String too long");e.push(219,f>>24,f>>16,f>>8,f),h=5}return n.push({_str:o,_length:f,_offset:e.length}),h+f}if("number"===i)return Math.floor(o)===o&&isFinite(o)?o>=0?o<128?(e.push(o),1):o<256?(e.push(204,o),2):o<65536?(e.push(205,o>>8,o),3):o<4294967296?(e.push(206,o>>24,o>>16,o>>8,o),5):(a=o/Math.pow(2,32)>>0,u=o>>>0,e.push(207,a>>24,a>>16,a>>8,a,u>>24,u>>16,u>>8,u),9):o>=-32?(e.push(o),1):o>=-128?(e.push(208,o),2):o>=-32768?(e.push(209,o>>8,o),3):o>=-2147483648?(e.push(210,o>>24,o>>16,o>>8,o),5):(a=Math.floor(o/Math.pow(2,32)),u=o>>>0,e.push(211,a>>24,a>>16,a>>8,a,u>>24,u>>16,u>>8,u),9):(e.push(203),n.push({_float:o,_length:8,_offset:e.length}),9);if("object"===i){if(null===o)return e.push(192),1;if(Array.isArray(o)){if((f=o.length)<16)e.push(144|f),h=1;else if(f<65536)e.push(220,f>>8,f),h=3;else{if(!(f<4294967296))throw new Error("Array too large");e.push(221,f>>24,f>>16,f>>8,f),h=5}for(s=0;s<f;s++)h+=t(e,n,o[s]);return h}if(o instanceof Date){var p=o.getTime();return a=Math.floor(p/Math.pow(2,32)),u=p>>>0,e.push(215,0,a>>24,a>>16,a>>8,a,u>>24,u>>16,u>>8,u),10}if(o instanceof ArrayBuffer){if((f=o.byteLength)<256)e.push(196,f),h=2;else if(f<65536)e.push(197,f>>8,f),h=3;else{if(!(f<4294967296))throw new Error("Buffer too large");e.push(198,f>>24,f>>16,f>>8,f),h=5}return n.push({_bin:o,_length:f,_offset:e.length}),h+f}if("function"==typeof o.toJSON)return t(e,n,o.toJSON());var l=[],y="",d=Object.keys(o);for(s=0,c=d.length;s<c;s++)"function"!=typeof o[y=d[s]]&&l.push(y);if((f=l.length)<16)e.push(128|f),h=1;else if(f<65536)e.push(222,f>>8,f),h=3;else{if(!(f<4294967296))throw new Error("Object too large");e.push(223,f>>24,f>>16,f>>8,f),h=5}for(s=0;s<f;s++)h+=t(e,n,y=l[s]),h+=t(e,n,o[y]);return h}if("boolean"===i)return e.push(o?195:194),1;if("undefined"===i)return e.push(212,0,0),3;throw new Error("Could not encode")}(e,n,t),s=new ArrayBuffer(i),c=new DataView(s),a=0,u=0,f=-1;n.length>0&&(f=n[0]._offset);for(var h,p=0,l=0,y=0,d=e.length;y<d;y++)if(c.setUint8(u+y,e[y]),y+1===f){if(p=(h=n[a])._length,l=u+f,h._bin)for(var v=new Uint8Array(h._bin),b=0;b<p;b++)c.setUint8(l+b,v[b]);else h._str?o(c,l,h._str):void 0!==h._float&&c.setFloat64(l,h._float);u+=p,n[++a]&&(f=n[a]._offset)}return s}},function(t,e,n){"use strict";function r(t){if(this._offset=0,t instanceof ArrayBuffer)this._buffer=t,this._view=new DataView(this._buffer);else{if(!ArrayBuffer.isView(t))throw new Error("Invalid argument");this._buffer=t.buffer,this._view=new DataView(this._buffer,t.byteOffset,t.byteLength)}}r.prototype._array=function(t){for(var e=new Array(t),n=0;n<t;n++)e[n]=this._parse();return e},r.prototype._map=function(t){for(var e={},n=0;n<t;n++)e[this._parse()]=this._parse();return e},r.prototype._str=function(t){var e=function(t,e,n){for(var r="",o=0,i=e,s=e+n;i<s;i++){var c=t.getUint8(i);if(0!=(128&c))if(192!=(224&c))if(224!=(240&c)){if(240!=(248&c))throw new Error("Invalid byte "+c.toString(16));(o=(7&c)<<18|(63&t.getUint8(++i))<<12|(63&t.getUint8(++i))<<6|(63&t.getUint8(++i))<<0)>=65536?(o-=65536,r+=String.fromCharCode(55296+(o>>>10),56320+(1023&o))):r+=String.fromCharCode(o)}else r+=String.fromCharCode((15&c)<<12|(63&t.getUint8(++i))<<6|(63&t.getUint8(++i))<<0);else r+=String.fromCharCode((31&c)<<6|63&t.getUint8(++i));else r+=String.fromCharCode(c)}return r}(this._view,this._offset,t);return this._offset+=t,e},r.prototype._bin=function(t){var e=this._buffer.slice(this._offset,this._offset+t);return this._offset+=t,e},r.prototype._parse=function(){var t,e=this._view.getUint8(this._offset++),n=0,r=0,o=0,i=0;if(e<192)return e<128?e:e<144?this._map(15&e):e<160?this._array(15&e):this._str(31&e);if(e>223)return-1*(255-e+1);switch(e){case 192:return null;case 194:return!1;case 195:return!0;case 196:return n=this._view.getUint8(this._offset),this._offset+=1,this._bin(n);case 197:return n=this._view.getUint16(this._offset),this._offset+=2,this._bin(n);case 198:return n=this._view.getUint32(this._offset),this._offset+=4,this._bin(n);case 199:return n=this._view.getUint8(this._offset),r=this._view.getInt8(this._offset+1),this._offset+=2,[r,this._bin(n)];case 200:return n=this._view.getUint16(this._offset),r=this._view.getInt8(this._offset+2),this._offset+=3,[r,this._bin(n)];case 201:return n=this._view.getUint32(this._offset),r=this._view.getInt8(this._offset+4),this._offset+=5,[r,this._bin(n)];case 202:return t=this._view.getFloat32(this._offset),this._offset+=4,t;case 203:return t=this._view.getFloat64(this._offset),this._offset+=8,t;case 204:return t=this._view.getUint8(this._offset),this._offset+=1,t;case 205:return t=this._view.getUint16(this._offset),this._offset+=2,t;case 206:return t=this._view.getUint32(this._offset),this._offset+=4,t;case 207:return o=this._view.getUint32(this._offset)*Math.pow(2,32),i=this._view.getUint32(this._offset+4),this._offset+=8,o+i;case 208:return t=this._view.getInt8(this._offset),this._offset+=1,t;case 209:return t=this._view.getInt16(this._offset),this._offset+=2,t;case 210:return t=this._view.getInt32(this._offset),this._offset+=4,t;case 211:return o=this._view.getInt32(this._offset)*Math.pow(2,32),i=this._view.getUint32(this._offset+4),this._offset+=8,o+i;case 212:return r=this._view.getInt8(this._offset),this._offset+=1,0===r?void(this._offset+=1):[r,this._bin(1)];case 213:return r=this._view.getInt8(this._offset),this._offset+=1,[r,this._bin(2)];case 214:return r=this._view.getInt8(this._offset),this._offset+=1,[r,this._bin(4)];case 215:return r=this._view.getInt8(this._offset),this._offset+=1,0===r?(o=this._view.getInt32(this._offset)*Math.pow(2,32),i=this._view.getUint32(this._offset+4),this._offset+=8,new Date(o+i)):[r,this._bin(8)];case 216:return r=this._view.getInt8(this._offset),this._offset+=1,[r,this._bin(16)];case 217:return n=this._view.getUint8(this._offset),this._offset+=1,this._str(n);case 218:return n=this._view.getUint16(this._offset),this._offset+=2,this._str(n);case 219:return n=this._view.getUint32(this._offset),this._offset+=4,this._str(n);case 220:return n=this._view.getUint16(this._offset),this._offset+=2,this._array(n);case 221:return n=this._view.getUint32(this._offset),this._offset+=4,this._array(n);case 222:return n=this._view.getUint16(this._offset),this._offset+=2,this._map(n);case 223:return n=this._view.getUint32(this._offset),this._offset+=4,this._map(n)}throw new Error("Could not parse")},t.exports=function(t){var e=new r(t),n=e._parse();if(e._offset!==t.byteLength)throw new Error(t.byteLength-e._offset+" trailing bytes");return n}},function(t,e){function n(t){t=t||{},this.ms=t.min||100,this.max=t.max||1e4,this.factor=t.factor||2,this.jitter=t.jitter>0&&t.jitter<=1?t.jitter:0,this.attempts=0}t.exports=n,n.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),n=Math.floor(e*this.jitter*t);t=0==(1&Math.floor(10*e))?t-n:t+n}return 0|Math.min(t,this.max)},n.prototype.reset=function(){this.attempts=0},n.prototype.setMin=function(t){this.ms=t},n.prototype.setMax=function(t){this.max=t},n.prototype.setJitter=function(t){this.jitter=t}}])}));
+//# sourceMappingURL=socket.io.msgpack.min.js.map \ No newline at end of file
diff --git a/client/lib/socket.io.msgpack.min.js.map b/client/lib/socket.io.msgpack.min.js.map
new file mode 100644
index 0000000..a6b111b
--- /dev/null
+++ b/client/lib/socket.io.msgpack.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack://io/webpack/universalModuleDefinition","webpack://io/webpack/bootstrap","webpack://io/./node_modules/engine.io-parser/lib/index.js","webpack://io/./node_modules/component-emitter/index.js","webpack://io/./node_modules/engine.io-client/lib/globalThis.browser.js","webpack://io/./node_modules/engine.io-client/lib/transport.js","webpack://io/./node_modules/parseqs/index.js","webpack://io/./node_modules/socket.io-msgpack-parser/index.js","webpack://io/./node_modules/parseuri/index.js","webpack://io/./build/manager.js","webpack://io/./node_modules/engine.io-client/lib/transports/index.js","webpack://io/./node_modules/engine.io-client/lib/xmlhttprequest.js","webpack://io/./node_modules/engine.io-client/lib/transports/polling.js","webpack://io/./node_modules/engine.io-parser/lib/commons.js","webpack://io/./node_modules/yeast/index.js","webpack://io/./node_modules/engine.io-client/lib/util.js","webpack://io/./build/socket.js","webpack://io/./build/on.js","webpack://io/./build/typed-events.js","webpack://io/./build/index.js","webpack://io/./build/url.js","webpack://io/./node_modules/engine.io-client/lib/index.js","webpack://io/./node_modules/engine.io-client/lib/socket.js","webpack://io/./node_modules/has-cors/index.js","webpack://io/./node_modules/engine.io-client/lib/transports/polling-xhr.js","webpack://io/./node_modules/engine.io-parser/lib/encodePacket.browser.js","webpack://io/./node_modules/engine.io-parser/lib/decodePacket.browser.js","webpack://io/./node_modules/engine.io-parser/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js","webpack://io/./node_modules/engine.io-client/lib/transports/polling-jsonp.js","webpack://io/./node_modules/engine.io-client/lib/transports/websocket.js","webpack://io/./node_modules/engine.io-client/lib/transports/websocket-constructor.browser.js","webpack://io/./node_modules/notepack.io/lib/index.js","webpack://io/./node_modules/notepack.io/browser/encode.js","webpack://io/./node_modules/notepack.io/browser/decode.js","webpack://io/./node_modules/backo2/index.js"],"names":["root","factory","exports","module","define","amd","self","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","encodePacket","require","decodePacket","SEPARATOR","String","fromCharCode","protocol","encodePayload","packets","callback","length","encodedPackets","Array","count","forEach","packet","encodedPacket","join","decodePayload","encodedPayload","binaryType","split","decodedPacket","push","type","Emitter","obj","mixin","on","addEventListener","event","fn","this","_callbacks","once","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","cb","callbacks","splice","emit","args","len","slice","listeners","hasListeners","window","Function","parser","Transport","opts","query","readyState","socket","msg","desc","err","Error","description","doOpen","doClose","onClose","write","writable","data","onPacket","encode","str","encodeURIComponent","decode","qs","qry","pairs","pair","decodeURIComponent","msgpack","PacketType","CONNECT","DISCONNECT","EVENT","ACK","CONNECT_ERROR","isInteger","Number","isFinite","Math","floor","isString","isObject","toString","Encoder","Decoder","add","decoded","checkPacket","nsp","undefined","isArray","isDataValid","id","destroy","re","parts","src","b","indexOf","e","substring","replace","exec","uri","source","host","authority","ipv6uri","pathNames","path","names","substr","queryKey","$0","$1","$2","Manager","eio","socket_1","on_1","Backoff","nsps","subs","reconnection","reconnectionAttempts","Infinity","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","min","max","jitter","timeout","_readyState","_parser","encoder","decoder","_autoConnect","autoConnect","open","v","_reconnection","_reconnectionAttempts","_a","_reconnectionDelay","setMin","_randomizationFactor","setJitter","_reconnectionDelayMax","setMax","_timeout","_reconnecting","attempts","reconnect","engine","skipReconnect","openSubDestroy","onopen","errorSub","cleanup","emitReserved","maybeReconnectOnOpen","timer","setTimeout","close","autoUnref","unref","clearTimeout","onping","ondata","onerror","onclose","ondecoded","Socket","keys","active","_close","options","subDestroy","reset","reason","delay","duration","onreconnect","attempt","StrictEventEmitter","XMLHttpRequest","XHR","JSONP","websocket","polling","xd","xs","jsonp","location","isSSL","port","hostname","secure","xdomain","xscheme","forceJSONP","hasCORS","globalThis","enablesXDR","XDomainRequest","concat","parseqs","yeast","Polling","poll","onPause","pause","total","doPoll","onOpen","doWrite","schema","timestampRequests","timestampParam","supportsBinary","sid","b64","PACKET_TYPES","PACKET_TYPES_REVERSE","ERROR_PACKET","prev","alphabet","map","seed","num","encoded","now","Date","charAt","pick","attr","reduce","acc","k","socket_io_parser_1","typed_events_1","RESERVED_EVENTS","freeze","connect","connect_error","disconnect","disconnecting","newListener","io","receiveBuffer","sendBuffer","ids","acks","flags","connected","disconnected","auth","onpacket","subEvents","unshift","ev","compress","pop","isTransportWritable","transport","discardPacket","_packet","onconnect","BINARY_EVENT","onevent","BINARY_ACK","onack","ondisconnect","message","ack","emitEvent","_anyListeners","sent","emitBuffered","listener","url_1","manager_1","lookup","cache","managers","parsed","url","sameNamespace","forceNew","multiplex","manager_2","parseuri","loc","test","ipv6","href","transports","writeBuffer","prevBufferLen","agent","withCredentials","upgrade","rememberUpgrade","rejectUnauthorized","perMessageDeflate","threshold","transportOptions","closeOnBeforeunload","upgrades","pingInterval","pingTimeout","pingTimeoutTimer","offlineEventListener","clone","EIO","priorWebsocketSuccess","createTransport","shift","setTransport","onDrain","onError","probe","failed","onTransportOpen","send","upgrading","flush","freezeTransport","error","onTransportClose","onupgrade","to","onHandshake","JSON","parse","resetPingTimeout","sendPacket","code","filterUpgrades","cleanupAndClose","waitForUpgrade","pingIntervalTimer","filteredUpgrades","j","empty","hasXHR2","responseType","forceBase64","Request","req","request","method","onData","pollXhr","async","xhr","extraHeaders","setDisableHeaderCheck","setRequestHeader","requestTimeout","hasXDR","onload","onLoad","responseText","onreadystatechange","status","document","index","requestsCount","requests","onSuccess","fromError","abort","attachEvent","unloadHandler","withNativeBlob","Blob","withNativeArrayBuffer","ArrayBuffer","encodeBlobAsBase64","fileReader","FileReader","content","result","readAsDataURL","isView","buffer","base64decoder","decodeBase64Packet","mapBinary","base64","chars","arraybuffer","bytes","Uint8Array","encoded1","encoded2","encoded3","encoded4","bufferLength","rNewline","rEscapedNewline","JSONPPolling","___eio","script","parentNode","removeChild","form","iframe","createElement","insertAt","getElementsByTagName","insertBefore","head","body","appendChild","navigator","userAgent","area","iframeId","className","style","position","top","left","target","setAttribute","complete","initIframe","action","html","submit","WebSocket","usingBrowserWebSocket","defaultBinaryType","nextTick","isReactNative","product","toLowerCase","WS","check","protocols","headers","ws","addEventListeners","_socket","onmessage","lastPacket","Buffer","byteLength","Promise","resolve","then","MozWebSocket","utf8Write","view","offset","charCodeAt","setUint8","defers","size","_encode","hi","lo","utf8Length","_str","_length","_offset","pow","_float","time","getTime","_bin","toJSON","allKeys","buf","DataView","deferIndex","deferWritten","nextOffset","defer","deferLength","bin","setFloat64","_buffer","_view","byteOffset","_array","_parse","_map","string","chr","end","byte","getUint8","utf8Read","prefix","getUint16","getUint32","getInt8","getFloat32","getFloat64","getInt16","getInt32","ms","factor","rand","random","deviation"],"mappings":"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","file":"socket.io.msgpack.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"io\"] = factory();\n\telse\n\t\troot[\"io\"] = factory();\n})(self, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 17);\n","const encodePacket = require(\"./encodePacket\");\nconst decodePacket = require(\"./decodePacket\");\n\nconst SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text\n\nconst encodePayload = (packets, callback) => {\n // some packets may be added to the array while encoding, so the initial length must be saved\n const length = packets.length;\n const encodedPackets = new Array(length);\n let count = 0;\n\n packets.forEach((packet, i) => {\n // force base64 encoding for binary packets\n encodePacket(packet, false, encodedPacket => {\n encodedPackets[i] = encodedPacket;\n if (++count === length) {\n callback(encodedPackets.join(SEPARATOR));\n }\n });\n });\n};\n\nconst decodePayload = (encodedPayload, binaryType) => {\n const encodedPackets = encodedPayload.split(SEPARATOR);\n const packets = [];\n for (let i = 0; i < encodedPackets.length; i++) {\n const decodedPacket = decodePacket(encodedPackets[i], binaryType);\n packets.push(decodedPacket);\n if (decodedPacket.type === \"error\") {\n break;\n }\n }\n return packets;\n};\n\nmodule.exports = {\n protocol: 4,\n encodePacket,\n encodePayload,\n decodePacket,\n decodePayload\n};\n","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n for (var key in Emitter.prototype) {\r\n obj[key] = Emitter.prototype[key];\r\n }\r\n return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n .push(fn);\r\n return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n function on() {\r\n this.off(event, on);\r\n fn.apply(this, arguments);\r\n }\r\n\r\n on.fn = fn;\r\n this.on(event, on);\r\n return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n\r\n // all\r\n if (0 == arguments.length) {\r\n this._callbacks = {};\r\n return this;\r\n }\r\n\r\n // specific event\r\n var callbacks = this._callbacks['$' + event];\r\n if (!callbacks) return this;\r\n\r\n // remove all handlers\r\n if (1 == arguments.length) {\r\n delete this._callbacks['$' + event];\r\n return this;\r\n }\r\n\r\n // remove specific handler\r\n var cb;\r\n for (var i = 0; i < callbacks.length; i++) {\r\n cb = callbacks[i];\r\n if (cb === fn || cb.fn === fn) {\r\n callbacks.splice(i, 1);\r\n break;\r\n }\r\n }\r\n\r\n // Remove event specific arrays for event types that no\r\n // one is subscribed for to avoid memory leak.\r\n if (callbacks.length === 0) {\r\n delete this._callbacks['$' + event];\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n this._callbacks = this._callbacks || {};\r\n\r\n var args = new Array(arguments.length - 1)\r\n , callbacks = this._callbacks['$' + event];\r\n\r\n for (var i = 1; i < arguments.length; i++) {\r\n args[i - 1] = arguments[i];\r\n }\r\n\r\n if (callbacks) {\r\n callbacks = callbacks.slice(0);\r\n for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n callbacks[i].apply(this, args);\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n this._callbacks = this._callbacks || {};\r\n return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n return !! this.listeners(event).length;\r\n};\r\n","module.exports = (() => {\n if (typeof self !== \"undefined\") {\n return self;\n } else if (typeof window !== \"undefined\") {\n return window;\n } else {\n return Function(\"return this\")();\n }\n})();\n","const parser = require(\"engine.io-parser\");\nconst Emitter = require(\"component-emitter\");\n\n\n\nclass Transport extends Emitter {\n /**\n * Transport abstract constructor.\n *\n * @param {Object} options.\n * @api private\n */\n constructor(opts) {\n super();\n\n this.opts = opts;\n this.query = opts.query;\n this.readyState = \"\";\n this.socket = opts.socket;\n }\n\n /**\n * Emits an error.\n *\n * @param {String} str\n * @return {Transport} for chaining\n * @api public\n */\n onError(msg, desc) {\n const err = new Error(msg);\n err.type = \"TransportError\";\n err.description = desc;\n this.emit(\"error\", err);\n return this;\n }\n\n /**\n * Opens the transport.\n *\n * @api public\n */\n open() {\n if (\"closed\" === this.readyState || \"\" === this.readyState) {\n this.readyState = \"opening\";\n this.doOpen();\n }\n\n return this;\n }\n\n /**\n * Closes the transport.\n *\n * @api private\n */\n close() {\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.doClose();\n this.onClose();\n }\n\n return this;\n }\n\n /**\n * Sends multiple packets.\n *\n * @param {Array} packets\n * @api private\n */\n send(packets) {\n if (\"open\" === this.readyState) {\n this.write(packets);\n } else {\n // this might happen if the transport was silently closed in the beforeunload event handler\n\n\n }\n }\n\n /**\n * Called upon open\n *\n * @api private\n */\n onOpen() {\n this.readyState = \"open\";\n this.writable = true;\n this.emit(\"open\");\n }\n\n /**\n * Called with data.\n *\n * @param {String} data\n * @api private\n */\n onData(data) {\n const packet = parser.decodePacket(data, this.socket.binaryType);\n this.onPacket(packet);\n }\n\n /**\n * Called with a decoded packet.\n */\n onPacket(packet) {\n this.emit(\"packet\", packet);\n }\n\n /**\n * Called upon close.\n *\n * @api private\n */\n onClose() {\n this.readyState = \"closed\";\n this.emit(\"close\");\n }\n}\n\nmodule.exports = Transport;\n","/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\n\nexports.encode = function (obj) {\n var str = '';\n\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n if (str.length) str += '&';\n str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n }\n }\n\n return str;\n};\n\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\n\nexports.decode = function(qs){\n var qry = {};\n var pairs = qs.split('&');\n for (var i = 0, l = pairs.length; i < l; i++) {\n var pair = pairs[i].split('=');\n qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n return qry;\n};\n","var msgpack = require(\"notepack.io\");\nvar Emitter = require(\"component-emitter\");\n\nexports.protocol = 5;\n\n/**\n * Packet types (see https://github.com/socketio/socket.io-protocol)\n */\n\nvar PacketType = (exports.PacketType = {\n CONNECT: 0,\n DISCONNECT: 1,\n EVENT: 2,\n ACK: 3,\n CONNECT_ERROR: 4,\n});\n\nvar isInteger =\n Number.isInteger ||\n function (value) {\n return (\n typeof value === \"number\" &&\n isFinite(value) &&\n Math.floor(value) === value\n );\n };\n\nvar isString = function (value) {\n return typeof value === \"string\";\n};\n\nvar isObject = function (value) {\n return Object.prototype.toString.call(value) === \"[object Object]\";\n};\n\nfunction Encoder() {}\n\nEncoder.prototype.encode = function (packet) {\n return [msgpack.encode(packet)];\n};\n\nfunction Decoder() {}\n\nEmitter(Decoder.prototype);\n\nDecoder.prototype.add = function (obj) {\n var decoded = msgpack.decode(obj);\n this.checkPacket(decoded);\n this.emit(\"decoded\", decoded);\n};\n\nfunction isDataValid(decoded) {\n switch (decoded.type) {\n case PacketType.CONNECT:\n return decoded.data === undefined || isObject(decoded.data);\n case PacketType.DISCONNECT:\n return decoded.data === undefined;\n case PacketType.CONNECT_ERROR:\n return isString(decoded.data) || isObject(decoded.data);\n default:\n return Array.isArray(decoded.data);\n }\n}\n\nDecoder.prototype.checkPacket = function (decoded) {\n var isTypeValid =\n isInteger(decoded.type) &&\n decoded.type >= PacketType.CONNECT &&\n decoded.type <= PacketType.CONNECT_ERROR;\n if (!isTypeValid) {\n throw new Error(\"invalid packet type\");\n }\n\n if (!isString(decoded.nsp)) {\n throw new Error(\"invalid namespace\");\n }\n\n if (!isDataValid(decoded)) {\n throw new Error(\"invalid payload\");\n }\n\n var isAckValid = decoded.id === undefined || isInteger(decoded.id);\n if (!isAckValid) {\n throw new Error(\"invalid packet id\");\n }\n};\n\nDecoder.prototype.destroy = function () {};\n\nexports.Encoder = Encoder;\nexports.Decoder = Decoder;\n","/**\n * Parses an URI\n *\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\n * @api private\n */\n\nvar re = /^(?:(?![^:@]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\n\nvar parts = [\n 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\n\nmodule.exports = function parseuri(str) {\n var src = str,\n b = str.indexOf('['),\n e = str.indexOf(']');\n\n if (b != -1 && e != -1) {\n str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n }\n\n var m = re.exec(str || ''),\n uri = {},\n i = 14;\n\n while (i--) {\n uri[parts[i]] = m[i] || '';\n }\n\n if (b != -1 && e != -1) {\n uri.source = src;\n uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n uri.ipv6uri = true;\n }\n\n uri.pathNames = pathNames(uri, uri['path']);\n uri.queryKey = queryKey(uri, uri['query']);\n\n return uri;\n};\n\nfunction pathNames(obj, path) {\n var regx = /\\/{2,9}/g,\n names = path.replace(regx, \"/\").split(\"/\");\n\n if (path.substr(0, 1) == '/' || path.length === 0) {\n names.splice(0, 1);\n }\n if (path.substr(path.length - 1, 1) == '/') {\n names.splice(names.length - 1, 1);\n }\n\n return names;\n}\n\nfunction queryKey(uri, query) {\n var data = {};\n\n query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n if ($1) {\n data[$1] = $2;\n }\n });\n\n return data;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Manager = void 0;\nconst eio = require(\"engine.io-client\");\nconst socket_1 = require(\"./socket\");\nconst parser = require(\"socket.io-parser\");\nconst on_1 = require(\"./on\");\nconst Backoff = require(\"backo2\");\nconst typed_events_1 = require(\"./typed-events\");\n\n\nclass Manager extends typed_events_1.StrictEventEmitter {\n constructor(uri, opts) {\n super();\n this.nsps = {};\n this.subs = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n opts.path = opts.path || \"/socket.io\";\n this.opts = opts;\n this.reconnection(opts.reconnection !== false);\n this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n this.reconnectionDelay(opts.reconnectionDelay || 1000);\n this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n this.randomizationFactor(opts.randomizationFactor || 0.5);\n this.backoff = new Backoff({\n min: this.reconnectionDelay(),\n max: this.reconnectionDelayMax(),\n jitter: this.randomizationFactor(),\n });\n this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n this._readyState = \"closed\";\n this.uri = uri;\n const _parser = opts.parser || parser;\n this.encoder = new _parser.Encoder();\n this.decoder = new _parser.Decoder();\n this._autoConnect = opts.autoConnect !== false;\n if (this._autoConnect)\n this.open();\n }\n reconnection(v) {\n if (!arguments.length)\n return this._reconnection;\n this._reconnection = !!v;\n return this;\n }\n reconnectionAttempts(v) {\n if (v === undefined)\n return this._reconnectionAttempts;\n this._reconnectionAttempts = v;\n return this;\n }\n reconnectionDelay(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelay;\n this._reconnectionDelay = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v);\n return this;\n }\n randomizationFactor(v) {\n var _a;\n if (v === undefined)\n return this._randomizationFactor;\n this._randomizationFactor = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v);\n return this;\n }\n reconnectionDelayMax(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelayMax;\n this._reconnectionDelayMax = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v);\n return this;\n }\n timeout(v) {\n if (!arguments.length)\n return this._timeout;\n this._timeout = v;\n return this;\n }\n /**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @private\n */\n maybeReconnectOnOpen() {\n // Only try to reconnect if it's the first time we're connecting\n if (!this._reconnecting &&\n this._reconnection &&\n this.backoff.attempts === 0) {\n // keeps reconnection from firing twice for the same reconnection loop\n this.reconnect();\n }\n }\n /**\n * Sets the current transport `socket`.\n *\n * @param {Function} fn - optional, callback\n * @return self\n * @public\n */\n open(fn) {\n\n\n if (~this._readyState.indexOf(\"open\"))\n return this;\n\n\n this.engine = eio(this.uri, this.opts);\n const socket = this.engine;\n const self = this;\n this._readyState = \"opening\";\n this.skipReconnect = false;\n // emit `open`\n const openSubDestroy = on_1.on(socket, \"open\", function () {\n self.onopen();\n fn && fn();\n });\n // emit `error`\n const errorSub = on_1.on(socket, \"error\", (err) => {\n\n\n self.cleanup();\n self._readyState = \"closed\";\n this.emitReserved(\"error\", err);\n if (fn) {\n fn(err);\n }\n else {\n // Only do this if there is no fn to handle the error\n self.maybeReconnectOnOpen();\n }\n });\n if (false !== this._timeout) {\n const timeout = this._timeout;\n\n\n if (timeout === 0) {\n openSubDestroy(); // prevents a race condition with the 'open' event\n }\n // set timer\n const timer = setTimeout(() => {\n\n\n openSubDestroy();\n socket.close();\n socket.emit(\"error\", new Error(\"timeout\"));\n }, timeout);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(function subDestroy() {\n clearTimeout(timer);\n });\n }\n this.subs.push(openSubDestroy);\n this.subs.push(errorSub);\n return this;\n }\n /**\n * Alias for open()\n *\n * @return self\n * @public\n */\n connect(fn) {\n return this.open(fn);\n }\n /**\n * Called upon transport open.\n *\n * @private\n */\n onopen() {\n\n\n // clear old subs\n this.cleanup();\n // mark as open\n this._readyState = \"open\";\n this.emitReserved(\"open\");\n // add new subs\n const socket = this.engine;\n this.subs.push(on_1.on(socket, \"ping\", this.onping.bind(this)), on_1.on(socket, \"data\", this.ondata.bind(this)), on_1.on(socket, \"error\", this.onerror.bind(this)), on_1.on(socket, \"close\", this.onclose.bind(this)), on_1.on(this.decoder, \"decoded\", this.ondecoded.bind(this)));\n }\n /**\n * Called upon a ping.\n *\n * @private\n */\n onping() {\n this.emitReserved(\"ping\");\n }\n /**\n * Called with data.\n *\n * @private\n */\n ondata(data) {\n this.decoder.add(data);\n }\n /**\n * Called when parser fully decodes a packet.\n *\n * @private\n */\n ondecoded(packet) {\n this.emitReserved(\"packet\", packet);\n }\n /**\n * Called upon socket error.\n *\n * @private\n */\n onerror(err) {\n\n\n this.emitReserved(\"error\", err);\n }\n /**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @public\n */\n socket(nsp, opts) {\n let socket = this.nsps[nsp];\n if (!socket) {\n socket = new socket_1.Socket(this, nsp, opts);\n this.nsps[nsp] = socket;\n }\n return socket;\n }\n /**\n * Called upon a socket close.\n *\n * @param socket\n * @private\n */\n _destroy(socket) {\n const nsps = Object.keys(this.nsps);\n for (const nsp of nsps) {\n const socket = this.nsps[nsp];\n if (socket.active) {\n\n\n return;\n }\n }\n this._close();\n }\n /**\n * Writes a packet.\n *\n * @param packet\n * @private\n */\n _packet(packet) {\n\n\n const encodedPackets = this.encoder.encode(packet);\n for (let i = 0; i < encodedPackets.length; i++) {\n this.engine.write(encodedPackets[i], packet.options);\n }\n }\n /**\n * Clean up transport subscriptions and packet buffer.\n *\n * @private\n */\n cleanup() {\n\n\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs.length = 0;\n this.decoder.destroy();\n }\n /**\n * Close the current socket.\n *\n * @private\n */\n _close() {\n\n\n this.skipReconnect = true;\n this._reconnecting = false;\n if (\"opening\" === this._readyState) {\n // `onclose` will not fire because\n // an open event never happened\n this.cleanup();\n }\n this.backoff.reset();\n this._readyState = \"closed\";\n if (this.engine)\n this.engine.close();\n }\n /**\n * Alias for close()\n *\n * @private\n */\n disconnect() {\n return this._close();\n }\n /**\n * Called upon engine close.\n *\n * @private\n */\n onclose(reason) {\n\n\n this.cleanup();\n this.backoff.reset();\n this._readyState = \"closed\";\n this.emitReserved(\"close\", reason);\n if (this._reconnection && !this.skipReconnect) {\n this.reconnect();\n }\n }\n /**\n * Attempt a reconnection.\n *\n * @private\n */\n reconnect() {\n if (this._reconnecting || this.skipReconnect)\n return this;\n const self = this;\n if (this.backoff.attempts >= this._reconnectionAttempts) {\n\n\n this.backoff.reset();\n this.emitReserved(\"reconnect_failed\");\n this._reconnecting = false;\n }\n else {\n const delay = this.backoff.duration();\n\n\n this._reconnecting = true;\n const timer = setTimeout(() => {\n if (self.skipReconnect)\n return;\n\n\n this.emitReserved(\"reconnect_attempt\", self.backoff.attempts);\n // check again for the case socket closed in above events\n if (self.skipReconnect)\n return;\n self.open((err) => {\n if (err) {\n\n\n self._reconnecting = false;\n self.reconnect();\n this.emitReserved(\"reconnect_error\", err);\n }\n else {\n\n\n self.onreconnect();\n }\n });\n }, delay);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(function subDestroy() {\n clearTimeout(timer);\n });\n }\n }\n /**\n * Called upon successful reconnect.\n *\n * @private\n */\n onreconnect() {\n const attempt = this.backoff.attempts;\n this._reconnecting = false;\n this.backoff.reset();\n this.emitReserved(\"reconnect\", attempt);\n }\n}\nexports.Manager = Manager;\n","const XMLHttpRequest = require(\"../../contrib/xmlhttprequest-ssl/XMLHttpRequest\");\nconst XHR = require(\"./polling-xhr\");\nconst JSONP = require(\"./polling-jsonp\");\nconst websocket = require(\"./websocket\");\n\nexports.polling = polling;\nexports.websocket = websocket;\n\n/**\n * Polling transport polymorphic constructor.\n * Decides on xhr vs jsonp based on feature detection.\n *\n * @api private\n */\n\nfunction polling(opts) {\n let xhr;\n let xd = false;\n let xs = false;\n const jsonp = false !== opts.jsonp;\n\n if (typeof location !== \"undefined\") {\n const isSSL = \"https:\" === location.protocol;\n let port = location.port;\n\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? 443 : 80;\n }\n\n xd = opts.hostname !== location.hostname || port !== opts.port;\n xs = opts.secure !== isSSL;\n }\n\n opts.xdomain = xd;\n opts.xscheme = xs;\n xhr = new XMLHttpRequest(opts);\n\n if (\"open\" in xhr && !opts.forceJSONP) {\n return new XHR(opts);\n } else {\n if (!jsonp) throw new Error(\"JSONP disabled\");\n return new JSONP(opts);\n }\n}\n","// browser shim for xmlhttprequest module\n\nconst hasCORS = require(\"has-cors\");\nconst globalThis = require(\"./globalThis\");\n\nmodule.exports = function(opts) {\n const xdomain = opts.xdomain;\n\n // scheme must be same when usign XDomainRequest\n // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx\n const xscheme = opts.xscheme;\n\n // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.\n // https://github.com/Automattic/engine.io-client/pull/217\n const enablesXDR = opts.enablesXDR;\n\n // XMLHttpRequest can be disabled on IE\n try {\n if (\"undefined\" !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n return new XMLHttpRequest();\n }\n } catch (e) {}\n\n // Use XDomainRequest for IE8 if enablesXDR is true\n // because loading bar keeps flashing when using jsonp-polling\n // https://github.com/yujiosaka/socke.io-ie8-loading-example\n try {\n if (\"undefined\" !== typeof XDomainRequest && !xscheme && enablesXDR) {\n return new XDomainRequest();\n }\n } catch (e) {}\n\n if (!xdomain) {\n try {\n return new globalThis[[\"Active\"].concat(\"Object\").join(\"X\")](\n \"Microsoft.XMLHTTP\"\n );\n } catch (e) {}\n }\n};\n","const Transport = require(\"../transport\");\nconst parseqs = require(\"parseqs\");\nconst parser = require(\"engine.io-parser\");\nconst yeast = require(\"yeast\");\n\n\n\n\nclass Polling extends Transport {\n /**\n * Transport name.\n */\n get name() {\n return \"polling\";\n }\n\n /**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @api private\n */\n doOpen() {\n this.poll();\n }\n\n /**\n * Pauses polling.\n *\n * @param {Function} callback upon buffers are flushed and transport is paused\n * @api private\n */\n pause(onPause) {\n this.readyState = \"pausing\";\n\n const pause = () => {\n\n\n this.readyState = \"paused\";\n onPause();\n };\n\n if (this.polling || !this.writable) {\n let total = 0;\n\n if (this.polling) {\n\n\n total++;\n this.once(\"pollComplete\", function() {\n\n\n --total || pause();\n });\n }\n\n if (!this.writable) {\n\n\n total++;\n this.once(\"drain\", function() {\n\n\n --total || pause();\n });\n }\n } else {\n pause();\n }\n }\n\n /**\n * Starts polling cycle.\n *\n * @api public\n */\n poll() {\n\n\n this.polling = true;\n this.doPoll();\n this.emit(\"poll\");\n }\n\n /**\n * Overloads onData to detect payloads.\n *\n * @api private\n */\n onData(data) {\n\n\n const callback = packet => {\n // if its the first message we consider the transport open\n if (\"opening\" === this.readyState && packet.type === \"open\") {\n this.onOpen();\n }\n\n // if its a close packet, we close the ongoing requests\n if (\"close\" === packet.type) {\n this.onClose();\n return false;\n }\n\n // otherwise bypass onData and handle the message\n this.onPacket(packet);\n };\n\n // decode payload\n parser.decodePayload(data, this.socket.binaryType).forEach(callback);\n\n // if an event did not trigger closing\n if (\"closed\" !== this.readyState) {\n // if we got data we're not polling\n this.polling = false;\n this.emit(\"pollComplete\");\n\n if (\"open\" === this.readyState) {\n this.poll();\n } else {\n\n\n }\n }\n }\n\n /**\n * For polling, send a close packet.\n *\n * @api private\n */\n doClose() {\n const close = () => {\n\n\n this.write([{ type: \"close\" }]);\n };\n\n if (\"open\" === this.readyState) {\n\n\n close();\n } else {\n // in case we're trying to close while\n // handshaking is in progress (GH-164)\n\n\n this.once(\"open\", close);\n }\n }\n\n /**\n * Writes a packets payload.\n *\n * @param {Array} data packets\n * @param {Function} drain callback\n * @api private\n */\n write(packets) {\n this.writable = false;\n\n parser.encodePayload(packets, data => {\n this.doWrite(data, () => {\n this.writable = true;\n this.emit(\"drain\");\n });\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 ? \"https\" : \"http\";\n let port = \"\";\n\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n\n query = parseqs.encode(query);\n\n // avoid port if default for schema\n if (\n this.opts.port &&\n ((\"https\" === schema && Number(this.opts.port) !== 443) ||\n (\"http\" === schema && Number(this.opts.port) !== 80))\n ) {\n port = \":\" + this.opts.port;\n }\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\nmodule.exports = Polling;\n","const PACKET_TYPES = Object.create(null); // no Map = no polyfill\nPACKET_TYPES[\"open\"] = \"0\";\nPACKET_TYPES[\"close\"] = \"1\";\nPACKET_TYPES[\"ping\"] = \"2\";\nPACKET_TYPES[\"pong\"] = \"3\";\nPACKET_TYPES[\"message\"] = \"4\";\nPACKET_TYPES[\"upgrade\"] = \"5\";\nPACKET_TYPES[\"noop\"] = \"6\";\n\nconst PACKET_TYPES_REVERSE = Object.create(null);\nObject.keys(PACKET_TYPES).forEach(key => {\n PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key;\n});\n\nconst ERROR_PACKET = { type: \"error\", data: \"parser error\" };\n\nmodule.exports = {\n PACKET_TYPES,\n PACKET_TYPES_REVERSE,\n ERROR_PACKET\n};\n","'use strict';\n\nvar alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('')\n , length = 64\n , map = {}\n , seed = 0\n , i = 0\n , prev;\n\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nfunction encode(num) {\n var encoded = '';\n\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n\n return encoded;\n}\n\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nfunction decode(str) {\n var decoded = 0;\n\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n\n return decoded;\n}\n\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nfunction yeast() {\n var now = encode(+new Date());\n\n if (now !== prev) return seed = 0, prev = now;\n return now +'.'+ encode(seed++);\n}\n\n//\n// Map each character to its index.\n//\nfor (; i < length; i++) map[alphabet[i]] = i;\n\n//\n// Expose the `yeast`, `encode` and `decode` functions.\n//\nyeast.encode = encode;\nyeast.decode = decode;\nmodule.exports = yeast;\n","module.exports.pick = (obj, ...attr) => {\n return attr.reduce((acc, k) => {\n if (obj.hasOwnProperty(k)) {\n acc[k] = obj[k];\n }\n return acc;\n }, {});\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Socket = void 0;\nconst socket_io_parser_1 = require(\"socket.io-parser\");\nconst on_1 = require(\"./on\");\nconst typed_events_1 = require(\"./typed-events\");\n\n\n/**\n * Internal events.\n * These events can't be emitted by the user.\n */\nconst RESERVED_EVENTS = Object.freeze({\n connect: 1,\n connect_error: 1,\n disconnect: 1,\n disconnecting: 1,\n // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener\n newListener: 1,\n removeListener: 1,\n});\nclass Socket extends typed_events_1.StrictEventEmitter {\n /**\n * `Socket` constructor.\n *\n * @public\n */\n constructor(io, nsp, opts) {\n super();\n this.receiveBuffer = [];\n this.sendBuffer = [];\n this.ids = 0;\n this.acks = {};\n this.flags = {};\n this.io = io;\n this.nsp = nsp;\n this.ids = 0;\n this.acks = {};\n this.receiveBuffer = [];\n this.sendBuffer = [];\n this.connected = false;\n this.disconnected = true;\n this.flags = {};\n if (opts && opts.auth) {\n this.auth = opts.auth;\n }\n if (this.io._autoConnect)\n this.open();\n }\n /**\n * Subscribe to open, close and packet events\n *\n * @private\n */\n subEvents() {\n if (this.subs)\n return;\n const io = this.io;\n this.subs = [\n on_1.on(io, \"open\", this.onopen.bind(this)),\n on_1.on(io, \"packet\", this.onpacket.bind(this)),\n on_1.on(io, \"error\", this.onerror.bind(this)),\n on_1.on(io, \"close\", this.onclose.bind(this)),\n ];\n }\n /**\n * Whether the Socket will try to reconnect when its Manager connects or reconnects\n */\n get active() {\n return !!this.subs;\n }\n /**\n * \"Opens\" the socket.\n *\n * @public\n */\n connect() {\n if (this.connected)\n return this;\n this.subEvents();\n if (!this.io[\"_reconnecting\"])\n this.io.open(); // ensure open\n if (\"open\" === this.io._readyState)\n this.onopen();\n return this;\n }\n /**\n * Alias for connect()\n */\n open() {\n return this.connect();\n }\n /**\n * Sends a `message` event.\n *\n * @return self\n * @public\n */\n send(...args) {\n args.unshift(\"message\");\n this.emit.apply(this, args);\n return this;\n }\n /**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @return self\n * @public\n */\n emit(ev, ...args) {\n if (RESERVED_EVENTS.hasOwnProperty(ev)) {\n throw new Error('\"' + ev + '\" is a reserved event name');\n }\n args.unshift(ev);\n const packet = {\n type: socket_io_parser_1.PacketType.EVENT,\n data: args,\n };\n packet.options = {};\n packet.options.compress = this.flags.compress !== false;\n // event ack callback\n if (\"function\" === typeof args[args.length - 1]) {\n\n\n this.acks[this.ids] = args.pop();\n packet.id = this.ids++;\n }\n const isTransportWritable = this.io.engine &&\n this.io.engine.transport &&\n this.io.engine.transport.writable;\n const discardPacket = this.flags.volatile && (!isTransportWritable || !this.connected);\n if (discardPacket) {\n\n\n }\n else if (this.connected) {\n this.packet(packet);\n }\n else {\n this.sendBuffer.push(packet);\n }\n this.flags = {};\n return this;\n }\n /**\n * Sends a packet.\n *\n * @param packet\n * @private\n */\n packet(packet) {\n packet.nsp = this.nsp;\n this.io._packet(packet);\n }\n /**\n * Called upon engine `open`.\n *\n * @private\n */\n onopen() {\n\n\n if (typeof this.auth == \"function\") {\n this.auth((data) => {\n this.packet({ type: socket_io_parser_1.PacketType.CONNECT, data });\n });\n }\n else {\n this.packet({ type: socket_io_parser_1.PacketType.CONNECT, data: this.auth });\n }\n }\n /**\n * Called upon engine or manager `error`.\n *\n * @param err\n * @private\n */\n onerror(err) {\n if (!this.connected) {\n this.emitReserved(\"connect_error\", err);\n }\n }\n /**\n * Called upon engine `close`.\n *\n * @param reason\n * @private\n */\n onclose(reason) {\n\n\n this.connected = false;\n this.disconnected = true;\n delete this.id;\n this.emitReserved(\"disconnect\", reason);\n }\n /**\n * Called with socket packet.\n *\n * @param packet\n * @private\n */\n onpacket(packet) {\n const sameNamespace = packet.nsp === this.nsp;\n if (!sameNamespace)\n return;\n switch (packet.type) {\n case socket_io_parser_1.PacketType.CONNECT:\n if (packet.data && packet.data.sid) {\n const id = packet.data.sid;\n this.onconnect(id);\n }\n else {\n this.emitReserved(\"connect_error\", new Error(\"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)\"));\n }\n break;\n case socket_io_parser_1.PacketType.EVENT:\n this.onevent(packet);\n break;\n case socket_io_parser_1.PacketType.BINARY_EVENT:\n this.onevent(packet);\n break;\n case socket_io_parser_1.PacketType.ACK:\n this.onack(packet);\n break;\n case socket_io_parser_1.PacketType.BINARY_ACK:\n this.onack(packet);\n break;\n case socket_io_parser_1.PacketType.DISCONNECT:\n this.ondisconnect();\n break;\n case socket_io_parser_1.PacketType.CONNECT_ERROR:\n const err = new Error(packet.data.message);\n // @ts-ignore\n err.data = packet.data.data;\n this.emitReserved(\"connect_error\", err);\n break;\n }\n }\n /**\n * Called upon a server event.\n *\n * @param packet\n * @private\n */\n onevent(packet) {\n const args = packet.data || [];\n\n\n if (null != packet.id) {\n\n\n args.push(this.ack(packet.id));\n }\n if (this.connected) {\n this.emitEvent(args);\n }\n else {\n this.receiveBuffer.push(Object.freeze(args));\n }\n }\n emitEvent(args) {\n if (this._anyListeners && this._anyListeners.length) {\n const listeners = this._anyListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, args);\n }\n }\n super.emit.apply(this, args);\n }\n /**\n * Produces an ack callback to emit with an event.\n *\n * @private\n */\n ack(id) {\n const self = this;\n let sent = false;\n return function (...args) {\n // prevent double callbacks\n if (sent)\n return;\n sent = true;\n\n\n self.packet({\n type: socket_io_parser_1.PacketType.ACK,\n id: id,\n data: args,\n });\n };\n }\n /**\n * Called upon a server acknowlegement.\n *\n * @param packet\n * @private\n */\n onack(packet) {\n const ack = this.acks[packet.id];\n if (\"function\" === typeof ack) {\n\n\n ack.apply(this, packet.data);\n delete this.acks[packet.id];\n }\n else {\n\n\n }\n }\n /**\n * Called upon server connect.\n *\n * @private\n */\n onconnect(id) {\n\n\n this.id = id;\n this.connected = true;\n this.disconnected = false;\n this.emitBuffered();\n this.emitReserved(\"connect\");\n }\n /**\n * Emit buffered events (received and emitted).\n *\n * @private\n */\n emitBuffered() {\n this.receiveBuffer.forEach((args) => this.emitEvent(args));\n this.receiveBuffer = [];\n this.sendBuffer.forEach((packet) => this.packet(packet));\n this.sendBuffer = [];\n }\n /**\n * Called upon server disconnect.\n *\n * @private\n */\n ondisconnect() {\n\n\n this.destroy();\n this.onclose(\"io server disconnect\");\n }\n /**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @private\n */\n destroy() {\n if (this.subs) {\n // clean subscriptions to avoid reconnections\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs = undefined;\n }\n this.io[\"_destroy\"](this);\n }\n /**\n * Disconnects the socket manually.\n *\n * @return self\n * @public\n */\n disconnect() {\n if (this.connected) {\n\n\n this.packet({ type: socket_io_parser_1.PacketType.DISCONNECT });\n }\n // remove socket from pool\n this.destroy();\n if (this.connected) {\n // fire events\n this.onclose(\"io client disconnect\");\n }\n return this;\n }\n /**\n * Alias for disconnect()\n *\n * @return self\n * @public\n */\n close() {\n return this.disconnect();\n }\n /**\n * Sets the compress flag.\n *\n * @param compress - if `true`, compresses the sending data\n * @return self\n * @public\n */\n compress(compress) {\n this.flags.compress = compress;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not\n * ready to send messages.\n *\n * @returns self\n * @public\n */\n get volatile() {\n this.flags.volatile = true;\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * @param listener\n * @public\n */\n onAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * @param listener\n * @public\n */\n prependAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @param listener\n * @public\n */\n offAny(listener) {\n if (!this._anyListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n *\n * @public\n */\n listenersAny() {\n return this._anyListeners || [];\n }\n}\nexports.Socket = Socket;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.on = void 0;\nfunction on(obj, ev, fn) {\n obj.on(ev, fn);\n return function subDestroy() {\n obj.off(ev, fn);\n };\n}\nexports.on = on;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StrictEventEmitter = void 0;\nconst Emitter = require(\"component-emitter\");\n/**\n * Strictly typed version of an `EventEmitter`. A `TypedEventEmitter` takes type\n * parameters for mappings of event names to event data types, and strictly\n * types method calls to the `EventEmitter` according to these event maps.\n *\n * @typeParam ListenEvents - `EventsMap` of user-defined events that can be\n * listened to with `on` or `once`\n * @typeParam EmitEvents - `EventsMap` of user-defined events that can be\n * emitted with `emit`\n * @typeParam ReservedEvents - `EventsMap` of reserved events, that can be\n * emitted by socket.io with `emitReserved`, and can be listened to with\n * `listen`.\n */\nclass StrictEventEmitter extends Emitter {\n /**\n * Adds the `listener` function as an event listener for `ev`.\n *\n * @param ev Name of the event\n * @param listener Callback function\n */\n on(ev, listener) {\n super.on(ev, listener);\n return this;\n }\n /**\n * Adds a one-time `listener` function as an event listener for `ev`.\n *\n * @param ev Name of the event\n * @param listener Callback function\n */\n once(ev, listener) {\n super.once(ev, listener);\n return this;\n }\n /**\n * Emits an event.\n *\n * @param ev Name of the event\n * @param args Values to send to listeners of this event\n */\n emit(ev, ...args) {\n super.emit(ev, ...args);\n return this;\n }\n /**\n * Emits a reserved event.\n *\n * This method is `protected`, so that only a class extending\n * `StrictEventEmitter` can emit its own reserved events.\n *\n * @param ev Reserved event name\n * @param args Arguments to emit along with the event\n */\n emitReserved(ev, ...args) {\n super.emit(ev, ...args);\n return this;\n }\n /**\n * Returns the listeners listening to an event.\n *\n * @param event Event name\n * @returns Array of listeners subscribed to `event`\n */\n listeners(event) {\n return super.listeners(event);\n }\n}\nexports.StrictEventEmitter = StrictEventEmitter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.io = exports.Socket = exports.Manager = exports.protocol = void 0;\nconst url_1 = require(\"./url\");\nconst manager_1 = require(\"./manager\");\n\n\n/**\n * Module exports.\n */\nmodule.exports = exports = lookup;\n/**\n * Managers cache.\n */\nconst cache = (exports.managers = {});\nfunction lookup(uri, opts) {\n if (typeof uri === \"object\") {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n const parsed = url_1.url(uri, opts.path || \"/socket.io\");\n const source = parsed.source;\n const id = parsed.id;\n const path = parsed.path;\n const sameNamespace = cache[id] && path in cache[id][\"nsps\"];\n const newConnection = opts.forceNew ||\n opts[\"force new connection\"] ||\n false === opts.multiplex ||\n sameNamespace;\n let io;\n if (newConnection) {\n\n\n io = new manager_1.Manager(source, opts);\n }\n else {\n if (!cache[id]) {\n\n\n cache[id] = new manager_1.Manager(source, opts);\n }\n io = cache[id];\n }\n if (parsed.query && !opts.query) {\n opts.query = parsed.queryKey;\n }\n return io.socket(parsed.path, opts);\n}\nexports.io = lookup;\n/**\n * Protocol version.\n *\n * @public\n */\nvar socket_io_parser_1 = require(\"socket.io-parser\");\nObject.defineProperty(exports, \"protocol\", { enumerable: true, get: function () { return socket_io_parser_1.protocol; } });\n/**\n * `connect`.\n *\n * @param {String} uri\n * @public\n */\nexports.connect = lookup;\n/**\n * Expose constructors for standalone build.\n *\n * @public\n */\nvar manager_2 = require(\"./manager\");\nObject.defineProperty(exports, \"Manager\", { enumerable: true, get: function () { return manager_2.Manager; } });\nvar socket_1 = require(\"./socket\");\nObject.defineProperty(exports, \"Socket\", { enumerable: true, get: function () { return socket_1.Socket; } });\nexports.default = lookup;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.url = void 0;\nconst parseuri = require(\"parseuri\");\n\n\n/**\n * URL parser.\n *\n * @param uri - url\n * @param path - the request path of the connection\n * @param loc - An object meant to mimic window.location.\n * Defaults to window.location.\n * @public\n */\nfunction url(uri, path = \"\", loc) {\n let obj = uri;\n // default to window.location\n loc = loc || (typeof location !== \"undefined\" && location);\n if (null == uri)\n uri = loc.protocol + \"//\" + loc.host;\n // relative path support\n if (typeof uri === \"string\") {\n if (\"/\" === uri.charAt(0)) {\n if (\"/\" === uri.charAt(1)) {\n uri = loc.protocol + uri;\n }\n else {\n uri = loc.host + uri;\n }\n }\n if (!/^(https?|wss?):\\/\\//.test(uri)) {\n\n\n if (\"undefined\" !== typeof loc) {\n uri = loc.protocol + \"//\" + uri;\n }\n else {\n uri = \"https://\" + uri;\n }\n }\n // parse\n\n\n obj = parseuri(uri);\n }\n // make sure we treat `localhost:80` and `localhost` equally\n if (!obj.port) {\n if (/^(http|ws)$/.test(obj.protocol)) {\n obj.port = \"80\";\n }\n else if (/^(http|ws)s$/.test(obj.protocol)) {\n obj.port = \"443\";\n }\n }\n obj.path = obj.path || \"/\";\n const ipv6 = obj.host.indexOf(\":\") !== -1;\n const host = ipv6 ? \"[\" + obj.host + \"]\" : obj.host;\n // define unique id\n obj.id = obj.protocol + \"://\" + host + \":\" + obj.port + path;\n // define href\n obj.href =\n obj.protocol +\n \"://\" +\n host +\n (loc && loc.port === obj.port ? \"\" : \":\" + obj.port);\n return obj;\n}\nexports.url = url;\n","const Socket = require(\"./socket\");\n\nmodule.exports = (uri, opts) => new Socket(uri, opts);\n\n/**\n * Expose deps for legacy compatibility\n * and standalone browser access.\n */\n\nmodule.exports.Socket = Socket;\nmodule.exports.protocol = Socket.protocol; // this is an int\nmodule.exports.Transport = require(\"./transport\");\nmodule.exports.transports = require(\"./transports/index\");\nmodule.exports.parser = require(\"engine.io-parser\");\n","const transports = require(\"./transports/index\");\nconst Emitter = require(\"component-emitter\");\n\n\nconst parser = require(\"engine.io-parser\");\nconst parseuri = require(\"parseuri\");\nconst parseqs = require(\"parseqs\");\n\nclass Socket extends Emitter {\n /**\n * Socket constructor.\n *\n * @param {String|Object} uri or options\n * @param {Object} options\n * @api public\n */\n constructor(uri, opts = {}) {\n super();\n\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n\n if (uri) {\n uri = parseuri(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query) opts.query = uri.query;\n } else if (opts.host) {\n opts.hostname = parseuri(opts.host).host;\n }\n\n this.secure =\n null != opts.secure\n ? opts.secure\n : typeof location !== \"undefined\" && \"https:\" === location.protocol;\n\n if (opts.hostname && !opts.port) {\n // if no port is specified manually, use the protocol default\n opts.port = this.secure ? \"443\" : \"80\";\n }\n\n this.hostname =\n opts.hostname ||\n (typeof location !== \"undefined\" ? location.hostname : \"localhost\");\n this.port =\n opts.port ||\n (typeof location !== \"undefined\" && location.port\n ? location.port\n : this.secure\n ? 443\n : 80);\n\n this.transports = opts.transports || [\"polling\", \"websocket\"];\n this.readyState = \"\";\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n\n this.opts = Object.assign(\n {\n path: \"/engine.io\",\n agent: false,\n withCredentials: false,\n upgrade: true,\n jsonp: true,\n timestampParam: \"t\",\n rememberUpgrade: false,\n rejectUnauthorized: true,\n perMessageDeflate: {\n threshold: 1024\n },\n transportOptions: {},\n closeOnBeforeunload: true\n },\n opts\n );\n\n this.opts.path = this.opts.path.replace(/\\/$/, \"\") + \"/\";\n\n if (typeof this.opts.query === \"string\") {\n this.opts.query = parseqs.decode(this.opts.query);\n }\n\n // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n\n // set on heartbeat\n this.pingTimeoutTimer = null;\n\n if (typeof addEventListener === \"function\") {\n if (this.opts.closeOnBeforeunload) {\n // Firefox closes the connection when the \"beforeunload\" event is emitted but not Chrome. This event listener\n // ensures every browser behaves the same (no \"disconnect\" event at the Socket.IO level when the page is\n // closed/reloaded)\n addEventListener(\n \"beforeunload\",\n () => {\n if (this.transport) {\n // silently close the transport\n this.transport.removeAllListeners();\n this.transport.close();\n }\n },\n false\n );\n }\n if (this.hostname !== \"localhost\") {\n this.offlineEventListener = () => {\n this.onClose(\"transport close\");\n };\n addEventListener(\"offline\", this.offlineEventListener, false);\n }\n }\n\n this.open();\n }\n\n /**\n * Creates transport of the given type.\n *\n * @param {String} transport name\n * @return {Transport}\n * @api private\n */\n createTransport(name) {\n\n\n const query = clone(this.opts.query);\n\n // append engine.io protocol identifier\n query.EIO = parser.protocol;\n\n // transport name\n query.transport = name;\n\n // session id if we already have one\n if (this.id) query.sid = this.id;\n\n const opts = Object.assign(\n {},\n this.opts.transportOptions[name],\n this.opts,\n {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port\n }\n );\n\n\n\n\n return new transports[name](opts);\n }\n\n /**\n * Initializes transport to use and starts probe.\n *\n * @api private\n */\n open() {\n let transport;\n if (\n this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1\n ) {\n transport = \"websocket\";\n } else if (0 === this.transports.length) {\n // Emit error on next tick so it can be listened to\n setTimeout(() => {\n this.emit(\"error\", \"No transports available\");\n }, 0);\n return;\n } else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n } catch (e) {\n\n\n this.transports.shift();\n this.open();\n return;\n }\n\n transport.open();\n this.setTransport(transport);\n }\n\n /**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @api private\n */\n setTransport(transport) {\n\n\n\n if (this.transport) {\n\n\n this.transport.removeAllListeners();\n }\n\n // set up transport\n this.transport = transport;\n\n // set up transport listeners\n transport\n .on(\"drain\", this.onDrain.bind(this))\n .on(\"packet\", this.onPacket.bind(this))\n .on(\"error\", this.onError.bind(this))\n .on(\"close\", () => {\n this.onClose(\"transport close\");\n });\n }\n\n /**\n * Probes a transport.\n *\n * @param {String} transport name\n * @api private\n */\n probe(name) {\n\n\n let transport = this.createTransport(name, { probe: 1 });\n let failed = false;\n\n Socket.priorWebsocketSuccess = false;\n\n const onTransportOpen = () => {\n if (failed) return;\n\n\n\n transport.send([{ type: \"ping\", data: \"probe\" }]);\n transport.once(\"packet\", msg => {\n if (failed) return;\n if (\"pong\" === msg.type && \"probe\" === msg.data) {\n\n\n this.upgrading = true;\n this.emit(\"upgrading\", transport);\n if (!transport) return;\n Socket.priorWebsocketSuccess = \"websocket\" === transport.name;\n\n\n\n this.transport.pause(() => {\n if (failed) return;\n if (\"closed\" === this.readyState) return;\n\n\n\n cleanup();\n\n this.setTransport(transport);\n transport.send([{ type: \"upgrade\" }]);\n this.emit(\"upgrade\", transport);\n transport = null;\n this.upgrading = false;\n this.flush();\n });\n } else {\n\n\n const err = new Error(\"probe error\");\n err.transport = transport.name;\n this.emit(\"upgradeError\", err);\n }\n });\n };\n\n function freezeTransport() {\n if (failed) return;\n\n // Any callback called by transport should be ignored since now\n failed = true;\n\n cleanup();\n\n transport.close();\n transport = null;\n }\n\n // Handle any error that happens while probing\n const onerror = err => {\n const error = new Error(\"probe error: \" + err);\n error.transport = transport.name;\n\n freezeTransport();\n\n\n\n\n this.emit(\"upgradeError\", error);\n };\n\n function onTransportClose() {\n onerror(\"transport closed\");\n }\n\n // When the socket is closed while we're probing\n function onclose() {\n onerror(\"socket closed\");\n }\n\n // When the socket is upgraded while we're probing\n function onupgrade(to) {\n if (transport && to.name !== transport.name) {\n\n\n freezeTransport();\n }\n }\n\n // Remove all listeners on the transport and on self\n const cleanup = () => {\n transport.removeListener(\"open\", onTransportOpen);\n transport.removeListener(\"error\", onerror);\n transport.removeListener(\"close\", onTransportClose);\n this.removeListener(\"close\", onclose);\n this.removeListener(\"upgrading\", onupgrade);\n };\n\n transport.once(\"open\", onTransportOpen);\n transport.once(\"error\", onerror);\n transport.once(\"close\", onTransportClose);\n\n this.once(\"close\", onclose);\n this.once(\"upgrading\", onupgrade);\n\n transport.open();\n }\n\n /**\n * Called when connection is deemed open.\n *\n * @api public\n */\n onOpen() {\n\n\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emit(\"open\");\n this.flush();\n\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\n \"open\" === this.readyState &&\n this.opts.upgrade &&\n this.transport.pause\n ) {\n\n\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\n }\n\n /**\n * Handles a packet.\n *\n * @api private\n */\n onPacket(packet) {\n if (\n \"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState\n ) {\n\n\n\n this.emit(\"packet\", packet);\n\n // Socket is live - any packet counts\n this.emit(\"heartbeat\");\n\n switch (packet.type) {\n case \"open\":\n this.onHandshake(JSON.parse(packet.data));\n break;\n\n case \"ping\":\n this.resetPingTimeout();\n this.sendPacket(\"pong\");\n this.emit(\"ping\");\n this.emit(\"pong\");\n break;\n\n case \"error\":\n const err = new Error(\"server error\");\n err.code = packet.data;\n this.onError(err);\n break;\n\n case \"message\":\n this.emit(\"data\", packet.data);\n this.emit(\"message\", packet.data);\n break;\n }\n } else {\n\n\n }\n }\n\n /**\n * Called upon handshake completion.\n *\n * @param {Object} handshake obj\n * @api private\n */\n onHandshake(data) {\n this.emit(\"handshake\", data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this.upgrades = this.filterUpgrades(data.upgrades);\n this.pingInterval = data.pingInterval;\n this.pingTimeout = data.pingTimeout;\n this.onOpen();\n // In case open handler closes socket\n if (\"closed\" === this.readyState) return;\n this.resetPingTimeout();\n }\n\n /**\n * Sets and resets ping timeout timer based on server pings.\n *\n * @api private\n */\n resetPingTimeout() {\n clearTimeout(this.pingTimeoutTimer);\n this.pingTimeoutTimer = setTimeout(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\n if (this.opts.autoUnref) {\n this.pingTimeoutTimer.unref();\n }\n }\n\n /**\n * Called on `drain` event\n *\n * @api private\n */\n onDrain() {\n this.writeBuffer.splice(0, this.prevBufferLen);\n\n // setting prevBufferLen = 0 is very important\n // for example, when upgrading, upgrade packet is sent over,\n // and a nonzero prevBufferLen could cause problems on `drain`\n this.prevBufferLen = 0;\n\n if (0 === this.writeBuffer.length) {\n this.emit(\"drain\");\n } else {\n this.flush();\n }\n }\n\n /**\n * Flush write buffers.\n *\n * @api private\n */\n flush() {\n if (\n \"closed\" !== this.readyState &&\n this.transport.writable &&\n !this.upgrading &&\n this.writeBuffer.length\n ) {\n\n\n this.transport.send(this.writeBuffer);\n // keep track of current length of writeBuffer\n // splice writeBuffer and callbackBuffer on `drain`\n this.prevBufferLen = this.writeBuffer.length;\n this.emit(\"flush\");\n }\n }\n\n /**\n * Sends a message.\n *\n * @param {String} message.\n * @param {Function} callback function.\n * @param {Object} options.\n * @return {Socket} for chaining.\n * @api public\n */\n write(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\n }\n\n send(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\n }\n\n /**\n * Sends a packet.\n *\n * @param {String} packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} callback function.\n * @api private\n */\n sendPacket(type, data, options, fn) {\n if (\"function\" === typeof data) {\n fn = data;\n data = undefined;\n }\n\n if (\"function\" === typeof options) {\n fn = options;\n options = null;\n }\n\n if (\"closing\" === this.readyState || \"closed\" === this.readyState) {\n return;\n }\n\n options = options || {};\n options.compress = false !== options.compress;\n\n const packet = {\n type: type,\n data: data,\n options: options\n };\n this.emit(\"packetCreate\", packet);\n this.writeBuffer.push(packet);\n if (fn) this.once(\"flush\", fn);\n this.flush();\n }\n\n /**\n * Closes the connection.\n *\n * @api private\n */\n close() {\n const close = () => {\n this.onClose(\"forced close\");\n\n\n this.transport.close();\n };\n\n const cleanupAndClose = () => {\n this.removeListener(\"upgrade\", cleanupAndClose);\n this.removeListener(\"upgradeError\", cleanupAndClose);\n close();\n };\n\n const waitForUpgrade = () => {\n // wait for upgrade to finish since we can't send packets while pausing a transport\n this.once(\"upgrade\", cleanupAndClose);\n this.once(\"upgradeError\", cleanupAndClose);\n };\n\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.readyState = \"closing\";\n\n if (this.writeBuffer.length) {\n this.once(\"drain\", () => {\n if (this.upgrading) {\n waitForUpgrade();\n } else {\n close();\n }\n });\n } else if (this.upgrading) {\n waitForUpgrade();\n } else {\n close();\n }\n }\n\n return this;\n }\n\n /**\n * Called upon transport error\n *\n * @api private\n */\n onError(err) {\n\n\n Socket.priorWebsocketSuccess = false;\n this.emit(\"error\", err);\n this.onClose(\"transport error\", err);\n }\n\n /**\n * Called upon transport close.\n *\n * @api private\n */\n onClose(reason, desc) {\n if (\n \"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState\n ) {\n\n\n\n // clear timers\n clearTimeout(this.pingIntervalTimer);\n clearTimeout(this.pingTimeoutTimer);\n\n // stop event from firing again for transport\n this.transport.removeAllListeners(\"close\");\n\n // ensure transport won't stay open\n this.transport.close();\n\n // ignore further transport communication\n this.transport.removeAllListeners();\n\n if (typeof removeEventListener === \"function\") {\n removeEventListener(\"offline\", this.offlineEventListener, false);\n }\n\n // set ready state\n this.readyState = \"closed\";\n\n // clear session id\n this.id = null;\n\n // emit close event\n this.emit(\"close\", reason, desc);\n\n // clean buffers after, so users can still\n // grab the buffers on `close` event\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n }\n }\n\n /**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} server upgrades\n * @api private\n *\n */\n filterUpgrades(upgrades) {\n const filteredUpgrades = [];\n let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\n\nSocket.priorWebsocketSuccess = false;\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nSocket.protocol = parser.protocol; // this is an int\n\nfunction clone(obj) {\n const o = {};\n for (let i in obj) {\n if (obj.hasOwnProperty(i)) {\n o[i] = obj[i];\n }\n }\n return o;\n}\n\nmodule.exports = Socket;\n","\n/**\n * Module exports.\n *\n * Logic borrowed from Modernizr:\n *\n * - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js\n */\n\ntry {\n module.exports = typeof XMLHttpRequest !== 'undefined' &&\n 'withCredentials' in new XMLHttpRequest();\n} catch (err) {\n // if XMLHttp support is disabled in IE then it will throw\n // when trying to create\n module.exports = false;\n}\n","/* global attachEvent */\n\nconst XMLHttpRequest = require(\"../../contrib/xmlhttprequest-ssl/XMLHttpRequest\");\nconst Polling = require(\"./polling\");\nconst Emitter = require(\"component-emitter\");\nconst { pick } = require(\"../util\");\nconst globalThis = require(\"../globalThis\");\n\n\n\n\n/**\n * Empty function\n */\n\nfunction empty() {}\n\nconst hasXHR2 = (function() {\n const xhr = new XMLHttpRequest({ xdomain: false });\n return null != xhr.responseType;\n})();\n\nclass XHR extends Polling {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @api public\n */\n constructor(opts) {\n super(opts);\n\n if (typeof location !== \"undefined\") {\n const isSSL = \"https:\" === location.protocol;\n let port = location.port;\n\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? 443 : 80;\n }\n\n this.xd =\n (typeof location !== \"undefined\" &&\n opts.hostname !== location.hostname) ||\n port !== opts.port;\n this.xs = opts.secure !== isSSL;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\n }\n\n /**\n * Creates a request.\n *\n * @param {String} method\n * @api private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, xs: this.xs }, this.opts);\n return new Request(this.uri(), opts);\n }\n\n /**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @api private\n */\n doWrite(data, fn) {\n const req = this.request({\n method: \"POST\",\n data: data\n });\n req.on(\"success\", fn);\n req.on(\"error\", err => {\n this.onError(\"xhr post error\", err);\n });\n }\n\n /**\n * Starts a poll cycle.\n *\n * @api private\n */\n doPoll() {\n\n\n const req = this.request();\n req.on(\"data\", this.onData.bind(this));\n req.on(\"error\", err => {\n this.onError(\"xhr poll error\", err);\n });\n this.pollXhr = req;\n }\n}\n\nclass Request extends Emitter {\n /**\n * Request constructor\n *\n * @param {Object} options\n * @api public\n */\n constructor(uri, opts) {\n super();\n this.opts = opts;\n\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.async = false !== opts.async;\n this.data = undefined !== opts.data ? opts.data : null;\n\n this.create();\n }\n\n /**\n * Creates the XHR object and sends the request.\n *\n * @api private\n */\n create() {\n const opts = pick(\n this.opts,\n \"agent\",\n \"enablesXDR\",\n \"pfx\",\n \"key\",\n \"passphrase\",\n \"cert\",\n \"ca\",\n \"ciphers\",\n \"rejectUnauthorized\",\n \"autoUnref\"\n );\n opts.xdomain = !!this.opts.xd;\n opts.xscheme = !!this.opts.xs;\n\n const xhr = (this.xhr = new XMLHttpRequest(opts));\n\n try {\n\n\n xhr.open(this.method, this.uri, this.async);\n try {\n if (this.opts.extraHeaders) {\n xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n for (let i in this.opts.extraHeaders) {\n if (this.opts.extraHeaders.hasOwnProperty(i)) {\n xhr.setRequestHeader(i, this.opts.extraHeaders[i]);\n }\n }\n }\n } catch (e) {}\n\n if (\"POST\" === this.method) {\n try {\n xhr.setRequestHeader(\"Content-type\", \"text/plain;charset=UTF-8\");\n } catch (e) {}\n }\n\n try {\n xhr.setRequestHeader(\"Accept\", \"*/*\");\n } catch (e) {}\n\n // ie6 check\n if (\"withCredentials\" in xhr) {\n xhr.withCredentials = this.opts.withCredentials;\n }\n\n if (this.opts.requestTimeout) {\n xhr.timeout = this.opts.requestTimeout;\n }\n\n if (this.hasXDR()) {\n xhr.onload = () => {\n this.onLoad();\n };\n xhr.onerror = () => {\n this.onError(xhr.responseText);\n };\n } else {\n xhr.onreadystatechange = () => {\n if (4 !== xhr.readyState) return;\n if (200 === xhr.status || 1223 === xhr.status) {\n this.onLoad();\n } else {\n // make sure the `error` event handler that's user-set\n // does not throw in the same tick and gets caught here\n setTimeout(() => {\n this.onError(typeof xhr.status === \"number\" ? xhr.status : 0);\n }, 0);\n }\n };\n }\n\n\n\n xhr.send(this.data);\n } catch (e) {\n // Need to defer since .create() is called directly from the constructor\n // and thus the 'error' event can only be only bound *after* this exception\n // occurs. Therefore, also, we cannot throw here at all.\n setTimeout(() => {\n this.onError(e);\n }, 0);\n return;\n }\n\n if (typeof document !== \"undefined\") {\n this.index = Request.requestsCount++;\n Request.requests[this.index] = this;\n }\n }\n\n /**\n * Called upon successful response.\n *\n * @api private\n */\n onSuccess() {\n this.emit(\"success\");\n this.cleanup();\n }\n\n /**\n * Called if we have data.\n *\n * @api private\n */\n onData(data) {\n this.emit(\"data\", data);\n this.onSuccess();\n }\n\n /**\n * Called upon error.\n *\n * @api private\n */\n onError(err) {\n this.emit(\"error\", err);\n this.cleanup(true);\n }\n\n /**\n * Cleans up house.\n *\n * @api private\n */\n cleanup(fromError) {\n if (\"undefined\" === typeof this.xhr || null === this.xhr) {\n return;\n }\n // xmlhttprequest\n if (this.hasXDR()) {\n this.xhr.onload = this.xhr.onerror = empty;\n } else {\n this.xhr.onreadystatechange = empty;\n }\n\n if (fromError) {\n try {\n this.xhr.abort();\n } catch (e) {}\n }\n\n if (typeof document !== \"undefined\") {\n delete Request.requests[this.index];\n }\n\n this.xhr = null;\n }\n\n /**\n * Called upon load.\n *\n * @api private\n */\n onLoad() {\n const data = this.xhr.responseText;\n if (data !== null) {\n this.onData(data);\n }\n }\n\n /**\n * Check if it has XDomainRequest.\n *\n * @api private\n */\n hasXDR() {\n return typeof XDomainRequest !== \"undefined\" && !this.xs && this.enablesXDR;\n }\n\n /**\n * Aborts the request.\n *\n * @api public\n */\n abort() {\n this.cleanup();\n }\n}\n\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\n\nRequest.requestsCount = 0;\nRequest.requests = {};\n\nif (typeof document !== \"undefined\") {\n if (typeof attachEvent === \"function\") {\n attachEvent(\"onunload\", unloadHandler);\n } else if (typeof addEventListener === \"function\") {\n const terminationEvent = \"onpagehide\" in globalThis ? \"pagehide\" : \"unload\";\n addEventListener(terminationEvent, unloadHandler, false);\n }\n}\n\nfunction unloadHandler() {\n for (let i in Request.requests) {\n if (Request.requests.hasOwnProperty(i)) {\n Request.requests[i].abort();\n }\n }\n}\n\nmodule.exports = XHR;\nmodule.exports.Request = Request;\n","const { PACKET_TYPES } = require(\"./commons\");\n\nconst withNativeBlob =\n typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n Object.prototype.toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n\n// ArrayBuffer.isView method is not defined in IE10\nconst isView = obj => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj && obj.buffer instanceof ArrayBuffer;\n};\n\nconst encodePacket = ({ type, data }, supportsBinary, callback) => {\n if (withNativeBlob && data instanceof Blob) {\n if (supportsBinary) {\n return callback(data);\n } else {\n return encodeBlobAsBase64(data, callback);\n }\n } else if (\n withNativeArrayBuffer &&\n (data instanceof ArrayBuffer || isView(data))\n ) {\n if (supportsBinary) {\n return callback(data instanceof ArrayBuffer ? data : data.buffer);\n } else {\n return encodeBlobAsBase64(new Blob([data]), callback);\n }\n }\n // plain string\n return callback(PACKET_TYPES[type] + (data || \"\"));\n};\n\nconst encodeBlobAsBase64 = (data, callback) => {\n const fileReader = new FileReader();\n fileReader.onload = function() {\n const content = fileReader.result.split(\",\")[1];\n callback(\"b\" + content);\n };\n return fileReader.readAsDataURL(data);\n};\n\nmodule.exports = encodePacket;\n","const { PACKET_TYPES_REVERSE, ERROR_PACKET } = require(\"./commons\");\n\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n\nlet base64decoder;\nif (withNativeArrayBuffer) {\n base64decoder = require(\"base64-arraybuffer\");\n}\n\nconst decodePacket = (encodedPacket, binaryType) => {\n if (typeof encodedPacket !== \"string\") {\n return {\n type: \"message\",\n data: mapBinary(encodedPacket, binaryType)\n };\n }\n const type = encodedPacket.charAt(0);\n if (type === \"b\") {\n return {\n type: \"message\",\n data: decodeBase64Packet(encodedPacket.substring(1), binaryType)\n };\n }\n const packetType = PACKET_TYPES_REVERSE[type];\n if (!packetType) {\n return ERROR_PACKET;\n }\n return encodedPacket.length > 1\n ? {\n type: PACKET_TYPES_REVERSE[type],\n data: encodedPacket.substring(1)\n }\n : {\n type: PACKET_TYPES_REVERSE[type]\n };\n};\n\nconst decodeBase64Packet = (data, binaryType) => {\n if (base64decoder) {\n const decoded = base64decoder.decode(data);\n return mapBinary(decoded, binaryType);\n } else {\n return { base64: true, data }; // fallback for old browsers\n }\n};\n\nconst mapBinary = (data, binaryType) => {\n switch (binaryType) {\n case \"blob\":\n return data instanceof ArrayBuffer ? new Blob([data]) : data;\n case \"arraybuffer\":\n default:\n return data; // assuming the data is already an ArrayBuffer\n }\n};\n\nmodule.exports = decodePacket;\n","/*\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n(function(chars){\n \"use strict\";\n\n exports.encode = function(arraybuffer) {\n var bytes = new Uint8Array(arraybuffer),\n i, len = bytes.length, base64 = \"\";\n\n for (i = 0; i < len; i+=3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n\n if ((len % 3) === 2) {\n base64 = base64.substring(0, base64.length - 1) + \"=\";\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + \"==\";\n }\n\n return base64;\n };\n\n exports.decode = function(base64) {\n var bufferLength = base64.length * 0.75,\n len = base64.length, i, p = 0,\n encoded1, encoded2, encoded3, encoded4;\n\n if (base64[base64.length - 1] === \"=\") {\n bufferLength--;\n if (base64[base64.length - 2] === \"=\") {\n bufferLength--;\n }\n }\n\n var arraybuffer = new ArrayBuffer(bufferLength),\n bytes = new Uint8Array(arraybuffer);\n\n for (i = 0; i < len; i+=4) {\n encoded1 = chars.indexOf(base64[i]);\n encoded2 = chars.indexOf(base64[i+1]);\n encoded3 = chars.indexOf(base64[i+2]);\n encoded4 = chars.indexOf(base64[i+3]);\n\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n\n return arraybuffer;\n };\n})(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\");\n","const Polling = require(\"./polling\");\nconst globalThis = require(\"../globalThis\");\n\nconst rNewline = /\\n/g;\nconst rEscapedNewline = /\\\\n/g;\n\n/**\n * Global JSONP callbacks.\n */\n\nlet callbacks;\n\nclass JSONPPolling extends Polling {\n /**\n * JSONP Polling constructor.\n *\n * @param {Object} opts.\n * @api public\n */\n constructor(opts) {\n super(opts);\n\n this.query = this.query || {};\n\n // define global callbacks array if not present\n // we do this here (lazily) to avoid unneeded global pollution\n if (!callbacks) {\n // we need to consider multiple engines in the same page\n callbacks = globalThis.___eio = globalThis.___eio || [];\n }\n\n // callback identifier\n this.index = callbacks.length;\n\n // add callback to jsonp global\n callbacks.push(this.onData.bind(this));\n\n // append to query string\n this.query.j = this.index;\n }\n\n /**\n * JSONP only supports binary as base64 encoded strings\n */\n get supportsBinary() {\n return false;\n }\n\n /**\n * Closes the socket.\n *\n * @api private\n */\n doClose() {\n if (this.script) {\n // prevent spurious errors from being emitted when the window is unloaded\n this.script.onerror = () => {};\n this.script.parentNode.removeChild(this.script);\n this.script = null;\n }\n\n if (this.form) {\n this.form.parentNode.removeChild(this.form);\n this.form = null;\n this.iframe = null;\n }\n\n super.doClose();\n }\n\n /**\n * Starts a poll cycle.\n *\n * @api private\n */\n doPoll() {\n const script = document.createElement(\"script\");\n\n if (this.script) {\n this.script.parentNode.removeChild(this.script);\n this.script = null;\n }\n\n script.async = true;\n script.src = this.uri();\n script.onerror = e => {\n this.onError(\"jsonp poll error\", e);\n };\n\n const insertAt = document.getElementsByTagName(\"script\")[0];\n if (insertAt) {\n insertAt.parentNode.insertBefore(script, insertAt);\n } else {\n (document.head || document.body).appendChild(script);\n }\n this.script = script;\n\n const isUAgecko =\n \"undefined\" !== typeof navigator && /gecko/i.test(navigator.userAgent);\n\n if (isUAgecko) {\n setTimeout(function() {\n const iframe = document.createElement(\"iframe\");\n document.body.appendChild(iframe);\n document.body.removeChild(iframe);\n }, 100);\n }\n }\n\n /**\n * Writes with a hidden iframe.\n *\n * @param {String} data to send\n * @param {Function} called upon flush.\n * @api private\n */\n doWrite(data, fn) {\n let iframe;\n\n if (!this.form) {\n const form = document.createElement(\"form\");\n const area = document.createElement(\"textarea\");\n const id = (this.iframeId = \"eio_iframe_\" + this.index);\n\n form.className = \"socketio\";\n form.style.position = \"absolute\";\n form.style.top = \"-1000px\";\n form.style.left = \"-1000px\";\n form.target = id;\n form.method = \"POST\";\n form.setAttribute(\"accept-charset\", \"utf-8\");\n area.name = \"d\";\n form.appendChild(area);\n document.body.appendChild(form);\n\n this.form = form;\n this.area = area;\n }\n\n this.form.action = this.uri();\n\n function complete() {\n initIframe();\n fn();\n }\n\n const initIframe = () => {\n if (this.iframe) {\n try {\n this.form.removeChild(this.iframe);\n } catch (e) {\n this.onError(\"jsonp polling iframe removal error\", e);\n }\n }\n\n try {\n // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n const html = '<iframe src=\"javascript:0\" name=\"' + this.iframeId + '\">';\n iframe = document.createElement(html);\n } catch (e) {\n iframe = document.createElement(\"iframe\");\n iframe.name = this.iframeId;\n iframe.src = \"javascript:0\";\n }\n\n iframe.id = this.iframeId;\n\n this.form.appendChild(iframe);\n this.iframe = iframe;\n };\n\n initIframe();\n\n // escape \\n to prevent it from being converted into \\r\\n by some UAs\n // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side\n data = data.replace(rEscapedNewline, \"\\\\\\n\");\n this.area.value = data.replace(rNewline, \"\\\\n\");\n\n try {\n this.form.submit();\n } catch (e) {}\n\n if (this.iframe.attachEvent) {\n this.iframe.onreadystatechange = () => {\n if (this.iframe.readyState === \"complete\") {\n complete();\n }\n };\n } else {\n this.iframe.onload = complete;\n }\n }\n}\n\nmodule.exports = JSONPPolling;\n","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 nextTick\n} = require(\"./websocket-constructor\");\n\n\n\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 this.writable = false;\n\n // encodePacket efficient as it uses WS framing\n // no need for encodePayload\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n\n parser.encodePacket(packet, this.supportsBinary, 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 (this.opts.perMessageDeflate) {\n const len =\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.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 this.ws.send(data);\n } else {\n this.ws.send(data, opts);\n }\n } catch (e) {\n\n\n }\n\n if (lastPacket) {\n // fake drain\n // defer to next tick to allow Socket to clear writeBuffer\n nextTick(() => {\n this.writable = true;\n this.emit(\"drain\");\n });\n }\n });\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","const globalThis = require(\"../globalThis\");\nconst nextTick = (() => {\n const isPromiseAvailable =\n typeof Promise === \"function\" && typeof Promise.resolve === \"function\";\n if (isPromiseAvailable) {\n return cb => Promise.resolve().then(cb);\n } else {\n return cb => setTimeout(cb, 0);\n }\n})();\n\nmodule.exports = {\n WebSocket: globalThis.WebSocket || globalThis.MozWebSocket,\n usingBrowserWebSocket: true,\n defaultBinaryType: \"arraybuffer\",\n nextTick\n};\n","exports.encode = require('./encode');\nexports.decode = require('./decode');\n","'use strict';\n\nfunction utf8Write(view, offset, str) {\n var c = 0;\n for (var i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n view.setUint8(offset++, c);\n }\n else if (c < 0x800) {\n view.setUint8(offset++, 0xc0 | (c >> 6));\n view.setUint8(offset++, 0x80 | (c & 0x3f));\n }\n else if (c < 0xd800 || c >= 0xe000) {\n view.setUint8(offset++, 0xe0 | (c >> 12));\n view.setUint8(offset++, 0x80 | (c >> 6) & 0x3f);\n view.setUint8(offset++, 0x80 | (c & 0x3f));\n }\n else {\n i++;\n c = 0x10000 + (((c & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));\n view.setUint8(offset++, 0xf0 | (c >> 18));\n view.setUint8(offset++, 0x80 | (c >> 12) & 0x3f);\n view.setUint8(offset++, 0x80 | (c >> 6) & 0x3f);\n view.setUint8(offset++, 0x80 | (c & 0x3f));\n }\n }\n}\n\nfunction utf8Length(str) {\n var c = 0, length = 0;\n for (var i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n }\n else if (c < 0x800) {\n length += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n }\n else {\n i++;\n length += 4;\n }\n }\n return length;\n}\n\nfunction _encode(bytes, defers, value) {\n var type = typeof value, i = 0, l = 0, hi = 0, lo = 0, length = 0, size = 0;\n\n if (type === 'string') {\n length = utf8Length(value);\n\n // fixstr\n if (length < 0x20) {\n bytes.push(length | 0xa0);\n size = 1;\n }\n // str 8\n else if (length < 0x100) {\n bytes.push(0xd9, length);\n size = 2;\n }\n // str 16\n else if (length < 0x10000) {\n bytes.push(0xda, length >> 8, length);\n size = 3;\n }\n // str 32\n else if (length < 0x100000000) {\n bytes.push(0xdb, length >> 24, length >> 16, length >> 8, length);\n size = 5;\n } else {\n throw new Error('String too long');\n }\n defers.push({ _str: value, _length: length, _offset: bytes.length });\n return size + length;\n }\n if (type === 'number') {\n // TODO: encode to float 32?\n\n // float 64\n if (Math.floor(value) !== value || !isFinite(value)) {\n bytes.push(0xcb);\n defers.push({ _float: value, _length: 8, _offset: bytes.length });\n return 9;\n }\n\n if (value >= 0) {\n // positive fixnum\n if (value < 0x80) {\n bytes.push(value);\n return 1;\n }\n // uint 8\n if (value < 0x100) {\n bytes.push(0xcc, value);\n return 2;\n }\n // uint 16\n if (value < 0x10000) {\n bytes.push(0xcd, value >> 8, value);\n return 3;\n }\n // uint 32\n if (value < 0x100000000) {\n bytes.push(0xce, value >> 24, value >> 16, value >> 8, value);\n return 5;\n }\n // uint 64\n hi = (value / Math.pow(2, 32)) >> 0;\n lo = value >>> 0;\n bytes.push(0xcf, hi >> 24, hi >> 16, hi >> 8, hi, lo >> 24, lo >> 16, lo >> 8, lo);\n return 9;\n } else {\n // negative fixnum\n if (value >= -0x20) {\n bytes.push(value);\n return 1;\n }\n // int 8\n if (value >= -0x80) {\n bytes.push(0xd0, value);\n return 2;\n }\n // int 16\n if (value >= -0x8000) {\n bytes.push(0xd1, value >> 8, value);\n return 3;\n }\n // int 32\n if (value >= -0x80000000) {\n bytes.push(0xd2, value >> 24, value >> 16, value >> 8, value);\n return 5;\n }\n // int 64\n hi = Math.floor(value / Math.pow(2, 32));\n lo = value >>> 0;\n bytes.push(0xd3, hi >> 24, hi >> 16, hi >> 8, hi, lo >> 24, lo >> 16, lo >> 8, lo);\n return 9;\n }\n }\n if (type === 'object') {\n // nil\n if (value === null) {\n bytes.push(0xc0);\n return 1;\n }\n\n if (Array.isArray(value)) {\n length = value.length;\n\n // fixarray\n if (length < 0x10) {\n bytes.push(length | 0x90);\n size = 1;\n }\n // array 16\n else if (length < 0x10000) {\n bytes.push(0xdc, length >> 8, length);\n size = 3;\n }\n // array 32\n else if (length < 0x100000000) {\n bytes.push(0xdd, length >> 24, length >> 16, length >> 8, length);\n size = 5;\n } else {\n throw new Error('Array too large');\n }\n for (i = 0; i < length; i++) {\n size += _encode(bytes, defers, value[i]);\n }\n return size;\n }\n\n // fixext 8 / Date\n if (value instanceof Date) {\n var time = value.getTime();\n hi = Math.floor(time / Math.pow(2, 32));\n lo = time >>> 0;\n bytes.push(0xd7, 0, hi >> 24, hi >> 16, hi >> 8, hi, lo >> 24, lo >> 16, lo >> 8, lo);\n return 10;\n }\n\n if (value instanceof ArrayBuffer) {\n length = value.byteLength;\n\n // bin 8\n if (length < 0x100) {\n bytes.push(0xc4, length);\n size = 2;\n } else\n // bin 16\n if (length < 0x10000) {\n bytes.push(0xc5, length >> 8, length);\n size = 3;\n } else\n // bin 32\n if (length < 0x100000000) {\n bytes.push(0xc6, length >> 24, length >> 16, length >> 8, length);\n size = 5;\n } else {\n throw new Error('Buffer too large');\n }\n defers.push({ _bin: value, _length: length, _offset: bytes.length });\n return size + length;\n }\n\n if (typeof value.toJSON === 'function') {\n return _encode(bytes, defers, value.toJSON());\n }\n\n var keys = [], key = '';\n\n var allKeys = Object.keys(value);\n for (i = 0, l = allKeys.length; i < l; i++) {\n key = allKeys[i];\n if (typeof value[key] !== 'function') {\n keys.push(key);\n }\n }\n length = keys.length;\n\n // fixmap\n if (length < 0x10) {\n bytes.push(length | 0x80);\n size = 1;\n }\n // map 16\n else if (length < 0x10000) {\n bytes.push(0xde, length >> 8, length);\n size = 3;\n }\n // map 32\n else if (length < 0x100000000) {\n bytes.push(0xdf, length >> 24, length >> 16, length >> 8, length);\n size = 5;\n } else {\n throw new Error('Object too large');\n }\n\n for (i = 0; i < length; i++) {\n key = keys[i];\n size += _encode(bytes, defers, key);\n size += _encode(bytes, defers, value[key]);\n }\n return size;\n }\n // false/true\n if (type === 'boolean') {\n bytes.push(value ? 0xc3 : 0xc2);\n return 1;\n }\n // fixext 1 / undefined\n if (type === 'undefined') {\n bytes.push(0xd4, 0, 0);\n return 3;\n }\n throw new Error('Could not encode');\n}\n\nfunction encode(value) {\n var bytes = [];\n var defers = [];\n var size = _encode(bytes, defers, value);\n var buf = new ArrayBuffer(size);\n var view = new DataView(buf);\n\n var deferIndex = 0;\n var deferWritten = 0;\n var nextOffset = -1;\n if (defers.length > 0) {\n nextOffset = defers[0]._offset;\n }\n\n var defer, deferLength = 0, offset = 0;\n for (var i = 0, l = bytes.length; i < l; i++) {\n view.setUint8(deferWritten + i, bytes[i]);\n if (i + 1 !== nextOffset) { continue; }\n defer = defers[deferIndex];\n deferLength = defer._length;\n offset = deferWritten + nextOffset;\n if (defer._bin) {\n var bin = new Uint8Array(defer._bin);\n for (var j = 0; j < deferLength; j++) {\n view.setUint8(offset + j, bin[j]);\n }\n } else if (defer._str) {\n utf8Write(view, offset, defer._str);\n } else if (defer._float !== undefined) {\n view.setFloat64(offset, defer._float);\n }\n deferIndex++;\n deferWritten += deferLength;\n if (defers[deferIndex]) {\n nextOffset = defers[deferIndex]._offset;\n }\n }\n return buf;\n}\n\nmodule.exports = encode;\n","'use strict';\n\nfunction Decoder(buffer) {\n this._offset = 0;\n if (buffer instanceof ArrayBuffer) {\n this._buffer = buffer;\n this._view = new DataView(this._buffer);\n } else if (ArrayBuffer.isView(buffer)) {\n this._buffer = buffer.buffer;\n this._view = new DataView(this._buffer, buffer.byteOffset, buffer.byteLength);\n } else {\n throw new Error('Invalid argument');\n }\n}\n\nfunction utf8Read(view, offset, length) {\n var string = '', chr = 0;\n for (var i = offset, end = offset + length; i < end; i++) {\n var byte = view.getUint8(i);\n if ((byte & 0x80) === 0x00) {\n string += String.fromCharCode(byte);\n continue;\n }\n if ((byte & 0xe0) === 0xc0) {\n string += String.fromCharCode(\n ((byte & 0x1f) << 6) |\n (view.getUint8(++i) & 0x3f)\n );\n continue;\n }\n if ((byte & 0xf0) === 0xe0) {\n string += String.fromCharCode(\n ((byte & 0x0f) << 12) |\n ((view.getUint8(++i) & 0x3f) << 6) |\n ((view.getUint8(++i) & 0x3f) << 0)\n );\n continue;\n }\n if ((byte & 0xf8) === 0xf0) {\n chr = ((byte & 0x07) << 18) |\n ((view.getUint8(++i) & 0x3f) << 12) |\n ((view.getUint8(++i) & 0x3f) << 6) |\n ((view.getUint8(++i) & 0x3f) << 0);\n if (chr >= 0x010000) { // surrogate pair\n chr -= 0x010000;\n string += String.fromCharCode((chr >>> 10) + 0xD800, (chr & 0x3FF) + 0xDC00);\n } else {\n string += String.fromCharCode(chr);\n }\n continue;\n }\n throw new Error('Invalid byte ' + byte.toString(16));\n }\n return string;\n}\n\nDecoder.prototype._array = function (length) {\n var value = new Array(length);\n for (var i = 0; i < length; i++) {\n value[i] = this._parse();\n }\n return value;\n};\n\nDecoder.prototype._map = function (length) {\n var key = '', value = {};\n for (var i = 0; i < length; i++) {\n key = this._parse();\n value[key] = this._parse();\n }\n return value;\n};\n\nDecoder.prototype._str = function (length) {\n var value = utf8Read(this._view, this._offset, length);\n this._offset += length;\n return value;\n};\n\nDecoder.prototype._bin = function (length) {\n var value = this._buffer.slice(this._offset, this._offset + length);\n this._offset += length;\n return value;\n};\n\nDecoder.prototype._parse = function () {\n var prefix = this._view.getUint8(this._offset++);\n var value, length = 0, type = 0, hi = 0, lo = 0;\n\n if (prefix < 0xc0) {\n // positive fixint\n if (prefix < 0x80) {\n return prefix;\n }\n // fixmap\n if (prefix < 0x90) {\n return this._map(prefix & 0x0f);\n }\n // fixarray\n if (prefix < 0xa0) {\n return this._array(prefix & 0x0f);\n }\n // fixstr\n return this._str(prefix & 0x1f);\n }\n\n // negative fixint\n if (prefix > 0xdf) {\n return (0xff - prefix + 1) * -1;\n }\n\n switch (prefix) {\n // nil\n case 0xc0:\n return null;\n // false\n case 0xc2:\n return false;\n // true\n case 0xc3:\n return true;\n\n // bin\n case 0xc4:\n length = this._view.getUint8(this._offset);\n this._offset += 1;\n return this._bin(length);\n case 0xc5:\n length = this._view.getUint16(this._offset);\n this._offset += 2;\n return this._bin(length);\n case 0xc6:\n length = this._view.getUint32(this._offset);\n this._offset += 4;\n return this._bin(length);\n\n // ext\n case 0xc7:\n length = this._view.getUint8(this._offset);\n type = this._view.getInt8(this._offset + 1);\n this._offset += 2;\n return [type, this._bin(length)];\n case 0xc8:\n length = this._view.getUint16(this._offset);\n type = this._view.getInt8(this._offset + 2);\n this._offset += 3;\n return [type, this._bin(length)];\n case 0xc9:\n length = this._view.getUint32(this._offset);\n type = this._view.getInt8(this._offset + 4);\n this._offset += 5;\n return [type, this._bin(length)];\n\n // float\n case 0xca:\n value = this._view.getFloat32(this._offset);\n this._offset += 4;\n return value;\n case 0xcb:\n value = this._view.getFloat64(this._offset);\n this._offset += 8;\n return value;\n\n // uint\n case 0xcc:\n value = this._view.getUint8(this._offset);\n this._offset += 1;\n return value;\n case 0xcd:\n value = this._view.getUint16(this._offset);\n this._offset += 2;\n return value;\n case 0xce:\n value = this._view.getUint32(this._offset);\n this._offset += 4;\n return value;\n case 0xcf:\n hi = this._view.getUint32(this._offset) * Math.pow(2, 32);\n lo = this._view.getUint32(this._offset + 4);\n this._offset += 8;\n return hi + lo;\n\n // int\n case 0xd0:\n value = this._view.getInt8(this._offset);\n this._offset += 1;\n return value;\n case 0xd1:\n value = this._view.getInt16(this._offset);\n this._offset += 2;\n return value;\n case 0xd2:\n value = this._view.getInt32(this._offset);\n this._offset += 4;\n return value;\n case 0xd3:\n hi = this._view.getInt32(this._offset) * Math.pow(2, 32);\n lo = this._view.getUint32(this._offset + 4);\n this._offset += 8;\n return hi + lo;\n\n // fixext\n case 0xd4:\n type = this._view.getInt8(this._offset);\n this._offset += 1;\n if (type === 0x00) {\n this._offset += 1;\n return void 0;\n }\n return [type, this._bin(1)];\n case 0xd5:\n type = this._view.getInt8(this._offset);\n this._offset += 1;\n return [type, this._bin(2)];\n case 0xd6:\n type = this._view.getInt8(this._offset);\n this._offset += 1;\n return [type, this._bin(4)];\n case 0xd7:\n type = this._view.getInt8(this._offset);\n this._offset += 1;\n if (type === 0x00) {\n hi = this._view.getInt32(this._offset) * Math.pow(2, 32);\n lo = this._view.getUint32(this._offset + 4);\n this._offset += 8;\n return new Date(hi + lo);\n }\n return [type, this._bin(8)];\n case 0xd8:\n type = this._view.getInt8(this._offset);\n this._offset += 1;\n return [type, this._bin(16)];\n\n // str\n case 0xd9:\n length = this._view.getUint8(this._offset);\n this._offset += 1;\n return this._str(length);\n case 0xda:\n length = this._view.getUint16(this._offset);\n this._offset += 2;\n return this._str(length);\n case 0xdb:\n length = this._view.getUint32(this._offset);\n this._offset += 4;\n return this._str(length);\n\n // array\n case 0xdc:\n length = this._view.getUint16(this._offset);\n this._offset += 2;\n return this._array(length);\n case 0xdd:\n length = this._view.getUint32(this._offset);\n this._offset += 4;\n return this._array(length);\n\n // map\n case 0xde:\n length = this._view.getUint16(this._offset);\n this._offset += 2;\n return this._map(length);\n case 0xdf:\n length = this._view.getUint32(this._offset);\n this._offset += 4;\n return this._map(length);\n }\n\n throw new Error('Could not parse');\n};\n\nfunction decode(buffer) {\n var decoder = new Decoder(buffer);\n var value = decoder._parse();\n if (decoder._offset !== buffer.byteLength) {\n throw new Error((buffer.byteLength - decoder._offset) + ' trailing bytes');\n }\n return value;\n}\n\nmodule.exports = decode;\n","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n opts = opts || {};\n this.ms = opts.min || 100;\n this.max = opts.max || 10000;\n this.factor = opts.factor || 2;\n this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n var ms = this.ms * Math.pow(this.factor, this.attempts++);\n if (this.jitter) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.jitter * ms);\n ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;\n }\n return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n this.jitter = jitter;\n};\n\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/client/tmxloader.js b/client/tmxloader.js
index 7753d20..2b3ff0c 100644
--- a/client/tmxloader.js
+++ b/client/tmxloader.js
@@ -2,68 +2,182 @@ var TMXLoader = function(mapName){
var self = {};
self.mapName = mapName;
- self.width = 0;
- self.height = 0;
+
self.tileset = {
firstGID: 0,
isTsx: false,
+ tsxSource: "",
source: "",
tileWidth: 0,
tileHeight: 0,
tileCount: 0,
width: 0,
height: 0,
+ img: null,
+ };
+
+ self.tile = {
+ id: 0,
+ index: 0,
};
- self.tilesets = [];
+
+ self.tiles = [self.tile];
self.layer = {
id: 0,
- name: 0,
- tiles: "",
+ name: "",
+ tiles: [],
+ tilesStr: ""
+ };
+
+ self.layers = {
+ layer: [self.layer]
};
- self.layers = [];
+ self.map = {
+ width: 0,
+ height: 0,
+ layers: [self.layer],
+ tilesets: [self.tileset],
+
+ };
self.xml = new XMLHttpRequest();
+ self.xml2 = new XMLHttpRequest();
self.parser = new DOMParser();
- self.xml.open('GET', "/client/assets/maps/" + mapName + ".tmx");
- self.xml.onload = function(){
- dom = self.parser.parseFromString(self.xml.response, "text/xml");
-
- self.width = dom.documentElement.getAttribute('width');
- self.height = dom.documentElement.getAttribute('height');
-
- // tilesets
- for (var i=0; i < dom.documentElement.getElementsByTagName('tileset').length; i++){
- var tileset = {};
- tileset.firstGID = dom.documentElement.getElementsByTagName('tileset').item(i).getAttribute('firstgid');
- tileset.tileWidth = dom.documentElement.getElementsByTagName('tileset').item(i).getAttribute('tilewidth');
- tileset.tileHeight = dom.documentElement.getElementsByTagName('tileset').item(i).getAttribute('tileheight');
- tileset.tileCount = dom.documentElement.getElementsByTagName('tileset').item(i).getAttribute('tilecount');
- if(dom.documentElement.getElementsByTagName('tileset').item(i).hasAttribute('source')){
- tileset.source = dom.documentElement.getElementsByTagName('tileset').item(i).getAttribute('source');
- tileset.isTsx=true;
+ self.loadMap = function(){
+ self.xml.open('GET', "/client/assets/maps/" + mapName + ".tmx");
+ self.xml.onload = function(){
+ dom = self.parser.parseFromString(self.xml.response, "text/xml");
+
+ self.map.width = dom.documentElement.getAttribute('width');
+ self.map.height = dom.documentElement.getAttribute('height');
+
+ // tilesets
+ for (var i=0; i < dom.documentElement.getElementsByTagName('tileset').length; i++){
+ var tileset = {};
+ tileset.firstGID = parseInt(dom.documentElement.getElementsByTagName('tileset').item(i).getAttribute('firstgid'));
+ if(!dom.documentElement.getElementsByTagName('tileset').item(i).hasAttribute('source')){
+ tileset.source = dom.documentElement.getElementsByTagName('tileset').item(i).getElementsByTagName('image')[0].getAttribute('source').replace("../", "/client/assets/");
+ tileset.width = parseInt(dom.documentElement.getElementsByTagName('tileset').item(i).getElementsByTagName('image')[0].getAttribute('width'));
+ tileset.height = parseInt(dom.documentElement.getElementsByTagName('tileset').item(i).getElementsByTagName('image')[0].getAttribute('height'));
+ tileset.tileWidth = parseInt(dom.documentElement.getElementsByTagName('tileset').item(i).getAttribute('tilewidth'));
+ tileset.tileHeight = parseInt(dom.documentElement.getElementsByTagName('tileset').item(i).getAttribute('tileheight'));
+ tileset.tileCount = parseInt(dom.documentElement.getElementsByTagName('tileset').item(i).getAttribute('tilecount'));
+ tileset.img = self.addImg(tileset.source);
+ self.map.tilesets[i] = tileset;
+ }else{
+ tileset.isTsx = true;
+ tileset.tsxSource = dom.documentElement.getElementsByTagName('tileset').item(i).getAttribute('source').replace("../", "/client/assets/");
+ self.map.tilesets[i] = tileset;
+ self.loadTSX();
+ }
}
- else{
- tileset.source = dom.documentElement.getElementsByTagName('tileset').item(i).getElementsByTagName('image')[0].getAttribute('source');
- tileset.width = dom.documentElement.getElementsByTagName('tileset').item(i).getElementsByTagName('image')[0].getAttribute('width');
- tileset.height = dom.documentElement.getElementsByTagName('tileset').item(i).getElementsByTagName('image')[0].getAttribute('height');
+
+ // layers
+ for (var i=0; i < dom.documentElement.getElementsByTagName('layer').length; i++){
+ var layer = {};
+ layer.name = dom.documentElement.getElementsByTagName('layer').item(i).getAttribute('name');
+ layer.tilesStr = dom.documentElement.getElementsByTagName('layer').item(i).getElementsByTagName('data')[0].innerHTML;
+ layer.id = parseInt(dom.documentElement.getElementsByTagName('layer').item(i).getAttribute('id'));
+ layer.tiles= [];
+ self.map.layers[i] = layer;
}
- self.tilesets[i] = tileset;
+ self.parseLayer();
}
+ self.xml.send();
+ }
+
+ self.addImg = function(source){
+ var TSet = {};
+ TSet.new = new Image();
+ TSet.new.src = source;
+ return TSet.new;
+ }
+
+ self.loadTSX = function(){
+ for(var i=0; i < self.map.tilesets.length; i++){
+
+ if(self.map.tilesets[i].isTsx && self.map.tilesets[i].tsxSource != null){
+ self.xml2.open('GET', self.map.tilesets[i].tsxSource);
+ tileset = self.map.tilesets[i];
+ self.xml2.onload = function(){
+ dom2 = self.parser.parseFromString(self.xml2.response, "text/xml");
+ tileset.source = "/client/assets/tilesets/" + dom2.documentElement.getElementsByTagName('image')[0].getAttribute('source')
+ tileset.width = parseInt(dom2.documentElement.getElementsByTagName('image')[0].getAttribute('width'));
+ tileset.height = parseInt(dom2.documentElement.getElementsByTagName('image')[0].getAttribute('height'));
+ tileset.tileWidth = parseInt(dom2.documentElement.getAttribute('tilewidth'));
+ tileset.tileHeight = parseInt(dom2.documentElement.getAttribute('tileheight'));
+ tileset.tileCount = parseInt(dom2.documentElement.getAttribute('tilecount'));
+ tileset.img = self.addImg(tileset.source);
+ tileset.isTsx = false; // prevents from reloading
+ }
+ self.xml2.send();
+ }
+ }
+ }
+
+ self.getTileIdAt = function(x, y, layer){
+ return self.map.layers[layer].tiles[y][x];
+ }
- // layers
- for (var i=0; i < dom.documentElement.getElementsByTagName('layer').length; i++){
- var layer = {};
- layer.name = dom.documentElement.getElementsByTagName('layer').item(i).getAttribute('name');
- layer.tiles = dom.documentElement.getElementsByTagName('layer').item(i).getElementsByTagName('data')[0].innerHTML;
- layer.id = dom.documentElement.getElementsByTagName('layer').item(i).getAttribute('id');
- self.layers[i] = layer;
- console.log(layer.name);
+ self.parseLayer = function() {
+ for (var i=0; i < self.map.layers.length; i++){
+ for(var mapX = 0; mapX < self.map.height; mapX++){
+ self.map.layers[i].tiles[mapX] = [];
+ for(var mapY = 0; mapY < self.map.width; mapY++){
+ tileId = parseInt(self.map.layers[i].tilesStr.replace('\n','').split(',')[mapY * self.map.width + mapX]);
+ self.map.layers[i].tiles[mapX][mapY] = {id : tileId,
+ index : mapX * self.map.width + mapY };
+ }
+ }
+ self.map.layers[i].tilesStr = "";
}
}
+
+ self.getCollision = function(direction){
+ // TODO
+ }
+
+ self.drawLayer = function(layerName, xOffset, yOffset){
+ for(var layerId=0; layerId < self.map.layers.length; layerId++)
+ {
+ var t = 0;
+ if (self.map.layers[layerId].name.toLowerCase().includes(layerName)){
+ for (var mapY=0; mapY < self.map.height; mapY++){
+ for (var mapX=0; mapX < self.map.width; mapX++){
+ var gid = self.map.layers[layerId].tiles[mapX][mapY].id;
+
+ for(var sets=0; sets< self.map.tilesets.length; sets++)
+ {
+ if (gid <= (self.map.tilesets[sets].firstGID + self.map.tilesets[sets].tileCount) &&
+ gid >= self.map.tilesets[sets].firstGID)
+ t=sets;
+ }
+
+ tsGid = gid - self.map.tilesets[t].firstGID;
+
+ if(self.map.tilesets[t].img == null && tsGid == 0)
+ continue;
+
+ tilesinrow = self.map.tilesets[t].width / self.map.tilesets[t].tileWidth;
+
+ y= Math.floor(tsGid / tilesinrow);
+ x= tsGid % (tilesinrow);
+
+ ctx.drawImage(self.map.tilesets[t].img,
+ x * self.map.tilesets[t].tileWidth, y * self.map.tilesets[t].tileHeight,
+ self.map.tilesets[t].tileWidth, self.map.tilesets[t].tileHeight,
+ mapX*self.map.tilesets[t].tileWidth+ xOffset,mapY*self.map.tilesets[t].tileWidth+ yOffset,
+ self.map.tilesets[t].tileWidth, self.map.tilesets[t].tileHeight)
+ }
+ }
+ }
+ }
+ }
+
+ self.loadMap();
- self.xml.send();
return self;
-} \ No newline at end of file
+}
diff --git a/docs/ChangeLog b/docs/ChangeLog
new file mode 100644
index 0000000..698efd7
--- /dev/null
+++ b/docs/ChangeLog
@@ -0,0 +1,3 @@
+- added commands @who /who @where /w
+- implemented TSX loading and rendering like PNG
+- fixed rendering last tile in row from tileset (PNG & TSX) \ No newline at end of file
diff --git a/docs/ClassStructure.md b/docs/ClassStructure.md
new file mode 100644
index 0000000..76726ac
--- /dev/null
+++ b/docs/ClassStructure.md
@@ -0,0 +1,15 @@
+Client/Server Shared:
+ World:
+ Map:
+ Entities:
+ Players
+ Player
+ Guild
+ Party
+ Monster
+ NPC
+ Warps
+ Items:
+ Equip
+ Usable
+
diff --git a/server/Entities/Bullet.js b/server/Entities/Bullet.js
new file mode 100644
index 0000000..cb5a1a4
--- /dev/null
+++ b/server/Entities/Bullet.js
@@ -0,0 +1,83 @@
+const Entity = require('./Entity');
+const Player = require('./Player');
+
+var Bullet = function(parent, angle) {
+ var self = Entity.Entity();
+ self.id = Math.random();
+ self.speedX = Math.cos(angle/180*Math.PI) *10;
+ self.speedY = Math.sin(angle/180*Math.PI) *10;
+ self.parent = parent;
+ self.timer = 0;
+ self.toRemove = false;
+ var super_update = self.update;
+ self.update = function(){
+ if (self.timer++ > 100)
+ self.toRemove = true;
+ super_update();
+ for (var i in Player.list){
+ var p = Player.list[i];
+ if(self.getDistance(p) < 32 && self.parent !== p.id){
+ p.hp -= 1;
+ if (p.hp <= 0){
+ var shooter = Player.list[self.parent];
+ if (shooter)
+ shooter.score += 1;
+ p.hp = p.hpMax;
+ p.x = Math.random() * 500;
+ p.y = Math.random() * 500;
+
+ }
+ self.toRemove = true;
+ }
+ }
+ }
+
+ self.getInitPack = function() {
+ return {
+ id:self.id,
+ x:self.x,
+ y:self.y,
+ map:self.map,
+ };
+ }
+
+ self.getUpdatePack = function() {
+ return {
+ id:self.id,
+ x:self.x,
+ y:self.y,
+ map:self.map,
+ };
+ }
+
+ Bullet.list[self.id] = self;
+ Entity.initPack.bullet.push(self.getInitPack());
+ return self;
+}
+
+Bullet.list= {};
+
+Bullet.update = function(){
+ var pack = [];
+ for(var i in Bullet.list){
+ var bullet = Bullet.list[i];
+ bullet.update();
+ if(bullet.toRemove){
+ delete Bullet.list[i];
+ Entity.removePack.bullet.push(bullet.id);
+ }
+ else
+ pack.push(bullet.getUpdatePack());
+ }
+ return pack;
+}
+
+Bullet.getAllInitPack = function(){
+ var bullets = [];
+ for(var i in Bullet.list)
+ bullets.push(Bullet.list[i].getInitPack());
+ return bullets;
+}
+
+module.exports = { Bullet };
+exports.list = Bullet.list; \ No newline at end of file
diff --git a/server/Entities/Entity.js b/server/Entities/Entity.js
new file mode 100644
index 0000000..99d8c0b
--- /dev/null
+++ b/server/Entities/Entity.js
@@ -0,0 +1,28 @@
+
+var initPack = {player:[], bullet:[]};
+var removePack = {player:[], bullet:[]};
+
+var Entity = function(){
+ var self = {
+ x: 250,
+ y: 250,
+ map: '002-1',
+ speedX: 0,
+ speedY: 0,
+ id: "",
+ dir: 0
+ }
+ self.update = function(){
+ self.updatePosition();
+ }
+ self.updatePosition = function(){
+ self.x += self.speedX;
+ self.y += self.speedY;
+ }
+ self.getDistance = function(pt){
+ return Math.sqrt(Math.pow(self.x-pt.x,2)) + Math.pow(self.y-pt.y,2);
+ }
+ return self;
+}
+
+module.exports = { Entity, initPack, removePack }; \ No newline at end of file
diff --git a/server/Entities/Player.js b/server/Entities/Player.js
new file mode 100644
index 0000000..6bc0e65
--- /dev/null
+++ b/server/Entities/Player.js
@@ -0,0 +1,156 @@
+var consts = require('../../client/consts')
+const Entity = require('./Entity');
+const Bullet = require('./Bullet');
+
+
+var Player = function(id){
+ var self = Entity.Entity();
+ self.id = id;
+ self.playerName = "";
+ self.number = "" + Math.floor(10 * Math.random());
+ self.pressingRight = false;
+ self.pressingLeft = false;
+ self.pressingUp = false;
+ self.pressingDown = false;
+ self.pressingAttack = false;
+ self.mouseAngle = 0;
+ self.maxSpeed = 10;
+ self.hp = 10;
+ self.hpMax = 10;
+ self.score = 0;
+
+ var super_update = self.update;
+ self.update = function(){
+ self.updateSpeed();
+ super_update();
+ if(self.pressingAttack){
+ self.shootBullet(self.mouseAngle);
+ }
+ }
+
+ self.shootBullet = function(angle){
+ var b = Bullet.Bullet(self.id, angle);
+ b.x = self.x
+ b.y = self.y
+ }
+
+ self.updateSpeed = function(){
+ if(self.pressingRight){
+ self.speedX = self.maxSpeed;
+ self.dir = consts.DIR_RIGHT;
+ }
+ else if(self.pressingLeft){
+ self.speedX = -self.maxSpeed;
+ self.dir = consts.DIR_LEFT;
+ }
+ else
+ self.speedX = 0;
+
+ if(self.pressingUp){
+ self.speedY = -self.maxSpeed;
+ self.dir = consts.DIR_UP;
+ }
+ else if(self.pressingDown){
+ self.speedY = self.maxSpeed;
+ self.dir = consts.DIR_DOWN;
+ }
+ else
+ self.speedY = 0;
+ }
+
+ self.getInitPack = function() {
+ return {
+ id:self.id,
+ playerName:self.playerName,
+ x:self.x,
+ y:self.y,
+ map:self.map,
+ number:self.number,
+ hp:self.hp,
+ hpMax:self.hpMax,
+ score:self.score,
+ dir:self.dir,
+ };
+ }
+ self.getUpdatePack = function() {
+ return {
+ id:self.id,
+ playerName:self.playerName,
+ x:self.x,
+ y:self.y,
+ map:self.map,
+ score:self.score,
+ hp:self.hp,
+ dir:self.dir,
+ };
+ }
+ Player.list[id] = self;
+ Entity.initPack.player.push(self.getInitPack());
+ return self;
+}
+
+Player.list = {};
+
+Player.onConnect = function(socket, pName){
+ var player = Player(socket.id);
+
+ player.playerName = pName;
+
+ socket.on('keyPress', function(data){
+ if (data.inputId === 'left'){
+ player.pressingLeft = data.state;
+ player.dir = consts.DIR_LEFT;
+ }
+ else if (data.inputId === 'right'){
+ player.pressingRight = data.state;
+ player.dir = consts.DIR_RIGHT;
+ }
+ else if (data.inputId === 'up'){
+ player.pressingUp = data.state;
+ player.dir = consts.DIR_UP;
+ }
+ else if (data.inputId === 'down'){
+ player.pressingDown = data.state;
+ player.dir = consts.DIR_DOWN;
+ }
+ else if (data.inputId === 'attack'){
+ player.pressingAttack = data.state;
+ }
+ else if (data.inputId === 'mouseAngle'){
+ player.mouseAngle = data.state;
+ }
+ });
+
+ socket.emit('init',{
+ selfId:socket.id,
+ player:Player.getAllInitPack(),
+ bullet:Bullet.Bullet.getAllInitPack(),
+ });
+}
+
+Player.getAllInitPack = function(){
+ var players = [];
+ for(var i in Player.list)
+ players.push(Player.list[i].getInitPack());
+ return players;
+}
+
+Player.onDisconnect = function(socket){
+ delete Player.list[socket.id];
+ Entity.removePack.player.push(socket.id);
+}
+
+Player.update = function(){
+ var pack = [];
+ for(var i in Player.list){
+ var player = Player.list[i];
+ player.update();
+ pack.push(player.getUpdatePack());
+ }
+ return pack;
+
+
+}
+
+module.exports = { Player };
+exports.list = Player.list; \ No newline at end of file