faye 1.1.1 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGELOG.md CHANGED
@@ -1,30 +1,146 @@
1
+ ### 1.4.0 / 2020-07-31
2
+
3
+ - Implement TLS certificate verification and enable it by default in the Ruby
4
+ client class `Faye::Client`
5
+ - Add a `:tls` option to the Ruby client with sub-field `:verify_peer` for
6
+ configuring TLS verification
7
+ - Officially support the `tls` option in the Node.js client, whose contents are
8
+ forward to the `https` and `tls` modules as appropriate
9
+
10
+ ### 1.3.0 / 2020-06-08
11
+
12
+ - Support `user:pass@` authorization in URIs and send `Authorization` headers
13
+ from the Node HTTP transport
14
+ - Support IPv6 hostnames in URIs
15
+ - Allow credentials (cookies and `Authorization` headers) in cross-origin
16
+ requests, by:
17
+ - setting `Access-Control-Allow-Origin` to the value of the `Origin` header
18
+ (not `*`)
19
+ - enabling `Access-Control-Allow-Credentials`
20
+ - Enable credentials when sending cross-origin requests
21
+ - Don't disconnect WebSocket on page unload if `autodisconnect` is turned off
22
+ - Catch errors when creating a WebSocket, which happens when Content Security
23
+ Policy blocks it, allowing other transports to be tried
24
+ - Fix a bug in the client where it handles messages from other clients as though
25
+ they're the server's response to its own messages, based on the `id` field;
26
+ now we only treat messages as server responses if they contain `successful:
27
+ true`
28
+ - Stop sending an empty message list `[]` from the WebSocket client as a
29
+ keep-alive mechanism since CometD does not accept this message
30
+ - Fix deprecation warnings for using the `new Buffer()` constructor
31
+ - Switch to the Apache 2.0 license
32
+
33
+
34
+ ### 1.2.5 / 2020-04-28
35
+
36
+ - Fix `/meta/*` channel recognition bug in the server that enables
37
+ authentication bypass
38
+ - https://blog.jcoglan.com/2020/04/28/authentication-bypass-in-faye/
39
+
40
+
41
+ ### 1.2.4 / 2017-01-28
42
+
43
+ - Fix `RackAdapter#get_client` that was failing due to a URI error
44
+ - Define `Promise#catch` in a safe way for old browsers
45
+ - Log errors in the Node HTTP transport
46
+
47
+
48
+ ### 1.2.3 / 2016-10-11
49
+
50
+ - Return an error if the `data` field is missing on published messages
51
+ - Fix errors that occur in the new `websocket` util when the browser does not
52
+ support WebSocket
53
+
54
+
55
+ ### 1.2.2 / 2016-07-18
56
+
57
+ - Mitigate the HTTPoxy vulnerability: https://httpoxy.org/
58
+
59
+
60
+ ### 1.2.1 / 2016-06-29
61
+
62
+ - Fix a missing variable error in `NodeAdapter`
63
+
64
+
65
+ ### 1.2.0 / 2016-06-26
66
+
67
+ - Add `client.subscribe().withChannel()` to yield the message channel for
68
+ wildcard subscriptions
69
+ - Restructure the JavaScript codebase around Node modules (require/exports)
70
+ rather than globals
71
+ - Update the Promise shim to reflect the standard API, including `catch()` and
72
+ `all()`
73
+ - Support connecting to servers that use SNI in the Ruby client
74
+ - Make the JavaScript client work inside React Native and Web Workers
75
+ - Remove JSON2; you should import a JSON shim yourself if necessary
76
+ - Handle errors that occur when a message is partially delivered via EventSource
77
+ - Reject requests with invalid (non-array or -object) top-level JSON values
78
+ - Make local client requests asynchronous to avoid re-entrant request handling
79
+ errors
80
+ - Remove `Connection: Close` from HTTP responses to allow use of keep-alive
81
+ - Use `XMLHttpRequest` in preference to the ActiveX API in IE10
82
+ - Fix bug where flushing large message batches puts promises in an invalid state
83
+
84
+
85
+ ### 1.1.3 / 2020-04-28
86
+
87
+ - Fix `/meta/*` channel recognition bug in the server that enables
88
+ authentication bypass
89
+ - https://blog.jcoglan.com/2020/04/28/authentication-bypass-in-faye/
90
+
91
+
92
+ ### 1.1.2 / 2015-07-19
93
+
94
+ - Allow the `Authorization` header to be used on CORS requests
95
+ - Disallow unused methods like PUT and DELETE on CORS requests
96
+ - Stop IE prematurely garbage-collecting `XDomainRequest` objects
97
+ - Make sure messages can be sent if they overflow the request size limit and the
98
+ outbox is empty
99
+ - Don't send messages over WebSockets unless they are in the 'open' ready-state
100
+ - Fix a bug preventing use of the in-process transport in Ruby
101
+
102
+
1
103
  ### 1.1.1 / 2015-02-25
2
104
 
