isomorfeus-transport 2.0.22 → 2.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/isomorfeus/transport/compressor_rack.rb +140 -0
- data/lib/isomorfeus/transport/config.rb +6 -6
- data/lib/isomorfeus/transport/middlewares.rb +2 -2
- data/lib/isomorfeus/transport/rack_middleware.rb +8 -3
- data/lib/isomorfeus/transport/version.rb +1 -1
- data/lib/isomorfeus/transport.rb +12 -19
- data/lib/isomorfeus-transport.rb +15 -3
- data/node_modules/.package-lock.json +3 -3
- data/node_modules/ws/lib/websocket-server.js +4 -1
- data/node_modules/ws/lib/websocket.js +39 -0
- data/node_modules/ws/package.json +1 -1
- data/package.json +1 -1
- metadata +73 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 61b2633519cf813c85bc85e891ccbad116292cb0aeb49ed03f6cd4eba35b219e
|
4
|
+
data.tar.gz: 80400343ed8826cab18f81f66a4077142efaec2e8e09fc34c6fa66aec75ef9dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d328883366c5790c5e3fb402b7e38aecddf6bc03190dcd5d50e215205d20b91618a1e9f373be9d477c77604b88b5f755b3c6628c6b07e86e942eda5801b67ec
|
7
|
+
data.tar.gz: ba62cfb0aaa728537c0f01409a576f9f09a2c6e8a392d224c82e5cdce85c6d0c24f74e0e4575eb3aa17bf392cd133489307ea9b16104f262abb6d5a93fdd3da6
|
@@ -0,0 +1,140 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Isomorfeus
|
4
|
+
module Transport
|
5
|
+
class CompressorRack
|
6
|
+
C_ENCODINGS = %w[br gzip identity].freeze
|
7
|
+
|
8
|
+
def initialize(app, options = {})
|
9
|
+
@app = app
|
10
|
+
end
|
11
|
+
|
12
|
+
def call(env)
|
13
|
+
status, headers, body = @app.call(env)
|
14
|
+
headers = Rack::Utils::HeaderHash[headers]
|
15
|
+
|
16
|
+
|
17
|
+
unless should_deflate?(env, status, headers, body)
|
18
|
+
return [status, headers, body]
|
19
|
+
end
|
20
|
+
|
21
|
+
request = Rack::Request.new(env)
|
22
|
+
|
23
|
+
encoding = Rack::Utils.select_best_encoding(C_ENCODINGS,
|
24
|
+
request.accept_encoding)
|
25
|
+
|
26
|
+
vary = headers["Vary"].to_s.split(",").map(&:strip)
|
27
|
+
unless vary.include?("*") || vary.include?("Accept-Encoding")
|
28
|
+
headers["Vary"] = vary.push("Accept-Encoding").join(",")
|
29
|
+
end
|
30
|
+
|
31
|
+
case encoding
|
32
|
+
when "br"
|
33
|
+
headers['Content-Encoding'] = "br"
|
34
|
+
headers.delete(Rack::CONTENT_LENGTH)
|
35
|
+
[status, headers, BrotliStream.new(body, @sync)]
|
36
|
+
when "gzip"
|
37
|
+
headers['Content-Encoding'] = "gzip"
|
38
|
+
headers.delete(Rack::CONTENT_LENGTH)
|
39
|
+
mtime = headers["Last-Modified"]
|
40
|
+
mtime = Time.httpdate(mtime).to_i if mtime
|
41
|
+
[status, headers, GzipStream.new(body, mtime, @sync)]
|
42
|
+
when "identity"
|
43
|
+
[status, headers, body]
|
44
|
+
when nil
|
45
|
+
message = "An acceptable encoding for the requested resource #{request.fullpath} could not be found."
|
46
|
+
bp = Rack::BodyProxy.new([message]) { body.close if body.respond_to?(:close) }
|
47
|
+
[406, { CONTENT_TYPE => "text/plain", CONTENT_LENGTH => message.length.to_s }, bp]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
class BrotliStream
|
52
|
+
BUFFER_LENGTH = 128 * 1_024
|
53
|
+
|
54
|
+
def initialize(body, sync)
|
55
|
+
@body = body
|
56
|
+
@sync
|
57
|
+
end
|
58
|
+
|
59
|
+
def each(&block)
|
60
|
+
@writer = block
|
61
|
+
brotli = ::Brotli::Writer.new(self, quality: 5)
|
62
|
+
|
63
|
+
if @body.is_a? ::File
|
64
|
+
while part = @body.read(BUFFER_LENGTH)
|
65
|
+
brotli.write(part)
|
66
|
+
brotli.flush if @sync
|
67
|
+
end
|
68
|
+
else
|
69
|
+
@body.each do |part|
|
70
|
+
next if part.empty?
|
71
|
+
brotli.write(part)
|
72
|
+
brotli.flush if @sync
|
73
|
+
end
|
74
|
+
end
|
75
|
+
ensure
|
76
|
+
brotli.close
|
77
|
+
end
|
78
|
+
|
79
|
+
def write(data)
|
80
|
+
@writer.call(data)
|
81
|
+
end
|
82
|
+
|
83
|
+
def close
|
84
|
+
@body.close if @body.respond_to?(:close)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
class GzipStream
|
89
|
+
BUFFER_LENGTH = 128 * 1_024
|
90
|
+
|
91
|
+
def initialize(body, mtime, sync)
|
92
|
+
@body = body
|
93
|
+
@mtime = mtime
|
94
|
+
@sync = sync
|
95
|
+
end
|
96
|
+
|
97
|
+
def each(&block)
|
98
|
+
@writer = block
|
99
|
+
gzip = ::Zlib::GzipWriter.new(self)
|
100
|
+
gzip.mtime = @mtime if @mtime
|
101
|
+
|
102
|
+
if @body.is_a? ::File
|
103
|
+
while part = @body.read(BUFFER_LENGTH)
|
104
|
+
gzip.write(part)
|
105
|
+
gzip.flush if @sync
|
106
|
+
end
|
107
|
+
else
|
108
|
+
@body.each do |part|
|
109
|
+
next if part.empty?
|
110
|
+
gzip.write(part)
|
111
|
+
gzip.flush if @sync
|
112
|
+
end
|
113
|
+
end
|
114
|
+
ensure
|
115
|
+
gzip.close
|
116
|
+
end
|
117
|
+
|
118
|
+
def write(data)
|
119
|
+
@writer.call(data)
|
120
|
+
end
|
121
|
+
|
122
|
+
def close
|
123
|
+
@body.close if @body.respond_to?(:close)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
private
|
128
|
+
|
129
|
+
def should_deflate?(env, status, headers, body)
|
130
|
+
if Rack::Utils::STATUS_WITH_NO_ENTITY_BODY.key?(status.to_i) ||
|
131
|
+
/\bno-transform\b/.match?(headers['Cache-Control'].to_s) ||
|
132
|
+
headers['Content-Encoding']&.!~(/\bidentity\b/)
|
133
|
+
return false
|
134
|
+
end
|
135
|
+
return false if headers[Rack::CONTENT_LENGTH] == '0'
|
136
|
+
true
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
@@ -78,8 +78,8 @@ module Isomorfeus
|
|
78
78
|
valid_channel_class_names.include?(class_name)
|
79
79
|
end
|
80
80
|
|
81
|
-
def add_middleware(
|
82
|
-
Isomorfeus.middlewares
|
81
|
+
def add_middleware(new_middleware)
|
82
|
+
Isomorfeus.middlewares.push(new_middleware) unless Isomorfeus.middlewares.include?(new_middleware)
|
83
83
|
end
|
84
84
|
|
85
85
|
def insert_middleware_after(existing_middleware, new_middleware)
|
@@ -88,7 +88,7 @@ module Isomorfeus
|
|
88
88
|
if index_of_existing
|
89
89
|
Isomorfeus.middlewares.insert(index_of_existing + 1, new_middleware)
|
90
90
|
else
|
91
|
-
Isomorfeus.middlewares
|
91
|
+
Isomorfeus.middlewares.push(new_middleware)
|
92
92
|
end
|
93
93
|
end
|
94
94
|
end
|
@@ -99,13 +99,13 @@ module Isomorfeus
|
|
99
99
|
if index_of_existing
|
100
100
|
Isomorfeus.middlewares.insert(index_of_existing, new_middleware)
|
101
101
|
else
|
102
|
-
Isomorfeus.middlewares
|
102
|
+
Isomorfeus.middlewares.push(new_middleware)
|
103
103
|
end
|
104
104
|
end
|
105
105
|
end
|
106
106
|
|
107
107
|
def middlewares
|
108
|
-
@middlewares ||=
|
108
|
+
@middlewares ||= []
|
109
109
|
end
|
110
110
|
|
111
111
|
def valid_handler_class_names
|
@@ -170,7 +170,7 @@ module Isomorfeus
|
|
170
170
|
end
|
171
171
|
|
172
172
|
self.session_store_init do
|
173
|
-
store_path = File.expand_path(File.join(Isomorfeus.root, '
|
173
|
+
store_path = File.expand_path(File.join(Isomorfeus.root, 'storage', Isomorfeus.env, 'session_store'))
|
174
174
|
Isomorfeus::Transport::HamsterSessionStore.new(store_path)
|
175
175
|
end
|
176
176
|
end
|
@@ -2,9 +2,9 @@ module Isomorfeus
|
|
2
2
|
module Transport
|
3
3
|
module Middlewares
|
4
4
|
def use_isomorfeus_middlewares
|
5
|
-
puts "Isomorfeus is using the following middlewares:"
|
5
|
+
puts "Isomorfeus is using the following middlewares:" if Isomorfeus.production?
|
6
6
|
Isomorfeus.middlewares.each do |isomorfeus_middleware|
|
7
|
-
puts "#{isomorfeus_middleware}"
|
7
|
+
puts "#{isomorfeus_middleware}" if Isomorfeus.production?
|
8
8
|
use isomorfeus_middleware
|
9
9
|
end
|
10
10
|
end
|
@@ -70,9 +70,14 @@ module Isomorfeus
|
|
70
70
|
result
|
71
71
|
end
|
72
72
|
rescue Exception => e
|
73
|
-
#
|
74
|
-
|
75
|
-
|
73
|
+
e_text = "#{e.class}: #{e.message}\n #{e.backtrace.join("\n")}"
|
74
|
+
STDERR.puts e_text
|
75
|
+
message = if Isomorfeus.production?
|
76
|
+
"<html><head><title>Error</title></head><body>Sorry, a error occured!</body></html>"
|
77
|
+
else
|
78
|
+
"<html><head><title>#{e.class}</title></head><body><pre>#{e_text}</pre></body></html>"
|
79
|
+
end
|
80
|
+
return [500, { Rack::CONTENT_TYPE => "text/html", Rack::CONTENT_LENGTH => message.length.to_s }, [message]]
|
76
81
|
end
|
77
82
|
end
|
78
83
|
end
|
data/lib/isomorfeus/transport.rb
CHANGED
@@ -6,7 +6,6 @@ module Isomorfeus
|
|
6
6
|
|
7
7
|
def init
|
8
8
|
@socket = nil
|
9
|
-
@initialized = false
|
10
9
|
promise_connect if Isomorfeus.on_browser? || Isomorfeus.on_mobile?
|
11
10
|
true
|
12
11
|
end
|
@@ -42,23 +41,16 @@ module Isomorfeus
|
|
42
41
|
Isomorfeus::Transport::ClientProcessor.process(json_hash)
|
43
42
|
end
|
44
43
|
@socket.on_open do |event|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
init_promises = []
|
54
|
-
Isomorfeus.transport_init_class_names.each do |constant|
|
55
|
-
result = constant.constantize.send(:init)
|
56
|
-
init_promises << result if result.class == Promise
|
57
|
-
end
|
58
|
-
if init_promises.size > 0
|
59
|
-
Promise.when(*init_promises).then { promise.resolve(true) }
|
60
|
-
end
|
44
|
+
open_promise = Promise.new.resolve(true)
|
45
|
+
Isomorfeus.transport_init_class_names.each do |constant|
|
46
|
+
result_promise = constant.constantize.send(:init)
|
47
|
+
open_promise.then { result_promise } if result_promise.class == Promise
|
48
|
+
end
|
49
|
+
requests_in_progress[:requests].each_key do |request|
|
50
|
+
agent = get_agent_for_request_in_progress(request)
|
51
|
+
open_promise.then { promise_send_request(request) } if agent && !agent.sent
|
61
52
|
end
|
53
|
+
open_promise.then { promise.resolve(true) }
|
62
54
|
end
|
63
55
|
promise
|
64
56
|
end
|
@@ -100,14 +92,15 @@ module Isomorfeus
|
|
100
92
|
begin
|
101
93
|
@socket.send(`JSON.stringify(#{{request: { agent_ids: { agent.id => request }}}.to_n})`)
|
102
94
|
agent.sent = true
|
103
|
-
after(Isomorfeus.on_ssr? ?
|
95
|
+
after(Isomorfeus.on_ssr? ? 5000 : 20000) do
|
104
96
|
unless agent.promise.realized?
|
105
97
|
agent.promise.reject({agent_response: { error: 'Request timeout!' }, full_response: {}})
|
106
98
|
end
|
107
99
|
end
|
108
100
|
rescue
|
109
101
|
@socket.close
|
110
|
-
after
|
102
|
+
after (Isomorfeus.on_ssr? ? 10 : 3000) do
|
103
|
+
@reconnect = true
|
111
104
|
Isomorfeus::Transport.promise_connect
|
112
105
|
end
|
113
106
|
end
|
data/lib/isomorfeus-transport.rb
CHANGED
@@ -8,12 +8,15 @@ if RUBY_ENGINE == 'opal'
|
|
8
8
|
require 'isomorfeus/transport/client_processor'
|
9
9
|
require 'isomorfeus/transport/websocket_client'
|
10
10
|
require 'isomorfeus/transport'
|
11
|
-
|
11
|
+
|
12
12
|
require 'lucid_channel/mixin'
|
13
13
|
require 'lucid_channel/base'
|
14
14
|
Isomorfeus.zeitwerk.push_dir('channels')
|
15
15
|
Isomorfeus.add_client_init_class_name('Isomorfeus::Transport')
|
16
|
-
|
16
|
+
if Isomorfeus.on_ssr?
|
17
|
+
require 'isomorfeus/transport/ssr_login'
|
18
|
+
Isomorfeus.add_transport_init_class_name('Isomorfeus::Transport::SsrLogin')
|
19
|
+
end
|
17
20
|
else
|
18
21
|
require 'base64'
|
19
22
|
require 'digest'
|
@@ -23,7 +26,14 @@ else
|
|
23
26
|
require 'ostruct'
|
24
27
|
require 'socket'
|
25
28
|
require 'sorted_set'
|
29
|
+
require 'time'
|
30
|
+
require 'brotli'
|
31
|
+
require 'zlib'
|
26
32
|
require 'oj'
|
33
|
+
require 'rack'
|
34
|
+
require 'rack/body_proxy'
|
35
|
+
require 'rack/request'
|
36
|
+
require 'rack/utils'
|
27
37
|
require 'active_support'
|
28
38
|
require 'isomorfeus-asset-manager'
|
29
39
|
require 'isomorfeus-hamster'
|
@@ -41,10 +51,12 @@ else
|
|
41
51
|
require 'isomorfeus/transport/websocket_client'
|
42
52
|
require 'isomorfeus/transport'
|
43
53
|
require 'isomorfeus/transport/rack_middleware'
|
54
|
+
require 'isomorfeus/transport/compressor_rack'
|
44
55
|
require 'isomorfeus/transport/middlewares'
|
45
56
|
|
46
|
-
Isomorfeus.add_middleware(Isomorfeus::Transport::RackMiddleware)
|
47
57
|
Isomorfeus.add_middleware(Isomorfeus::AssetManager::RackMiddleware)
|
58
|
+
Isomorfeus.add_middleware(Isomorfeus::Transport::CompressorRack)
|
59
|
+
Isomorfeus.add_middleware(Isomorfeus::Transport::RackMiddleware)
|
48
60
|
|
49
61
|
require 'lucid_handler/mixin'
|
50
62
|
require 'lucid_handler/base'
|
@@ -4,9 +4,9 @@
|
|
4
4
|
"requires": true,
|
5
5
|
"packages": {
|
6
6
|
"node_modules/ws": {
|
7
|
-
"version": "8.
|
8
|
-
"resolved": "https://registry.npmjs.org/ws/-/ws-8.
|
9
|
-
"integrity": "sha512-
|
7
|
+
"version": "8.5.0",
|
8
|
+
"resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz",
|
9
|
+
"integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==",
|
10
10
|
"engines": {
|
11
11
|
"node": ">=10.0.0"
|
12
12
|
},
|
@@ -49,6 +49,8 @@ class WebSocketServer extends EventEmitter {
|
|
49
49
|
* @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or
|
50
50
|
* not to skip UTF-8 validation for text and close messages
|
51
51
|
* @param {Function} [options.verifyClient] A hook to reject connections
|
52
|
+
* @param {Function} [options.WebSocket=WebSocket] Specifies the `WebSocket`
|
53
|
+
* class to use. It must be the `WebSocket` class or class that extends it
|
52
54
|
* @param {Function} [callback] A listener for the `listening` event
|
53
55
|
*/
|
54
56
|
constructor(options, callback) {
|
@@ -67,6 +69,7 @@ class WebSocketServer extends EventEmitter {
|
|
67
69
|
host: null,
|
68
70
|
path: null,
|
69
71
|
port: null,
|
72
|
+
WebSocket,
|
70
73
|
...options
|
71
74
|
};
|
72
75
|
|
@@ -356,7 +359,7 @@ class WebSocketServer extends EventEmitter {
|
|
356
359
|
`Sec-WebSocket-Accept: ${digest}`
|
357
360
|
];
|
358
361
|
|
359
|
-
const ws = new WebSocket(null);
|
362
|
+
const ws = new this.options.WebSocket(null);
|
360
363
|
|
361
364
|
if (protocols.size) {
|
362
365
|
//
|
@@ -766,6 +766,45 @@ function initAsClient(websocket, address, protocols, options) {
|
|
766
766
|
opts.path = parts[1];
|
767
767
|
}
|
768
768
|
|
769
|
+
if (opts.followRedirects) {
|
770
|
+
if (websocket._redirects === 0) {
|
771
|
+
websocket._originalHost = parsedUrl.host;
|
772
|
+
|
773
|
+
const headers = options && options.headers;
|
774
|
+
|
775
|
+
//
|
776
|
+
// Shallow copy the user provided options so that headers can be changed
|
777
|
+
// without mutating the original object.
|
778
|
+
//
|
779
|
+
options = { ...options, headers: {} };
|
780
|
+
|
781
|
+
if (headers) {
|
782
|
+
for (const [key, value] of Object.entries(headers)) {
|
783
|
+
options.headers[key.toLowerCase()] = value;
|
784
|
+
}
|
785
|
+
}
|
786
|
+
} else if (parsedUrl.host !== websocket._originalHost) {
|
787
|
+
//
|
788
|
+
// Match curl 7.77.0 behavior and drop the following headers. These
|
789
|
+
// headers are also dropped when following a redirect to a subdomain.
|
790
|
+
//
|
791
|
+
delete opts.headers.authorization;
|
792
|
+
delete opts.headers.cookie;
|
793
|
+
delete opts.headers.host;
|
794
|
+
opts.auth = undefined;
|
795
|
+
}
|
796
|
+
|
797
|
+
//
|
798
|
+
// Match curl 7.77.0 behavior and make the first `Authorization` header win.
|
799
|
+
// If the `Authorization` header is set, then there is nothing to do as it
|
800
|
+
// will take precedence.
|
801
|
+
//
|
802
|
+
if (opts.auth && !options.headers.authorization) {
|
803
|
+
options.headers.authorization =
|
804
|
+
'Basic ' + Buffer.from(opts.auth).toString('base64');
|
805
|
+
}
|
806
|
+
}
|
807
|
+
|
769
808
|
let req = (websocket._req = get(opts));
|
770
809
|
|
771
810
|
if (opts.timeout) {
|
data/package.json
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: isomorfeus-transport
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Biedermann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-02-
|
11
|
+
date: 2022-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 3.1.16
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: brotli
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.4.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.4.0
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: isomorfeus-iodine
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,70 +100,98 @@ dependencies:
|
|
86
100
|
requirements:
|
87
101
|
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.14.
|
103
|
+
version: 0.14.17
|
90
104
|
type: :runtime
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.14.
|
110
|
+
version: 0.14.17
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: isomorfeus-hamster
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
115
|
- - "~>"
|
102
116
|
- !ruby/object:Gem::Version
|
103
|
-
version: 0.6.
|
117
|
+
version: 0.6.6
|
104
118
|
type: :runtime
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
122
|
- - "~>"
|
109
123
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.6.
|
124
|
+
version: 0.6.6
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: isomorfeus-preact
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
114
128
|
requirements:
|
115
129
|
- - "~>"
|
116
130
|
- !ruby/object:Gem::Version
|
117
|
-
version: 10.6.
|
131
|
+
version: 10.6.40
|
118
132
|
type: :runtime
|
119
133
|
prerelease: false
|
120
134
|
version_requirements: !ruby/object:Gem::Requirement
|
121
135
|
requirements:
|
122
136
|
- - "~>"
|
123
137
|
- !ruby/object:Gem::Version
|
124
|
-
version: 10.6.
|
138
|
+
version: 10.6.40
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: isomorfeus-policy
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
128
142
|
requirements:
|
129
143
|
- - '='
|
130
144
|
- !ruby/object:Gem::Version
|
131
|
-
version: 2.
|
145
|
+
version: 2.2.1
|
132
146
|
type: :runtime
|
133
147
|
prerelease: false
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
135
149
|
requirements:
|
136
150
|
- - '='
|
137
151
|
- !ruby/object:Gem::Version
|
138
|
-
version: 2.
|
152
|
+
version: 2.2.1
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: isomorfeus-redux
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
142
156
|
requirements:
|
143
157
|
- - "~>"
|
144
158
|
- !ruby/object:Gem::Version
|
145
|
-
version: 4.1.
|
159
|
+
version: 4.1.18
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: 4.1.18
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: isomorfeus-speednode
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 0.5.2
|
146
174
|
type: :runtime
|
147
175
|
prerelease: false
|
148
176
|
version_requirements: !ruby/object:Gem::Requirement
|
149
177
|
requirements:
|
150
178
|
- - "~>"
|
151
179
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
180
|
+
version: 0.5.2
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: rack
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - "~>"
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: 2.2.3
|
188
|
+
type: :runtime
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - "~>"
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: 2.2.3
|
153
195
|
- !ruby/object:Gem::Dependency
|
154
196
|
name: sorted_set
|
155
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,20 +206,34 @@ dependencies:
|
|
164
206
|
- - "~>"
|
165
207
|
- !ruby/object:Gem::Version
|
166
208
|
version: 1.0.3
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: zlib
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - "~>"
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: 2.1.1
|
216
|
+
type: :runtime
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - "~>"
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: 2.1.1
|
167
223
|
- !ruby/object:Gem::Dependency
|
168
224
|
name: isomorfeus
|
169
225
|
requirement: !ruby/object:Gem::Requirement
|
170
226
|
requirements:
|
171
227
|
- - '='
|
172
228
|
- !ruby/object:Gem::Version
|
173
|
-
version: 2.
|
229
|
+
version: 2.2.1
|
174
230
|
type: :development
|
175
231
|
prerelease: false
|
176
232
|
version_requirements: !ruby/object:Gem::Requirement
|
177
233
|
requirements:
|
178
234
|
- - '='
|
179
235
|
- !ruby/object:Gem::Version
|
180
|
-
version: 2.
|
236
|
+
version: 2.2.1
|
181
237
|
- !ruby/object:Gem::Dependency
|
182
238
|
name: rake
|
183
239
|
requirement: !ruby/object:Gem::Requirement
|
@@ -198,14 +254,14 @@ dependencies:
|
|
198
254
|
requirements:
|
199
255
|
- - "~>"
|
200
256
|
- !ruby/object:Gem::Version
|
201
|
-
version: 3.
|
257
|
+
version: 3.11.0
|
202
258
|
type: :development
|
203
259
|
prerelease: false
|
204
260
|
version_requirements: !ruby/object:Gem::Requirement
|
205
261
|
requirements:
|
206
262
|
- - "~>"
|
207
263
|
- !ruby/object:Gem::Version
|
208
|
-
version: 3.
|
264
|
+
version: 3.11.0
|
209
265
|
description: Channels, authetication and various transport options for Isomorfeus.
|
210
266
|
email: jan@kursator.de
|
211
267
|
executables: []
|
@@ -217,6 +273,7 @@ files:
|
|
217
273
|
- lib/isomorfeus-transport.rb
|
218
274
|
- lib/isomorfeus/transport.rb
|
219
275
|
- lib/isomorfeus/transport/client_processor.rb
|
276
|
+
- lib/isomorfeus/transport/compressor_rack.rb
|
220
277
|
- lib/isomorfeus/transport/config.rb
|
221
278
|
- lib/isomorfeus/transport/hamster_session_store.rb
|
222
279
|
- lib/isomorfeus/transport/handler/authentication_handler.rb
|