Project files
This commit is contained in:
142
receipeServer/frontend_old/node_modules/websocket-driver/CHANGELOG.md
generated
vendored
Normal file
142
receipeServer/frontend_old/node_modules/websocket-driver/CHANGELOG.md
generated
vendored
Normal file
@@ -0,0 +1,142 @@
|
||||
### 0.7.4 / 2020-05-22
|
||||
|
||||
- Avoid crashing if `process.version` does not contain any digits
|
||||
- Emit `ping` and `pong` events from the `Server` driver
|
||||
- Require http-parser-js >=0.5.1 which fixes the bug we addressed in 0.7.3
|
||||
|
||||
### 0.7.3 / 2019-06-13
|
||||
|
||||
- Cap version of http-parser-js below 0.4.11, which introduced a bug that
|
||||
prevents us from handling messages that are part of the same input buffer as
|
||||
the handshake response if chunked encoding is specified
|
||||
|
||||
### 0.7.2 / 2019-06-13
|
||||
|
||||
(This version was pulled due to an error when publishing)
|
||||
|
||||
### 0.7.1 / 2019-06-10
|
||||
|
||||
- Catch any exceptions produced while generating a handshake response and send a
|
||||
`400 Bad Request` response to the client
|
||||
- Pick the RFC-6455 protocol version if the request contains any of the headers
|
||||
used by that version
|
||||
- Use the `Buffer.alloc()` and `Buffer.from()` functions instead of the unsafe
|
||||
`Buffer()` constructor
|
||||
- Handle errors encountered while handling malformed draft-76 requests
|
||||
- Change license from MIT to Apache 2.0
|
||||
|
||||
### 0.7.0 / 2017-09-11
|
||||
|
||||
- Add `ping` and `pong` to the set of events users can listen to
|
||||
- Replace the bindings to Node's HTTP parser with `http-parser-js`
|
||||
|
||||
### 0.6.5 / 2016-05-20
|
||||
|
||||
- Don't mutate buffers passed in by the application when masking
|
||||
|
||||
### 0.6.4 / 2016-01-07
|
||||
|
||||
- If a number is given as input for a frame payload, send it as a string
|
||||
|
||||
### 0.6.3 / 2015-11-06
|
||||
|
||||
- Reject draft-76 handshakes if their Sec-WebSocket-Key headers are invalid
|
||||
- Throw a more helpful error if a client is created with an invalid URL
|
||||
|
||||
### 0.6.2 / 2015-07-18
|
||||
|
||||
- When the peer sends a close frame with no error code, emit 1000
|
||||
|
||||
### 0.6.1 / 2015-07-13
|
||||
|
||||
- Use the `buffer.{read,write}UInt{16,32}BE` methods for reading/writing numbers
|
||||
to buffers rather than including duplicate logic for this
|
||||
|
||||
### 0.6.0 / 2015-07-08
|
||||
|
||||
- Allow the parser to recover cleanly if event listeners raise an error
|
||||
- Add a `pong` method for sending unsolicited pong frames
|
||||
|
||||
### 0.5.4 / 2015-03-29
|
||||
|
||||
- Don't emit extra close frames if we receive a close frame after we already
|
||||
sent one
|
||||
- Fail the connection when the driver receives an invalid
|
||||
`Sec-WebSocket-Extensions` header
|
||||
|
||||
### 0.5.3 / 2015-02-22
|
||||
|
||||
- Don't treat incoming data as WebSocket frames if a client driver is closed
|
||||
before receiving the server handshake
|
||||
|
||||
### 0.5.2 / 2015-02-19
|
||||
|
||||
- Fix compatibility with the HTTP parser on io.js
|
||||
- Use `websocket-extensions` to make sure messages and close frames are kept in
|
||||
order
|
||||
- Don't emit multiple `error` events
|
||||
|
||||
### 0.5.1 / 2014-12-18
|
||||
|
||||
- Don't allow drivers to be created with unrecognized options
|
||||
|
||||
### 0.5.0 / 2014-12-13
|
||||
|
||||
- Support protocol extensions via the websocket-extensions module
|
||||
|
||||
### 0.4.0 / 2014-11-08
|
||||
|
||||
- Support connection via HTTP proxies using `CONNECT`
|
||||
|
||||
### 0.3.6 / 2014-10-04
|
||||
|
||||
- It is now possible to call `close()` before `start()` and close the driver
|
||||
|
||||
### 0.3.5 / 2014-07-06
|
||||
|
||||
- Don't hold references to frame buffers after a message has been emitted
|
||||
- Make sure that `protocol` and `version` are exposed properly by the TCP driver
|
||||
|
||||
### 0.3.4 / 2014-05-08
|
||||
|
||||
- Don't hold memory-leaking references to I/O buffers after they have been
|
||||
parsed
|
||||
|
||||
### 0.3.3 / 2014-04-24
|
||||
|
||||
- Correct the draft-76 status line reason phrase
|
||||
|
||||
### 0.3.2 / 2013-12-29
|
||||
|
||||
- Expand `maxLength` to cover sequences of continuation frames and
|
||||
`draft-{75,76}`
|
||||
- Decrease default maximum frame buffer size to 64MB
|
||||
- Stop parsing when the protocol enters a failure mode, to save CPU cycles
|
||||
|
||||
### 0.3.1 / 2013-12-03
|
||||
|
||||
- Add a `maxLength` option to limit allowed frame size
|
||||
- Don't pre-allocate a message buffer until the whole frame has arrived
|
||||
- Fix compatibility with Node v0.11 `HTTPParser`
|
||||
|
||||
### 0.3.0 / 2013-09-09
|
||||
|
||||
- Support client URLs with Basic Auth credentials
|
||||
|
||||
### 0.2.2 / 2013-07-05
|
||||
|
||||
- No functional changes, just updates to package.json
|
||||
|
||||
### 0.2.1 / 2013-05-17
|
||||
|
||||
- Export the isSecureRequest() method since faye-websocket relies on it
|
||||
- Queue sent messages in the client's initial state
|
||||
|
||||
### 0.2.0 / 2013-05-12
|
||||
|
||||
- Add API for setting and reading headers
|
||||
- Add Driver.server() method for getting a driver for TCP servers
|
||||
|
||||
### 0.1.0 / 2013-05-04
|
||||
|
||||
- First stable release
|
||||
12
receipeServer/frontend_old/node_modules/websocket-driver/LICENSE.md
generated
vendored
Normal file
12
receipeServer/frontend_old/node_modules/websocket-driver/LICENSE.md
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
Copyright 2010-2020 James Coglan
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
||||
this file except in compliance with the License. You may obtain a copy of the
|
||||
License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software distributed
|
||||
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||
CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations under the License.
|
||||
370
receipeServer/frontend_old/node_modules/websocket-driver/README.md
generated
vendored
Normal file
370
receipeServer/frontend_old/node_modules/websocket-driver/README.md
generated
vendored
Normal file
@@ -0,0 +1,370 @@
|
||||
# websocket-driver [](https://travis-ci.org/faye/websocket-driver-node)
|
||||
|
||||
This module provides a complete implementation of the WebSocket protocols that
|
||||
can be hooked up to any I/O stream. It aims to simplify things by decoupling the
|
||||
protocol details from the I/O layer, such that users only need to implement code
|
||||
to stream data in and out of it without needing to know anything about how the
|
||||
protocol actually works. Think of it as a complete WebSocket system with
|
||||
pluggable I/O.
|
||||
|
||||
Due to this design, you get a lot of things for free. In particular, if you hook
|
||||
this module up to some I/O object, it will do all of this for you:
|
||||
|
||||
- Select the correct server-side driver to talk to the client
|
||||
- Generate and send both server- and client-side handshakes
|
||||
- Recognize when the handshake phase completes and the WS protocol begins
|
||||
- Negotiate subprotocol selection based on `Sec-WebSocket-Protocol`
|
||||
- Negotiate and use extensions via the
|
||||
[websocket-extensions](https://github.com/faye/websocket-extensions-node)
|
||||
module
|
||||
- Buffer sent messages until the handshake process is finished
|
||||
- Deal with proxies that defer delivery of the draft-76 handshake body
|
||||
- Notify you when the socket is open and closed and when messages arrive
|
||||
- Recombine fragmented messages
|
||||
- Dispatch text, binary, ping, pong and close frames
|
||||
- Manage the socket-closing handshake process
|
||||
- Automatically reply to ping frames with a matching pong
|
||||
- Apply masking to messages sent by the client
|
||||
|
||||
This library was originally extracted from the [Faye](http://faye.jcoglan.com)
|
||||
project but now aims to provide simple WebSocket support for any Node-based
|
||||
project.
|
||||
|
||||
|
||||
## Installation
|
||||
|
||||
```
|
||||
$ npm install websocket-driver
|
||||
```
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
This module provides protocol drivers that have the same interface on the server
|
||||
and on the client. A WebSocket driver is an object with two duplex streams
|
||||
attached; one for incoming/outgoing messages and one for managing the wire
|
||||
protocol over an I/O stream. The full API is described below.
|
||||
|
||||
|
||||
### Server-side with HTTP
|
||||
|
||||
A Node webserver emits a special event for 'upgrade' requests, and this is where
|
||||
you should handle WebSockets. You first check whether the request is a
|
||||
WebSocket, and if so you can create a driver and attach the request's I/O stream
|
||||
to it.
|
||||
|
||||
```js
|
||||
var http = require('http'),
|
||||
websocket = require('websocket-driver');
|
||||
|
||||
var server = http.createServer();
|
||||
|
||||
server.on('upgrade', function(request, socket, body) {
|
||||
if (!websocket.isWebSocket(request)) return;
|
||||
|
||||
var driver = websocket.http(request);
|
||||
|
||||
driver.io.write(body);
|
||||
socket.pipe(driver.io).pipe(socket);
|
||||
|
||||
driver.messages.on('data', function(message) {
|
||||
console.log('Got a message', message);
|
||||
});
|
||||
|
||||
driver.start();
|
||||
});
|
||||
```
|
||||
|
||||
Note the line `driver.io.write(body)` - you must pass the `body` buffer to the
|
||||
socket driver in order to make certain versions of the protocol work.
|
||||
|
||||
|
||||
### Server-side with TCP
|
||||
|
||||
You can also handle WebSocket connections in a bare TCP server, if you're not
|
||||
using an HTTP server and don't want to implement HTTP parsing yourself.
|
||||
|
||||
The driver will emit a `connect` event when a request is received, and at this
|
||||
point you can detect whether it's a WebSocket and handle it as such. Here's an
|
||||
example using the Node `net` module:
|
||||
|
||||
```js
|
||||
var net = require('net'),
|
||||
websocket = require('websocket-driver');
|
||||
|
||||
var server = net.createServer(function(connection) {
|
||||
var driver = websocket.server();
|
||||
|
||||
driver.on('connect', function() {
|
||||
if (websocket.isWebSocket(driver)) {
|
||||
driver.start();
|
||||
} else {
|
||||
// handle other HTTP requests
|
||||
}
|
||||
});
|
||||
|
||||
driver.on('close', function() { connection.end() });
|
||||
connection.on('error', function() {});
|
||||
|
||||
connection.pipe(driver.io).pipe(connection);
|
||||
|
||||
driver.messages.pipe(driver.messages);
|
||||
});
|
||||
|
||||
server.listen(4180);
|
||||
```
|
||||
|
||||
In the `connect` event, the driver gains several properties to describe the
|
||||
request, similar to a Node request object, such as `method`, `url` and
|
||||
`headers`. However you should remember it's not a real request object; you
|
||||
cannot write data to it, it only tells you what request data we parsed from the
|
||||
input.
|
||||
|
||||
If the request has a body, it will be in the `driver.body` buffer, but only as
|
||||
much of the body as has been piped into the driver when the `connect` event
|
||||
fires.
|
||||
|
||||
|
||||
### Client-side
|
||||
|
||||
Similarly, to implement a WebSocket client you just need to make a driver by
|
||||
passing in a URL. After this you use the driver API as described below to
|
||||
process incoming data and send outgoing data.
|
||||
|
||||
|
||||
```js
|
||||
var net = require('net'),
|
||||
websocket = require('websocket-driver');
|
||||
|
||||
var driver = websocket.client('ws://www.example.com/socket'),
|
||||
tcp = net.connect(80, 'www.example.com');
|
||||
|
||||
tcp.pipe(driver.io).pipe(tcp);
|
||||
|
||||
tcp.on('connect', function() {
|
||||
driver.start();
|
||||
});
|
||||
|
||||
driver.messages.on('data', function(message) {
|
||||
console.log('Got a message', message);
|
||||
});
|
||||
```
|
||||
|
||||
Client drivers have two additional properties for reading the HTTP data that was
|
||||
sent back by the server:
|
||||
|
||||
- `driver.statusCode` - the integer value of the HTTP status code
|
||||
- `driver.headers` - an object containing the response headers
|
||||
|
||||
|
||||
### HTTP Proxies
|
||||
|
||||
The client driver supports connections via HTTP proxies using the `CONNECT`
|
||||
method. Instead of sending the WebSocket handshake immediately, it will send a
|
||||
`CONNECT` request, wait for a `200` response, and then proceed as normal.
|
||||
|
||||
To use this feature, call `driver.proxy(url)` where `url` is the origin of the
|
||||
proxy, including a username and password if required. This produces a duplex
|
||||
stream that you should pipe in and out of your TCP connection to the proxy
|
||||
server. When the proxy emits `connect`, you can then pipe `driver.io` to your
|
||||
TCP stream and call `driver.start()`.
|
||||
|
||||
```js
|
||||
var net = require('net'),
|
||||
websocket = require('websocket-driver');
|
||||
|
||||
var driver = websocket.client('ws://www.example.com/socket'),
|
||||
proxy = driver.proxy('http://username:password@proxy.example.com'),
|
||||
tcp = net.connect(80, 'proxy.example.com');
|
||||
|
||||
tcp.pipe(proxy).pipe(tcp, { end: false });
|
||||
|
||||
tcp.on('connect', function() {
|
||||
proxy.start();
|
||||
});
|
||||
|
||||
proxy.on('connect', function() {
|
||||
driver.io.pipe(tcp).pipe(driver.io);
|
||||
driver.start();
|
||||
});
|
||||
|
||||
driver.messages.on('data', function(message) {
|
||||
console.log('Got a message', message);
|
||||
});
|
||||
```
|
||||
|
||||
The proxy's `connect` event is also where you should perform a TLS handshake on
|
||||
your TCP stream, if you are connecting to a `wss:` endpoint.
|
||||
|
||||
In the event that proxy connection fails, `proxy` will emit an `error`. You can
|
||||
inspect the proxy's response via `proxy.statusCode` and `proxy.headers`.
|
||||
|
||||
```js
|
||||
proxy.on('error', function(error) {
|
||||
console.error(error.message);
|
||||
console.log(proxy.statusCode);
|
||||
console.log(proxy.headers);
|
||||
});
|
||||
```
|
||||
|
||||
Before calling `proxy.start()` you can set custom headers using
|
||||
`proxy.setHeader()`:
|
||||
|
||||
```js
|
||||
proxy.setHeader('User-Agent', 'node');
|
||||
proxy.start();
|
||||
```
|
||||
|
||||
|
||||
### Driver API
|
||||
|
||||
Drivers are created using one of the following methods:
|
||||
|
||||
```js
|
||||
driver = websocket.http(request, options)
|
||||
driver = websocket.server(options)
|
||||
driver = websocket.client(url, options)
|
||||
```
|
||||
|
||||
The `http` method returns a driver chosen using the headers from a Node HTTP
|
||||
request object. The `server` method returns a driver that will parse an HTTP
|
||||
request and then decide which driver to use for it using the `http` method. The
|
||||
`client` method always returns a driver for the RFC version of the protocol with
|
||||
masking enabled on outgoing frames.
|
||||
|
||||
The `options` argument is optional, and is an object. It may contain the
|
||||
following fields:
|
||||
|
||||
- `maxLength` - the maximum allowed size of incoming message frames, in bytes.
|
||||
The default value is `2^26 - 1`, or 1 byte short of 64 MiB.
|
||||
- `protocols` - an array of strings representing acceptable subprotocols for use
|
||||
over the socket. The driver will negotiate one of these to use via the
|
||||
`Sec-WebSocket-Protocol` header if supported by the other peer.
|
||||
|
||||
A driver has two duplex streams attached to it:
|
||||
|
||||
- **`driver.io`** - this stream should be attached to an I/O socket like a TCP
|
||||
stream. Pipe incoming TCP chunks to this stream for them to be parsed, and
|
||||
pipe this stream back into TCP to send outgoing frames.
|
||||
- **`driver.messages`** - this stream emits messages received over the
|
||||
WebSocket. Writing to it sends messages to the other peer by emitting frames
|
||||
via the `driver.io` stream.
|
||||
|
||||
All drivers respond to the following API methods, but some of them are no-ops
|
||||
depending on whether the client supports the behaviour.
|
||||
|
||||
Note that most of these methods are commands: if they produce data that should
|
||||
be sent over the socket, they will give this to you by emitting `data` events on
|
||||
the `driver.io` stream.
|
||||
|
||||
#### `driver.on('open', function(event) {})`
|
||||
|
||||
Adds a callback to execute when the socket becomes open.
|
||||
|
||||
#### `driver.on('message', function(event) {})`
|
||||
|
||||
Adds a callback to execute when a message is received. `event` will have a
|
||||
`data` attribute containing either a string in the case of a text message or a
|
||||
`Buffer` in the case of a binary message.
|
||||
|
||||
You can also listen for messages using the `driver.messages.on('data')` event,
|
||||
which emits strings for text messages and buffers for binary messages.
|
||||
|
||||
#### `driver.on('error', function(event) {})`
|
||||
|
||||
Adds a callback to execute when a protocol error occurs due to the other peer
|
||||
sending an invalid byte sequence. `event` will have a `message` attribute
|
||||
describing the error.
|
||||
|
||||
#### `driver.on('close', function(event) {})`
|
||||
|
||||
Adds a callback to execute when the socket becomes closed. The `event` object
|
||||
has `code` and `reason` attributes.
|
||||
|
||||
#### `driver.on('ping', function(event) {})`
|
||||
|
||||
Adds a callback block to execute when a ping is received. You do not need to
|
||||
handle this by sending a pong frame yourself; the driver handles this for you.
|
||||
|
||||
#### `driver.on('pong', function(event) {})`
|
||||
|
||||
Adds a callback block to execute when a pong is received. If this was in
|
||||
response to a ping you sent, you can also handle this event via the
|
||||
`driver.ping(message, function() { ... })` callback.
|
||||
|
||||
#### `driver.addExtension(extension)`
|
||||
|
||||
Registers a protocol extension whose operation will be negotiated via the
|
||||
`Sec-WebSocket-Extensions` header. `extension` is any extension compatible with
|
||||
the [websocket-extensions](https://github.com/faye/websocket-extensions-node)
|
||||
framework.
|
||||
|
||||
#### `driver.setHeader(name, value)`
|
||||
|
||||
Sets a custom header to be sent as part of the handshake response, either from
|
||||
the server or from the client. Must be called before `start()`, since this is
|
||||
when the headers are serialized and sent.
|
||||
|
||||
#### `driver.start()`
|
||||
|
||||
Initiates the protocol by sending the handshake - either the response for a
|
||||
server-side driver or the request for a client-side one. This should be the
|
||||
first method you invoke. Returns `true` if and only if a handshake was sent.
|
||||
|
||||
#### `driver.parse(string)`
|
||||
|
||||
Takes a string and parses it, potentially resulting in message events being
|
||||
emitted (see `on('message')` above) or in data being sent to `driver.io`. You
|
||||
should send all data you receive via I/O to this method by piping a stream into
|
||||
`driver.io`.
|
||||
|
||||
#### `driver.text(string)`
|
||||
|
||||
Sends a text message over the socket. If the socket handshake is not yet
|
||||
complete, the message will be queued until it is. Returns `true` if the message
|
||||
was sent or queued, and `false` if the socket can no longer send messages.
|
||||
|
||||
This method is equivalent to `driver.messages.write(string)`.
|
||||
|
||||
#### `driver.binary(buffer)`
|
||||
|
||||
Takes a `Buffer` and sends it as a binary message. Will queue and return `true`
|
||||
or `false` the same way as the `text` method. It will also return `false` if the
|
||||
driver does not support binary messages.
|
||||
|
||||
This method is equivalent to `driver.messages.write(buffer)`.
|
||||
|
||||
#### `driver.ping(string = '', function() {})`
|
||||
|
||||
Sends a ping frame over the socket, queueing it if necessary. `string` and the
|
||||
callback are both optional. If a callback is given, it will be invoked when the
|
||||
socket receives a pong frame whose content matches `string`. Returns `false` if
|
||||
frames can no longer be sent, or if the driver does not support ping/pong.
|
||||
|
||||
#### `driver.pong(string = '')`
|
||||
|
||||
Sends a pong frame over the socket, queueing it if necessary. `string` is
|
||||
optional. Returns `false` if frames can no longer be sent, or if the driver does
|
||||
not support ping/pong.
|
||||
|
||||
You don't need to call this when a ping frame is received; pings are replied to
|
||||
automatically by the driver. This method is for sending unsolicited pongs.
|
||||
|
||||
#### `driver.close()`
|
||||
|
||||
Initiates the closing handshake if the socket is still open. For drivers with no
|
||||
closing handshake, this will result in the immediate execution of the
|
||||
`on('close')` driver. For drivers with a closing handshake, this sends a closing
|
||||
frame and `emit('close')` will execute when a response is received or a protocol
|
||||
error occurs.
|
||||
|
||||
#### `driver.version`
|
||||
|
||||
Returns the WebSocket version in use as a string. Will either be `hixie-75`,
|
||||
`hixie-76` or `hybi-$version`.
|
||||
|
||||
#### `driver.protocol`
|
||||
|
||||
Returns a string containing the selected subprotocol, if any was agreed upon
|
||||
using the `Sec-WebSocket-Protocol` mechanism. This value becomes available after
|
||||
`emit('open')` has fired.
|
||||
35
receipeServer/frontend_old/node_modules/websocket-driver/package.json
generated
vendored
Normal file
35
receipeServer/frontend_old/node_modules/websocket-driver/package.json
generated
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "websocket-driver",
|
||||
"description": "WebSocket protocol handler with pluggable I/O",
|
||||
"homepage": "https://github.com/faye/websocket-driver-node",
|
||||
"author": "James Coglan <jcoglan@gmail.com> (http://jcoglan.com/)",
|
||||
"keywords": [
|
||||
"websocket"
|
||||
],
|
||||
"license": "Apache-2.0",
|
||||
"version": "0.7.4",
|
||||
"engines": {
|
||||
"node": ">=0.8.0"
|
||||
},
|
||||
"files": [
|
||||
"lib"
|
||||
],
|
||||
"main": "./lib/websocket/driver",
|
||||
"dependencies": {
|
||||
"http-parser-js": ">=0.5.1",
|
||||
"safe-buffer": ">=5.1.0",
|
||||
"websocket-extensions": ">=0.1.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"jstest": "*",
|
||||
"permessage-deflate": "*"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "jstest spec/runner.js"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/faye/websocket-driver-node.git"
|
||||
},
|
||||
"bugs": "https://github.com/faye/websocket-driver-node/issues"
|
||||
}
|
||||
Reference in New Issue
Block a user