grpc-web 1.1.0 → 1.2.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_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
|