bare-ws 2.0.3 → 2.0.4
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/lib/errors.d.ts +1 -7
- package/lib/errors.js +3 -19
- package/lib/frame.js +1 -7
- package/lib/server.d.ts +7 -13
- package/lib/server.js +9 -12
- package/lib/socket.d.ts +1 -2
- package/lib/socket.js +8 -22
- package/package.json +2 -2
package/lib/errors.d.ts
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
declare class WebSocketError extends Error {
|
|
2
|
-
constructor(
|
|
3
|
-
msg: string,
|
|
4
|
-
code: string,
|
|
5
|
-
status: number,
|
|
6
|
-
fn?: WebSocketError,
|
|
7
|
-
cause?: unknown
|
|
8
|
-
)
|
|
2
|
+
constructor(msg: string, code: string, status: number, fn?: WebSocketError, cause?: unknown)
|
|
9
3
|
|
|
10
4
|
static NETWORK_ERROR(msg: string, cause?: unknown): WebSocketError
|
|
11
5
|
static NOT_CONNECTED(msg?: string): WebSocketError
|
package/lib/errors.js
CHANGED
|
@@ -16,22 +16,11 @@ module.exports = class WebSocketError extends Error {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
static NETWORK_ERROR(msg, cause) {
|
|
19
|
-
return new WebSocketError(
|
|
20
|
-
msg,
|
|
21
|
-
'NETWORK_ERROR',
|
|
22
|
-
0,
|
|
23
|
-
WebSocketError.NETWORK_ERROR,
|
|
24
|
-
cause
|
|
25
|
-
)
|
|
19
|
+
return new WebSocketError(msg, 'NETWORK_ERROR', 0, WebSocketError.NETWORK_ERROR, cause)
|
|
26
20
|
}
|
|
27
21
|
|
|
28
22
|
static NOT_CONNECTED(msg = 'Socket is not connected') {
|
|
29
|
-
return new WebSocketError(
|
|
30
|
-
msg,
|
|
31
|
-
'NOT_CONNECTED',
|
|
32
|
-
0,
|
|
33
|
-
WebSocketError.NOT_CONNECTED
|
|
34
|
-
)
|
|
23
|
+
return new WebSocketError(msg, 'NOT_CONNECTED', 0, WebSocketError.NOT_CONNECTED)
|
|
35
24
|
}
|
|
36
25
|
|
|
37
26
|
static UNEXPECTED_RSV1(msg = 'RSV1 must be unset') {
|
|
@@ -170,11 +159,6 @@ module.exports = class WebSocketError extends Error {
|
|
|
170
159
|
}
|
|
171
160
|
|
|
172
161
|
static INCOMPLETE_FRAME(msg = 'Incomplete frame', length = -1) {
|
|
173
|
-
return new WebSocketError(
|
|
174
|
-
msg,
|
|
175
|
-
'INCOMPLETE_FRAME',
|
|
176
|
-
length,
|
|
177
|
-
WebSocketError.INCOMPLETE_FRAME
|
|
178
|
-
)
|
|
162
|
+
return new WebSocketError(msg, 'INCOMPLETE_FRAME', length, WebSocketError.INCOMPLETE_FRAME)
|
|
179
163
|
}
|
|
180
164
|
}
|
package/lib/frame.js
CHANGED
|
@@ -19,13 +19,7 @@ module.exports = exports = class Frame {
|
|
|
19
19
|
payload = EMPTY
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
const {
|
|
23
|
-
fin = true,
|
|
24
|
-
rsv1 = false,
|
|
25
|
-
rsv2 = false,
|
|
26
|
-
rsv3 = false,
|
|
27
|
-
mask = null
|
|
28
|
-
} = opts
|
|
22
|
+
const { fin = true, rsv1 = false, rsv2 = false, rsv3 = false, mask = null } = opts
|
|
29
23
|
|
|
30
24
|
this.fin = fin
|
|
31
25
|
this.rsv1 = rsv1
|
package/lib/server.d.ts
CHANGED
|
@@ -7,9 +7,7 @@ import Buffer from 'bare-buffer'
|
|
|
7
7
|
import WebSocket from './socket'
|
|
8
8
|
import WebSocketError from './errors'
|
|
9
9
|
|
|
10
|
-
interface WebSocketServerOptions
|
|
11
|
-
extends HTTPServerConnectionOptions,
|
|
12
|
-
HTTPSServerConnectionOptions {
|
|
10
|
+
interface WebSocketServerOptions extends HTTPServerConnectionOptions, HTTPSServerConnectionOptions {
|
|
13
11
|
secure?: boolean
|
|
14
12
|
}
|
|
15
13
|
|
|
@@ -18,15 +16,14 @@ interface WebSocketServerEvents extends DuplexEvents {
|
|
|
18
16
|
listening: []
|
|
19
17
|
}
|
|
20
18
|
|
|
21
|
-
interface WebSocketServer<
|
|
22
|
-
|
|
23
|
-
> extends EventEmitter<M> {
|
|
19
|
+
interface WebSocketServer<M extends WebSocketServerEvents = WebSocketServerEvents>
|
|
20
|
+
extends EventEmitter<M> {
|
|
24
21
|
readonly listening: boolean
|
|
25
22
|
|
|
26
23
|
address(): TCPSocketAddress
|
|
27
|
-
close(cb?: (err
|
|
28
|
-
ref():
|
|
29
|
-
unref():
|
|
24
|
+
close(cb?: (err?: Error | null) => void): this
|
|
25
|
+
ref(): this
|
|
26
|
+
unref(): this
|
|
30
27
|
}
|
|
31
28
|
|
|
32
29
|
declare class WebSocketServer {
|
|
@@ -41,10 +38,7 @@ declare class WebSocketServer {
|
|
|
41
38
|
declare namespace WebSocketServer {
|
|
42
39
|
export { type WebSocketServerOptions, type WebSocketServerEvents }
|
|
43
40
|
|
|
44
|
-
export function handshake(
|
|
45
|
-
req: HTTPClientRequest,
|
|
46
|
-
cb: (err: WebSocketError | null) => void
|
|
47
|
-
): void
|
|
41
|
+
export function handshake(req: HTTPClientRequest, cb: (err: WebSocketError | null) => void): void
|
|
48
42
|
|
|
49
43
|
export function handshake(
|
|
50
44
|
req: HTTPClientRequest,
|
package/lib/server.js
CHANGED
|
@@ -44,15 +44,21 @@ module.exports = exports = class WebSocketServer extends EventEmitter {
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
close(cb) {
|
|
47
|
-
|
|
47
|
+
this._server.close(cb)
|
|
48
|
+
|
|
49
|
+
return this
|
|
48
50
|
}
|
|
49
51
|
|
|
50
52
|
ref() {
|
|
51
53
|
this._server.ref()
|
|
54
|
+
|
|
55
|
+
return this
|
|
52
56
|
}
|
|
53
57
|
|
|
54
58
|
unref() {
|
|
55
59
|
this._server.unref()
|
|
60
|
+
|
|
61
|
+
return this
|
|
56
62
|
}
|
|
57
63
|
|
|
58
64
|
_onlistening() {
|
|
@@ -80,12 +86,7 @@ module.exports = exports = class WebSocketServer extends EventEmitter {
|
|
|
80
86
|
}
|
|
81
87
|
|
|
82
88
|
// https://datatracker.ietf.org/doc/html/rfc6455#section-4.2
|
|
83
|
-
exports.handshake = function handshake(
|
|
84
|
-
req,
|
|
85
|
-
socket = req.socket,
|
|
86
|
-
head = EMPTY,
|
|
87
|
-
cb
|
|
88
|
-
) {
|
|
89
|
+
exports.handshake = function handshake(req, socket = req.socket, head = EMPTY, cb) {
|
|
89
90
|
if (typeof socket === 'function') {
|
|
90
91
|
cb = socket
|
|
91
92
|
socket = req.socket
|
|
@@ -111,11 +112,7 @@ exports.handshake = function handshake(
|
|
|
111
112
|
return cb(errors.INVALID_KEY_HEADER())
|
|
112
113
|
}
|
|
113
114
|
|
|
114
|
-
const digest = crypto
|
|
115
|
-
.createHash('sha1')
|
|
116
|
-
.update(key)
|
|
117
|
-
.update(GUID)
|
|
118
|
-
.digest('base64')
|
|
115
|
+
const digest = crypto.createHash('sha1').update(key).update(GUID).digest('base64')
|
|
119
116
|
|
|
120
117
|
socket.write(
|
|
121
118
|
'HTTP/1.1 101 Web Socket Protocol Handshake' +
|
package/lib/socket.d.ts
CHANGED
|
@@ -18,8 +18,7 @@ interface WebSocketEvents extends DuplexEvents {
|
|
|
18
18
|
pong: [payload: unknown]
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
interface WebSocket<M extends WebSocketEvents = WebSocketEvents>
|
|
22
|
-
extends Duplex<M> {
|
|
21
|
+
interface WebSocket<M extends WebSocketEvents = WebSocketEvents> extends Duplex<M> {
|
|
23
22
|
ping(data: unknown): void
|
|
24
23
|
pong(data: unknown): void
|
|
25
24
|
}
|
package/lib/socket.js
CHANGED
|
@@ -24,8 +24,7 @@ module.exports = exports = class WebSocket extends Duplex {
|
|
|
24
24
|
|
|
25
25
|
// For Node.js compatibility
|
|
26
26
|
opts.host = opts.hostname || opts.host
|
|
27
|
-
opts.port =
|
|
28
|
-
typeof opts.port === 'string' ? parseInt(opts.port, 10) : opts.port
|
|
27
|
+
opts.port = typeof opts.port === 'string' ? parseInt(opts.port, 10) : opts.port
|
|
29
28
|
}
|
|
30
29
|
|
|
31
30
|
const { isServer = false, socket = null } = opts
|
|
@@ -53,9 +52,7 @@ module.exports = exports = class WebSocket extends Duplex {
|
|
|
53
52
|
|
|
54
53
|
if (typeof data === 'string') data = Buffer.from(data)
|
|
55
54
|
|
|
56
|
-
this._socket.write(
|
|
57
|
-
new Frame(opcode.PING, data, { mask: this._mask }).toBuffer()
|
|
58
|
-
)
|
|
55
|
+
this._socket.write(new Frame(opcode.PING, data, { mask: this._mask }).toBuffer())
|
|
59
56
|
}
|
|
60
57
|
|
|
61
58
|
pong(data) {
|
|
@@ -63,9 +60,7 @@ module.exports = exports = class WebSocket extends Duplex {
|
|
|
63
60
|
|
|
64
61
|
if (typeof data === 'string') data = Buffer.from(data)
|
|
65
62
|
|
|
66
|
-
this._socket.write(
|
|
67
|
-
new Frame(opcode.PONG, data, { mask: this._mask }).toBuffer()
|
|
68
|
-
)
|
|
63
|
+
this._socket.write(new Frame(opcode.PONG, data, { mask: this._mask }).toBuffer())
|
|
69
64
|
}
|
|
70
65
|
|
|
71
66
|
_attach(socket) {
|
|
@@ -107,10 +102,7 @@ module.exports = exports = class WebSocket extends Duplex {
|
|
|
107
102
|
this._buffered += data.byteLength
|
|
108
103
|
|
|
109
104
|
while (this._frame === -1 || this._frame <= this._buffered) {
|
|
110
|
-
const buffer =
|
|
111
|
-
this._buffer.length === 1
|
|
112
|
-
? this._buffer[0]
|
|
113
|
-
: Buffer.concat(this._buffer)
|
|
105
|
+
const buffer = this._buffer.length === 1 ? this._buffer[0] : Buffer.concat(this._buffer)
|
|
114
106
|
|
|
115
107
|
this._buffer = [buffer]
|
|
116
108
|
|
|
@@ -225,11 +217,9 @@ module.exports = exports = class WebSocket extends Duplex {
|
|
|
225
217
|
return cb(errors.INVALID_ENCODING())
|
|
226
218
|
}
|
|
227
219
|
|
|
228
|
-
const frame = new Frame(
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
{ mask: this._mask }
|
|
232
|
-
)
|
|
220
|
+
const frame = new Frame(encoding === 'buffer' ? opcode.BINARY : opcode.TEXT, data, {
|
|
221
|
+
mask: this._mask
|
|
222
|
+
})
|
|
233
223
|
|
|
234
224
|
if (this._socket.write(frame.toBuffer())) cb(null)
|
|
235
225
|
else this._pendingWrite = cb
|
|
@@ -263,11 +253,7 @@ exports.handshake = function handshake(req, cb) {
|
|
|
263
253
|
return cb(errors.INVALID_UPGRADE_HEADER())
|
|
264
254
|
}
|
|
265
255
|
|
|
266
|
-
const digest = crypto
|
|
267
|
-
.createHash('sha1')
|
|
268
|
-
.update(key)
|
|
269
|
-
.update(GUID)
|
|
270
|
-
.digest('base64')
|
|
256
|
+
const digest = crypto.createHash('sha1').update(key).update(GUID).digest('base64')
|
|
271
257
|
|
|
272
258
|
if (res.headers['sec-websocket-accept'] !== digest) {
|
|
273
259
|
return cb(errors.INVALID_ACCEPT_HEADER())
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bare-ws",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"description": "WebSocket library for JavaScript",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"bare-url": "^2.1.3",
|
|
49
49
|
"brittle": "^3.3.0",
|
|
50
50
|
"prettier": "^3.4.1",
|
|
51
|
-
"prettier-config-
|
|
51
|
+
"prettier-config-holepunch": "^2.0.0"
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
54
54
|
"bare-buffer": "*",
|