3
- * Make sure the client ID associated with a WebSocket is not dropped, so the socket can be closed properly
4
- * Handle cases where a JSON-P endpoint returns no response argument
5
- * Stop trying to retry messages after the client has been disconnected
6
- * Remove duplication of the client ID in EventSource URLs
105
+ - Make sure the client ID associated with a WebSocket is not dropped, so the
106
+ socket can be closed properly
107
+ - Handle cases where a JSON-P endpoint returns no response argument
108
+ - Stop trying to retry messages after the client has been disconnected
109
+ - Remove duplication of the client ID in EventSource URLs
7
110
 
8
111
 
9
112
  ### 1.1.0 / 2014-12-22
10
113
 
11
- * Allow the server and client to use WebSocket extensions, for example permessage-deflate
12
- * Support the `HTTP_PROXY` and `HTTPS_PROXY` environment variables to send all client connections through an HTTP proxy
13
- * Introduce the `Scheduler` API to allow the user to control message retries
14
- * Add the `attempts` and `deadline` options to `Client#publish()`
15
- * Let `RackAdapter` take a block that yields the instance, so extensions can be added to middleware
16
- * Allow monitoring listeners to see the `clientId` on publishd messages but still avoid sending it to subscribers
17
- * Return a promise from `Client#disconnect()`
18
- * Fix client-side retry bugs causing the client to flood the server with duplicate messages
19
- * Send all transport types in the `supportedConnectionTypes` handshake parameter
20
- * Don't close WebSockets when the client recovers from an error and sends a new `clientId`
21
- * Replace `cookiejar` with `tough-cookie` to avoid global variable leaks
114
+ - Allow the server and client to use WebSocket extensions, for example
115
+ permessage-deflate
116
+ - Support the `HTTP_PROXY` and `HTTPS_PROXY` environment variables to send all
117
+ client connections through an HTTP proxy
118
+ - Introduce the `Scheduler` API to allow the user to control message retries
119
+ - Add the `attempts` and `deadline` options to `Client#publish()`
120
+ - Let `RackAdapter` take a block that yields the instance, so extensions can be
121
+ added to middleware
122
+ - Allow monitoring listeners to see the `clientId` on publishd messages but
123
+ still avoid sending it to subscribers
124
+ - Return a promise from `Client#disconnect()`
125
+ - Fix client-side retry bugs causing the client to flood the server with
126
+ duplicate messages
127
+ - Send all transport types in the `supportedConnectionTypes` handshake parameter
128
+ - Don't close WebSockets when the client recovers from an error and sends a new
129
+ `clientId`
130
+ - Replace `cookiejar` with `tough-cookie` to avoid global variable leaks
131
+
132
+
133
+ ### 1.0.4 / 2020-04-28
134
+
135
+ - Fix `/meta/*` channel recognition bug in the server that enables
136
+ authentication bypass
137
+ - https://blog.jcoglan.com/2020/04/28/authentication-bypass-in-faye/
22
138
 
23
139
 
24
140
  ### 1.0.3 / 2014-07-08
25
141
 
26
- * Make some changes to JSON-P responses to mitigate the Rosetta Flash attack
27
- * http://miki.it/blog/2014/7/8/abusing-jsonp-with-rosetta-flash/
142
+ - Make some changes to JSON-P responses to mitigate the Rosetta Flash attack
143
+ - http://miki.it/blog/2014/7/8/abusing-jsonp-with-rosetta-flash/
28
144
 
29
145
 
30
146
  ### 1.0.2 -- removed due to error while publishing
@@ -32,62 +148,83 @@
32
148
 
33
149
  ### 1.0.1 / 2013-12-10
34
150
 
35
- * Add `Adapter#close()` method for gracefully shutting down the server
36
- * Fix error recover bug in WebSocket that made transport cycle through `up`/`down` state
37
- * Update Promise implementation to pass `promises-aplus-tests 2.0`
38
- * Correct some incorrect variable names in the Ruby transports
39
- * Make logging methods public to fix a problem on Ruby 2.1
151
+ - Add `Adapter#close()` method for gracefully shutting down the server
152
+ - Fix error recover bug in WebSocket that made transport cycle through
153
+ `up`/`down` state
154
+ - Update Promise implementation to pass `promises-aplus-tests 2.0`
155
+ - Correct some incorrect variable names in the Ruby transports
156
+ - Make logging methods public to fix a problem on Ruby 2.1
40
157
 
41
158
 
42
159
  ### 1.0.0 / 2013-10-01
43
160
 
