grpc-web 1.0.1 → 1.1.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 +44 -11
- 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: 9202ce0cf9954bd26bebc9d1dba4db3f2a4ed092eeda0c84b6644389bd1a571f
|
4
|
+
data.tar.gz: 29b84608c5fb180f545a82f62ac4f4d9bafa0353130eb3c3b7e091cc972e4412
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 223f2f529c645fd8430c1012cde634bd56b8f199d1fdfe41022ef7114ed18ef20c834f1ef9c1fe6c68875e5587d53a6b5620c9be551e517900472832bce9d3c0
|
7
|
+
data.tar.gz: d89fd1ac940705391250e67a02ad2376a985536dc3c75acaed770001e39911a45d8be97c1c686551ce5e6efa567f6790d6a7618090af52a4a87bcabfd90db3f3
|
@@ -40,23 +40,37 @@ module GRPCWeb::ClientExecutor
|
|
40
40
|
request.body = request_body
|
41
41
|
request.basic_auth uri.user, uri.password if uri.userinfo
|
42
42
|
|
43
|
-
|
44
|
-
|
43
|
+
begin
|
44
|
+
Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
|
45
|
+
http.request(request)
|
46
|
+
end
|
47
|
+
rescue StandardError => e
|
48
|
+
raise ::GRPC::Unavailable, e.message
|
45
49
|
end
|
46
50
|
end
|
47
51
|
|
48
52
|
def handle_response(resp)
|
49
|
-
|
50
|
-
|
53
|
+
begin
|
54
|
+
frames = ::GRPCWeb::MessageFraming.unpack_frames(resp.body)
|
55
|
+
headers = extract_headers(frames)
|
56
|
+
rescue StandardError
|
57
|
+
headers = {}
|
58
|
+
error_unpacking_frames = true
|
51
59
|
end
|
60
|
+
raise_on_response_errors(resp, headers, error_unpacking_frames)
|
52
61
|
|
53
|
-
frames = ::GRPCWeb::MessageFraming.unpack_frames(resp.body)
|
54
|
-
header_frame = frames.find(&:header?)
|
55
|
-
headers = parse_headers(header_frame.body) if header_frame
|
56
|
-
raise_on_error(headers)
|
57
62
|
frames.find(&:payload?).body
|
58
63
|
end
|
59
64
|
|
65
|
+
def extract_headers(frames)
|
66
|
+
header_frame = frames.find(&:header?)
|
67
|
+
if header_frame
|
68
|
+
parse_headers(header_frame.body)
|
69
|
+
else
|
70
|
+
{}
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
60
74
|
def parse_headers(header_str)
|
61
75
|
headers = {}
|
62
76
|
lines = header_str.split(/\r?\n/)
|
@@ -67,15 +81,34 @@ module GRPCWeb::ClientExecutor
|
|
67
81
|
headers
|
68
82
|
end
|
69
83
|
|
70
|
-
def
|
71
|
-
return unless headers
|
72
|
-
|
84
|
+
def raise_on_response_errors(resp, headers, error_unpacking_frames)
|
73
85
|
status_str = headers[GRPC_STATUS_HEADER]
|
74
86
|
status_code = status_str.to_i if status_str && status_str == status_str.to_i.to_s
|
75
87
|
|
88
|
+
# see https://github.com/grpc/grpc/blob/master/doc/http-grpc-status-mapping.md
|
76
89
|
if status_code && status_code != 0
|
77
90
|
raise ::GRPC::BadStatus.new_status_exception(status_code, headers[GRPC_MESSAGE_HEADER])
|
78
91
|
end
|
92
|
+
|
93
|
+
case resp
|
94
|
+
when Net::HTTPBadRequest # 400
|
95
|
+
raise ::GRPC::Internal, resp.message
|
96
|
+
when Net::HTTPUnauthorized # 401
|
97
|
+
raise ::GRPC::Unauthenticated, resp.message
|
98
|
+
when Net::HTTPForbidden # 403
|
99
|
+
raise ::GRPC::PermissionDenied, resp.message
|
100
|
+
when Net::HTTPNotFound # 404
|
101
|
+
raise ::GRPC::Unimplemented, resp.message
|
102
|
+
when Net::HTTPTooManyRequests, # 429
|
103
|
+
Net::HTTPBadGateway, # 502
|
104
|
+
Net::HTTPServiceUnavailable, # 503
|
105
|
+
Net::HTTPGatewayTimeOut # 504
|
106
|
+
raise ::GRPC::Unavailable, resp.message
|
107
|
+
else
|
108
|
+
raise ::GRPC::Unknown, resp.message unless resp.is_a?(Net::HTTPSuccess) # 200
|
109
|
+
raise ::GRPC::Internal, resp.message if error_unpacking_frames
|
110
|
+
raise ::GRPC::Unknown, resp.message if status_code.nil?
|
111
|
+
end
|
79
112
|
end
|
80
113
|
end
|
81
114
|
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.0
|
4
|
+
version: 1.1.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-07-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: grpc
|