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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 758ff05af92607617e668f99e32a0fb1e39e8795dd99a4d617e7de4d18a593df
4
- data.tar.gz: 0fc70d8bf94ddb52d1a747590682f56750b2c57f2add9f7206cd4e20138bb998
3
+ metadata.gz: 9202ce0cf9954bd26bebc9d1dba4db3f2a4ed092eeda0c84b6644389bd1a571f
4
+ data.tar.gz: 29b84608c5fb180f545a82f62ac4f4d9bafa0353130eb3c3b7e091cc972e4412
5
5
  SHA512:
6
- metadata.gz: 4ccebf90c39a63a496dfb7d5f518f5a7edb31c62b13b62e0fd01d6162a9804c81ee1d7032c56fbc822e1b51988339904471c0017966cbc65ef2ff8aefeeccf59
7
- data.tar.gz: ffce3e4c465840373a5c17ca6eff72056ddd86301e3d5743b126f664e7db51ed185fcfe3468d66cf9bd2e0a26697cab4d7a3fa26c1c926f0b7a905c4b5638e21
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
- Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
44
- http.request(request)
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
- unless resp.is_a?(Net::HTTPSuccess)
50
- raise "Received #{resp.code} #{resp.message} response: #{resp.body}"
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 raise_on_error(headers)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GRPCWeb
4
- VERSION = '1.0.1'
4
+ VERSION = '1.1.0'
5
5
  end
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.1
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-02-21 00:00:00.000000000 Z
11
+ date: 2020-07-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grpc