44
- * Client changes:
45
- * Allow clients to be instantiated with URI objects rather than strings
46
- * Add a `ca` option to the Node `Client` class for passing in trusted server certificates
47
- * Objects supporting the `callback()` method in JavaScript are now Promises
48
- * Fix protocol-relative URI parsing in the client
49
- * Remove the `getClientId()` and `getState()` methods from the `Client` class
50
- * Transport changes:
51
- * Add request-size limiting to all batching transports
52
- * Make the WebSocket transport more robust against quiet network periods and clients going to sleep
53
- * Support cookies across all transports when using the client on Node.js or Ruby
54
- * Support custom headers in the `cross-origin-long-polling` and server-side `websocket` transports
55
- * Adapter changes:
56
- * Support the `rack.hijack` streaming API
57
- * Migrate to MultiJson for JSON handling on Ruby, allowing use of JRuby
58
- * Escape U+2028 and U+2029 in JSON-P output
59
- * Fix a bug stopping requests being routed when the mount point is `/`
60
- * Fix various bugs that cause errors to be thrown if we try to send a message over a closed socket
61
- * Remove the `listen()` method from `Adapter` in favour of using server-specific APIs
62
- * Server changes:
63
- * Use cryptographically secure random number generators to create client IDs
64
- * Allow extensions to access request properties by using 3-ary methods
65
- * Objects supporting the `bind()` method now implement the full `EventEmitter` API
66
- * Stop the server from forwarding the `clientId` property of published messages
67
- * Miscellaneous:
68
- * Support Browserify by returning the client module
69
- * `Faye.logger` can now be a logger object rather than a function
161
+ - Client changes:
162
+ - Allow clients to be instantiated with URI objects rather than strings
163
+ - Add a `ca` option to the Node `Client` class for passing in trusted server
164
+ certificates
165
+ - Objects supporting the `callback()` method in JavaScript are now Promises
166
+ - Fix protocol-relative URI parsing in the client
167
+ - Remove the `getClientId()` and `getState()` methods from the `Client` class
168
+ - Transport changes:
169
+ - Add request-size limiting to all batching transports
170
+ - Make the WebSocket transport more robust against quiet network periods and
171
+ clients going to sleep
172
+ - Support cookies across all transports when using the client on Node.js or
173
+ Ruby
174
+ - Support custom headers in the `cross-origin-long-polling` and server-side
175
+ `websocket` transports
176
+ - Adapter changes:
177
+ - Support the `rack.hijack` streaming API
178
+ - Migrate to MultiJson for JSON handling on Ruby, allowing use of JRuby
179
+ - Escape U+2028 and U+2029 in JSON-P output
180
+ - Fix a bug stopping requests being routed when the mount point is `/`
181
+ - Fix various bugs that cause errors to be thrown if we try to send a message
182
+ over a closed socket
183
+ - Remove the `listen()` method from `Adapter` in favour of using
184
+ server-specific APIs
185
+ - Server changes:
186
+ - Use cryptographically secure random number generators to create client IDs
187
+ - Allow extensions to access request properties by using 3-ary methods
188
+ - Objects supporting the `bind()` method now implement the full `EventEmitter`
189
+ API
190
+ - Stop the server from forwarding the `clientId` property of published
191
+ messages
192
+ - Miscellaneous:
193
+ - Support Browserify by returning the client module
194
+ - `Faye.logger` can now be a logger object rather than a function
195
+
196
+
197
+ ### 0.8.11 / 2014-07-08
198
+
199
+ - Make some changes to JSON-P responses to mitigate the Rosetta Flash attack
200
+ - http://miki.it/blog/2014/7/8/abusing-jsonp-with-rosetta-flash/
201
+
202
+
203
+ ### 0.8.10 -- removed due to error while publishing
70
204
 
71
205
 
72
206
  ### 0.8.9 / 2013-02-26
73
207
 
74
- * Specify ciphers for SSL on Node to mitigate the BEAST attack
75
- * Mitigate increased risk of socket hang-up errors in Node v0.8.20
76
- * Fix race condition when processing outgoing extensions in the Node server
77
- * Fix problem loading the client script when using `{mount: '/'}`
78
- * Clean up connection objects when a WebSocket is re-used with a new clientId
79
- * All JavaScript code now runs in strict mode
80
- * Select transport on handshake, instead of on client creation to allow time for `disable()` calls
81
- * Do not speculatively open WebSocket/EventSource connections if they are disabled
82
- * Gracefully handle WebSocket messages with no data on the client side
83
- * Close and reconnect WebSocket when onerror is fired, not just when onclose is fired
84
- * Fix problem with caching of EventSource connections with stale clientIds
85
- * Don't parse query strings when checking if a URL is same-origin or not
208
+ - Specify ciphers for SSL on Node to mitigate the BEAST attack
209
+ - Mitigate increased risk of socket hang-up errors in Node v0.8.20
210
+ - Fix race condition when processing outgoing extensions in the Node server
211
+ - Fix problem loading the client script when using `{mount: '/'}`
212
+ - Clean up connection objects when a WebSocket is re-used with a new clientId
213
+ - All JavaScript code now runs in strict mode
214
+ - Select transport on handshake, instead of on client creation to allow time for
215
+ `disable()` calls
216
+ - Do not speculatively open WebSocket/EventSource connections if they are
217
+ disabled
218
+ - Gracefully handle WebSocket messages with no data on the client side
219
+ - Close and reconnect WebSocket when onerror is fired, not just when onclose is
220
+ fired
221
+ - Fix problem with caching of EventSource connections with stale clientIds
222
+ - Don't parse query strings when checking if a URL is same-origin or not
86
223
 
