grpc-web 1.0.1 → 1.1.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 +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
|