grpc-web 1.1.0 → 1.2.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: 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