87
224
 
88
225
  ### 0.8.8 / 2013-01-10
89
226
 
90
- * Patch security hole allowing remote execution of arbitrary Server methods
227
+ - Patch security hole allowing remote execution of arbitrary Server methods
91
228
 
92
229
 
93
230
  ### 0.8.7 -- removed due to error while publishing
@@ -95,280 +232,311 @@
95
232
 
96
233
  ### 0.8.6 / 2012-10-07
97
234
 
98
- * Make sure messages pushed to the client over a socket pass through outgoing extensions
235
+ - Make sure messages pushed to the client over a socket pass through outgoing
236
+ extensions
99
237
 
100
238
 
101
239
  ### 0.8.5 / 2012-09-30
102
240
 
103
- * Fix a bug in `URI.parse()` that caused Faye endpoints to inherit search and hash from `window.location`
241
+ - Fix a bug in `URI.parse()` that caused Faye endpoints to inherit search and
242
+ hash from `window.location`
104
243
 
105
244
 
106
245
  ### 0.8.4 / 2012-09-29
107
246
 
108
- * Optimise upgrade process so that WebSocket is tested earlier and the connection is cached
109
- * Check that EventSource actually works to work around broken Opera implementation
110
- * Emit `connection:open` and `connection:close` events from the Engine proxy
111
- * Increase size of client IDs from 128 to 160 bits
112
- * Fix bug with relative URL resolution in IE
113
- * Limit the JSON-P transport's message buffer so it doesn't create over-long URLs
114
- * Send `Pragma: no-cache` with XHR requests to guard against iOS 6 POST caching
115
- * Add `charset=utf-8` to response Content-Type headers
247
+ - Optimise upgrade process so that WebSocket is tested earlier and the
248
+ connection is cached
249
+ - Check that EventSource actually works to work around broken Opera
250
+ implementation
251
+ - Emit `connection:open` and `connection:close` events from the Engine proxy
252
+ - Increase size of client IDs from 128 to 160 bits
253
+ - Fix bug with relative URL resolution in IE
254
+ - Limit the JSON-P transport's message buffer so it doesn't create over-long
255
+ URLs
256
+ - Send `Pragma: no-cache` with XHR requests to guard against iOS 6 POST caching
257
+ - Add `charset=utf-8` to response Content-Type headers
116
258
 
117
259
 
118
260
  ### 0.8.3 / 2012-07-15
119
261
 
120
- * `Client#subscribe` returns an array of Subscriptions if given an array of channels
121
- * Allow different endpoints to be specified per-transport
122
- * Only use IE's `XDomainRequest` for same-protocol requests
123
- * Replace URL parser with one that treats relative URLs the same as the browser
124
- * Improve logging of malformed requests and detect problems earlier
125
- * Make sure socket connections are closed when a client session is timed out
126
- * Stop WebSocket reconnecting after `window.onbeforeunload`
262
+ - `Client#subscribe` returns an array of Subscriptions if given an array of
263
+ channels
264
+ - Allow different endpoints to be specified per-transport
265
+ - Only use IE's `XDomainRequest` for same-protocol requests
266
+ - Replace URL parser with one that treats relative URLs the same as the browser
267
+ - Improve logging of malformed requests and detect problems earlier
268
+ - Make sure socket connections are closed when a client session is timed out
269
+ - Stop WebSocket reconnecting after `window.onbeforeunload`
127
270
 
128
271
 
129
272
  ### 0.8.2 / 2012-04-12
130
273
 
131
- * Fix replacement of `null` with `{}` in `copyObject()`
132
- * Make EventSource transport trigger `transport:up/down` events
133
- * Supply source map for minified JavaScript client, and include source in gem
134
- * Return `Content-Length: 0` for 304 responses
135
- * Handle pre-flight CORS requests from old versions of Safari
274
+ - Fix replacement of `null` with `{}` in `copyObject()`
275
+ - Make EventSource transport trigger `transport:up/down` events
276
+ - Supply source map for minified JavaScript client, and include source in gem
277
+ - Return `Content-Length: 0` for 304 responses
278
+ - Handle pre-flight CORS requests from old versions of Safari
136
279
 
137
280
 
138
281
  ### 0.8.1 / 2012-03-15
139
282
 
140
- * Make `Publisher#trigger` safe for event listeners that modify the listener list
141
- * Make `Server#subscribe` return a response if the incoming message has an error
142
- * Fix edge case in code that identifies the `clientId` of socket connections
143
- * Return `Content-Length` headers for HTTP responses
144
- * Don't send empty lists of messages from the WebSocket transport
145
- * Stop client sending multiple `/meta/subscribe` messages for subscriptions made before handshaking
146
- * Stop client treating incoming published messages as responses to `/meta/*` messages
283
+ - Make `Publisher#trigger` safe for event listeners that modify the listener
284
+ list
285
+ - Make `Server#subscribe` return a response if the incoming message has an error
286
+ - Fix edge case in code that identifies the `clientId` of socket connections
287
+ - Return `Content-Length` headers for HTTP responses
288
+ - Don't send empty lists of messages from the WebSocket transport
289
+ - Stop client sending multiple `/meta/subscribe` messages for subscriptions made
290
+ before handshaking
291
+ - Stop client treating incoming published messages as responses to `/meta/*`
292
+ messages
147
293
 
