grpc-web 1.2.1 → 1.3.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/grpc_web/client/client.rb +2 -2
- data/lib/grpc_web/client/client_executor.rb +7 -7
- data/lib/grpc_web/server/rack_handler.rb +5 -5
- data/lib/grpc_web/version.rb +1 -1
- metadata +90 -23
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6e526c73cf9201c8bd579d12a88b6201d557da57602229759b3fcc0b99a1b48f
|
|
4
|
+
data.tar.gz: 64b6eb5a814450798e69cdfe2c440685e5b8f70a7e662ae2d1ad1f61dc3d7b43
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '010186c6b9c93a7478d022225361cc79ecdaa2ec6900a30fc8ab3961a1a9da177f7c1aac0c863bbf7cc73b8d215b5f3860b08b1aa42f359f112dd5743d37163f'
|
|
7
|
+
data.tar.gz: '0260480cdf85a36b92e5eeeeead0e1ecd451cce4a33970d6c65b6cdf5535666e93ececa73039c3558fab4ac19d0bf3b384e108feaa9b0b6178bd5e79892e242f'
|
|
@@ -26,9 +26,9 @@ class GRPCWeb::Client
|
|
|
26
26
|
|
|
27
27
|
def define_rpc_method(rpc_method, rpc_desc)
|
|
28
28
|
ruby_method = ::GRPC::GenericService.underscore(rpc_method.to_s).to_sym
|
|
29
|
-
define_singleton_method(ruby_method) do |params = {}|
|
|
29
|
+
define_singleton_method(ruby_method) do |params = {}, metadata = {}|
|
|
30
30
|
uri = endpoint_uri(rpc_desc)
|
|
31
|
-
::GRPCWeb::ClientExecutor.request(uri, rpc_desc, params)
|
|
31
|
+
::GRPCWeb::ClientExecutor.request(uri, rpc_desc, params, metadata)
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
34
|
|
|
@@ -16,28 +16,28 @@ module GRPCWeb::ClientExecutor
|
|
|
16
16
|
GRPC_MESSAGE_HEADER = 'grpc-message'
|
|
17
17
|
GRPC_HEADERS = %W[x-grpc-web #{GRPC_STATUS_HEADER} #{GRPC_MESSAGE_HEADER}].freeze
|
|
18
18
|
|
|
19
|
-
def request(uri, rpc_desc, params = {})
|
|
19
|
+
def request(uri, rpc_desc, params = {}, metadata = {})
|
|
20
20
|
req_proto = rpc_desc.input.new(params)
|
|
21
21
|
marshalled_proto = rpc_desc.marshal_proc.call(req_proto)
|
|
22
22
|
frame = ::GRPCWeb::MessageFrame.payload_frame(marshalled_proto)
|
|
23
23
|
request_body = ::GRPCWeb::MessageFraming.pack_frames([frame])
|
|
24
24
|
|
|
25
|
-
resp = post_request(uri, request_body)
|
|
25
|
+
resp = post_request(uri, request_body, metadata)
|
|
26
26
|
resp_body = handle_response(resp)
|
|
27
27
|
rpc_desc.unmarshal_proc(:output).call(resp_body)
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
private
|
|
31
31
|
|
|
32
|
-
def request_headers
|
|
32
|
+
def request_headers(metadata)
|
|
33
33
|
{
|
|
34
34
|
'Accept' => PROTO_CONTENT_TYPE,
|
|
35
|
-
'
|
|
36
|
-
}
|
|
35
|
+
'content-type' => PROTO_CONTENT_TYPE,
|
|
36
|
+
}.merge(metadata[:metadata] || {})
|
|
37
37
|
end
|
|
38
38
|
|
|
39
|
-
def post_request(uri, request_body)
|
|
40
|
-
request = Net::HTTP::Post.new(uri, request_headers)
|
|
39
|
+
def post_request(uri, request_body, metadata)
|
|
40
|
+
request = Net::HTTP::Post.new(uri, request_headers(metadata))
|
|
41
41
|
request.body = request_body
|
|
42
42
|
request.basic_auth uri.user, uri.password if uri.userinfo
|
|
43
43
|
|
|
@@ -29,7 +29,7 @@ module GRPCWeb::RackHandler
|
|
|
29
29
|
request = GRPCWeb::GRPCWebRequest.new(service, service_method, content_type, accept, body)
|
|
30
30
|
response = GRPCWeb::GRPCRequestProcessor.process(request)
|
|
31
31
|
|
|
32
|
-
[200, { '
|
|
32
|
+
[200, { 'content-type' => response.content_type }, [response.body]]
|
|
33
33
|
rescue Google::Protobuf::ParseError => e
|
|
34
34
|
invalid_response(e.message)
|
|
35
35
|
rescue StandardError => e
|
|
@@ -51,7 +51,7 @@ module GRPCWeb::RackHandler
|
|
|
51
51
|
def not_found_response(path)
|
|
52
52
|
[
|
|
53
53
|
NOT_FOUND,
|
|
54
|
-
{ '
|
|
54
|
+
{ 'content-type' => 'text/plain', 'x-cascade' => 'pass' },
|
|
55
55
|
["Not Found: #{path}"],
|
|
56
56
|
]
|
|
57
57
|
end
|
|
@@ -59,19 +59,19 @@ module GRPCWeb::RackHandler
|
|
|
59
59
|
def unsupported_media_type_response
|
|
60
60
|
[
|
|
61
61
|
UNSUPPORTED_MEDIA_TYPE,
|
|
62
|
-
{ '
|
|
62
|
+
{ 'content-type' => 'text/plain' },
|
|
63
63
|
['Unsupported Media Type: Invalid Content-Type or Accept header'],
|
|
64
64
|
]
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
def invalid_response(message)
|
|
68
|
-
[422, { '
|
|
68
|
+
[422, { 'content-type' => 'text/plain' }, ["Invalid request format: #{message}"]]
|
|
69
69
|
end
|
|
70
70
|
|
|
71
71
|
def error_response
|
|
72
72
|
[
|
|
73
73
|
INTERNAL_SERVER_ERROR,
|
|
74
|
-
{ '
|
|
74
|
+
{ 'content-type' => 'text/plain' },
|
|
75
75
|
['Request failed with an unexpected error.'],
|
|
76
76
|
]
|
|
77
77
|
end
|
data/lib/grpc_web/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,51 +1,120 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: grpc-web
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- James Shkolnik
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 2026-03-04 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: base64
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '0'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '0'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: google-protobuf
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '0'
|
|
13
40
|
- !ruby/object:Gem::Dependency
|
|
14
41
|
name: grpc
|
|
15
42
|
requirement: !ruby/object:Gem::Requirement
|
|
16
43
|
requirements:
|
|
17
|
-
- - "
|
|
44
|
+
- - ">="
|
|
18
45
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
46
|
+
version: '0'
|
|
20
47
|
type: :runtime
|
|
21
48
|
prerelease: false
|
|
22
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
50
|
requirements:
|
|
24
|
-
- - "
|
|
51
|
+
- - ">="
|
|
25
52
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
53
|
+
version: '0'
|
|
27
54
|
- !ruby/object:Gem::Dependency
|
|
28
55
|
name: rack
|
|
29
56
|
requirement: !ruby/object:Gem::Requirement
|
|
30
57
|
requirements:
|
|
31
58
|
- - ">="
|
|
32
59
|
- !ruby/object:Gem::Version
|
|
33
|
-
version:
|
|
60
|
+
version: '2'
|
|
34
61
|
- - "<"
|
|
35
62
|
- !ruby/object:Gem::Version
|
|
36
|
-
version: '
|
|
63
|
+
version: '4'
|
|
37
64
|
type: :runtime
|
|
38
65
|
prerelease: false
|
|
39
66
|
version_requirements: !ruby/object:Gem::Requirement
|
|
40
67
|
requirements:
|
|
41
68
|
- - ">="
|
|
42
69
|
- !ruby/object:Gem::Version
|
|
43
|
-
version:
|
|
70
|
+
version: '2'
|
|
44
71
|
- - "<"
|
|
45
72
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: '
|
|
73
|
+
version: '4'
|
|
47
74
|
- !ruby/object:Gem::Dependency
|
|
48
|
-
name:
|
|
75
|
+
name: capybara
|
|
76
|
+
requirement: !ruby/object:Gem::Requirement
|
|
77
|
+
requirements:
|
|
78
|
+
- - ">="
|
|
79
|
+
- !ruby/object:Gem::Version
|
|
80
|
+
version: '0'
|
|
81
|
+
type: :development
|
|
82
|
+
prerelease: false
|
|
83
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
84
|
+
requirements:
|
|
85
|
+
- - ">="
|
|
86
|
+
- !ruby/object:Gem::Version
|
|
87
|
+
version: '0'
|
|
88
|
+
- !ruby/object:Gem::Dependency
|
|
89
|
+
name: rackup
|
|
90
|
+
requirement: !ruby/object:Gem::Requirement
|
|
91
|
+
requirements:
|
|
92
|
+
- - ">="
|
|
93
|
+
- !ruby/object:Gem::Version
|
|
94
|
+
version: '0'
|
|
95
|
+
type: :development
|
|
96
|
+
prerelease: false
|
|
97
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
98
|
+
requirements:
|
|
99
|
+
- - ">="
|
|
100
|
+
- !ruby/object:Gem::Version
|
|
101
|
+
version: '0'
|
|
102
|
+
- !ruby/object:Gem::Dependency
|
|
103
|
+
name: webrick
|
|
104
|
+
requirement: !ruby/object:Gem::Requirement
|
|
105
|
+
requirements:
|
|
106
|
+
- - ">="
|
|
107
|
+
- !ruby/object:Gem::Version
|
|
108
|
+
version: '0'
|
|
109
|
+
type: :development
|
|
110
|
+
prerelease: false
|
|
111
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
112
|
+
requirements:
|
|
113
|
+
- - ">="
|
|
114
|
+
- !ruby/object:Gem::Version
|
|
115
|
+
version: '0'
|
|
116
|
+
- !ruby/object:Gem::Dependency
|
|
117
|
+
name: selenium-webdriver
|
|
49
118
|
requirement: !ruby/object:Gem::Requirement
|
|
50
119
|
requirements:
|
|
51
120
|
- - ">="
|
|
@@ -104,30 +173,30 @@ dependencies:
|
|
|
104
173
|
name: rspec
|
|
105
174
|
requirement: !ruby/object:Gem::Requirement
|
|
106
175
|
requirements:
|
|
107
|
-
- - "
|
|
176
|
+
- - ">="
|
|
108
177
|
- !ruby/object:Gem::Version
|
|
109
|
-
version: '
|
|
178
|
+
version: '0'
|
|
110
179
|
type: :development
|
|
111
180
|
prerelease: false
|
|
112
181
|
version_requirements: !ruby/object:Gem::Requirement
|
|
113
182
|
requirements:
|
|
114
|
-
- - "
|
|
183
|
+
- - ">="
|
|
115
184
|
- !ruby/object:Gem::Version
|
|
116
|
-
version: '
|
|
185
|
+
version: '0'
|
|
117
186
|
- !ruby/object:Gem::Dependency
|
|
118
187
|
name: rubocop
|
|
119
188
|
requirement: !ruby/object:Gem::Requirement
|
|
120
189
|
requirements:
|
|
121
|
-
- - "
|
|
190
|
+
- - ">="
|
|
122
191
|
- !ruby/object:Gem::Version
|
|
123
|
-
version: 0
|
|
192
|
+
version: '0'
|
|
124
193
|
type: :development
|
|
125
194
|
prerelease: false
|
|
126
195
|
version_requirements: !ruby/object:Gem::Requirement
|
|
127
196
|
requirements:
|
|
128
|
-
- - "
|
|
197
|
+
- - ">="
|
|
129
198
|
- !ruby/object:Gem::Version
|
|
130
|
-
version: 0
|
|
199
|
+
version: '0'
|
|
131
200
|
- !ruby/object:Gem::Dependency
|
|
132
201
|
name: rubocop-rspec
|
|
133
202
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -200,7 +269,6 @@ homepage: https://github.com/gusto/grpc-web-ruby
|
|
|
200
269
|
licenses:
|
|
201
270
|
- MIT
|
|
202
271
|
metadata: {}
|
|
203
|
-
post_install_message:
|
|
204
272
|
rdoc_options: []
|
|
205
273
|
require_paths:
|
|
206
274
|
- lib
|
|
@@ -215,8 +283,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
215
283
|
- !ruby/object:Gem::Version
|
|
216
284
|
version: '0'
|
|
217
285
|
requirements: []
|
|
218
|
-
rubygems_version: 3.
|
|
219
|
-
signing_key:
|
|
286
|
+
rubygems_version: 3.6.2
|
|
220
287
|
specification_version: 4
|
|
221
288
|
summary: Host gRPC-Web endpoints for Ruby gRPC services in a Rack or Rails app(over
|
|
222
289
|
HTTP/1.1). Client included.
|