grpc-web 1.1.0 → 1.2.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: 9202ce0cf9954bd26bebc9d1dba4db3f2a4ed092eeda0c84b6644389bd1a571f
4
- data.tar.gz: 29b84608c5fb180f545a82f62ac4f4d9bafa0353130eb3c3b7e091cc972e4412
3
+ metadata.gz: 39509d4c9ee70cd7953e8eb6758fecc4e52b9a5d7083523c7e98f2351bd5e836
4
+ data.tar.gz: 07f57eb761ac2f8fcca5e1970b4183bd6dd922b6358dd1a84214849ac1d0d4ec
5
5
  SHA512:
6
- metadata.gz: 223f2f529c645fd8430c1012cde634bd56b8f199d1fdfe41022ef7114ed18ef20c834f1ef9c1fe6c68875e5587d53a6b5620c9be551e517900472832bce9d3c0
7
- data.tar.gz: d89fd1ac940705391250e67a02ad2376a985536dc3c75acaed770001e39911a45d8be97c1c686551ce5e6efa567f6790d6a7618090af52a4a87bcabfd90db3f3
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(status_code, headers[GRPC_MESSAGE_HEADER])
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, resp.message
101
+ raise ::GRPC::Internal.new(resp.message, metadata)
96
102
  when Net::HTTPUnauthorized # 401
97
- raise ::GRPC::Unauthenticated, resp.message
103
+ raise ::GRPC::Unauthenticated.new(resp.message, metadata)
98
104
  when Net::HTTPForbidden # 403
99
- raise ::GRPC::PermissionDenied, resp.message
105
+ raise ::GRPC::PermissionDenied.new(resp.message, metadata)
100
106
  when Net::HTTPNotFound # 404
101
- raise ::GRPC::Unimplemented, resp.message
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, resp.message
112
+ raise ::GRPC::Unavailable.new(resp.message, metadata)
107
113
  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?
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
- nil, # for trailing newline
81
- ].join("\r\n")
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GRPCWeb
4
- VERSION = '1.1.0'
4
+ VERSION = '1.2.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.1.0
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-07-08 00:00:00.000000000 Z
11
+ date: 2020-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grpc