gamerpc 7.1.1 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gamerpc",
3
- "version": "7.1.1",
3
+ "version": "8.0.0",
4
4
  "author": "bookmansoft <ceo@920.cc>",
5
5
  "contributors": [
6
6
  "bookmansoft <ceo@920.cc>"
@@ -21,7 +21,7 @@
21
21
  "main": "index.js",
22
22
  "scripts": {
23
23
  "test": "mocha",
24
- "build": "cross-env NODE_ENV=production webpack ./src/index.js --mode=production"
24
+ "build": "set NODE_OPTIONS=--openssl-legacy-provider & cross-env NODE_ENV=production webpack ./src/index.js --mode=production"
25
25
  },
26
26
  "repository": {
27
27
  "type": "git",
@@ -32,12 +32,10 @@
32
32
  },
33
33
  "homepage": "https://github.com/bookmansoft/gamegoldtoolkit#readme",
34
34
  "dependencies": {
35
- "create-hmac": "1.1.7",
36
- "elliptic": "^6.5.4",
37
- "node-fetch": "^2.6.1",
38
- "socket.io-client": "^4.7.2"
35
+ "socket.io-client": "^4.2.0"
39
36
  },
40
37
  "devDependencies": {
38
+ "node-fetch": "^2.6.1",
41
39
  "mocha": "^10.2.0",
42
40
  "babel": "^6.23.0",
43
41
  "babel-core": "^6.26.3",
@@ -46,7 +44,7 @@
46
44
  "babel-preset-env": "^1.7.0",
47
45
  "babel-preset-es2015": "^6.24.1",
48
46
  "babel-preset-stage-2": "^6.24.1",
49
- "cross-env": "^5.2.1",
47
+ "cross-env": "^5.2.0",
50
48
  "webpack": "^4.46.0",
51
49
  "webpack-cli": "^3.3.2"
52
50
  }
package/src/gameConn.js CHANGED
@@ -1,10 +1,6 @@
1
- const {stringify, NotifyType, encrypt, decrypt, extendObj, CommStatus, clone, ReturnCodeName, ReturnCode, CommMode, createHmac} = require('./utils/util');
1
+ const {stringify, NotifyType, extendObj, CommStatus, clone, ReturnCodeName, io, ReturnCode, CommMode} = require('./utils/util');
2
2
  const EventEmitter = require('events').EventEmitter;
3
3
  const Indicator = require('./utils/Indicator');
4
- const assert = require('./utils/assert')
5
- let {sha1, hash160, hash256, verifyData, generateKey, signObj, verifyObj, verifyAddress} = require('./utils/verifyData');
6
- const Secret = require('./utils/secret')
7
- const ioclient = require('./utils/socket.io.min.js');
8
4
 
9
5
  /**
10
6
  * RPC控件
@@ -58,7 +54,7 @@ class Remote {
58
54
 
59
55
  this.close();
60
56
 
61
- this.socket = ioclient(`${this.config.UrlHead}://${ip}:${port}`, {'force new connection': true});
57
+ this.socket = io(`${this.config.UrlHead}://${ip}:${port}`, {'force new connection': true});
62
58
  this.socket.on('notify', ret => {//监听推送消息
63
59
  if(this.notifyHandles[ret.type]) {
64
60
  this.notifyHandles[ret.type](ret.info);
@@ -684,22 +680,9 @@ class Remote {
684
680
  }
685
681
 
686
682
  Remote.prototype.CommMode = CommMode;
687
- Remote.prototype.createHmac = createHmac;
688
- Remote.prototype.assert = assert;
689
683
  Remote.prototype.stringify = stringify;
690
- Remote.prototype.encrypt = encrypt;
691
- Remote.prototype.decrypt = decrypt;
692
- Remote.prototype.verifyData = verifyData;
693
- Remote.prototype.generateKey = generateKey;
694
- Remote.prototype.signObj = signObj;
695
- Remote.prototype.verifyObj = verifyObj;
696
- Remote.prototype.verifyAddress = verifyAddress;
697
684
  Remote.prototype.CommStatus = CommStatus;
698
685
  Remote.prototype.ReturnCode = ReturnCode;
699
686
  Remote.prototype.NotifyType = NotifyType;
700
- Remote.prototype.Secret = Secret;
701
- Remote.prototype.hash256 = hash256;
702
- Remote.prototype.hash160 = hash160;
703
- Remote.prototype.sha1 = sha1;
704
687
 
705
688
  module.exports = Remote;
package/src/index.js CHANGED
@@ -13,37 +13,18 @@ Array.prototype.randObj = function() {
13
13
  }
14
14
  }
15
15
 
16
- const assert = require('./utils/assert')
17
- const {CommStatus, createHmac, ReturnCode, CommMode, NotifyType, encrypt, decrypt, stringify} = require('./utils/util');
18
- let {sha1, hash160, hash256, verifyData, generateKey, signObj, verifyObj, verifyAddress} = require('./utils/verifyData');
19
- const Secret = require('./utils/secret')
16
+ const {CommStatus, ReturnCode, CommMode, NotifyType, stringify} = require('./utils/util');
20
17
 
21
18
  const toolkit = exports;
22
19
 
23
- //主网连接器
24
- toolkit.conn = require('./authConn');
25
-
26
20
  //游戏云连接器
27
21
  toolkit.gameconn = require('./gameConn');
28
22
 
29
23
  //实用函数列表
30
- toolkit.assert = assert;
31
24
  toolkit.stringify = stringify;
32
- toolkit.encrypt = encrypt;
33
- toolkit.decrypt = decrypt;
34
- toolkit.verifyData = verifyData;
35
- toolkit.generateKey = generateKey;
36
- toolkit.signObj = signObj;
37
- toolkit.verifyObj = verifyObj;
38
- toolkit.verifyAddress = verifyAddress;
39
25
  toolkit.CommMode = CommMode;
40
26
  toolkit.CommStatus = CommStatus;
41
27
  toolkit.ReturnCode = ReturnCode;
42
28
  toolkit.NotifyType = NotifyType;
43
- toolkit.createHmac = createHmac;
44
- toolkit.Secret = Secret;
45
- toolkit.hash256 = hash256;
46
- toolkit.hash160 = hash160;
47
- toolkit.sha1 = sha1;
48
29
 
49
30
  global.toolkit = toolkit;
package/src/utils/util.js CHANGED
@@ -5,12 +5,14 @@
5
5
 
6
6
  'use strict';
7
7
 
8
- const assert = require('assert');
9
8
  const nodeUtil = require('util');
10
- const aes = require('./aes');
11
- const createHmac = require('create-hmac/browser');
9
+ const io = require('socket.io-client');
12
10
  const Buffer = require('safe-buffer').Buffer
13
11
 
12
+ function assert(ok) {
13
+ throw new Error('something wrong');
14
+ }
15
+
14
16
  /**
15
17
  * @exports utils/util
16
18
  */
@@ -81,73 +83,6 @@ util.sprintf = function sprintf() {
81
83
  return o.join('');
82
84
  }
83
85
 
84
- /**
85
- * 加密方法
86
- * @param key 加密key
87
- * @param iv 向量
88
- * @param data 需要加密的数据
89
- * @returns string
90
- */
91
- util.encrypt = function encrypt(key, iv, data) {
92
- if(!Buffer.isBuffer(key)) {
93
- assert(typeof key === 'string');
94
- key = Buffer.from(key, 'binary')
95
- }
96
-
97
- if(!Buffer.isBuffer(iv)) {
98
- assert(typeof iv === 'string');
99
- iv = Buffer.from(iv, 'binary')
100
- }
101
-
102
- if(!Buffer.isBuffer(data)) {
103
- assert(typeof data === 'string');
104
- data = Buffer.from(data, 'binary')
105
- }
106
-
107
- var crypted = aes.encipher(data, key, iv);
108
-
109
- crypted = Buffer.from(crypted, 'binary');
110
-
111
- let ret = Buffer.alloc(crypted.length*2);
112
- for(let i = 0; i < crypted.length; i++){
113
- ret[2*i] = (crypted[i] >> 4) + 97;
114
- ret[2*i+1] = (crypted[i] & 0x0F) + 97;
115
- }
116
- return ret.toString('binary');
117
- };
118
-
119
- /**
120
- * 解密方法
121
- * @param key 解密的key
122
- * @param iv 向量
123
- * @param data 密文
124
- * @returns string
125
- */
126
- util.decrypt = function decrypt(key, iv, data) {
127
- if(!Buffer.isBuffer(key)) {
128
- assert(typeof key === 'string');
129
- key = Buffer.from(key, 'binary')
130
- }
131
-
132
- if(!Buffer.isBuffer(iv)) {
133
- assert(typeof iv === 'string');
134
- iv = Buffer.from(iv, 'binary')
135
- }
136
-
137
- if(!Buffer.isBuffer(data)) {
138
- assert(typeof data === 'string');
139
- data = Buffer.from(data, 'binary')
140
- }
141
-
142
- let ret = Buffer.alloc(data.length/2);
143
- for(let i = 0; i < ret.length; i++){
144
- ret[i] = ((data[i*2]-97)<<4) | (data[i*2+1]-97);
145
- }
146
-
147
- var decoded = aes.decipher(ret, key, iv);
148
- return decoded.toString('binary');
149
- };
150
-
151
86
  /**
152
87
  * Test whether a number is Number,
153
88
  * finite, and below MAX_SAFE_INTEGER.
@@ -1284,7 +1219,7 @@ const CommMode = {
1284
1219
  */
1285
1220
  const NotifyType = {
1286
1221
  none: 0, //测试消息
1287
- test: 9999, //测试消息
1222
+ test: 9999, //测试消息
1288
1223
  };
1289
1224
 
1290
1225
  function Base64() {
@@ -1390,17 +1325,6 @@ function Base64() {
1390
1325
  }
1391
1326
  }
1392
1327
 
1393
- /**
1394
- * 利用HMAC算法,以及令牌固定量和令牌随机量,计算访问令牌
1395
- * @param {*} token
1396
- * @param {*} random
1397
- */
1398
- function signHMAC(token, random) {
1399
- var hmac = createHmac('sha256', random);
1400
- let sig = hmac.update(token).digest('hex');
1401
- return sig;
1402
- }
1403
-
1404
1328
  /**
1405
1329
  * 扩展对象,用于多个对象之间的属性注入
1406
1330
  * @note 对属性(get set)复制不会成功
@@ -1516,13 +1440,12 @@ function clone(obj) {
1516
1440
  throw new Error("Unable to copy obj! Its type isn't supported.");
1517
1441
  }
1518
1442
 
1443
+ util.io = io;
1519
1444
  util.Base64 = Base64;
1520
- util.signHMAC = signHMAC;
1521
1445
  util.ReturnCode = ReturnCode;
1522
1446
  util.ReturnCodeName = ReturnCodeName;
1523
1447
  util.CommMode = CommMode;
1524
1448
  util.NotifyType = NotifyType;
1525
- util.createHmac = createHmac;
1526
1449
  util.extendObj = extendObj;
1527
1450
  util.clone = clone;
1528
1451
  util.CommStatus = CommStatus;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * 联机单元测试:游戏登录测试流程
3
+ */
4
+
5
+ //连接配置信息
6
+ const config = {
7
+ UrlHead: "http", //协议选择: http/https
8
+ webserver: {
9
+ "host": "127.0.0.1", //远程主机地址
10
+ "port": 9901 //远程主机端口
11
+ },
12
+ logicserver: {},
13
+ oemInfo: { //模拟用户信息
14
+ domain: 'CoreOfKow', //指定访问的逻辑服务器类型
15
+ openid: `bxs.15699999936`, //用户标识
16
+ token: '', //用户令牌,由920客户端向920服务端索取并填充于此
17
+ },
18
+ }
19
+
20
+ //长连接中,下行通告的类型定义
21
+ const NotifyType = {
22
+ action: 1, //体力数值推送
23
+ };
24
+
25
+ //引入长连接组件
26
+ let {gameconn} = require('../../index');
27
+ let connector = new gameconn(config)
28
+ .setFetch(require('node-fetch')); //设置node服务端环境下兼容的fetch函数,**注意只在node服务端环境下需要,浏览器环境中系统自带 fetch 函数**
29
+
30
+ connector.setmode(connector.CommMode.ws)
31
+ .watch(msg => {
32
+ console.log('收到下行消息', msg);
33
+ }, NotifyType.action);
34
+
35
+ connector.login(config.oemInfo).then(ret=>{
36
+ console.log(config.oemInfo, ret);
37
+ })
package/test/game/mgr.js CHANGED
@@ -1,4 +1,4 @@
1
- /**
1
+ d:\workshop\gitee\vallnetserver\test\kow.socket.js/**
2
2
  * 联机单元测试:远程管理
3
3
  */
4
4
 
package/src/authConn.js DELETED
@@ -1,595 +0,0 @@
1
- /**
2
- * 授权式连接器,完整封装了客户端通过通过授权模式访问远程全节点的方法,仅仅依赖 create-hmac
3
- * 可以直接用于 node 环境下的服务端程序,来访问远程全节点丰富的API接口
4
- * 通过合适的打包程序,也可以用于浏览器环境
5
- */
6
-
7
- const assert = require('./utils/assert')
8
- const {io, signHMAC, Base64, now, CommStatus, createHmac, ReturnCode, CommMode, NotifyType, encrypt, decrypt, stringify} = require('./utils/util');
9
- let {sha1, hash160, hash256, verifyData, generateKey, signObj, verifyObj, verifyAddress} = require('./utils/verifyData');
10
- const Secret = require('./utils/secret')
11
-
12
- /**
13
- * 终端配置管理
14
- */
15
-
16
- class AuthConn
17
- {
18
- constructor() {
19
- this.defaultNetworkType = 'testnet';
20
- this.AuthConnConfig = {
21
- 'main': {
22
- type: 'main',
23
- ip: '127.0.0.1', //远程服务器地址
24
- port: 2002, //RPC端口
25
- head: 'http', //远程服务器通讯协议,分为 http 和 https
26
- id: 'primary', //默认访问的钱包编号
27
- apiKey: '', //远程服务器基本校验密码
28
- cid: '', //授权节点编号,用于访问远程钱包时的认证
29
- token: '', //授权节点令牌固定量,用于访问远程钱包时的认证
30
- },
31
- 'testnet': {
32
- type: 'testnet',
33
- ip: '127.0.0.1', //远程服务器地址
34
- port: 2102, //RPC端口
35
- head: 'http', //远程服务器通讯协议,分为 http 和 https
36
- id: 'primary', //默认访问的钱包编号
37
- apiKey: '', //远程服务器基本校验密码
38
- cid: '', //授权节点编号,用于访问远程钱包时的认证
39
- token: '', //授权节点令牌固定量,用于访问远程钱包时的认证
40
- },
41
- }
42
-
43
- this.socketEvents = {};
44
- this.mode = CommMode.post;
45
- this.socket = null;
46
- this.$params = {
47
- random: null,
48
- randomTime: null,
49
- };
50
- }
51
-
52
- /**
53
- * 设置通讯模式
54
- * @param {*} mode 通讯模式
55
- * @param {*} cb 连接建立时的回调
56
- */
57
- setmode(mode, cb) {
58
- this.mode = mode;
59
- if(this.mode == CommMode.ws) {
60
- this.socketEvents['connect'] = async () => {
61
- await this.login();
62
- await this.join();
63
- if(typeof cb == 'function') {
64
- await cb();
65
- }
66
- };
67
- }
68
- return this;
69
- }
70
-
71
- async retoken() {
72
- let params = this.getTerminalConfig();
73
- let msg = await this.setmode(CommMode.ws).execute('token.random', [params.cid]);
74
- if(!!params.structured) {
75
- msg = msg.result;
76
- }
77
- const hmac = this.createHmac('sha256', msg);
78
- params.calc = hmac.update(params.token).digest('hex'); //计算并附加访问令牌
79
-
80
- return params;
81
- }
82
-
83
- /**
84
- * WS模式下的登录流程
85
- * @param {*} params
86
- * @param {*} callback
87
- */
88
- async login() {
89
- let params = await this.retoken();
90
-
91
- return await this.execute('wallet.auth', [
92
- params.apiKey,
93
- params.type,
94
- params.id,
95
- params.cid,
96
- params.calc,
97
- ]);
98
- }
99
-
100
- /**
101
- * Listen for events on wallet id.
102
- * @returns {Promise}
103
- */
104
-
105
- async join() {
106
- let conf = this.getTerminalConfig();
107
-
108
- let method = 'wallet.join';
109
- let params = await this.retoken();
110
- params = [params.id, params.cid, params.calc];
111
- let sig = signObj({
112
- method: method,
113
- params: params,
114
- cid: conf.cid,
115
- wid: conf.id,
116
- }, hash256(Buffer.from(conf.token)));
117
-
118
- return new Promise((resolve, reject) => {
119
- this.socket.emit('request', method, params, sig, (err) => {
120
- if (!!err) {
121
- console.log(err);
122
- reject(new Error(err.message));
123
- return;
124
- }
125
- resolve();
126
- });
127
- });
128
- };
129
-
130
- /**
131
- * Unlisten for events on wallet id.
132
- */
133
-
134
- async leave() {
135
- let conf = this.getTerminalConfig();
136
-
137
- let method = 'wallet.leave';
138
- let params = [conf.id];
139
- let sig = signObj({
140
- method: method,
141
- params: params,
142
- cid: conf.cid,
143
- wid: conf.id,
144
- }, hash256(Buffer.from(conf.token)));
145
-
146
- return new Promise((resolve, reject) => {
147
- this.socket.emit('request', method, params, sig, (err) => {
148
- if (err) {
149
- reject(new Error(err.message));
150
- return;
151
- }
152
- resolve();
153
- });
154
- });
155
- };
156
-
157
- /**
158
- * 以 GET 方式,访问开放式API
159
- * @param {*} url
160
- */
161
- async get(url) {
162
- const newOptions = { json: true };
163
-
164
- let conf = this.getTerminalConfig();
165
- let _head = !!conf.head ? conf.head : 'http';
166
- url = `${_head}://${conf.ip}:${conf.port}/public/${url}`;
167
-
168
- newOptions.headers = {
169
- Accept: 'application/json',
170
- 'Content-Type': 'application/json; charset=utf-8',
171
- };
172
-
173
- try {
174
- let ret = null;
175
- if(this.fetch) {
176
- ret = await this.fetch(url, newOptions);
177
- }
178
- else {
179
- ret = await fetch(url, newOptions);
180
- }
181
- let json = await ret.json();
182
-
183
- if(!conf.structured) {
184
- if(json.error) {
185
- return json;
186
- } else {
187
- return json.result; //脱去外围数据结构
188
- }
189
- } else {
190
- return json; //保留外围数据结构
191
- }
192
- }
193
- catch(e) {
194
- console.error(e);
195
- }
196
- }
197
-
198
- async post(url, options) {
199
- const newOptions = { json: true, method: 'POST', body: JSON.stringify(options) };
200
-
201
- let conf = this.getTerminalConfig();
202
- let _head = !!conf.head ? conf.head : 'http';
203
- url = `${_head}://${conf.ip}:${conf.port}/public/${url}`;
204
-
205
- newOptions.headers = {
206
- Accept: 'application/json',
207
- 'Content-Type': 'application/json; charset=utf-8',
208
- };
209
-
210
- try {
211
- let ret = null;
212
- if(this.fetch) {
213
- ret = await this.fetch(url, newOptions);
214
- }
215
- else {
216
- ret = await fetch(url, newOptions);
217
- }
218
- let json = await ret.json();
219
-
220
- if(!conf.structured) {
221
- if(json.error) {
222
- return json;
223
- } else {
224
- return json.result; //脱去外围数据结构
225
- }
226
- } else {
227
- return json; //保留外围数据结构
228
- }
229
- }
230
- catch(e) {
231
- console.error(e);
232
- }
233
- }
234
-
235
- /**
236
- * 执行RPC调用
237
- * @param {*} method
238
- * @param {*} params
239
- */
240
- async execute(method, params) {
241
- params = params || [];
242
-
243
- let conf = this.getTerminalConfig();
244
- switch(this.mode) {
245
- case CommMode.ws: {
246
- if(!this.socket) {
247
- await this.createSocket();
248
- }
249
-
250
- let key = generateKey(hash256(Buffer.from(conf.token)));
251
- let obj = {
252
- method: method,
253
- params: params,
254
- cid: conf.cid,
255
- wid: conf.id,
256
- };
257
- let sig = signObj(obj, key.private);
258
-
259
- return new Promise((resolve, reject) => {
260
- this.socket.emit('request', method, params, sig, (err, msg) => {
261
- if(!!err) {
262
- reject(err);
263
- }
264
- if(!conf.structured) {
265
- if(!!msg) {
266
- if(msg.error) {
267
- resolve(msg);
268
- } else {
269
- resolve(msg.result);
270
- }
271
- } else {
272
- resolve(null);
273
- }
274
- } else {
275
- resolve(msg);
276
- }
277
- });
278
- });
279
- }
280
-
281
- default: {
282
- await this.queryToken();
283
-
284
- let opt = this.fillOptions({
285
- method: 'POST',
286
- body: {
287
- method: method,
288
- params: params,
289
- },
290
- });
291
-
292
- let rt = await this.request(
293
- opt,
294
- this.getTerminalConfig(),
295
- );
296
-
297
- if(!rt) {
298
- //console.error(`${method}通讯错误`);
299
- return { error:-1, };
300
- }
301
-
302
- if(!!rt.error) {
303
- //console.error(`${method}: ${rt.error.type} / ${rt.error.message}`);
304
- }
305
-
306
- if(!conf.structured) {
307
- if(rt.error) {
308
- return rt;
309
- } else {
310
- return rt.result;
311
- }
312
- } else {
313
- return rt;
314
- }
315
- }
316
- }
317
- }
318
-
319
- /**
320
- * 计算并返回用于对称加密的密钥
321
- */
322
- getAes() {
323
- let buf = hash256(Buffer.from(this.getTerminalConfig().token));
324
- let aeskey = buf.toString('base64').slice(0, 32);
325
- buf = hash256(buf);
326
- let aesiv = buf.toString('base64').slice(0, 16);
327
-
328
- return {aeskey, aesiv};
329
- }
330
-
331
- getRandom() {
332
- let _t = (now() / 120) | 0;
333
- this.$params.randomTime = this.$params.randomTime || _t;
334
- if (_t > this.$params.randomTime) {
335
- //有效期检测
336
- this.$params.random = null;
337
- }
338
-
339
- return this.$params.random;
340
- }
341
-
342
- setRandom(val) {
343
- this.$params.random = val;
344
- if (!!val) {
345
- this.$params.randomTime = (now() / 120) | 0; //设置有效期
346
- }
347
- }
348
-
349
- fillOptions(options) {
350
- if (!options) {
351
- options = {};
352
- }
353
- if (!options.body) {
354
- options.body = {};
355
- }
356
- if (!options.headers) {
357
- options.headers = {};
358
- }
359
-
360
- let rnd = this.getRandom();
361
- let _token = this.getTerminalConfig().token;
362
- if (_token && rnd) {
363
- options.body.token = signHMAC(_token, rnd);
364
- }
365
- options.body.wid = this.getTerminalConfig().id; //附加默认钱包编号
366
- options.body.cid = this.getTerminalConfig().cid; //附加客户端编号
367
-
368
- //对上行数据添加签名, 使用原始 token 作为私钥源
369
- options.body.sig = signObj({
370
- method: options.body.method,
371
- params: options.body.params,
372
- cid: options.body.cid,
373
- wid: options.body.wid,
374
- }, hash256(Buffer.from(_token)));
375
-
376
- options.body = JSON.stringify(options.body);
377
-
378
- let auth = {
379
- username: 'gamerpc',
380
- password: this.getTerminalConfig().apiKey || '',
381
- };
382
- var base = new Base64();
383
- var result = base.encode(`${auth.username}:${auth.password}`);
384
- options.headers.Authorization = `Basic ${result}`;
385
- return options;
386
- }
387
-
388
- async queryToken() {
389
- let ret = this.getRandom();
390
- if (!ret) {
391
- ret = await this.request(
392
- this.fillOptions({
393
- method: 'POST',
394
- body: {
395
- method: 'token.random',
396
- params: [this.getTerminalConfig().cid],
397
- },
398
- }),
399
- this.getTerminalConfig()
400
- );
401
- if(!ret || !!ret.error) {
402
- console.error(`HMAC请求错误`);
403
- } else {
404
- this.setRandom(ret.result); //获取令牌随机量
405
- }
406
- }
407
- }
408
-
409
- /**
410
- * 创建通讯连接组件
411
- * @param {*} ip
412
- * @param {*} port
413
- */
414
- async createSocket(){
415
- this.close();
416
-
417
- let uri = ``;
418
- let conf = this.getTerminalConfig();
419
- let _head = !!conf.head ? conf.head : 'http';
420
- uri = `${_head}://${conf.ip}:${conf.port}/`;
421
-
422
- this.socket = io(uri, {'force new connection': true})
423
- .on('disconnect', ()=>{//断线重连
424
- this.socket.needConnect = true;
425
- setTimeout(()=>{
426
- if(!!this.socket.needConnect) {
427
- this.socket.needConnect = false;
428
- this.socket.connect();
429
- }
430
- }, 1500);
431
- })
432
-
433
- Object.keys(this.socketEvents).map(key=>{
434
- this.socket.on(key, this.socketEvents[key]);
435
- });
436
-
437
- await (async function(time){return new Promise(resolve =>{setTimeout(resolve, time);});})(2000);
438
- }
439
-
440
- /**
441
- * 关闭长连接
442
- */
443
- close() {
444
- if(!!this.socket) {
445
- this.socket.removeAllListeners();
446
- this.socket.disconnect();
447
- this.socket = null;
448
- }
449
- }
450
-
451
- /**
452
- * Requests a URL, returning a promise.
453
- *
454
- * @param {object} [options] The options we want to pass to "fetch"
455
- * @return {object} An object containing either "data" or "err"
456
- */
457
- async request(options, conf) {
458
- const defaultOptions = {
459
- //credentials: 'include',
460
- };
461
-
462
- const newOptions = { ...defaultOptions, ...options };
463
- newOptions.json = true;
464
-
465
- let _head = !!conf.head ? conf.head : 'http';
466
-
467
- newOptions.uri = `${_head}://${conf.ip}:${conf.port}/`;
468
-
469
- if (
470
- newOptions.method === 'POST' ||
471
- newOptions.method === 'PUT' ||
472
- newOptions.method === 'DELETE'
473
- ) {
474
- newOptions.headers = {
475
- Accept: 'application/json',
476
- 'Content-Type': 'application/json; charset=utf-8',
477
- ...newOptions.headers,
478
- };
479
- }
480
-
481
- try {
482
- if(this.fetch) {
483
- let ret = await this.fetch(newOptions.uri, newOptions);
484
- return await ret.json();
485
- }
486
- else {
487
- let ret = await fetch(newOptions.uri, newOptions);
488
- return await ret.json();
489
- }
490
- }
491
- catch(e) {
492
- console.error(e);
493
- }
494
- }
495
-
496
-
497
- /**
498
- * 设置服务端推送报文的监控句柄,支持链式调用
499
- * @param cb 回调
500
- * @param etype 事件类型
501
- * @returns {Remote}
502
- */
503
- watch(cb, etype) {
504
- if(this.socket) {
505
- this.socket.on(etype, cb);
506
- } else {
507
- this.socketEvents[etype] = cb;
508
- }
509
- return this;
510
- }
511
-
512
- /**
513
- * 获取终端配置
514
- * @param {*} networkType
515
- */
516
- getTerminalConfig(networkType) {
517
- networkType = networkType || this.defaultNetworkType;
518
-
519
- if(!this.AuthConnConfig[networkType]) {
520
- this.AuthConnConfig[info.type] = {};
521
- }
522
-
523
- return this.AuthConnConfig[networkType];
524
- }
525
-
526
- /**
527
- * 等待指定时长
528
- * @param {Number} time 等待时长(毫秒)
529
- */
530
- async wait (time) {
531
- await (async (time) => {return new Promise(resolve => {setTimeout(resolve, time);});})(time);
532
- }
533
-
534
- /**
535
- * 设置终端配置
536
- * @param {*} networkType
537
- * @param {*} info
538
- */
539
- setup(info) {
540
- if(!!info && info.type) {
541
- if(!this.AuthConnConfig[info.type]) {
542
- this.AuthConnConfig[info.type] = {};
543
- }
544
-
545
- //设置默认网络类型
546
- this.defaultNetworkType = info.type;
547
-
548
- for(let k of Object.keys(info)) {
549
- //设置默认网络类型的参数 - 逐项设置
550
- this.AuthConnConfig[info.type][k] = info[k];
551
- }
552
-
553
- if(this.mode == CommMode.ws) {
554
- //断开后自动重连,以便刷新接口参数如目标钱包编号等
555
- this.close();
556
- }
557
- }
558
-
559
- return this;
560
- }
561
-
562
- /**
563
- * 为了提供node下的兼容性而添加的属性设定函数
564
- * @param {*} fn
565
- */
566
- setFetch(fn) {
567
- this.fetch = fn;
568
- return this;
569
- }
570
- }
571
-
572
- AuthConn.prototype.CommMode = CommMode;
573
- AuthConn.prototype.createHmac = createHmac;
574
- AuthConn.prototype.assert = assert;
575
- AuthConn.prototype.stringify = stringify;
576
- AuthConn.prototype.encrypt = encrypt;
577
- AuthConn.prototype.decrypt = decrypt;
578
- AuthConn.prototype.verifyData = verifyData;
579
- AuthConn.prototype.generateKey = generateKey;
580
- AuthConn.prototype.signObj = signObj;
581
- AuthConn.prototype.verifyObj = verifyObj;
582
- AuthConn.prototype.verifyAddress = verifyAddress;
583
- AuthConn.prototype.CommMode = CommMode;
584
- AuthConn.prototype.CommStatus = CommStatus;
585
- AuthConn.prototype.ReturnCode = ReturnCode;
586
- AuthConn.prototype.NotifyType = NotifyType;
587
- AuthConn.prototype.Secret = Secret;
588
- AuthConn.prototype.hash256 = hash256;
589
- AuthConn.prototype.hash160 = hash160;
590
- AuthConn.prototype.sha1 = sha1;
591
-
592
- /**
593
- * 访问全节点的远程调用函数
594
- */
595
- module.exports = AuthConn;
@@ -1,7 +0,0 @@
1
- /*!
2
- * Socket.IO v4.6.1
3
- * (c) 2014-2023 Guillermo Rauch
4
- * Released under the MIT License.
5
- */
6
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).io=e()}(this,(function(){"use strict";function t(e){return t="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(e)}function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(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 r(t,e,r){return e&&n(t.prototype,e),r&&n(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}function i(){return i=Object.assign?Object.assign.bind():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},i.apply(this,arguments)}function o(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}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&a(t,e)}function s(t){return s=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},s(t)}function a(t,e){return a=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},a(t,e)}function c(){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}}function u(t,e,n){return u=c()?Reflect.construct.bind():function(t,e,n){var r=[null];r.push.apply(r,e);var i=new(Function.bind.apply(t,r));return n&&a(i,n.prototype),i},u.apply(null,arguments)}function h(t){var e="function"==typeof Map?new Map:void 0;return h=function(t){if(null===t||(n=t,-1===Function.toString.call(n).indexOf("[native code]")))return t;var n;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,r)}function r(){return u(t,arguments,s(this).constructor)}return r.prototype=Object.create(t.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),a(r,t)},h(t)}function f(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function l(t,e){if(e&&("object"==typeof e||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return f(t)}function p(t){var e=c();return function(){var n,r=s(t);if(e){var i=s(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return l(this,n)}}function d(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=s(t)););return t}function y(){return y="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,e,n){var r=d(t,e);if(r){var i=Object.getOwnPropertyDescriptor(r,e);return i.get?i.get.call(arguments.length<3?t:n):i.value}},y.apply(this,arguments)}function v(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 g(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return v(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?v(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,i=function(){};return{s:i,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:i}}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 o,s=!0,a=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return s=t.done,t},e:function(t){a=!0,o=t},f:function(){try{s||null==n.return||n.return()}finally{if(a)throw o}}}}var m=Object.create(null);m.open="0",m.close="1",m.ping="2",m.pong="3",m.message="4",m.upgrade="5",m.noop="6";var k=Object.create(null);Object.keys(m).forEach((function(t){k[m[t]]=t}));for(var b={type:"error",data:"parser error"},w="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===Object.prototype.toString.call(Blob),_="function"==typeof ArrayBuffer,E=function(t,e,n){var r,i=t.type,o=t.data;return w&&o instanceof Blob?e?n(o):O(o,n):_&&(o instanceof ArrayBuffer||(r=o,"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(r):r&&r.buffer instanceof ArrayBuffer))?e?n(o):O(new Blob([o]),n):n(m[i]+(o||""))},O=function(t,e){var n=new FileReader;return n.onload=function(){var t=n.result.split(",")[1];e("b"+t)},n.readAsDataURL(t)},A="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",R="undefined"==typeof Uint8Array?[]:new Uint8Array(256),T=0;T<A.length;T++)R[A.charCodeAt(T)]=T;var C="function"==typeof ArrayBuffer,B=function(t,e){if("string"!=typeof t)return{type:"message",data:N(t,e)};var n=t.charAt(0);return"b"===n?{type:"message",data:S(t.substring(1),e)}:k[n]?t.length>1?{type:k[n],data:t.substring(1)}:{type:k[n]}:b},S=function(t,e){if(C){var n=function(t){var e,n,r,i,o,s=.75*t.length,a=t.length,c=0;"="===t[t.length-1]&&(s--,"="===t[t.length-2]&&s--);var u=new ArrayBuffer(s),h=new Uint8Array(u);for(e=0;e<a;e+=4)n=R[t.charCodeAt(e)],r=R[t.charCodeAt(e+1)],i=R[t.charCodeAt(e+2)],o=R[t.charCodeAt(e+3)],h[c++]=n<<2|r>>4,h[c++]=(15&r)<<4|i>>2,h[c++]=(3&i)<<6|63&o;return u}(t);return N(n,e)}return{base64:!0,data:t}},N=function(t,e){return"blob"===e&&t instanceof ArrayBuffer?new Blob([t]):t},x=String.fromCharCode(30);function L(t){if(t)return function(t){for(var e in L.prototype)t[e]=L.prototype[e];return t}(t)}L.prototype.on=L.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},L.prototype.once=function(t,e){function n(){this.off(t,n),e.apply(this,arguments)}return n.fn=e,this.on(t,n),this},L.prototype.off=L.prototype.removeListener=L.prototype.removeAllListeners=L.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 i=0;i<r.length;i++)if((n=r[i])===e||n.fn===e){r.splice(i,1);break}return 0===r.length&&delete this._callbacks["$"+t],this},L.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 i=(n=n.slice(0)).length;r<i;++r)n[r].apply(this,e)}return this},L.prototype.emitReserved=L.prototype.emit,L.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks["$"+t]||[]},L.prototype.hasListeners=function(t){return!!this.listeners(t).length};var P="undefined"!=typeof self?self:"undefined"!=typeof window?window:Function("return this")();function j(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}),{})}var q=P.setTimeout,I=P.clearTimeout;function D(t,e){e.useNativeTimers?(t.setTimeoutFn=q.bind(P),t.clearTimeoutFn=I.bind(P)):(t.setTimeoutFn=P.setTimeout.bind(P),t.clearTimeoutFn=P.clearTimeout.bind(P))}var F,M=function(t){o(i,t);var n=p(i);function i(t,r,o){var s;return e(this,i),(s=n.call(this,t)).description=r,s.context=o,s.type="TransportError",s}return r(i)}(h(Error)),U=function(t){o(i,t);var n=p(i);function i(t){var r;return e(this,i),(r=n.call(this)).writable=!1,D(f(r),t),r.opts=t,r.query=t.query,r.socket=t.socket,r}return r(i,[{key:"onError",value:function(t,e,n){return y(s(i.prototype),"emitReserved",this).call(this,"error",new M(t,e,n)),this}},{key:"open",value:function(){return 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,y(s(i.prototype),"emitReserved",this).call(this,"open")}},{key:"onData",value:function(t){var e=B(t,this.socket.binaryType);this.onPacket(e)}},{key:"onPacket",value:function(t){y(s(i.prototype),"emitReserved",this).call(this,"packet",t)}},{key:"onClose",value:function(t){this.readyState="closed",y(s(i.prototype),"emitReserved",this).call(this,"close",t)}},{key:"pause",value:function(t){}}]),i}(L),V="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),H={},K=0,Y=0;function z(t){var e="";do{e=V[t%64]+e,t=Math.floor(t/64)}while(t>0);return e}function W(){var t=z(+new Date);return t!==F?(K=0,F=t):t+"."+z(K++)}for(;Y<64;Y++)H[V[Y]]=Y;function $(t){var e="";for(var n in t)t.hasOwnProperty(n)&&(e.length&&(e+="&"),e+=encodeURIComponent(n)+"="+encodeURIComponent(t[n]));return e}function J(t){for(var e={},n=t.split("&"),r=0,i=n.length;r<i;r++){var o=n[r].split("=");e[decodeURIComponent(o[0])]=decodeURIComponent(o[1])}return e}var Q=!1;try{Q="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(t){}var X=Q;function G(t){var e=t.xdomain;try{if("undefined"!=typeof XMLHttpRequest&&(!e||X))return new XMLHttpRequest}catch(t){}if(!e)try{return new(P[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(t){}}function Z(){}var tt=null!=new G({xdomain:!1}).responseType,et=function(t){o(s,t);var n=p(s);function s(t){var r;if(e(this,s),(r=n.call(this,t)).polling=!1,"undefined"!=typeof location){var i="https:"===location.protocol,o=location.port;o||(o=i?"443":"80"),r.xd="undefined"!=typeof location&&t.hostname!==location.hostname||o!==t.port,r.xs=t.secure!==i}var a=t&&t.forceBase64;return r.supportsBinary=tt&&!a,r}return r(s,[{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.emitReserved("poll")}},{key:"onData",value:function(t){var e=this;(function(t,e){for(var n=t.split(x),r=[],i=0;i<n.length;i++){var o=B(n[i],e);if(r.push(o),"error"===o.type)break}return r})(t,this.socket.binaryType).forEach((function(t){if("opening"===e.readyState&&"open"===t.type&&e.onOpen(),"close"===t.type)return e.onClose({description:"transport closed by the server"}),!1;e.onPacket(t)})),"closed"!==this.readyState&&(this.polling=!1,this.emitReserved("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,function(t,e){var n=t.length,r=new Array(n),i=0;t.forEach((function(t,o){E(t,!1,(function(t){r[o]=t,++i===n&&e(r.join(x))}))}))}(t,(function(t){e.doWrite(t,(function(){e.writable=!0,e.emitReserved("drain")}))}))}},{key:"uri",value:function(){var t=this.query||{},e=this.opts.secure?"https":"http",n="";!1!==this.opts.timestampRequests&&(t[this.opts.timestampParam]=W()),this.supportsBinary||t.sid||(t.b64=1),this.opts.port&&("https"===e&&443!==Number(this.opts.port)||"http"===e&&80!==Number(this.opts.port))&&(n=":"+this.opts.port);var r=$(t);return e+"://"+(-1!==this.opts.hostname.indexOf(":")?"["+this.opts.hostname+"]":this.opts.hostname)+n+this.opts.path+(r.length?"?"+r:"")}},{key:"request",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return i(t,{xd:this.xd,xs:this.xs},this.opts),new nt(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,e){n.onError("xhr post error",t,e)}))}},{key:"doPoll",value:function(){var t=this,e=this.request();e.on("data",this.onData.bind(this)),e.on("error",(function(e,n){t.onError("xhr poll error",e,n)})),this.pollXhr=e}}]),s}(U),nt=function(t){o(i,t);var n=p(i);function i(t,r){var o;return e(this,i),D(f(o=n.call(this)),r),o.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 r(i,[{key:"create",value:function(){var t=this,e=j(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");e.xdomain=!!this.opts.xd,e.xscheme=!!this.opts.xs;var n=this.xhr=new G(e);try{n.open(this.method,this.uri,this.async);try{if(this.opts.extraHeaders)for(var r in n.setDisableHeaderCheck&&n.setDisableHeaderCheck(!0),this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(r)&&n.setRequestHeader(r,this.opts.extraHeaders[r])}catch(t){}if("POST"===this.method)try{n.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(t){}try{n.setRequestHeader("Accept","*/*")}catch(t){}"withCredentials"in n&&(n.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(n.timeout=this.opts.requestTimeout),n.onreadystatechange=function(){4===n.readyState&&(200===n.status||1223===n.status?t.onLoad():t.setTimeoutFn((function(){t.onError("number"==typeof n.status?n.status:0)}),0))},n.send(this.data)}catch(e){return void this.setTimeoutFn((function(){t.onError(e)}),0)}"undefined"!=typeof document&&(this.index=i.requestsCount++,i.requests[this.index]=this)}},{key:"onError",value:function(t){this.emitReserved("error",t,this.xhr),this.cleanup(!0)}},{key:"cleanup",value:function(t){if(void 0!==this.xhr&&null!==this.xhr){if(this.xhr.onreadystatechange=Z,t)try{this.xhr.abort()}catch(t){}"undefined"!=typeof document&&delete i.requests[this.index],this.xhr=null}}},{key:"onLoad",value:function(){var t=this.xhr.responseText;null!==t&&(this.emitReserved("data",t),this.emitReserved("success"),this.cleanup())}},{key:"abort",value:function(){this.cleanup()}}]),i}(L);if(nt.requestsCount=0,nt.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",rt);else if("function"==typeof addEventListener){addEventListener("onpagehide"in P?"pagehide":"unload",rt,!1)}function rt(){for(var t in nt.requests)nt.requests.hasOwnProperty(t)&&nt.requests[t].abort()}var it="function"==typeof Promise&&"function"==typeof Promise.resolve?function(t){return Promise.resolve().then(t)}:function(t,e){return e(t,0)},ot=P.WebSocket||P.MozWebSocket,st="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),at=function(t){o(i,t);var n=p(i);function i(t){var r;return e(this,i),(r=n.call(this,t)).supportsBinary=!t.forceBase64,r}return r(i,[{key:"name",get:function(){return"websocket"}},{key:"doOpen",value:function(){if(this.check()){var t=this.uri(),e=this.opts.protocols,n=st?{}:j(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=st?new ot(t,e,n):e?new ot(t,e):new ot(t)}catch(t){return this.emitReserved("error",t)}this.ws.binaryType=this.socket.binaryType||"arraybuffer",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=function(e){return t.onClose({description:"websocket connection closed",context:e})},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],i=n===t.length-1;E(r,e.supportsBinary,(function(t){try{e.ws.send(t)}catch(t){}i&&it((function(){e.writable=!0,e.emitReserved("drain")}),e.setTimeoutFn)}))},r=0;r<t.length;r++)n(r)}},{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="";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]=W()),this.supportsBinary||(t.b64=1);var r=$(t);return e+"://"+(-1!==this.opts.hostname.indexOf(":")?"["+this.opts.hostname+"]":this.opts.hostname)+n+this.opts.path+(r.length?"?"+r:"")}},{key:"check",value:function(){return!!ot}}]),i}(U),ct={websocket:at,polling:et},ut=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,ht=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function ft(t){var e=t,n=t.indexOf("["),r=t.indexOf("]");-1!=n&&-1!=r&&(t=t.substring(0,n)+t.substring(n,r).replace(/:/g,";")+t.substring(r,t.length));for(var i,o,s=ut.exec(t||""),a={},c=14;c--;)a[ht[c]]=s[c]||"";return-1!=n&&-1!=r&&(a.source=e,a.host=a.host.substring(1,a.host.length-1).replace(/;/g,":"),a.authority=a.authority.replace("[","").replace("]","").replace(/;/g,":"),a.ipv6uri=!0),a.pathNames=function(t,e){var n=/\/{2,9}/g,r=e.replace(n,"/").split("/");"/"!=e.slice(0,1)&&0!==e.length||r.splice(0,1);"/"==e.slice(-1)&&r.splice(r.length-1,1);return r}(0,a.path),a.queryKey=(i=a.query,o={},i.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,(function(t,e,n){e&&(o[e]=n)})),o),a}var lt=function(n){o(a,n);var s=p(a);function a(n){var r,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e(this,a),(r=s.call(this)).writeBuffer=[],n&&"object"===t(n)&&(o=n,n=null),n?(n=ft(n),o.hostname=n.host,o.secure="https"===n.protocol||"wss"===n.protocol,o.port=n.port,n.query&&(o.query=n.query)):o.host&&(o.hostname=ft(o.host).host),D(f(r),o),r.secure=null!=o.secure?o.secure:"undefined"!=typeof location&&"https:"===location.protocol,o.hostname&&!o.port&&(o.port=r.secure?"443":"80"),r.hostname=o.hostname||("undefined"!=typeof location?location.hostname:"localhost"),r.port=o.port||("undefined"!=typeof location&&location.port?location.port:r.secure?"443":"80"),r.transports=o.transports||["polling","websocket"],r.writeBuffer=[],r.prevBufferLen=0,r.opts=i({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!0},o),r.opts.path=r.opts.path.replace(/\/$/,"")+(r.opts.addTrailingSlash?"/":""),"string"==typeof r.opts.query&&(r.opts.query=J(r.opts.query)),r.id=null,r.upgrades=null,r.pingInterval=null,r.pingTimeout=null,r.pingTimeoutTimer=null,"function"==typeof addEventListener&&(r.opts.closeOnBeforeunload&&(r.beforeunloadEventListener=function(){r.transport&&(r.transport.removeAllListeners(),r.transport.close())},addEventListener("beforeunload",r.beforeunloadEventListener,!1)),"localhost"!==r.hostname&&(r.offlineEventListener=function(){r.onClose("transport close",{description:"network connection lost"})},addEventListener("offline",r.offlineEventListener,!1))),r.open(),r}return r(a,[{key:"createTransport",value:function(t){var e=i({},this.opts.query);e.EIO=4,e.transport=t,this.id&&(e.sid=this.id);var n=i({},this.opts.transportOptions[t],this.opts,{query:e,socket:this,hostname:this.hostname,secure:this.secure,port:this.port});return new ct[t](n)}},{key:"open",value:function(){var t,e=this;if(this.opts.rememberUpgrade&&a.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket"))t="websocket";else{if(0===this.transports.length)return void this.setTimeoutFn((function(){e.emitReserved("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(t){return e.onClose("transport close",t)}))}},{key:"probe",value:function(t){var e=this,n=this.createTransport(t),r=!1;a.priorWebsocketSuccess=!1;var i=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.emitReserved("upgrading",n),!n)return;a.priorWebsocketSuccess="websocket"===n.name,e.transport.pause((function(){r||"closed"!==e.readyState&&(f(),e.setTransport(n),n.send([{type:"upgrade"}]),e.emitReserved("upgrade",n),n=null,e.upgrading=!1,e.flush())}))}else{var i=new Error("probe error");i.transport=n.name,e.emitReserved("upgradeError",i)}})))};function o(){r||(r=!0,f(),n.close(),n=null)}var s=function(t){var r=new Error("probe error: "+t);r.transport=n.name,o(),e.emitReserved("upgradeError",r)};function c(){s("transport closed")}function u(){s("socket closed")}function h(t){n&&t.name!==n.name&&o()}var f=function(){n.removeListener("open",i),n.removeListener("error",s),n.removeListener("close",c),e.off("close",u),e.off("upgrading",h)};n.once("open",i),n.once("error",s),n.once("close",c),this.once("close",u),this.once("upgrading",h),n.open()}},{key:"onOpen",value:function(){if(this.readyState="open",a.priorWebsocketSuccess="websocket"===this.transport.name,this.emitReserved("open"),this.flush(),"open"===this.readyState&&this.opts.upgrade)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.emitReserved("packet",t),this.emitReserved("heartbeat"),t.type){case"open":this.onHandshake(JSON.parse(t.data));break;case"ping":this.resetPingTimeout(),this.sendPacket("pong"),this.emitReserved("ping"),this.emitReserved("pong");break;case"error":var e=new Error("server error");e.code=t.data,this.onError(e);break;case"message":this.emitReserved("data",t.data),this.emitReserved("message",t.data)}}},{key:"onHandshake",value:function(t){this.emitReserved("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.maxPayload=t.maxPayload,this.onOpen(),"closed"!==this.readyState&&this.resetPingTimeout()}},{key:"resetPingTimeout",value:function(){var t=this;this.clearTimeoutFn(this.pingTimeoutTimer),this.pingTimeoutTimer=this.setTimeoutFn((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.emitReserved("drain"):this.flush()}},{key:"flush",value:function(){if("closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){var t=this.getWritablePackets();this.transport.send(t),this.prevBufferLen=t.length,this.emitReserved("flush")}}},{key:"getWritablePackets",value:function(){if(!(this.maxPayload&&"polling"===this.transport.name&&this.writeBuffer.length>1))return this.writeBuffer;for(var t,e=1,n=0;n<this.writeBuffer.length;n++){var r=this.writeBuffer[n].data;if(r&&(e+="string"==typeof(t=r)?function(t){for(var e=0,n=0,r=0,i=t.length;r<i;r++)(e=t.charCodeAt(r))<128?n+=1:e<2048?n+=2:e<55296||e>=57344?n+=3:(r++,n+=4);return n}(t):Math.ceil(1.33*(t.byteLength||t.size))),n>0&&e>this.maxPayload)return this.writeBuffer.slice(0,n);e+=2}return this.writeBuffer}},{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 i={type:t,data:e,options:n};this.emitReserved("packetCreate",i),this.writeBuffer.push(i),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.off("upgrade",n),t.off("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){a.priorWebsocketSuccess=!1,this.emitReserved("error",t),this.onClose("transport error",t)}},{key:"onClose",value:function(t,e){"opening"!==this.readyState&&"open"!==this.readyState&&"closing"!==this.readyState||(this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),"function"==typeof removeEventListener&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("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}}]),a}(L);lt.protocol=4,lt.protocol;var pt="function"==typeof ArrayBuffer,dt=Object.prototype.toString,yt="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===dt.call(Blob),vt="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===dt.call(File);function gt(t){return pt&&(t instanceof ArrayBuffer||function(t){return"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(t):t.buffer instanceof ArrayBuffer}(t))||yt&&t instanceof Blob||vt&&t instanceof File}function mt(e,n){if(!e||"object"!==t(e))return!1;if(Array.isArray(e)){for(var r=0,i=e.length;r<i;r++)if(mt(e[r]))return!0;return!1}if(gt(e))return!0;if(e.toJSON&&"function"==typeof e.toJSON&&1===arguments.length)return mt(e.toJSON(),!0);for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)&&mt(e[o]))return!0;return!1}function kt(t){var e=[],n=t.data,r=t;return r.data=bt(n,e),r.attachments=e.length,{packet:r,buffers:e}}function bt(e,n){if(!e)return e;if(gt(e)){var r={_placeholder:!0,num:n.length};return n.push(e),r}if(Array.isArray(e)){for(var i=new Array(e.length),o=0;o<e.length;o++)i[o]=bt(e[o],n);return i}if("object"===t(e)&&!(e instanceof Date)){var s={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(s[a]=bt(e[a],n));return s}return e}function wt(t,e){return t.data=_t(t.data,e),delete t.attachments,t}function _t(e,n){if(!e)return e;if(e&&!0===e._placeholder){if("number"==typeof e.num&&e.num>=0&&e.num<n.length)return n[e.num];throw new Error("illegal attachments")}if(Array.isArray(e))for(var r=0;r<e.length;r++)e[r]=_t(e[r],n);else if("object"===t(e))for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(e[i]=_t(e[i],n));return e}var Et;!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"}(Et||(Et={}));var Ot=function(){function t(n){e(this,t),this.replacer=n}return r(t,[{key:"encode",value:function(t){return t.type!==Et.EVENT&&t.type!==Et.ACK||!mt(t)?[this.encodeAsString(t)]:this.encodeAsBinary({type:t.type===Et.EVENT?Et.BINARY_EVENT:Et.BINARY_ACK,nsp:t.nsp,data:t.data,id:t.id})}},{key:"encodeAsString",value:function(t){var e=""+t.type;return t.type!==Et.BINARY_EVENT&&t.type!==Et.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,this.replacer)),e}},{key:"encodeAsBinary",value:function(t){var e=kt(t),n=this.encodeAsString(e.packet),r=e.buffers;return r.unshift(n),r}}]),t}(),At=function(n){o(a,n);var i=p(a);function a(t){var n;return e(this,a),(n=i.call(this)).reviver=t,n}return r(a,[{key:"add",value:function(t){var e;if("string"==typeof t){if(this.reconstructor)throw new Error("got plaintext data when reconstructing a packet");var n=(e=this.decodeString(t)).type===Et.BINARY_EVENT;n||e.type===Et.BINARY_ACK?(e.type=n?Et.EVENT:Et.ACK,this.reconstructor=new Rt(e),0===e.attachments&&y(s(a.prototype),"emitReserved",this).call(this,"decoded",e)):y(s(a.prototype),"emitReserved",this).call(this,"decoded",e)}else{if(!gt(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,y(s(a.prototype),"emitReserved",this).call(this,"decoded",e))}}},{key:"decodeString",value:function(t){var e=0,n={type:Number(t.charAt(0))};if(void 0===Et[n.type])throw new Error("unknown packet type "+n.type);if(n.type===Et.BINARY_EVENT||n.type===Et.BINARY_ACK){for(var r=e+1;"-"!==t.charAt(++e)&&e!=t.length;);var i=t.substring(r,e);if(i!=Number(i)||"-"!==t.charAt(e))throw new Error("Illegal attachments");n.attachments=Number(i)}if("/"===t.charAt(e+1)){for(var o=e+1;++e;){if(","===t.charAt(e))break;if(e===t.length)break}n.nsp=t.substring(o,e)}else n.nsp="/";var s=t.charAt(e+1);if(""!==s&&Number(s)==s){for(var c=e+1;++e;){var u=t.charAt(e);if(null==u||Number(u)!=u){--e;break}if(e===t.length)break}n.id=Number(t.substring(c,e+1))}if(t.charAt(++e)){var h=this.tryParse(t.substr(e));if(!a.isPayloadValid(n.type,h))throw new Error("invalid payload");n.data=h}return n}},{key:"tryParse",value:function(t){try{return JSON.parse(t,this.reviver)}catch(t){return!1}}},{key:"destroy",value:function(){this.reconstructor&&(this.reconstructor.finishedReconstruction(),this.reconstructor=null)}}],[{key:"isPayloadValid",value:function(e,n){switch(e){case Et.CONNECT:return"object"===t(n);case Et.DISCONNECT:return void 0===n;case Et.CONNECT_ERROR:return"string"==typeof n||"object"===t(n);case Et.EVENT:case Et.BINARY_EVENT:return Array.isArray(n)&&n.length>0;case Et.ACK:case Et.BINARY_ACK:return Array.isArray(n)}}}]),a}(L),Rt=function(){function t(n){e(this,t),this.packet=n,this.buffers=[],this.reconPack=n}return r(t,[{key:"takeBinaryData",value:function(t){if(this.buffers.push(t),this.buffers.length===this.reconPack.attachments){var e=wt(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null}},{key:"finishedReconstruction",value:function(){this.reconPack=null,this.buffers=[]}}]),t}(),Tt=Object.freeze({__proto__:null,protocol:5,get PacketType(){return Et},Encoder:Ot,Decoder:At});function Ct(t,e,n){return t.on(e,n),function(){t.off(e,n)}}var Bt=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1}),St=function(t){o(a,t);var n=p(a);function a(t,r,o){var s;return e(this,a),(s=n.call(this)).connected=!1,s.recovered=!1,s.receiveBuffer=[],s.sendBuffer=[],s._queue=[],s._queueSeq=0,s.ids=0,s.acks={},s.flags={},s.io=t,s.nsp=r,o&&o.auth&&(s.auth=o.auth),s._opts=i({},o),s.io._autoConnect&&s.open(),s}return r(a,[{key:"disconnected",get:function(){return!this.connected}},{key:"subEvents",value:function(){if(!this.subs){var t=this.io;this.subs=[Ct(t,"open",this.onopen.bind(this)),Ct(t,"packet",this.onpacket.bind(this)),Ct(t,"error",this.onerror.bind(this)),Ct(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(Bt.hasOwnProperty(t))throw new Error('"'+t.toString()+'" 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];if(n.unshift(t),this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile)return this._addToQueue(n),this;var i={type:Et.EVENT,data:n,options:{}};if(i.options.compress=!1!==this.flags.compress,"function"==typeof n[n.length-1]){var o=this.ids++,s=n.pop();this._registerAckCallback(o,s),i.id=o}var a=this.io.engine&&this.io.engine.transport&&this.io.engine.transport.writable,c=this.flags.volatile&&(!a||!this.connected);return c||(this.connected?(this.notifyOutgoingListeners(i),this.packet(i)):this.sendBuffer.push(i)),this.flags={},this}},{key:"_registerAckCallback",value:function(t,e){var n,r=this,i=null!==(n=this.flags.timeout)&&void 0!==n?n:this._opts.ackTimeout;if(void 0!==i){var o=this.io.setTimeoutFn((function(){delete r.acks[t];for(var n=0;n<r.sendBuffer.length;n++)r.sendBuffer[n].id===t&&r.sendBuffer.splice(n,1);e.call(r,new Error("operation has timed out"))}),i);this.acks[t]=function(){r.io.clearTimeoutFn(o);for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];e.apply(r,[null].concat(n))}}else this.acks[t]=e}},{key:"emitWithAck",value:function(t){for(var e=this,n=arguments.length,r=new Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];var o=void 0!==this.flags.timeout||void 0!==this._opts.ackTimeout;return new Promise((function(n,i){r.push((function(t,e){return o?t?i(t):n(e):n(t)})),e.emit.apply(e,[t].concat(r))}))}},{key:"_addToQueue",value:function(t){var e,n=this;"function"==typeof t[t.length-1]&&(e=t.pop());var r={id:this._queueSeq++,tryCount:0,pending:!1,args:t,flags:i({fromQueue:!0},this.flags)};t.push((function(t){if(r===n._queue[0]){var i=null!==t;if(i)r.tryCount>n._opts.retries&&(n._queue.shift(),e&&e(t));else if(n._queue.shift(),e){for(var o=arguments.length,s=new Array(o>1?o-1:0),a=1;a<o;a++)s[a-1]=arguments[a];e.apply(void 0,[null].concat(s))}return r.pending=!1,n._drainQueue()}})),this._queue.push(r),this._drainQueue()}},{key:"_drainQueue",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this.connected&&0!==this._queue.length){var e=this._queue[0];e.pending&&!t||(e.pending=!0,e.tryCount++,this.flags=e.flags,this.emit.apply(this,e.args))}}},{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._sendConnectPacket(e)})):this._sendConnectPacket(this.auth)}},{key:"_sendConnectPacket",value:function(t){this.packet({type:Et.CONNECT,data:this._pid?i({pid:this._pid,offset:this._lastOffset},t):t})}},{key:"onerror",value:function(t){this.connected||this.emitReserved("connect_error",t)}},{key:"onclose",value:function(t,e){this.connected=!1,delete this.id,this.emitReserved("disconnect",t,e)}},{key:"onpacket",value:function(t){if(t.nsp===this.nsp)switch(t.type){case Et.CONNECT:t.data&&t.data.sid?this.onconnect(t.data.sid,t.data.pid):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 Et.EVENT:case Et.BINARY_EVENT:this.onevent(t);break;case Et.ACK:case Et.BINARY_ACK:this.onack(t);break;case Et.DISCONNECT:this.ondisconnect();break;case Et.CONNECT_ERROR:this.destroy();var e=new Error(t.data.message);e.data=t.data.data,this.emitReserved("connect_error",e)}}},{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=g(this._anyListeners.slice());try{for(n.s();!(e=n.n()).done;){e.value.apply(this,t)}}catch(t){n.e(t)}finally{n.f()}}y(s(a.prototype),"emit",this).apply(this,t),this._pid&&t.length&&"string"==typeof t[t.length-1]&&(this._lastOffset=t[t.length-1])}},{key:"ack",value:function(t){var e=this,n=!1;return function(){if(!n){n=!0;for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];e.packet({type:Et.ACK,id:t,data:i})}}}},{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,e){this.id=t,this.recovered=e&&this._pid===e,this._pid=e,this.connected=!0,this.emitBuffered(),this.emitReserved("connect"),this._drainQueue(!0)}},{key:"emitBuffered",value:function(){var t=this;this.receiveBuffer.forEach((function(e){return t.emitEvent(e)})),this.receiveBuffer=[],this.sendBuffer.forEach((function(e){t.notifyOutgoingListeners(e),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:Et.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:"timeout",value:function(t){return this.flags.timeout=t,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||[]}},{key:"onAnyOutgoing",value:function(t){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.push(t),this}},{key:"prependAnyOutgoing",value:function(t){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.unshift(t),this}},{key:"offAnyOutgoing",value:function(t){if(!this._anyOutgoingListeners)return this;if(t){for(var e=this._anyOutgoingListeners,n=0;n<e.length;n++)if(t===e[n])return e.splice(n,1),this}else this._anyOutgoingListeners=[];return this}},{key:"listenersAnyOutgoing",value:function(){return this._anyOutgoingListeners||[]}},{key:"notifyOutgoingListeners",value:function(t){if(this._anyOutgoingListeners&&this._anyOutgoingListeners.length){var e,n=g(this._anyOutgoingListeners.slice());try{for(n.s();!(e=n.n()).done;){e.value.apply(this,t.data)}}catch(t){n.e(t)}finally{n.f()}}}}]),a}(L);function Nt(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}Nt.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)},Nt.prototype.reset=function(){this.attempts=0},Nt.prototype.setMin=function(t){this.ms=t},Nt.prototype.setMax=function(t){this.max=t},Nt.prototype.setJitter=function(t){this.jitter=t};var xt=function(n){o(s,n);var i=p(s);function s(n,r){var o,a;e(this,s),(o=i.call(this)).nsps={},o.subs=[],n&&"object"===t(n)&&(r=n,n=void 0),(r=r||{}).path=r.path||"/socket.io",o.opts=r,D(f(o),r),o.reconnection(!1!==r.reconnection),o.reconnectionAttempts(r.reconnectionAttempts||1/0),o.reconnectionDelay(r.reconnectionDelay||1e3),o.reconnectionDelayMax(r.reconnectionDelayMax||5e3),o.randomizationFactor(null!==(a=r.randomizationFactor)&&void 0!==a?a:.5),o.backoff=new Nt({min:o.reconnectionDelay(),max:o.reconnectionDelayMax(),jitter:o.randomizationFactor()}),o.timeout(null==r.timeout?2e4:r.timeout),o._readyState="closed",o.uri=n;var c=r.parser||Tt;return o.encoder=new c.Encoder,o.decoder=new c.Decoder,o._autoConnect=!1!==r.autoConnect,o._autoConnect&&o.open(),o}return r(s,[{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=new lt(this.uri,this.opts);var n=this.engine,r=this;this._readyState="opening",this.skipReconnect=!1;var i=Ct(n,"open",(function(){r.onopen(),t&&t()})),o=Ct(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&&i();var a=this.setTimeoutFn((function(){i(),n.close(),n.emit("error",new Error("timeout"))}),s);this.opts.autoUnref&&a.unref(),this.subs.push((function(){clearTimeout(a)}))}return this.subs.push(i),this.subs.push(o),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(Ct(t,"ping",this.onping.bind(this)),Ct(t,"data",this.ondata.bind(this)),Ct(t,"error",this.onerror.bind(this)),Ct(t,"close",this.onclose.bind(this)),Ct(this.decoder,"decoded",this.ondecoded.bind(this)))}},{key:"onping",value:function(){this.emitReserved("ping")}},{key:"ondata",value:function(t){try{this.decoder.add(t)}catch(t){this.onclose("parse error",t)}}},{key:"ondecoded",value:function(t){var e=this;it((function(){e.emitReserved("packet",t)}),this.setTimeoutFn)}},{key:"onerror",value:function(t){this.emitReserved("error",t)}},{key:"socket",value:function(t,e){var n=this.nsps[t];return n?this._autoConnect&&!n.active&&n.connect():(n=new St(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,this.onclose("forced close"),this.engine&&this.engine.close()}},{key:"disconnect",value:function(){return this._close()}},{key:"onclose",value:function(t,e){this.cleanup(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",t,e),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=this.setTimeoutFn((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)}}]),s}(L),Lt={};function Pt(e,n){"object"===t(e)&&(n=e,e=void 0);var r,i=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,r=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),r=ft(t)),r.port||(/^(http|ws)$/.test(r.protocol)?r.port="80":/^(http|ws)s$/.test(r.protocol)&&(r.port="443")),r.path=r.path||"/";var i=-1!==r.host.indexOf(":")?"["+r.host+"]":r.host;return r.id=r.protocol+"://"+i+":"+r.port+e,r.href=r.protocol+"://"+i+(n&&n.port===r.port?"":":"+r.port),r}(e,(n=n||{}).path||"/socket.io"),o=i.source,s=i.id,a=i.path,c=Lt[s]&&a in Lt[s].nsps;return n.forceNew||n["force new connection"]||!1===n.multiplex||c?r=new xt(o,n):(Lt[s]||(Lt[s]=new xt(o,n)),r=Lt[s]),i.query&&!n.query&&(n.query=i.queryKey),r.socket(i.path,n)}return i(Pt,{Manager:xt,Socket:St,io:Pt,connect:Pt}),Pt}));
7
- //# sourceMappingURL=socket.io.min.js.map