148
294
 
149
295
  ### 0.8.0 / 2012-02-26
150
296
 
151
- * Extract the Redis engine into a separate library, `faye-redis`
152
- * Stabilize and document the Engine API so others can write backends
153
- * Extract WebSocket and EventSource tools into a separate library, `faye-websocket`
154
- * Improve use of WebSocket so messages are immediately pushed rather than polling
155
- * Introduce new EventSource-based transport, for proxies that block WebSocket
156
- * Support the Rainbows and Goliath web servers for Ruby, same as `faye-websocket`
157
- * Improve detection of network errors and switch to fixed-interval for reconnecting
158
- * Add `setHeader()` method to Client (e.g. for connecting to Salesforce API)
159
- * Add `timeout()` method to `Faye.Deferrable` to match `EventMachine::Deferrable`
160
- * Fix some bugs in client-side message handlers created with `subscribe()`
161
- * Improve speed and memory consumption of `copyObject()`
162
- * Switch from JSON to Yajl for JSON parsing in Ruby
297
+ - Extract the Redis engine into a separate library, `faye-redis`
298
+ - Stabilize and document the Engine API so others can write backends
299
+ - Extract WebSocket and EventSource tools into a separate library,
300
+ `faye-websocket`
301
+ - Improve use of WebSocket so messages are immediately pushed rather than
302
+ polling
303
+ - Introduce new EventSource-based transport, for proxies that block WebSocket
304
+ - Support the Rainbows and Goliath web servers for Ruby, same as
305
+ `faye-websocket`
306
+ - Improve detection of network errors and switch to fixed-interval for
307
+ reconnecting
308
+ - Add `setHeader()` method to Client (e.g. for connecting to Salesforce API)
309
+ - Add `timeout()` method to `Faye.Deferrable` to match
310
+ `EventMachine::Deferrable`
311
+ - Fix some bugs in client-side message handlers created with `subscribe()`
312
+ - Improve speed and memory consumption of `copyObject()`
313
+ - Switch from JSON to Yajl for JSON parsing in Ruby
314
+
315
+
316
+ ### 0.7.2 / 2013-01-10
317
+
318
+ - Patch security hole allowing remote execution of arbitrary Server methods
163
319
 
164
320
 
165
321
  ### 0.7.1 / 2011-12-22
166
322
 
167
- * Extension `added()` and `removed()` methods now receive the extended object
168
- * Detection of WebSockets in RackAdapter is more strict
323
+ - Extension `added()` and `removed()` methods now receive the extended object
324
+ - Detection of WebSockets in RackAdapter is more strict
169
325
 
170
326
 
171
327
  ### 0.7.0 / 2011-11-22
172
328
 
173
- * Provide an event API for monitoring engine events on the server side
174
- * Implement server-side WebSocket connections for improved latency
175
- * Fix WebSocket protocol bugs and expose APIs for developers to use
176
- * Make server-side HTTP transports support SSL and cookies
177
- * Allow clients to disable selected transports and autodisconnection
178
- * Add callback/errback API to `Client#publish()` interface
179
- * Add `socket` setting for the Redis engine for connecting through a Unix socket
329
+ - Provide an event API for monitoring engine events on the server side
330
+ - Implement server-side WebSocket connections for improved latency
331
+ - Fix WebSocket protocol bugs and expose APIs for developers to use
332
+ - Make server-side HTTP transports support SSL and cookies
333
+ - Allow clients to disable selected transports and autodisconnection
334
+ - Add callback/errback API to `Client#publish()` interface
335
+ - Add `socket` setting for the Redis engine for connecting through a Unix socket
336
+
337
+
338
+ ### 0.6.8 / 2013-01-10
339
+
340
+ - Patch security hole allowing remote execution of arbitrary Server methods
180
341
 
181
342
 
182
343
  ### 0.6.7 / 2011-10-20
183
344
 
184
- * Cache client script in memory and add `ETag` and `Last-Modified` headers
185
- * Fix bug in Node Redis engine where `undefined` was used if no namespace given
186
- * Flush Redis message queues using a transaction to avoid re-delivery of messages
187
- * Fix race condition and timing errors present in Redis locking code
188
- * Use `Cache-Control: no-cache, no-store` on JSON-P responses
189
- * Improvements to the CORS and JSON-P transports
190
- * Prevent retry handlers in transports from being invoked multiple times
191
- * Use the current page protocol by default when parsing relative URIs
345
+ - Cache client script in memory and add `ETag` and `Last-Modified` headers
346
+ - Fix bug in Node Redis engine where `undefined` was used if no namespace given
347
+ - Flush Redis message queues using a transaction to avoid re-delivery of
348
+ messages
349
+ - Fix race condition and timing errors present in Redis locking code
350
+ - Use `Cache-Control: no-cache, no-store` on JSON-P responses
351
+ - Improvements to the CORS and JSON-P transports
352
+ - Prevent retry handlers in transports from being invoked multiple times
353
+ - Use the current page protocol by default when parsing relative URIs
192
354
 
