isomorfeus-transport 2.0.22 → 2.1.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.
- checksums.yaml +4 -4
- data/lib/isomorfeus/transport/config.rb +6 -6
- data/lib/isomorfeus/transport/version.rb +1 -1
- data/lib/isomorfeus/transport.rb +12 -19
- data/lib/isomorfeus-transport.rb +5 -2
- 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 +10 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3ca90b01b8e0190145be6337a5d426a696d14fdf930d27459580c68b1c79f7e0
|
4
|
+
data.tar.gz: 96a02a4bc0c826f8099464c2186c4d43465a22d23acbc7b78427e765453f47b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb3a558d2a4932891262951936b0bfcd58dca2c76dca299bc4d289847070b1fac98deece4714424b727dc6d9545ca500c01a367b057c0eef89c45ddea08b9190
|
7
|
+
data.tar.gz: 43d8418632c1e4b848b16146f2e4367e5c0a80ba7e8d2d78a0699942206206bcf4630437733a4e4405440e332da16a9fa2740fad9eaa91a7ebfdc16693106221
|
@@ -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
|
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'
|
@@ -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.0
|
4
|
+
version: 2.1.0
|
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-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -86,14 +86,14 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.14.
|
89
|
+
version: 0.14.10
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.14.
|
96
|
+
version: 0.14.10
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: isomorfeus-hamster
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,28 +114,28 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 10.6.
|
117
|
+
version: 10.6.34
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 10.6.
|
124
|
+
version: 10.6.34
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: isomorfeus-policy
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - '='
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: 2.0
|
131
|
+
version: 2.1.0
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - '='
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: 2.0
|
138
|
+
version: 2.1.0
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: isomorfeus-redux
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -170,14 +170,14 @@ dependencies:
|
|
170
170
|
requirements:
|
171
171
|
- - '='
|
172
172
|
- !ruby/object:Gem::Version
|
173
|
-
version: 2.0
|
173
|
+
version: 2.1.0
|
174
174
|
type: :development
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
178
|
- - '='
|
179
179
|
- !ruby/object:Gem::Version
|
180
|
-
version: 2.0
|
180
|
+
version: 2.1.0
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
182
|
name: rake
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|