gamerpc 9.0.0 → 9.0.3
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/README.md +0 -12
- package/auth3.0.md +189 -0
- package/package.json +7 -8
- package/src/authConn.js +534 -349
- package/src/gameConn.js +3 -4
- package/src/index.js +32 -49
- package/src/remote.js +2 -1
- package/src/utils/secp256k1.js +79 -101
- package/src/utils/socket.io.min.js +7 -0
- package/src/utils/util.js +157 -85
- package/test/game/auth.js +1 -1
- package/test/game/auto.js +231 -0
- package/test/game/crm.js +1 -1
- package/test/test.html +3 -3
- package/test/utils/secp256k1.js +444 -0
- package/webpack.config.js +2 -2
- package/.babelrc +0 -16
- package/docs/2026.07.15.md +0 -142
- package/test/game/kow.js +0 -43
- package/test/game/mgr.js +0 -80
package/src/gameConn.js
CHANGED
|
@@ -4,8 +4,7 @@
|
|
|
4
4
|
* 帮助第三方项目连接 Gamecloud 游戏云服务器,发起RPC调用,订阅推送消息。
|
|
5
5
|
* 支持多种认证模式:两阶段认证、第三方授权、用户名密码等。
|
|
6
6
|
* 支持 WS/HTTP GET/HTTP POST 三种通讯模式。
|
|
7
|
+
*
|
|
8
|
+
* 基于 V9.0.0 remote.js 的 Remote 基类(含 HTTPS + url 字段支持)。
|
|
7
9
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
// gameconn 直接使用 Remote 类,保持向后兼容
|
|
11
|
-
module.exports = Remote;
|
|
10
|
+
module.exports = require('./remote');
|
package/src/index.js
CHANGED
|
@@ -1,22 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* gamerpc V9.0.0 - 游戏云/区块链统一工具包
|
|
3
3
|
*
|
|
4
|
+
* 合并 V7.1.3 (auth3.0 分支) 和 V9.0.0 (V8.0.8 继承)。
|
|
5
|
+
*
|
|
4
6
|
* 提供两大核心连接器:
|
|
5
7
|
* 1. gameConn - 游戏云服务器连接器 (连接 Gamecloud,发起RPC调用,订阅推送)
|
|
6
|
-
* 2. authConn - 区块链全节点连接器 (连接 Gamegold Core 对等网络,钱包操作)
|
|
8
|
+
* 2. conn/authConn - 区块链全节点连接器 (连接 Gamegold Core 对等网络,钱包操作)
|
|
7
9
|
*
|
|
8
10
|
* 同时提供区块链密码学工具函数和通用工具函数。
|
|
9
11
|
*/
|
|
10
12
|
|
|
13
|
+
// V7.1.3: 为数组添加工具方法
|
|
14
|
+
Array.prototype.randObj = function() {
|
|
15
|
+
if (this.length == 0) {
|
|
16
|
+
return null;
|
|
17
|
+
} else if (this.length == 1) {
|
|
18
|
+
return this[0];
|
|
19
|
+
} else {
|
|
20
|
+
return this[(Math.random() * this.length) | 0];
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
|
|
11
24
|
const toolkit = exports;
|
|
12
25
|
|
|
13
26
|
// ==================== 核心连接器 ====================
|
|
14
27
|
|
|
15
|
-
const Remote = require('./remote');
|
|
16
|
-
|
|
17
28
|
/** 游戏云连接器 - 用于连接游戏云服务器 */
|
|
18
|
-
toolkit.gameconn =
|
|
19
|
-
toolkit.gameConn =
|
|
29
|
+
toolkit.gameconn = require('./gameConn');
|
|
30
|
+
toolkit.gameConn = toolkit.gameconn; // 别名
|
|
20
31
|
|
|
21
32
|
/** 区块链授权式连接器 - 用于连接 Gamegold Core 全节点 */
|
|
22
33
|
const AuthConn = require('./authConn');
|
|
@@ -50,27 +61,13 @@ toolkit.Secret = Secret;
|
|
|
50
61
|
const aes = require('./utils/aes');
|
|
51
62
|
|
|
52
63
|
/**
|
|
53
|
-
* AES-CBC 字符串加密(兼容 V7.
|
|
54
|
-
*
|
|
55
|
-
* 编码规则:将 AES 加密后的每个 byte 拆分为高4位和低4位,
|
|
56
|
-
* 分别加上 97 偏移(即映射到字符 'a'~'p')。
|
|
57
|
-
* 密文长度 = 明文长度 * 2(因为每个字节拆成2个字符)。
|
|
58
|
-
*
|
|
59
|
-
* @param {String} key 32位密钥
|
|
60
|
-
* @param {String} iv 16位初始向量
|
|
61
|
-
* @param {String} data 待加密字符串
|
|
62
|
-
* @returns {String} 自定义 hex 编码的密文字符串
|
|
64
|
+
* AES-CBC 字符串加密(兼容 V7.x API)
|
|
65
|
+
* 编码规则:每字节拆分为高4位和低4位,加97偏移映射到 a-p 字符
|
|
63
66
|
*/
|
|
64
67
|
toolkit.encrypt = function encrypt(key, iv, data) {
|
|
65
|
-
if (!Buffer.isBuffer(key))
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (!Buffer.isBuffer(iv)) {
|
|
69
|
-
iv = Buffer.from(iv, 'binary');
|
|
70
|
-
}
|
|
71
|
-
if (!Buffer.isBuffer(data)) {
|
|
72
|
-
data = Buffer.from(data, 'binary');
|
|
73
|
-
}
|
|
68
|
+
if (!Buffer.isBuffer(key)) key = Buffer.from(key, 'binary');
|
|
69
|
+
if (!Buffer.isBuffer(iv)) iv = Buffer.from(iv, 'binary');
|
|
70
|
+
if (!Buffer.isBuffer(data)) data = Buffer.from(data, 'binary');
|
|
74
71
|
|
|
75
72
|
var crypted = aes.encipher(data, key, iv);
|
|
76
73
|
crypted = Buffer.from(crypted, 'binary');
|
|
@@ -84,25 +81,12 @@ toolkit.encrypt = function encrypt(key, iv, data) {
|
|
|
84
81
|
};
|
|
85
82
|
|
|
86
83
|
/**
|
|
87
|
-
* AES-CBC 字符串解密(兼容 V7.
|
|
88
|
-
*
|
|
89
|
-
* 解码规则:每2个字符还原为1个字节,字符减去97偏移还原高/低4位。
|
|
90
|
-
*
|
|
91
|
-
* @param {String} key 32位密钥
|
|
92
|
-
* @param {String} iv 16位初始向量
|
|
93
|
-
* @param {String} data 自定义 hex 编码的密文字符串
|
|
94
|
-
* @returns {String} 解密后的明文字符串
|
|
84
|
+
* AES-CBC 字符串解密(兼容 V7.x API)
|
|
95
85
|
*/
|
|
96
86
|
toolkit.decrypt = function decrypt(key, iv, data) {
|
|
97
|
-
if (!Buffer.isBuffer(key))
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
if (!Buffer.isBuffer(iv)) {
|
|
101
|
-
iv = Buffer.from(iv, 'binary');
|
|
102
|
-
}
|
|
103
|
-
if (!Buffer.isBuffer(data)) {
|
|
104
|
-
data = Buffer.from(data, 'binary');
|
|
105
|
-
}
|
|
87
|
+
if (!Buffer.isBuffer(key)) key = Buffer.from(key, 'binary');
|
|
88
|
+
if (!Buffer.isBuffer(iv)) iv = Buffer.from(iv, 'binary');
|
|
89
|
+
if (!Buffer.isBuffer(data)) data = Buffer.from(data, 'binary');
|
|
106
90
|
|
|
107
91
|
let ret = Buffer.alloc(data.length / 2);
|
|
108
92
|
for (let i = 0; i < ret.length; i++) {
|
|
@@ -118,15 +102,11 @@ toolkit.decrypt = function decrypt(key, iv, data) {
|
|
|
118
102
|
const createHmac = require('create-hmac/browser');
|
|
119
103
|
|
|
120
104
|
/**
|
|
121
|
-
* 利用 HMAC-SHA256
|
|
122
|
-
* @param {String} token 令牌固定量
|
|
123
|
-
* @param {String} random 令牌随机量(从服务端获取)
|
|
124
|
-
* @returns {String} HMAC 签名(hex)
|
|
105
|
+
* 利用 HMAC-SHA256 计算访问令牌
|
|
125
106
|
*/
|
|
126
107
|
function signHMAC(token, random) {
|
|
127
108
|
var hmac = createHmac('sha256', random);
|
|
128
|
-
|
|
129
|
-
return sig;
|
|
109
|
+
return hmac.update(token).digest('hex');
|
|
130
110
|
}
|
|
131
111
|
|
|
132
112
|
toolkit.createHmac = createHmac;
|
|
@@ -149,9 +129,12 @@ toolkit.NotifyType = util.NotifyType;
|
|
|
149
129
|
toolkit.sprintf = util.sprintf;
|
|
150
130
|
toolkit.isHex = util.isHex;
|
|
151
131
|
|
|
152
|
-
// ====================
|
|
132
|
+
// ==================== 全局对象挂载 ====================
|
|
133
|
+
|
|
134
|
+
// V7.1.3: Node.js 环境的 global.toolkit
|
|
135
|
+
global.toolkit = toolkit;
|
|
153
136
|
|
|
154
|
-
//
|
|
137
|
+
// V9.0.0: 浏览器 <script> 标签引入时的 window.toolkit
|
|
155
138
|
if (typeof window !== 'undefined') {
|
|
156
139
|
window.toolkit = toolkit;
|
|
157
140
|
}
|
package/src/remote.js
CHANGED
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
* 支持 Notify、JSONP、Watching 等报文通讯模式。
|
|
6
6
|
* 支持 LBS 重定向功能和 HTTPS 协议。
|
|
7
7
|
*/
|
|
8
|
-
const { stringify, NotifyType, extendObj, CommStatus, clone, ReturnCodeName, ReturnCode, CommMode
|
|
8
|
+
const { stringify, NotifyType, extendObj, CommStatus, clone, ReturnCodeName, ReturnCode, CommMode } = require('./utils/util');
|
|
9
|
+
const io = require('socket.io-client');
|
|
9
10
|
const EventEmitter = require('events').EventEmitter;
|
|
10
11
|
const Indicator = require('./utils/Indicator');
|
|
11
12
|
|
package/src/utils/secp256k1.js
CHANGED
|
@@ -1,20 +1,33 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* secp256k1-
|
|
2
|
+
* secp256k1-noble.js - wrapper for @noble/secp256k1
|
|
3
3
|
* Copyright (c) 2018-2020, Bookman Software (MIT License).
|
|
4
4
|
* https://gitee.com/bookmanSoftware/ggserver
|
|
5
|
+
*
|
|
6
|
+
* Replaced elliptic with @noble/secp256k1 for security (GHSA-848j-6mx2-7j84).
|
|
5
7
|
*/
|
|
6
8
|
|
|
7
9
|
'use strict';
|
|
8
10
|
|
|
9
11
|
const assert = require('assert');
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
const secp = require('@noble/secp256k1');
|
|
13
|
+
const { hmac } = require('@noble/hashes/hmac');
|
|
14
|
+
const { sha256 } = require('@noble/hashes/sha256');
|
|
15
|
+
|
|
16
|
+
// Setup sync hmac for deterministic signatures (RFC 6979)
|
|
17
|
+
secp.utils.hmacSha256Sync = (key, ...msgs) =>
|
|
18
|
+
hmac(sha256, key, secp.utils.concatBytes(...msgs));
|
|
19
|
+
|
|
20
|
+
const { CURVE, Point, Signature } = secp;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Helpers: convert between Buffer and Uint8Array
|
|
24
|
+
*/
|
|
25
|
+
const toU8 = (buf) => new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
26
|
+
const toBuf = (u8) => Buffer.from(u8.buffer, u8.byteOffset, u8.byteLength);
|
|
27
|
+
const toHex = (buf) => Buffer.isBuffer(buf) ? buf.toString('hex') : Buffer.from(buf).toString('hex');
|
|
15
28
|
|
|
16
29
|
/**
|
|
17
|
-
* @exports crypto/secp256k1-
|
|
30
|
+
* @exports crypto/secp256k1-noble
|
|
18
31
|
* @ignore
|
|
19
32
|
*/
|
|
20
33
|
|
|
@@ -24,17 +37,15 @@ const ec = exports;
|
|
|
24
37
|
* Whether we're using native bindings.
|
|
25
38
|
* @const {Boolean}
|
|
26
39
|
*/
|
|
27
|
-
|
|
28
40
|
ec.binding = false;
|
|
29
41
|
|
|
30
42
|
/**
|
|
31
43
|
* Generate a private key.
|
|
32
44
|
* @returns {Buffer} Private key.
|
|
33
45
|
*/
|
|
34
|
-
|
|
35
46
|
ec.generatePrivateKey = function generatePrivateKey() {
|
|
36
|
-
const key =
|
|
37
|
-
return key
|
|
47
|
+
const key = secp.utils.randomPrivateKey();
|
|
48
|
+
return toBuf(key);
|
|
38
49
|
};
|
|
39
50
|
|
|
40
51
|
/**
|
|
@@ -43,31 +54,26 @@ ec.generatePrivateKey = function generatePrivateKey() {
|
|
|
43
54
|
* @param {Boolean?} compress
|
|
44
55
|
* @returns {Buffer}
|
|
45
56
|
*/
|
|
46
|
-
|
|
47
57
|
ec.publicKeyCreate = function publicKeyCreate(priv, compress) {
|
|
48
58
|
if (compress == null)
|
|
49
59
|
compress = true;
|
|
50
60
|
|
|
51
61
|
assert(Buffer.isBuffer(priv));
|
|
52
|
-
|
|
53
|
-
const key = secp256k1.keyPair({ priv: priv });
|
|
54
|
-
|
|
55
|
-
return Buffer.from(key.getPublic(compress, 'array'));
|
|
62
|
+
return toBuf(secp.getPublicKey(toU8(priv), compress));
|
|
56
63
|
};
|
|
57
64
|
|
|
58
65
|
/**
|
|
59
66
|
* Compress or decompress public key.
|
|
60
|
-
* @param {Buffer}
|
|
67
|
+
* @param {Buffer} key
|
|
68
|
+
* @param {Boolean?} compress
|
|
61
69
|
* @returns {Buffer}
|
|
62
70
|
*/
|
|
63
|
-
|
|
64
71
|
ec.publicKeyConvert = function publicKeyConvert(key, compress) {
|
|
65
72
|
if (compress == null)
|
|
66
73
|
compress = true;
|
|
67
74
|
|
|
68
|
-
const point =
|
|
69
|
-
|
|
70
|
-
return Buffer.from(point.encode('array', compress));
|
|
75
|
+
const point = Point.fromHex(toHex(key));
|
|
76
|
+
return Buffer.from(point.toRawBytes(compress));
|
|
71
77
|
};
|
|
72
78
|
|
|
73
79
|
/**
|
|
@@ -76,14 +82,12 @@ ec.publicKeyConvert = function publicKeyConvert(key, compress) {
|
|
|
76
82
|
* @param {Buffer} tweak
|
|
77
83
|
* @returns {Buffer} privateKey
|
|
78
84
|
*/
|
|
79
|
-
|
|
80
85
|
ec.privateKeyTweakAdd = function privateKeyTweakAdd(privateKey, tweak) {
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
86
|
+
const n = BigInt('0x' + toHex(privateKey));
|
|
87
|
+
const t = BigInt('0x' + toHex(tweak));
|
|
88
|
+
const result = secp.utils._bigintTo32Bytes(secp.utils.mod(n + t, CURVE.n));
|
|
89
|
+
const key = toBuf(result);
|
|
85
90
|
|
|
86
|
-
// Only a 1 in 2^127 chance of happening.
|
|
87
91
|
if (!ec.privateKeyVerify(key))
|
|
88
92
|
throw new Error('Private key is invalid.');
|
|
89
93
|
|
|
@@ -94,16 +98,17 @@ ec.privateKeyTweakAdd = function privateKeyTweakAdd(privateKey, tweak) {
|
|
|
94
98
|
* ((g * tweak) + key)
|
|
95
99
|
* @param {Buffer} publicKey
|
|
96
100
|
* @param {Buffer} tweak
|
|
101
|
+
* @param {Boolean?} compress
|
|
97
102
|
* @returns {Buffer} publicKey
|
|
98
103
|
*/
|
|
99
|
-
|
|
100
104
|
ec.publicKeyTweakAdd = function publicKeyTweakAdd(publicKey, tweak, compress) {
|
|
101
105
|
if (compress == null)
|
|
102
106
|
compress = true;
|
|
103
107
|
|
|
104
|
-
const
|
|
105
|
-
const point =
|
|
106
|
-
const
|
|
108
|
+
const t = BigInt('0x' + toHex(tweak));
|
|
109
|
+
const point = Point.fromHex(toHex(publicKey));
|
|
110
|
+
const tweakedPoint = point.add(Point.BASE.multiply(t));
|
|
111
|
+
const pub = Buffer.from(tweakedPoint.toRawBytes(compress));
|
|
107
112
|
|
|
108
113
|
if (!ec.publicKeyVerify(pub))
|
|
109
114
|
throw new Error('Public key is invalid.');
|
|
@@ -112,27 +117,26 @@ ec.publicKeyTweakAdd = function publicKeyTweakAdd(publicKey, tweak, compress) {
|
|
|
112
117
|
};
|
|
113
118
|
|
|
114
119
|
/**
|
|
115
|
-
* Create an ecdh.
|
|
120
|
+
* Create an ecdh shared secret (x-coordinate only).
|
|
116
121
|
* @param {Buffer} pub
|
|
117
122
|
* @param {Buffer} priv
|
|
118
|
-
* @returns {Buffer}
|
|
123
|
+
* @returns {Buffer} 32-byte shared secret
|
|
119
124
|
*/
|
|
120
|
-
|
|
121
125
|
ec.ecdh = function ecdh(pub, priv) {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
126
|
+
// noble: getSharedSecret(privKey, pubKey) returns full point (65 bytes)
|
|
127
|
+
// extract x-coordinate (32 bytes) to match old elliptic API
|
|
128
|
+
const shared = secp.getSharedSecret(toU8(priv), toU8(pub));
|
|
129
|
+
return Buffer.from(shared.slice(1, 33));
|
|
125
130
|
};
|
|
126
131
|
|
|
127
132
|
/**
|
|
128
|
-
* Recover a public key.
|
|
133
|
+
* Recover a public key from signature.
|
|
129
134
|
* @param {Buffer} msg
|
|
130
135
|
* @param {Buffer} sig
|
|
131
|
-
* @param {Number?} j
|
|
136
|
+
* @param {Number?} j Recovery id (0-3)
|
|
132
137
|
* @param {Boolean?} compress
|
|
133
|
-
* @returns {Buffer
|
|
138
|
+
* @returns {Buffer|null}
|
|
134
139
|
*/
|
|
135
|
-
|
|
136
140
|
ec.recover = function recover(msg, sig, j, compress) {
|
|
137
141
|
if (!j)
|
|
138
142
|
j = 0;
|
|
@@ -140,14 +144,12 @@ ec.recover = function recover(msg, sig, j, compress) {
|
|
|
140
144
|
if (compress == null)
|
|
141
145
|
compress = true;
|
|
142
146
|
|
|
143
|
-
let point;
|
|
144
147
|
try {
|
|
145
|
-
point =
|
|
148
|
+
const point = secp.recoverPublicKey(toU8(msg), toU8(sig), j, compress);
|
|
149
|
+
return toBuf(point);
|
|
146
150
|
} catch (e) {
|
|
147
151
|
return null;
|
|
148
152
|
}
|
|
149
|
-
|
|
150
|
-
return Buffer.from(point.encode('array', compress));
|
|
151
153
|
};
|
|
152
154
|
|
|
153
155
|
/**
|
|
@@ -157,7 +159,6 @@ ec.recover = function recover(msg, sig, j, compress) {
|
|
|
157
159
|
* @param {Buffer} key
|
|
158
160
|
* @returns {Boolean}
|
|
159
161
|
*/
|
|
160
|
-
|
|
161
162
|
ec.verify = function verify(msg, sig, key) {
|
|
162
163
|
assert(Buffer.isBuffer(msg));
|
|
163
164
|
assert(Buffer.isBuffer(sig));
|
|
@@ -169,13 +170,11 @@ ec.verify = function verify(msg, sig, key) {
|
|
|
169
170
|
if (key.length === 0)
|
|
170
171
|
return false;
|
|
171
172
|
|
|
172
|
-
//
|
|
173
|
-
// length before passing to elliptic.
|
|
174
|
-
// https://github.com/indutny/elliptic/issues/78
|
|
173
|
+
// Normalize DER length before passing to noble
|
|
175
174
|
sig = normalizeLength(sig);
|
|
176
175
|
|
|
177
176
|
try {
|
|
178
|
-
return
|
|
177
|
+
return secp.verify(toU8(sig), toU8(msg), toU8(key));
|
|
179
178
|
} catch (e) {
|
|
180
179
|
return false;
|
|
181
180
|
}
|
|
@@ -184,13 +183,11 @@ ec.verify = function verify(msg, sig, key) {
|
|
|
184
183
|
/**
|
|
185
184
|
* Validate a public key.
|
|
186
185
|
* @param {Buffer} key
|
|
187
|
-
* @returns {Boolean}
|
|
186
|
+
* @returns {Boolean}
|
|
188
187
|
*/
|
|
189
|
-
|
|
190
188
|
ec.publicKeyVerify = function publicKeyVerify(key) {
|
|
191
189
|
try {
|
|
192
|
-
|
|
193
|
-
return pub.validate();
|
|
190
|
+
return Point.fromHex(toHex(key)) instanceof Point;
|
|
194
191
|
} catch (e) {
|
|
195
192
|
return false;
|
|
196
193
|
}
|
|
@@ -199,94 +196,75 @@ ec.publicKeyVerify = function publicKeyVerify(key) {
|
|
|
199
196
|
/**
|
|
200
197
|
* Validate a private key.
|
|
201
198
|
* @param {Buffer} key
|
|
202
|
-
* @returns {Boolean}
|
|
199
|
+
* @returns {Boolean}
|
|
203
200
|
*/
|
|
204
|
-
|
|
205
201
|
ec.privateKeyVerify = function privateKeyVerify(key) {
|
|
206
202
|
if (key.length !== 32)
|
|
207
203
|
return false;
|
|
208
204
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
205
|
+
try {
|
|
206
|
+
return secp.utils.isValidPrivateKey(toU8(key));
|
|
207
|
+
} catch (e) {
|
|
208
|
+
return false;
|
|
209
|
+
}
|
|
212
210
|
};
|
|
213
211
|
|
|
214
212
|
/**
|
|
215
|
-
* Sign a message.
|
|
213
|
+
* Sign a message (returns DER format).
|
|
216
214
|
* @param {Buffer} msg
|
|
217
215
|
* @param {Buffer} key - Private key.
|
|
218
216
|
* @returns {Buffer} DER-formatted signature.
|
|
219
217
|
*/
|
|
220
|
-
|
|
221
218
|
ec.sign = function sign(msg, key) {
|
|
222
219
|
assert(Buffer.isBuffer(msg));
|
|
223
220
|
assert(Buffer.isBuffer(key));
|
|
224
221
|
|
|
225
|
-
//
|
|
226
|
-
const sig =
|
|
227
|
-
|
|
228
|
-
// Convert to DER
|
|
229
|
-
return Buffer.from(sig.toDER());
|
|
222
|
+
// noble v1 signSync returns DER with low-S by default
|
|
223
|
+
const sig = secp.signSync(toU8(msg), toU8(key));
|
|
224
|
+
return toBuf(sig);
|
|
230
225
|
};
|
|
231
226
|
|
|
232
227
|
/**
|
|
233
|
-
* Convert DER signature to R
|
|
234
|
-
* @param {Buffer} raw
|
|
235
|
-
* @returns {Buffer}
|
|
228
|
+
* Convert DER signature to compact R||S (64 bytes).
|
|
229
|
+
* @param {Buffer} raw DER-formatted signature
|
|
230
|
+
* @returns {Buffer} 64-byte compact signature
|
|
236
231
|
*/
|
|
237
|
-
|
|
238
232
|
ec.fromDER = function fromDER(raw) {
|
|
239
233
|
assert(Buffer.isBuffer(raw));
|
|
240
234
|
|
|
241
|
-
const sig =
|
|
242
|
-
const out = Buffer.
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
sig.s.toArrayLike(Buffer, 'be', 32).copy(out, 32);
|
|
246
|
-
|
|
235
|
+
const sig = Signature.fromDER(toHex(raw));
|
|
236
|
+
const out = Buffer.alloc(64);
|
|
237
|
+
const compact = sig.toCompactRawBytes();
|
|
238
|
+
out.set(compact);
|
|
247
239
|
return out;
|
|
248
240
|
};
|
|
249
241
|
|
|
250
242
|
/**
|
|
251
|
-
* Convert R
|
|
252
|
-
* @param {Buffer}
|
|
253
|
-
* @returns {Buffer} DER-formatted signature
|
|
243
|
+
* Convert compact R||S signature to DER.
|
|
244
|
+
* @param {Buffer} raw 64-byte compact signature
|
|
245
|
+
* @returns {Buffer} DER-formatted signature
|
|
254
246
|
*/
|
|
255
|
-
|
|
256
247
|
ec.toDER = function toDER(raw) {
|
|
257
248
|
assert(Buffer.isBuffer(raw));
|
|
258
249
|
|
|
259
|
-
const
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
return Buffer.from(sig.toDER());
|
|
250
|
+
const r = BigInt('0x' + toHex(raw.slice(0, 32)));
|
|
251
|
+
const s = BigInt('0x' + toHex(raw.slice(32, 64)));
|
|
252
|
+
const sig = new Signature(r, s);
|
|
253
|
+
return Buffer.from(sig.toDERRawBytes());
|
|
265
254
|
};
|
|
266
255
|
|
|
267
256
|
/**
|
|
268
|
-
* Test whether a signature has a low S value.
|
|
269
|
-
* @param {Buffer}
|
|
257
|
+
* Test whether a DER signature has a low S value.
|
|
258
|
+
* @param {Buffer} raw DER-formatted signature
|
|
270
259
|
* @returns {Boolean}
|
|
271
260
|
*/
|
|
272
|
-
|
|
273
261
|
ec.isLowS = function isLowS(raw) {
|
|
274
|
-
let sig;
|
|
275
262
|
try {
|
|
276
|
-
sig =
|
|
263
|
+
const sig = Signature.fromDER(toHex(raw));
|
|
264
|
+
return !sig.hasHighS();
|
|
277
265
|
} catch (e) {
|
|
278
266
|
return false;
|
|
279
267
|
}
|
|
280
|
-
|
|
281
|
-
if (sig.s.isZero())
|
|
282
|
-
return false;
|
|
283
|
-
|
|
284
|
-
// If S is greater than half the order,
|
|
285
|
-
// it's too high.
|
|
286
|
-
if (sig.s.gt(secp256k1.nh))
|
|
287
|
-
return false;
|
|
288
|
-
|
|
289
|
-
return true;
|
|
290
268
|
};
|
|
291
269
|
|
|
292
270
|
/*
|
|
@@ -0,0 +1,7 @@
|
|
|
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
|