193
355
 
194
356
  ### 0.6.6 / 2011-09-12
195
357
 
196
- * Add `:key` and `:cert` options to the `Adapter#listen` methods for setting up SSL
197
- * Fix error detection of CORS transport in IE9 running IE8 compatibility mode
198
- * Fix dependency versions so that Rubygems lets Faye install
358
+ - Add `:key` and `:cert` options to the `Adapter#listen` methods for setting up
359
+ SSL
360
+ - Fix error detection of CORS transport in IE9 running IE8 compatibility mode
361
+ - Fix dependency versions so that Rubygems lets Faye install
199
362
 
200
363
 
201
364
  ### 0.6.5 / 2011-08-29
202
365
 
203
- * Fix UTF-8 encoding bugs in draft-75/76 and protocol-8 WebSocket parsers
204
- * Switch to streaming parser for WebSocket protocol-8
205
- * Remove an `SREM` operation that shouldn't have been in the Redis engine
206
- * Move `thin_extensions.rb` so it's not on the Rubygems load path
366
+ - Fix UTF-8 encoding bugs in draft-75/76 and protocol-8 WebSocket parsers
367
+ - Switch to streaming parser for WebSocket protocol-8
368
+ - Remove an `SREM` operation that shouldn't have been in the Redis engine
369
+ - Move `thin_extensions.rb` so it's not on the Rubygems load path
207
370
 
208
371
 
209
372
  ### 0.6.4 / 2011-08-18
210
373
 
211
- * Support WebSocket protocol used by Chrome 14 and Firefox 6
212
- * Fix handling of multibyte characters in WebSocket messages on Node
213
- * Improve message routing in Node memory engine to avoid false duplicates
374
+ - Support WebSocket protocol used by Chrome 14 and Firefox 6
375
+ - Fix handling of multibyte characters in WebSocket messages on Node
376
+ - Improve message routing in Node memory engine to avoid false duplicates
214
377
 
215
378
 
216
379
  ### 0.6.3 / 2011-07-10
217
380
 
218
- * Use sequential message IDs to reduce memory usage on the client side
219
- * Only send advice with handshake and connect responses
220
- * Stop trying to publish `/meta/*` messages - no-one is listening and it breaks `/**`
221
- * Fix bug causing invalid listeners to appear after a client reconnection
222
- * Stop loading `rubygems` within our library code
223
- * Make sure we only queue a message for each client once in the Redis engine
224
- * Use lists instead of sets for message queues in Redis
225
- * Improve clean-up of expired clients in Redis engine
381
+ - Use sequential message IDs to reduce memory usage on the client side
382
+ - Only send advice with handshake and connect responses
383
+ - Stop trying to publish `/meta/*` messages - no-one is listening and it breaks
384
+ `/**`
385
+ - Fix bug causing invalid listeners to appear after a client reconnection
386
+ - Stop loading `rubygems` within our library code
387
+ - Make sure we only queue a message for each client once in the Redis engine
388
+ - Use lists instead of sets for message queues in Redis
389
+ - Improve clean-up of expired clients in Redis engine
226
390
 
227
391
 
228
392
  ### 0.6.2 / 2011-06-19
229
393
 
230
- * Add authentication, database selection and namespacing to Redis engine
231
- * Clean up all client data when removing clients from Redis
232
- * Fix `cross-origin-long-polling` for `OPTIONS`-aware browsers
233
- * Update secure WebSocket detection for recent Node versions
234
- * Reinstate `faye.client` field in Rack environment
394
+ - Add authentication, database selection and namespacing to Redis engine
395
+ - Clean up all client data when removing clients from Redis
396
+ - Fix `cross-origin-long-polling` for `OPTIONS`-aware browsers
397
+ - Update secure WebSocket detection for recent Node versions
398
+ - Reinstate `faye.client` field in Rack environment
235
399
 
236
400
 
237
401
  ### 0.6.1 / 2011-06-06
238
402
 
239
- * Fix `cross-origin-long-polling` support in `RackAdapter`
240
- * Plug some potential memory leaks in `Memory` engine
403
+ - Fix `cross-origin-long-polling` support in `RackAdapter`
404
+ - Plug some potential memory leaks in `Memory` engine
241
405
 
242
406
 
243
407
  ### 0.6.0 / 2011-05-21
244
408
 
