grpc-web 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/grpc_web/client/client_executor.rb +15 -9
- data/lib/grpc_web/server/message_serialization.rb +11 -5
- data/lib/grpc_web/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 39509d4c9ee70cd7953e8eb6758fecc4e52b9a5d7083523c7e98f2351bd5e836
|
4
|
+
data.tar.gz: 07f57eb761ac2f8fcca5e1970b4183bd6dd922b6358dd1a84214849ac1d0d4ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 296dc4cb68871e7ba7fda02b3b47c0e7023affc6071fa03ee1eca981aec50726ed10dad81c66376cbcb4e72a67d26d1c0e621ea84db118e124aa33a80e2d6fa9
|
7
|
+
data.tar.gz: 56d1b594a34e952503a3fa4c34ff4e79bee14a1e495ae2d6d1b4916d46810ca31efd86f258ddb8ae788b45427e14d51f0671cdd343ff72b12a26047ca08295c1
|
@@ -14,6 +14,7 @@ module GRPCWeb::ClientExecutor
|
|
14
14
|
|
15
15
|
GRPC_STATUS_HEADER = 'grpc-status'
|
16
16
|
GRPC_MESSAGE_HEADER = 'grpc-message'
|
17
|
+
GRPC_HEADERS = %W[x-grpc-web #{GRPC_STATUS_HEADER} #{GRPC_MESSAGE_HEADER}].freeze
|
17
18
|
|
18
19
|
def request(uri, rpc_desc, params = {})
|
19
20
|
req_proto = rpc_desc.input.new(params)
|
@@ -82,32 +83,37 @@ module GRPCWeb::ClientExecutor
|
|
82
83
|
end
|
83
84
|
|
84
85
|
def raise_on_response_errors(resp, headers, error_unpacking_frames)
|
86
|
+
metadata = headers.reject { |key, _| GRPC_HEADERS.include?(key) }
|
85
87
|
status_str = headers[GRPC_STATUS_HEADER]
|
86
88
|
status_code = status_str.to_i if status_str && status_str == status_str.to_i.to_s
|
87
89
|
|
88
90
|
# see https://github.com/grpc/grpc/blob/master/doc/http-grpc-status-mapping.md
|
89
91
|
if status_code && status_code != 0
|
90
|
-
raise ::GRPC::BadStatus.new_status_exception(
|
92
|
+
raise ::GRPC::BadStatus.new_status_exception(
|
93
|
+
status_code,
|
94
|
+
headers[GRPC_MESSAGE_HEADER],
|
95
|
+
metadata,
|
96
|
+
)
|
91
97
|
end
|
92
98
|
|
93
99
|
case resp
|
94
100
|
when Net::HTTPBadRequest # 400
|
95
|
-
raise ::GRPC::Internal
|
101
|
+
raise ::GRPC::Internal.new(resp.message, metadata)
|
96
102
|
when Net::HTTPUnauthorized # 401
|
97
|
-
raise ::GRPC::Unauthenticated
|
103
|
+
raise ::GRPC::Unauthenticated.new(resp.message, metadata)
|
98
104
|
when Net::HTTPForbidden # 403
|
99
|
-
raise ::GRPC::PermissionDenied
|
105
|
+
raise ::GRPC::PermissionDenied.new(resp.message, metadata)
|
100
106
|
when Net::HTTPNotFound # 404
|
101
|
-
raise ::GRPC::Unimplemented
|
107
|
+
raise ::GRPC::Unimplemented.new(resp.message, metadata)
|
102
108
|
when Net::HTTPTooManyRequests, # 429
|
103
109
|
Net::HTTPBadGateway, # 502
|
104
110
|
Net::HTTPServiceUnavailable, # 503
|
105
111
|
Net::HTTPGatewayTimeOut # 504
|
106
|
-
raise ::GRPC::Unavailable
|
112
|
+
raise ::GRPC::Unavailable.new(resp.message, metadata)
|
107
113
|
else
|
108
|
-
raise ::GRPC::Unknown
|
109
|
-
raise ::GRPC::Internal
|
110
|
-
raise ::GRPC::Unknown
|
114
|
+
raise ::GRPC::Unknown.new(resp.message, metadata) unless resp.is_a?(Net::HTTPSuccess) # 200
|
115
|
+
raise ::GRPC::Internal.new(resp.message, metadata) if error_unpacking_frames
|
116
|
+
raise ::GRPC::Unknown.new(resp.message, metadata) if status_code.nil?
|
111
117
|
end
|
112
118
|
end
|
113
119
|
end
|
@@ -59,7 +59,7 @@ module GRPCWeb::MessageSerialization
|
|
59
59
|
def serialize_error_response(response)
|
60
60
|
ex = response.body
|
61
61
|
if ex.is_a?(::GRPC::BadStatus)
|
62
|
-
header_str = generate_headers(ex.code, ex.details)
|
62
|
+
header_str = generate_headers(ex.code, ex.details, ex.metadata)
|
63
63
|
else
|
64
64
|
header_str = generate_headers(
|
65
65
|
::GRPC::Core::StatusCodes::UNKNOWN,
|
@@ -72,13 +72,19 @@ module GRPCWeb::MessageSerialization
|
|
72
72
|
|
73
73
|
# If needed, trailers can be appended to the response as a 2nd
|
74
74
|
# base64 encoded string with independent framing.
|
75
|
-
def generate_headers(status, message)
|
76
|
-
[
|
75
|
+
def generate_headers(status, message, metadata = {})
|
76
|
+
headers = [
|
77
77
|
"grpc-status:#{status}",
|
78
78
|
"grpc-message:#{message}",
|
79
79
|
'x-grpc-web:1',
|
80
|
-
|
81
|
-
|
80
|
+
]
|
81
|
+
metadata.each do |name, value|
|
82
|
+
next if %w[grpc-status grpc-message x-grpc-web].include?(name)
|
83
|
+
|
84
|
+
headers << "#{name}:#{value}"
|
85
|
+
end
|
86
|
+
headers << nil # for trailing newline
|
87
|
+
headers.join("\r\n")
|
82
88
|
end
|
83
89
|
end
|
84
90
|
end
|
data/lib/grpc_web/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grpc-web
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Shkolnik
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: grpc
|