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 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