245
- * Extract core logic into the `Engine` class to support swappable backends
246
- * Introduce a Redis-backed engine to support clustered web front-ends
247
- * Use CORS for `cross-domain long-polling`
248
- * Make server more resilient against bad requests, including empty message lists
249
- * Perform subscription validation on the server and use errbacks to signal errors
250
- * Prohibit publishing to wildcard channels
251
- * Unsubscribing from a channel is now O(1) instead of O(N)
252
- * Much more thorough and consistent unit test coverage of both versions
253
- * Automatic integration tests using Terminus and TestSwarm
409
+ - Extract core logic into the `Engine` class to support swappable backends
410
+ - Introduce a Redis-backed engine to support clustered web front-ends
411
+ - Use CORS for `cross-domain long-polling`
412
+ - Make server more resilient against bad requests, including empty message lists
413
+ - Perform subscription validation on the server and use errbacks to signal
414
+ errors
415
+ - Prohibit publishing to wildcard channels
416
+ - Unsubscribing from a channel is now O(1) instead of O(N)
417
+ - Much more thorough and consistent unit test coverage of both versions
418
+ - Automatic integration tests using Terminus and TestSwarm
254
419
 
255
420
 
256
421
  ### 0.5.5 / 2011-01-16
257
422
 
258
- * Open a real socket to check for WebSocket usability, not just object detection
259
- * Catch server-side errors when handshaking with WebSockets
423
+ - Open a real socket to check for WebSocket usability, not just object detection
424
+ - Catch server-side errors when handshaking with WebSockets
260
425
 
261
426
 
262
427
  ### 0.5.4 / 2010-12-19
263
428
 
264
- * Add a `#callback` method to `Subscriptions` to detect when they become active
265
- * Add `:extensions` option to `RackAdapter` to make it easier to extend middleware
266
- * Detect secure WebSocket requests through the `HTTP_X_FORWARDED_PROTO` header
267
- * Handle socket errors when sending WebSocket messages from `NodeAdapter`
268
- * Use exponential backoff to reconnect client-side WebSockets to reduce CPU load
429
+ - Add a `#callback` method to `Subscriptions` to detect when they become active
430
+ - Add `:extensions` option to `RackAdapter` to make it easier to extend
431
+ middleware
432
+ - Detect secure WebSocket requests through the `HTTP_X_FORWARDED_PROTO` header
433
+ - Handle socket errors when sending WebSocket messages from `NodeAdapter`
434
+ - Use exponential backoff to reconnect client-side WebSockets to reduce CPU load
269
435
 
270
436
 
271
437
  ### 0.5.3 / 2010-10-21
272
438
 
273
- * Improve detection of `wss:` requirement for secure WebSocket connections
274
- * Correctly use default ports (80,443) for server-side HTTP connections
275
- * Support legacy `application/x-www-form-urlencoded` POST requests
276
- * Delete unused Channel objects that have all their subscribers removed
277
- * Fix resend/reconnect logic in WebSocket transport
278
- * Keep client script in memory rather than reading it from disk every time
279
- * Prevent error-adding extensions from breaking the core protocol
439
+ - Improve detection of `wss:` requirement for secure WebSocket connections
440
+ - Correctly use default ports (80,443) for server-side HTTP connections
441
+ - Support legacy `application/x-www-form-urlencoded` POST requests
442
+ - Delete unused Channel objects that have all their subscribers removed
443
+ - Fix resend/reconnect logic in WebSocket transport
444
+ - Keep client script in memory rather than reading it from disk every time
445
+ - Prevent error-adding extensions from breaking the core protocol
280
446
 
281
447
 
282
448
  ### 0.5.2 / 2010-08-12
283
449
 
284
- * Support draft-76 of the WebSocket protocol (FF4, Chrome 6)
285
- * Reduce `Connection::MAX_DELAY` to improve latency
450
+ - Support draft-76 of the WebSocket protocol (FF4, Chrome 6)
451
+ - Reduce `Connection::MAX_DELAY` to improve latency
286
452
 
287
453
 
288
454
  ### 0.5.1 / 2010-07-21
289
455
 
290
- * Fix a publishing problem in Ruby `LocalTransport`
456
+ - Fix a publishing problem in Ruby `LocalTransport`
291
457
 
292
458
 
293
459
  ### 0.5.0 / 2010-07-17
294
460
 
295
- * Handle multiple event listeners bound to a channel
296
- * Add extension system for adding domain-specific logic to the protocol
297
- * Improve handling of client reconnections if the server goes down
298
- * Change default polling interval to 0 (immediate reconnect)
299
- * Add support for WebSockets (draft75 only) as a network transport
300
- * Remove support for Ruby servers other than Thin
301
- * Make client and server compatible with CometD (1.x and 2.0) components
302
- * Improve clean-up of unused server-side connections
303
- * Change Node API for adding Faye service to an HTTP server
461
+ - Handle multiple event listeners bound to a channel
462
+ - Add extension system for adding domain-specific logic to the protocol
463
+ - Improve handling of client reconnections if the server goes down
464
+ - Change default polling interval to 0 (immediate reconnect)
465
+ - Add support for WebSockets (draft75 only) as a network transport
466
+ - Remove support for Ruby servers other than Thin
467
+ - Make client and server compatible with CometD (1.x and 2.0) components
468
+ - Improve clean-up of unused server-side connections
469
+ - Change Node API for adding Faye service to an HTTP server
304
470
 
