anycable-core 1.2.0 → 1.2.3
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/CHANGELOG.md +14 -0
- data/MIT-LICENSE +1 -1
- data/README.md +0 -1
- data/lib/anycable/broadcast_adapters/redis.rb +1 -1
- data/lib/anycable/cli.rb +9 -1
- data/lib/anycable/config.rb +3 -2
- data/lib/anycable/grpc/server.rb +4 -0
- data/lib/anycable/health_server.rb +9 -1
- data/lib/anycable/middlewares/env_sid.rb +15 -0
- data/lib/anycable/rpc.rb +7 -0
- data/lib/anycable/socket.rb +6 -4
- data/lib/anycable/version.rb +1 -1
- data/lib/anycable.rb +2 -1
- data/sig/anycable/broadcast_adapters/base.rbs +18 -0
- data/sig/anycable/broadcast_adapters/http.rbs +31 -0
- data/sig/anycable/broadcast_adapters/redis.rbs +10 -0
- data/sig/anycable/grpc/config.rbs +36 -0
- data/sig/anycable/grpc/handler.rbs +11 -0
- data/sig/anycable/grpc/rpc_services_pb.rbs +8 -0
- data/sig/anycable/grpc/server.rbs +20 -0
- data/sig/anycable/health_server.rbs +6 -2
- data/sig/anycable/middlewares/check_version.rbs +10 -0
- data/sig/anycable/middlewares/env_sid.rbs +6 -0
- data/sig/anycable/middlewares/exceptions.rbs +10 -0
- data/sig/anycable/rpc/handler.rbs +24 -0
- data/sig/anycable/rpc/handlers/command.rbs +9 -0
- data/sig/anycable/rpc/handlers/connect.rbs +9 -0
- data/sig/anycable/rpc/handlers/disconnect.rbs +9 -0
- data/sig/anycable/rpc.rbs +21 -14
- data/sig/anycable/socket.rbs +3 -3
- data/sig/anycable.rbs +5 -1
- metadata +19 -18
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3ae8ddced1365e350a744545ed12da6e42fffbaa3f58d40b0f9d83598077a88a
|
|
4
|
+
data.tar.gz: 6637778d168c99c19a760a635455496ee121dfbbe0fd2472a3a29c4311ce3f7d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3446218216fc8c7b76a0ddd249a8976afe8f9ddf83cdd4714bc29a94a2037caa066c5cae02bcb4a8109fd64555f80b871a4c718d059ec6382e814e9b7cc11ff0
|
|
7
|
+
data.tar.gz: 3711df758ce8d1963f158371f5c80a06757ffd3b392acf28cbec79652abe6d61e821800ddd6f2054310d2082a651263bcbe56bfb56a5af11dfc1bbdbe40044e8
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
## master
|
|
4
4
|
|
|
5
|
+
## 1.2.3 (2022-04-20)
|
|
6
|
+
|
|
7
|
+
- Pass unique connection id (_session id_) in the `anycable.sid` Rack env field. ([@palkan][])
|
|
8
|
+
|
|
9
|
+
## 1.2.2 (2022-03-04)
|
|
10
|
+
|
|
11
|
+
- Allow Ruby 2.6.
|
|
12
|
+
|
|
13
|
+
## 1.2.1 (2022-02-21)
|
|
14
|
+
|
|
15
|
+
- Fix RBS signature. ([@palkan][])
|
|
16
|
+
|
|
17
|
+
- Add empty (`''`) service to gRPC health check as "NOT_SERVING". ([@palkan][])
|
|
18
|
+
|
|
5
19
|
## 1.2.0 (2021-12-21) 🎄
|
|
6
20
|
|
|
7
21
|
- Drop Ruby 2.6 support.
|
data/MIT-LICENSE
CHANGED
data/README.md
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
[](https://rubygems.org/gems/anycable)
|
|
2
2
|
[](https://github.com/anycable/anycable/actions)
|
|
3
|
-
[](https://gitter.im/anycable/Lobby)
|
|
4
3
|
[](https://docs.anycable.io/v1)
|
|
5
4
|
|
|
6
5
|
# AnyCable
|
data/lib/anycable/cli.rb
CHANGED
|
@@ -65,6 +65,8 @@ module AnyCable
|
|
|
65
65
|
|
|
66
66
|
check_version!
|
|
67
67
|
|
|
68
|
+
configure_middleware!
|
|
69
|
+
|
|
68
70
|
@server = AnyCable.server_builder.call(config)
|
|
69
71
|
|
|
70
72
|
# Make sure middlewares are not adding after server has started
|
|
@@ -119,7 +121,7 @@ module AnyCable
|
|
|
119
121
|
def wait_till_terminated
|
|
120
122
|
self_read = setup_signals
|
|
121
123
|
|
|
122
|
-
while readable_io = IO.select([self_read]) # rubocop:disable Lint/AssignmentInCondition
|
|
124
|
+
while readable_io = IO.select([self_read]) # rubocop:disable Lint/AssignmentInCondition,Lint/IncompatibleIoSelectWithFiberScheduler
|
|
123
125
|
signal = readable_io.first[0].gets.strip
|
|
124
126
|
raise Interrupt, "SIG#{signal} received"
|
|
125
127
|
end
|
|
@@ -265,6 +267,12 @@ module AnyCable
|
|
|
265
267
|
)
|
|
266
268
|
end
|
|
267
269
|
|
|
270
|
+
def configure_middleware!
|
|
271
|
+
if config.sid_header_enabled?
|
|
272
|
+
AnyCable.middleware.use(AnyCable::Middlewares::EnvSid)
|
|
273
|
+
end
|
|
274
|
+
end
|
|
275
|
+
|
|
268
276
|
def parse_gem_options!(args)
|
|
269
277
|
config.parse_options!(args)
|
|
270
278
|
rescue OptionParser::InvalidOption => e
|
data/lib/anycable/config.rb
CHANGED
|
@@ -43,7 +43,8 @@ module AnyCable
|
|
|
43
43
|
http_health_path: "/health",
|
|
44
44
|
|
|
45
45
|
### Misc options
|
|
46
|
-
version_check_enabled: true
|
|
46
|
+
version_check_enabled: true,
|
|
47
|
+
sid_header_enabled: true
|
|
47
48
|
)
|
|
48
49
|
|
|
49
50
|
if respond_to?(:coerce_types)
|
|
@@ -74,7 +75,7 @@ module AnyCable
|
|
|
74
75
|
|
|
75
76
|
HTTP HEALTH CHECKER
|
|
76
77
|
--http-health-port=port Port to run HTTP health server on, default: <none> (disabled)
|
|
77
|
-
--http-health-path=path Endpoint to
|
|
78
|
+
--http-health-path=path Endpoint to serve health checks, default: "/health"
|
|
78
79
|
|
|
79
80
|
REDIS PUB/SUB
|
|
80
81
|
--redis-url=url Redis URL for pub/sub, default: REDIS_URL or "redis://localhost:6379/5"
|
data/lib/anycable/grpc/server.rb
CHANGED
|
@@ -96,6 +96,10 @@ module AnyCable
|
|
|
96
96
|
"anycable.RPC",
|
|
97
97
|
Grpc::Health::V1::HealthCheckResponse::ServingStatus::SERVING
|
|
98
98
|
)
|
|
99
|
+
health_checker.add_status(
|
|
100
|
+
"",
|
|
101
|
+
Grpc::Health::V1::HealthCheckResponse::ServingStatus::NOT_SERVING
|
|
102
|
+
)
|
|
99
103
|
health_checker
|
|
100
104
|
end
|
|
101
105
|
end
|
|
@@ -65,7 +65,15 @@ module AnyCable
|
|
|
65
65
|
AccessLog: []
|
|
66
66
|
).tap do |http_server|
|
|
67
67
|
http_server.mount_proc path do |_, res|
|
|
68
|
-
|
|
68
|
+
# Replace with mass assignment as soon as Steep added support
|
|
69
|
+
# https://github.com/soutaro/steep/issues/424
|
|
70
|
+
if server.running?
|
|
71
|
+
res.status = SUCCESS_RESPONSE.first
|
|
72
|
+
res.body = SUCCESS_RESPONSE.last
|
|
73
|
+
else
|
|
74
|
+
res.status = FAILURE_RESPONSE.first
|
|
75
|
+
res.body = FAILURE_RESPONSE.last
|
|
76
|
+
end
|
|
69
77
|
end
|
|
70
78
|
end
|
|
71
79
|
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module AnyCable
|
|
4
|
+
module Middlewares
|
|
5
|
+
# Set sid for request.env from metadata
|
|
6
|
+
class EnvSid < AnyCable::Middleware
|
|
7
|
+
def call(_method, request, meta)
|
|
8
|
+
return yield unless meta["sid"]
|
|
9
|
+
request.env.sid = meta["sid"]
|
|
10
|
+
|
|
11
|
+
yield
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
data/lib/anycable/rpc.rb
CHANGED
data/lib/anycable/socket.rb
CHANGED
|
@@ -116,22 +116,24 @@ module AnyCable
|
|
|
116
116
|
# Build Rack env from request
|
|
117
117
|
def build_rack_env
|
|
118
118
|
uri = URI.parse(request_env.url)
|
|
119
|
+
headers = request_env.headers.to_h
|
|
119
120
|
|
|
120
121
|
env = base_rack_env
|
|
121
122
|
env.merge!({
|
|
122
123
|
"PATH_INFO" => uri.path,
|
|
123
124
|
"QUERY_STRING" => uri.query,
|
|
124
125
|
"SERVER_NAME" => uri.host,
|
|
125
|
-
"SERVER_PORT" => uri.port,
|
|
126
|
+
"SERVER_PORT" => uri.port&.to_s,
|
|
126
127
|
"HTTP_HOST" => uri.host,
|
|
127
|
-
"REMOTE_ADDR" =>
|
|
128
|
+
"REMOTE_ADDR" => headers.delete("REMOTE_ADDR"),
|
|
128
129
|
"rack.url_scheme" => uri.scheme&.sub(/^ws/, "http"),
|
|
129
130
|
# AnyCable specific fields
|
|
130
131
|
"anycable.raw_cstate" => request_env.cstate&.to_h,
|
|
131
|
-
"anycable.raw_istate" => request_env.istate&.to_h
|
|
132
|
+
"anycable.raw_istate" => request_env.istate&.to_h,
|
|
133
|
+
"anycable.sid" => request_env.sid
|
|
132
134
|
}.delete_if { |_k, v| v.nil? })
|
|
133
135
|
|
|
134
|
-
env.merge!(build_headers(
|
|
136
|
+
env.merge!(build_headers(headers))
|
|
135
137
|
end
|
|
136
138
|
|
|
137
139
|
def base_rack_env
|
data/lib/anycable/version.rb
CHANGED
data/lib/anycable.rb
CHANGED
|
@@ -10,6 +10,7 @@ require "anycable/broadcast_adapters"
|
|
|
10
10
|
require "anycable/middleware_chain"
|
|
11
11
|
require "anycable/middlewares/exceptions"
|
|
12
12
|
require "anycable/middlewares/check_version"
|
|
13
|
+
require "anycable/middlewares/env_sid"
|
|
13
14
|
|
|
14
15
|
require "anycable/socket"
|
|
15
16
|
require "anycable/rpc"
|
|
@@ -114,5 +115,5 @@ begin
|
|
|
114
115
|
rescue LoadError => e
|
|
115
116
|
# Re-raise an exception if we failed to load grpc .so files
|
|
116
117
|
# (e.g., on Alpine Linux)
|
|
117
|
-
raise if /
|
|
118
|
+
raise if /(error loading shared library|incompatible architecture)/i.match?(e.message)
|
|
118
119
|
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module AnyCable
|
|
2
|
+
interface _BroadcastAdapter
|
|
3
|
+
def raw_broadcast: (String _data) -> void
|
|
4
|
+
def broadcast: (String stream, String payload) -> void
|
|
5
|
+
def broadcast_command: (String command, **untyped payload) -> void
|
|
6
|
+
def announce!: () -> void
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
module BroadcastAdapters
|
|
10
|
+
class Base
|
|
11
|
+
include _BroadcastAdapter
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
def logger: () -> Logger
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module AnyCable
|
|
2
|
+
module BroadcastAdapters
|
|
3
|
+
class Http < Base
|
|
4
|
+
RECOVERABLE_EXCEPTIONS: Array[singleton(Class)]
|
|
5
|
+
OPEN_TIMEOUT: Integer
|
|
6
|
+
READ_TIMEOUT: Integer
|
|
7
|
+
MAX_ATTEMPTS: Integer
|
|
8
|
+
DELAY: Integer
|
|
9
|
+
|
|
10
|
+
attr_reader url: String
|
|
11
|
+
attr_reader headers: Hash[String, String]
|
|
12
|
+
attr_reader authorized: bool
|
|
13
|
+
|
|
14
|
+
alias authorized? authorized
|
|
15
|
+
|
|
16
|
+
def initialize: (?url: String url, ?secret: String secret) -> void
|
|
17
|
+
def shutdown: () -> void
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
attr_reader uri: URI::Generic
|
|
22
|
+
attr_reader queue: Thread::Queue
|
|
23
|
+
attr_reader thread: Thread?
|
|
24
|
+
|
|
25
|
+
def ensure_thread_is_alive: () -> void
|
|
26
|
+
def perform_request: (String payload) -> untyped
|
|
27
|
+
def handle_response: (untyped response) -> void
|
|
28
|
+
def build_http: () { (untyped) -> untyped } -> untyped
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module AnyCable
|
|
2
|
+
module GRPC
|
|
3
|
+
interface _Config
|
|
4
|
+
def rpc_host: () -> String
|
|
5
|
+
def rpc_host=: (String) -> void
|
|
6
|
+
def rpc_pool_size: () -> Integer
|
|
7
|
+
def rpc_pool_size=: (Integer) -> void
|
|
8
|
+
def rpc_max_waiting_requests: () -> Integer
|
|
9
|
+
def rpc_max_waiting_requests=: (Integer) -> void
|
|
10
|
+
def rpc_poll_period: () -> Integer
|
|
11
|
+
def rpc_poll_period=: (Integer) -> void
|
|
12
|
+
def rpc_pool_keep_alive: () -> Integer
|
|
13
|
+
def rpc_pool_keep_alive=: (Integer) -> void
|
|
14
|
+
def rpc_server_args: () -> Hash[Symbol | String, untyped]?
|
|
15
|
+
def rpc_server_args=: (Hash[Symbol | String, untyped]) -> void
|
|
16
|
+
def log_grpc: () -> bool
|
|
17
|
+
def log_grpc=: (bool) -> void
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
module Config : AnyCable::Config
|
|
21
|
+
include _Config
|
|
22
|
+
|
|
23
|
+
alias log_grpc? log_grpc
|
|
24
|
+
|
|
25
|
+
def to_grpc_params: () -> {
|
|
26
|
+
pool_size: Integer,
|
|
27
|
+
max_waiting_requests: Integer,
|
|
28
|
+
poll_period: Integer,
|
|
29
|
+
pool_keep_alive: Integer,
|
|
30
|
+
server_args: Hash[String, untyped]
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
def normalized_grpc_server_args: () -> Hash[String, untyped]
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module AnyCable
|
|
2
|
+
module GRPC
|
|
3
|
+
# RPC service handler
|
|
4
|
+
class Handler < AnyCable::GRPC::Service
|
|
5
|
+
# Handle connection request from WebSocket server
|
|
6
|
+
def connect: (untyped request, untyped _unused_call) -> untyped
|
|
7
|
+
def disconnect: (untyped request, untyped _unused_call) -> untyped
|
|
8
|
+
def command: (untyped request, untyped _unused_call) -> untyped
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module AnyCable
|
|
2
|
+
module GRPC
|
|
3
|
+
class Server
|
|
4
|
+
include _Server
|
|
5
|
+
|
|
6
|
+
attr_reader grpc_server: untyped
|
|
7
|
+
attr_reader host: String
|
|
8
|
+
|
|
9
|
+
def initialize: (host: String, ?logger: Logger, **untyped options) -> void
|
|
10
|
+
|
|
11
|
+
private
|
|
12
|
+
|
|
13
|
+
attr_reader start_thread: Thread
|
|
14
|
+
|
|
15
|
+
def logger: () -> Logger
|
|
16
|
+
def build_server: (**untyped options) -> untyped
|
|
17
|
+
def build_health_checker: () -> untyped
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
module AnyCable
|
|
2
2
|
class HealthServer
|
|
3
|
+
interface _Runnable
|
|
4
|
+
def running?: () -> bool
|
|
5
|
+
end
|
|
6
|
+
|
|
3
7
|
SUCCESS_RESPONSE: Array[Integer | String]
|
|
4
8
|
FAILURE_RESPONSE: Array[Integer | String]
|
|
5
9
|
|
|
6
|
-
attr_reader server:
|
|
10
|
+
attr_reader server: _Runnable
|
|
7
11
|
attr_reader port: Integer
|
|
8
12
|
attr_reader path: String
|
|
9
13
|
attr_reader http_server: untyped
|
|
10
14
|
|
|
11
|
-
def initialize: (
|
|
15
|
+
def initialize: (_Runnable server, port: Integer port, ?logger: Logger logger, ?path: String path) -> void
|
|
12
16
|
def start: () -> void
|
|
13
17
|
def stop: () -> void
|
|
14
18
|
def running?: () -> bool
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module AnyCable
|
|
2
|
+
module RPC
|
|
3
|
+
interface _Handler
|
|
4
|
+
def build_socket: (env: Env) -> Socket
|
|
5
|
+
def build_env_response: (Socket socket) -> EnvResponse
|
|
6
|
+
def logger: () -> Logger
|
|
7
|
+
def factory: () -> _ConnectionFactory
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
class Handler
|
|
11
|
+
include _Handler
|
|
12
|
+
include Handlers::Connect
|
|
13
|
+
include Handlers::Disconnect
|
|
14
|
+
include Handlers::Command
|
|
15
|
+
|
|
16
|
+
def initialize: (?middleware: MiddlewareChain) -> void
|
|
17
|
+
def handle: (Symbol cmd, rpcRequest data, ?rpcMetadata meta) -> rpcResponse
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
attr_reader middleware: MiddlewareChain
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
data/sig/anycable/rpc.rbs
CHANGED
|
@@ -2,8 +2,14 @@ module AnyCable
|
|
|
2
2
|
PROTO_VERSION: ::String
|
|
3
3
|
SESSION_KEY: ::String
|
|
4
4
|
|
|
5
|
+
interface _ProtobufMap
|
|
6
|
+
def []: (String key) -> String
|
|
7
|
+
def []=: (String key, String val) -> String
|
|
8
|
+
def to_h: () -> Hash[String, String]
|
|
9
|
+
end
|
|
10
|
+
|
|
5
11
|
type rpcStatus = 0 | 1 | 2
|
|
6
|
-
type protoMap =
|
|
12
|
+
type protoMap = _ProtobufMap
|
|
7
13
|
type rpcMetadata = Hash[String, String]
|
|
8
14
|
|
|
9
15
|
interface _WithEnvState
|
|
@@ -18,6 +24,7 @@ module AnyCable
|
|
|
18
24
|
|
|
19
25
|
attr_accessor url: String
|
|
20
26
|
attr_accessor headers: protoMap
|
|
27
|
+
attr_accessor sid: String?
|
|
21
28
|
|
|
22
29
|
def initialize: (?url: String, ?headers: protoMap, ?cstate: protoMap?, ?istate: protoMap?) -> void
|
|
23
30
|
end
|
|
@@ -38,7 +45,7 @@ module AnyCable
|
|
|
38
45
|
end
|
|
39
46
|
|
|
40
47
|
module WithConnectionState : _WithEnv, _ProtoMessage
|
|
41
|
-
def initialize: (?session: untyped? session, **untyped other) -> untyped
|
|
48
|
+
%a{rbs:test:skip} def initialize: (?session: untyped? session, **untyped other) -> untyped
|
|
42
49
|
|
|
43
50
|
def session=: (untyped val) -> untyped
|
|
44
51
|
def session: () -> untyped
|
|
@@ -60,8 +67,8 @@ module AnyCable
|
|
|
60
67
|
class ConnectionRequest
|
|
61
68
|
include _WithEnv
|
|
62
69
|
|
|
63
|
-
def initialize: (?env: Env) -> void
|
|
64
|
-
def to_h: () -> Hash[
|
|
70
|
+
%a{rbs:test:skip} def initialize: (?env: Env) -> void
|
|
71
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
65
72
|
end
|
|
66
73
|
|
|
67
74
|
class ConnectionResponse
|
|
@@ -73,7 +80,7 @@ module AnyCable
|
|
|
73
80
|
attr_accessor error_msg: String?
|
|
74
81
|
attr_accessor env: EnvResponse
|
|
75
82
|
|
|
76
|
-
def initialize: (
|
|
83
|
+
%a{rbs:test:skip} def initialize: (
|
|
77
84
|
status: rpcStatus,
|
|
78
85
|
?identifiers: String,
|
|
79
86
|
?transmissions: Array[String],
|
|
@@ -81,7 +88,7 @@ module AnyCable
|
|
|
81
88
|
?env: EnvResponse
|
|
82
89
|
) -> void
|
|
83
90
|
|
|
84
|
-
def to_h: () -> Hash[
|
|
91
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
85
92
|
end
|
|
86
93
|
|
|
87
94
|
class CommandMessage
|
|
@@ -92,14 +99,14 @@ module AnyCable
|
|
|
92
99
|
attr_accessor connection_identifiers: String
|
|
93
100
|
attr_accessor data: String
|
|
94
101
|
|
|
95
|
-
def initialize: (
|
|
102
|
+
%a{rbs:test:skip} def initialize: (
|
|
96
103
|
command: String,
|
|
97
104
|
identifier: String,
|
|
98
105
|
?connection_identifiers: String,
|
|
99
106
|
?env: Env
|
|
100
107
|
) -> void
|
|
101
108
|
|
|
102
|
-
def to_h: () -> Hash[
|
|
109
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
103
110
|
end
|
|
104
111
|
|
|
105
112
|
class CommandResponse
|
|
@@ -114,7 +121,7 @@ module AnyCable
|
|
|
114
121
|
attr_accessor env: EnvResponse
|
|
115
122
|
attr_accessor stopped_streams: Array[String]
|
|
116
123
|
|
|
117
|
-
def initialize: (
|
|
124
|
+
%a{rbs:test:skip} def initialize: (
|
|
118
125
|
status: rpcStatus,
|
|
119
126
|
?disconnect: bool,
|
|
120
127
|
?stop_streams: bool,
|
|
@@ -125,7 +132,7 @@ module AnyCable
|
|
|
125
132
|
?env: EnvResponse
|
|
126
133
|
) -> void
|
|
127
134
|
|
|
128
|
-
def to_h: () -> Hash[
|
|
135
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
129
136
|
end
|
|
130
137
|
|
|
131
138
|
class DisconnectRequest
|
|
@@ -134,8 +141,8 @@ module AnyCable
|
|
|
134
141
|
attr_accessor identifiers: String
|
|
135
142
|
attr_accessor subscriptions: Array[String]
|
|
136
143
|
|
|
137
|
-
def initialize: (identifiers: String, ?subscriptions: Array[String], ?env: Env) -> void
|
|
138
|
-
def to_h: () -> Hash[
|
|
144
|
+
%a{rbs:test:skip} def initialize: (identifiers: String, ?subscriptions: Array[String], ?env: Env) -> void
|
|
145
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
139
146
|
end
|
|
140
147
|
|
|
141
148
|
class DisconnectResponse
|
|
@@ -144,8 +151,8 @@ module AnyCable
|
|
|
144
151
|
attr_accessor status: rpcStatus
|
|
145
152
|
attr_accessor error_msg: String?
|
|
146
153
|
|
|
147
|
-
def initialize: (status: rpcStatus, ?error_msg: String) -> void
|
|
148
|
-
def to_h: () -> Hash[
|
|
154
|
+
%a{rbs:test:skip} def initialize: (status: rpcStatus, ?error_msg: String) -> void
|
|
155
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
149
156
|
end
|
|
150
157
|
|
|
151
158
|
type rpcRequest = ConnectionRequest | DisconnectRequest | CommandMessage
|
data/sig/anycable/socket.rbs
CHANGED
|
@@ -2,12 +2,12 @@ module AnyCable
|
|
|
2
2
|
class Socket
|
|
3
3
|
class State
|
|
4
4
|
attr_reader dirty_keys: Array[String]?
|
|
5
|
-
attr_reader source:
|
|
5
|
+
attr_reader source: Hash[String, String]
|
|
6
6
|
|
|
7
|
-
def initialize: (
|
|
7
|
+
def initialize: (Hash[String, String]) -> void
|
|
8
8
|
def read: (String key) -> untyped
|
|
9
9
|
def write: (String key, String val) -> void
|
|
10
|
-
def changed_fields: () ->
|
|
10
|
+
def changed_fields: () -> Hash[String, String]?
|
|
11
11
|
|
|
12
12
|
alias [] read
|
|
13
13
|
alias []= write
|
data/sig/anycable.rbs
CHANGED
|
@@ -18,7 +18,11 @@ module AnyCable
|
|
|
18
18
|
|
|
19
19
|
type serverBuilder = ^(Config) -> _Server
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
interface _ConnectionFactory
|
|
22
|
+
def call: (Socket, ?identifiers: String, ?subscriptions: Array[String]) -> _Connection
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
attr_accessor self.connection_factory: _ConnectionFactory
|
|
22
26
|
attr_accessor self.server_builder: serverBuilder
|
|
23
27
|
attr_writer self.logger: Logger
|
|
24
28
|
attr_writer self.rpc_handler: RPC::Handler
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: anycable-core
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.2.
|
|
4
|
+
version: 1.2.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- palkan
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2022-04-20 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: anyway_config
|
|
@@ -136,20 +136,6 @@ dependencies:
|
|
|
136
136
|
- - ">="
|
|
137
137
|
- !ruby/object:Gem::Version
|
|
138
138
|
version: '0'
|
|
139
|
-
- !ruby/object:Gem::Dependency
|
|
140
|
-
name: steep
|
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
|
142
|
-
requirements:
|
|
143
|
-
- - ">="
|
|
144
|
-
- !ruby/object:Gem::Version
|
|
145
|
-
version: '0'
|
|
146
|
-
type: :development
|
|
147
|
-
prerelease: false
|
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
-
requirements:
|
|
150
|
-
- - ">="
|
|
151
|
-
- !ruby/object:Gem::Version
|
|
152
|
-
version: '0'
|
|
153
139
|
description: AnyCable core RPC implementation not depenending on a particular server
|
|
154
140
|
type (e.g., gRPC or whatever)
|
|
155
141
|
email:
|
|
@@ -184,6 +170,7 @@ files:
|
|
|
184
170
|
- lib/anycable/middleware.rb
|
|
185
171
|
- lib/anycable/middleware_chain.rb
|
|
186
172
|
- lib/anycable/middlewares/check_version.rb
|
|
173
|
+
- lib/anycable/middlewares/env_sid.rb
|
|
187
174
|
- lib/anycable/middlewares/exceptions.rb
|
|
188
175
|
- lib/anycable/protos/rpc_pb.rb
|
|
189
176
|
- lib/anycable/rpc.rb
|
|
@@ -197,13 +184,27 @@ files:
|
|
|
197
184
|
- lib/anycable/version.rb
|
|
198
185
|
- sig/anycable.rbs
|
|
199
186
|
- sig/anycable/broadcast_adapters.rbs
|
|
187
|
+
- sig/anycable/broadcast_adapters/base.rbs
|
|
188
|
+
- sig/anycable/broadcast_adapters/http.rbs
|
|
189
|
+
- sig/anycable/broadcast_adapters/redis.rbs
|
|
200
190
|
- sig/anycable/cli.rbs
|
|
201
191
|
- sig/anycable/config.rbs
|
|
202
192
|
- sig/anycable/exceptions_handling.rbs
|
|
193
|
+
- sig/anycable/grpc/config.rbs
|
|
194
|
+
- sig/anycable/grpc/handler.rbs
|
|
195
|
+
- sig/anycable/grpc/rpc_services_pb.rbs
|
|
196
|
+
- sig/anycable/grpc/server.rbs
|
|
203
197
|
- sig/anycable/health_server.rbs
|
|
204
198
|
- sig/anycable/middleware.rbs
|
|
205
199
|
- sig/anycable/middleware_chain.rbs
|
|
200
|
+
- sig/anycable/middlewares/check_version.rbs
|
|
201
|
+
- sig/anycable/middlewares/env_sid.rbs
|
|
202
|
+
- sig/anycable/middlewares/exceptions.rbs
|
|
206
203
|
- sig/anycable/rpc.rbs
|
|
204
|
+
- sig/anycable/rpc/handler.rbs
|
|
205
|
+
- sig/anycable/rpc/handlers/command.rbs
|
|
206
|
+
- sig/anycable/rpc/handlers/connect.rbs
|
|
207
|
+
- sig/anycable/rpc/handlers/disconnect.rbs
|
|
207
208
|
- sig/anycable/socket.rbs
|
|
208
209
|
- sig/anycable/version.rbs
|
|
209
210
|
homepage: http://github.com/anycable/anycable
|
|
@@ -224,14 +225,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
224
225
|
requirements:
|
|
225
226
|
- - ">="
|
|
226
227
|
- !ruby/object:Gem::Version
|
|
227
|
-
version: 2.
|
|
228
|
+
version: 2.6.0
|
|
228
229
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
229
230
|
requirements:
|
|
230
231
|
- - ">="
|
|
231
232
|
- !ruby/object:Gem::Version
|
|
232
233
|
version: '0'
|
|
233
234
|
requirements: []
|
|
234
|
-
rubygems_version: 3.
|
|
235
|
+
rubygems_version: 3.3.7
|
|
235
236
|
signing_key:
|
|
236
237
|
specification_version: 4
|
|
237
238
|
summary: AnyCable core RPC implementation
|