305
471
 
306
472
  ### 0.3.4 / 2010-06-20
307
473
 
308
- * Stop local clients going into an infinite loop if a subscription block causes a reconnect
474
+ - Stop local clients going into an infinite loop if a subscription block causes
475
+ a reconnect
309
476
 
310
477
 
311
478
  ### 0.3.3 / 2010-06-07
312
479
 
313
- * Bring Node APIs up to date with 0.1.97
314
- * Catch `ECONNREFUSED` errors in Node clients to withstand server outages
315
- * Refactor the `Server` internals
480
+ - Bring Node APIs up to date with 0.1.97
481
+ - Catch `ECONNREFUSED` errors in Node clients to withstand server outages
482
+ - Refactor the `Server` internals
316
483
 
317
484
 
318
485
  ### 0.3.2 / 2010-04-04
319
486
 
320
- * Fix problems with JSON serialization when Prototype, MooTools present
321
- * Make the client reconnect if it doesn't hear from the server after a timeout
322
- * Stop JavaScript server returning `NaN` for `advice.interval`
323
- * Make Ruby server return an integer for `advice.interval`
324
- * Ensure EventMachine is running before handling messages
325
- * Handle `data` and `end` events properly in Node HTTP API
326
- * Switch to `application/json` for content types and stop using querystring format in POST bodies
327
- * Respond to any URL path under the mount point, not just the exact match
487
+ - Fix problems with JSON serialization when Prototype, MooTools present
488
+ - Make the client reconnect if it doesn't hear from the server after a timeout
489
+ - Stop JavaScript server returning `NaN` for `advice.interval`
490
+ - Make Ruby server return an integer for `advice.interval`
491
+ - Ensure EventMachine is running before handling messages
492
+ - Handle `data` and `end` events properly in Node HTTP API
493
+ - Switch to `application/json` for content types and stop using querystring
494
+ format in POST bodies
495
+ - Respond to any URL path under the mount point, not just the exact match
328
496
 
329
497
 
330
498
  ### 0.3.1 / 2010-03-09
331
499
 
332
- * Pass client down through Rack stack as `env['faye.client']`
333
- * Refactor some JavaScript internals to mirror Ruby codebase
500
+ - Pass client down through Rack stack as `env['faye.client']`
501
+ - Refactor some JavaScript internals to mirror Ruby codebase
334
502
 
335
503
 
336
504
  ### 0.3.0 / 2010-03-01
337
505
 
338
- * Add server-side clients for Node.js and Ruby environments
339
- * Clients support both HTTP and in-process transports
340
- * Fix ID generation in JavaScript version to 128-bit IDs
341
- * Fix bug in interpretation of `**` channel wildcard
342
- * Users don't have to call `#connect()` on clients any more
343
- * Fix timeout race conditions that were killing active connections
344
- * Support new Node APIs from 0.1.29.
506
+ - Add server-side clients for Node.js and Ruby environments
507
+ - Clients support both HTTP and in-process transports
508
+ - Fix ID generation in JavaScript version to 128-bit IDs
509
+ - Fix bug in interpretation of `**` channel wildcard
510
+ - Users don't have to call `#connect()` on clients any more
511
+ - Fix timeout race conditions that were killing active connections
512
+ - Support new Node APIs from 0.1.29.
345
513
 
346
514
 
347
515
  ### 0.2.2 / 2010-02-10
348
516
 
349
- * Kick out requests with malformed JSON as 400s
517
+ - Kick out requests with malformed JSON as 400s
350
518
 
351
519
 
352
520
  ### 0.2.1 / 2010-02-04
353
521
 
354
- * Fix server-side flushing of callback-polling connections
355
- * Backend can be used cross-domain if running on Node or Thin
522
+ - Fix server-side flushing of callback-polling connections
523
+ - Backend can be used cross-domain if running on Node or Thin
356
524
 
357
525
 
358
526
  ### 0.2.0 / 2010-02-02
359
527
 
360
- * Port server to JavaScript with an adapter for Node.js
361
- * Support Thin's async responses in the Ruby version for complete non-blocking
362
- * Fix some minor client-side bugs in transport choice
528
+ - Port server to JavaScript with an adapter for Node.js
529
+ - Support Thin's async responses in the Ruby version for complete non-blocking
530
+ - Fix some minor client-side bugs in transport choice
363
531
 
364
532
 
365
533
  ### 0.1.1 / 2009-07-26
366
534
 
367
- * Fix a broken client build
535
+ - Fix a broken client build
368
536
 
369
537
 
370
538
  ### 0.1.0 / 2009-06-15
371
539
 
372
- * Ruby Bayeux server and Rack adapter
373
- * Internally evented using EventMachine, web frontend blocks
374
- * JavaScript client with `long-polling` and `callback-polling`
540
+ - Ruby Bayeux server and Rack adapter
541
+ - Internally evented using EventMachine, web frontend blocks
542
+ - JavaScript client with `long-polling` and `callback-polling`