httpx 1.1.5 → 1.2.1

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.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -6
  3. data/doc/release_notes/1_1_1.md +2 -2
  4. data/doc/release_notes/1_2_0.md +49 -0
  5. data/doc/release_notes/1_2_1.md +6 -0
  6. data/lib/httpx/adapters/webmock.rb +25 -3
  7. data/lib/httpx/altsvc.rb +57 -2
  8. data/lib/httpx/buffer.rb +8 -0
  9. data/lib/httpx/chainable.rb +48 -29
  10. data/lib/httpx/connection/http1.rb +27 -22
  11. data/lib/httpx/connection/http2.rb +7 -3
  12. data/lib/httpx/connection.rb +52 -62
  13. data/lib/httpx/extensions.rb +0 -15
  14. data/lib/httpx/options.rb +85 -28
  15. data/lib/httpx/plugins/aws_sigv4.rb +2 -2
  16. data/lib/httpx/plugins/basic_auth.rb +1 -1
  17. data/lib/httpx/plugins/callbacks.rb +91 -0
  18. data/lib/httpx/plugins/circuit_breaker.rb +2 -0
  19. data/lib/httpx/plugins/cookies.rb +19 -9
  20. data/lib/httpx/plugins/digest_auth.rb +1 -1
  21. data/lib/httpx/plugins/follow_redirects.rb +11 -0
  22. data/lib/httpx/plugins/grpc.rb +2 -2
  23. data/lib/httpx/plugins/h2c.rb +20 -8
  24. data/lib/httpx/plugins/proxy/socks4.rb +2 -2
  25. data/lib/httpx/plugins/proxy/socks5.rb +2 -2
  26. data/lib/httpx/plugins/proxy.rb +16 -34
  27. data/lib/httpx/plugins/rate_limiter.rb +1 -1
  28. data/lib/httpx/plugins/retries.rb +4 -0
  29. data/lib/httpx/plugins/ssrf_filter.rb +142 -0
  30. data/lib/httpx/plugins/stream.rb +1 -1
  31. data/lib/httpx/plugins/upgrade/h2.rb +1 -1
  32. data/lib/httpx/plugins/upgrade.rb +1 -1
  33. data/lib/httpx/plugins/webdav.rb +1 -1
  34. data/lib/httpx/pool.rb +32 -28
  35. data/lib/httpx/request/body.rb +3 -3
  36. data/lib/httpx/request.rb +3 -5
  37. data/lib/httpx/resolver/https.rb +10 -4
  38. data/lib/httpx/resolver/native.rb +1 -0
  39. data/lib/httpx/resolver/resolver.rb +17 -6
  40. data/lib/httpx/response/body.rb +3 -0
  41. data/lib/httpx/response.rb +3 -2
  42. data/lib/httpx/session.rb +13 -82
  43. data/lib/httpx/timers.rb +3 -10
  44. data/lib/httpx/transcoder.rb +1 -1
  45. data/lib/httpx/version.rb +1 -1
  46. data/sig/altsvc.rbs +33 -0
  47. data/sig/chainable.rbs +1 -0
  48. data/sig/connection/http1.rbs +2 -1
  49. data/sig/connection.rbs +16 -16
  50. data/sig/options.rbs +10 -2
  51. data/sig/plugins/callbacks.rbs +38 -0
  52. data/sig/plugins/cookies.rbs +2 -0
  53. data/sig/plugins/follow_redirects.rbs +2 -0
  54. data/sig/plugins/proxy/socks4.rbs +2 -1
  55. data/sig/plugins/proxy/socks5.rbs +2 -1
  56. data/sig/plugins/proxy.rbs +11 -1
  57. data/sig/pool.rbs +1 -3
  58. data/sig/resolver/resolver.rbs +3 -1
  59. data/sig/session.rbs +4 -4
  60. metadata +14 -6
@@ -70,9 +70,10 @@ module HTTPX
70
70
  @body.write(data)
71
71
  end
72
72
 
73
- # returns the response mime type, as per what's declared in the content-type header.
73
+ # returns the HTTPX::ContentType for the response, as per what's declared in the content-type header.
74
74
  #
75
- # response.content_type #=> "text/plain"
75
+ # response.content_type #=> #<HTTPX::ContentType:xxx @header_value="text/plain">
76
+ # response.content_type.mime_type #=> "text/plain"
76
77
  def content_type
77
78
  @content_type ||= ContentType.new(@headers["content-type"])
78
79
  end
data/lib/httpx/session.rb CHANGED
@@ -8,7 +8,6 @@ module HTTPX
8
8
  class Session
9
9
  include Loggable
10
10
  include Chainable
11
- include Callbacks
12
11
 
13
12
  EMPTY_HASH = {}.freeze
14
13
 
@@ -85,33 +84,7 @@ module HTTPX
85
84
  options = @options.merge(options) unless options.is_a?(Options)
86
85
  request = rklass.new(verb, uri, options)
87
86
  request.persistent = @persistent
88
- request.on(:response, &method(:on_response).curry(2)[request])
89
- request.on(:promise, &method(:on_promise))
90
-
91
- request.on(:headers) do
92
- emit(:request_started, request)
93
- end
94
- request.on(:body_chunk) do |chunk|
95
- emit(:request_body_chunk, request, chunk)
96
- end
97
- request.on(:done) do
98
- emit(:request_completed, request)
99
- end
100
-
101
- request.on(:response_started) do |res|
102
- if res.is_a?(Response)
103
- emit(:response_started, request, res)
104
- res.on(:chunk_received) do |chunk|
105
- emit(:response_body_chunk, request, res, chunk)
106
- end
107
- else
108
- emit(:request_error, request, res.error)
109
- end
110
- end
111
- request.on(:response) do |res|
112
- emit(:response_completed, request, res)
113
- end
114
-
87
+ set_request_callbacks(request)
115
88
  request
116
89
  end
117
90
 
@@ -143,7 +116,7 @@ module HTTPX
143
116
  def find_connection(request, connections, options)
144
117
  uri = request.uri
145
118
 
146
- connection = pool.find_connection(uri, options) || build_connection(uri, options)
119
+ connection = pool.find_connection(uri, options) || init_connection(uri, options)
147
120
  unless connections.nil? || connections.include?(connection)
148
121
  connections << connection
149
122
  set_connection_callbacks(connection, connections, options)
@@ -179,15 +152,6 @@ module HTTPX
179
152
  other_connection = build_altsvc_connection(connection, connections, alt_origin, origin, alt_params, options)
180
153
  connections << other_connection if other_connection
181
154
  end
182
- connection.only(:exhausted) do
183
- other_connection = connection.create_idle
184
- other_connection.merge(connection)
185
- catch(:coalesced) do
186
- pool.init_connection(other_connection, options)
187
- end
188
- set_connection_callbacks(other_connection, connections, options)
189
- connections << other_connection
190
- end
191
155
  end
192
156
 
193
157
  # returns an HTTPX::Connection for the negotiated Alternative Service (or none).
@@ -202,24 +166,19 @@ module HTTPX
202
166
 
203
167
  alt_options = options.merge(ssl: options.ssl.merge(hostname: URI(origin).host))
204
168
 
205
- connection = pool.find_connection(alt_origin, alt_options) || build_connection(alt_origin, alt_options)
169
+ connection = pool.find_connection(alt_origin, alt_options) || init_connection(alt_origin, alt_options)
170
+
206
171
  # advertised altsvc is the same origin being used, ignore
207
172
  return if connection == existing_connection
208
173
 
174
+ connection.extend(AltSvc::ConnectionMixin) unless connection.is_a?(AltSvc::ConnectionMixin)
175
+
209
176
  set_connection_callbacks(connection, connections, alt_options)
210
177
 
211
178
  log(level: 1) { "#{origin} alt-svc: #{alt_origin}" }
212
179
 
213
- # get uninitialized requests
214
- # incidentally, all requests will be re-routed to the first
215
- # advertised alt-svc, which incidentally follows the spec.
216
- existing_connection.purge_pending do |request|
217
- request.origin == origin &&
218
- request.state == :idle &&
219
- !request.headers.key?("alt-used")
220
- end
221
-
222
180
  connection.merge(existing_connection)
181
+ existing_connection.terminate
223
182
  connection
224
183
  rescue UnsupportedSchemeError
225
184
  altsvc["noop"] = true
@@ -250,30 +209,13 @@ module HTTPX
250
209
  requests
251
210
  end
252
211
 
253
- # returns a new HTTPX::Connection object for the given +uri+ and set of +options+.
254
- def build_connection(uri, options)
255
- type = options.transport || begin
256
- case uri.scheme
257
- when "http"
258
- "tcp"
259
- when "https"
260
- "ssl"
261
- else
262
- raise UnsupportedSchemeError, "#{uri}: #{uri.scheme}: unsupported URI scheme"
263
- end
264
- end
265
- init_connection(type, uri, options)
212
+ def set_request_callbacks(request)
213
+ request.on(:response, &method(:on_response).curry(2)[request])
214
+ request.on(:promise, &method(:on_promise))
266
215
  end
267
216
 
268
- def init_connection(type, uri, options)
269
- connection = options.connection_class.new(type, uri, options)
270
- connection.on(:open) do
271
- emit(:connection_opened, connection.origin, connection.io.socket)
272
- # only run close callback if it opened
273
- end
274
- connection.on(:close) do
275
- emit(:connection_closed, connection.origin, connection.io.socket) if connection.used?
276
- end
217
+ def init_connection(uri, options)
218
+ connection = options.connection_class.new(uri, options)
277
219
  catch(:coalesced) do
278
220
  pool.init_connection(connection, options)
279
221
  connection
@@ -369,19 +311,8 @@ module HTTPX
369
311
  extend(pl::ClassMethods) if defined?(pl::ClassMethods)
370
312
 
371
313
  opts = @default_options
372
- opts.request_class.__send__(:include, pl::RequestMethods) if defined?(pl::RequestMethods)
373
- opts.request_class.extend(pl::RequestClassMethods) if defined?(pl::RequestClassMethods)
374
- opts.response_class.__send__(:include, pl::ResponseMethods) if defined?(pl::ResponseMethods)
375
- opts.response_class.extend(pl::ResponseClassMethods) if defined?(pl::ResponseClassMethods)
376
- opts.headers_class.__send__(:include, pl::HeadersMethods) if defined?(pl::HeadersMethods)
377
- opts.headers_class.extend(pl::HeadersClassMethods) if defined?(pl::HeadersClassMethods)
378
- opts.request_body_class.__send__(:include, pl::RequestBodyMethods) if defined?(pl::RequestBodyMethods)
379
- opts.request_body_class.extend(pl::RequestBodyClassMethods) if defined?(pl::RequestBodyClassMethods)
380
- opts.response_body_class.__send__(:include, pl::ResponseBodyMethods) if defined?(pl::ResponseBodyMethods)
381
- opts.response_body_class.extend(pl::ResponseBodyClassMethods) if defined?(pl::ResponseBodyClassMethods)
382
- opts.connection_class.__send__(:include, pl::ConnectionMethods) if defined?(pl::ConnectionMethods)
314
+ opts.extend_with_plugin_classes(pl)
383
315
  if defined?(pl::OptionsMethods)
384
- opts.options_class.__send__(:include, pl::OptionsMethods)
385
316
 
386
317
  (pl::OptionsMethods.instance_methods - Object.instance_methods).each do |meth|
387
318
  opts.options_class.method_added(meth)
data/lib/httpx/timers.rb CHANGED
@@ -81,16 +81,9 @@ module HTTPX
81
81
  @callbacks << callback
82
82
  end
83
83
 
84
- if RUBY_ENGINE == "jruby" && JRUBY_VERSION < "9.4.5.0"
85
- # https://github.com/jruby/jruby/issues/7976
86
- def delete(callback)
87
- @callbacks.delete(callback)
88
- end
89
- else
90
- def delete(callback)
91
- @callbacks.delete(callback)
92
- @on_empty.call if @callbacks.empty?
93
- end
84
+ def delete(callback)
85
+ @callbacks.delete(callback)
86
+ @on_empty.call if @callbacks.empty?
94
87
  end
95
88
 
96
89
  def no_callbacks?
@@ -5,7 +5,7 @@ module HTTPX
5
5
  module_function
6
6
 
7
7
  def normalize_keys(key, value, cond = nil, &block)
8
- if (cond && cond.call(value))
8
+ if cond && cond.call(value)
9
9
  block.call(key.to_s, value)
10
10
  elsif value.respond_to?(:to_ary)
11
11
  if value.empty?
data/lib/httpx/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HTTPX
4
- VERSION = "1.1.5"
4
+ VERSION = "1.2.1"
5
5
  end
data/sig/altsvc.rbs ADDED
@@ -0,0 +1,33 @@
1
+ module HTTPX
2
+ module AltSvc
3
+ module ConnectionMixin
4
+
5
+ def send: (Request request) -> void
6
+
7
+ def match?: (URI::Generic uri, Options options) -> bool
8
+
9
+ private
10
+
11
+ def match_altsvcs?: (URI::Generic uri) -> bool
12
+
13
+ def match_altsvc_options?: (URI::Generic uri, Options options) -> bool
14
+ end
15
+
16
+ type altsvc_params = Hash[String, untyped]
17
+
18
+ def self?.cached_altsvc: (String origin) -> Array[altsvc_params]
19
+
20
+ def self?.cached_altsvc_set: (String origin, altsvc_params) -> void
21
+
22
+ def self?.lookup: (String origin, Integer | Float ttl) -> Array[altsvc_params]
23
+
24
+ def self?.emit: (Request request, response response) { (http_uri alt_origin, String origin, altsvc_params alt_params) -> void } -> void
25
+
26
+ def self?.parse: (String altsvc) { (http_uri alt_origin, altsvc_params alt_params) -> void } -> void
27
+ | (String altsvc) -> Enumerable[[http_uri, altsvc_params]]
28
+
29
+ def self?.parse_altsvc_scheme: (String alt_proto) -> String?
30
+
31
+ def self.parse_altsvc_origin: (string alt_proto, String alt_origin) -> http_uri?
32
+ end
33
+ end
data/sig/chainable.rbs CHANGED
@@ -34,6 +34,7 @@ module HTTPX
34
34
  | (:response_cache, ?options) -> Plugins::sessionResponseCache
35
35
  | (:circuit_breaker, ?options) -> Plugins::sessionCircuitBreaker
36
36
  | (:oauth, ?options) -> Plugins::sessionOAuth
37
+ | (:callbacks, ?options) -> Plugins::sessionCallbacks
37
38
  | (Symbol | Module, ?options) { (Class) -> void } -> Session
38
39
  | (Symbol | Module, ?options) -> Session
39
40
 
@@ -10,8 +10,9 @@ module HTTPX
10
10
  attr_reader pending: Array[Request]
11
11
  attr_reader requests: Array[Request]
12
12
 
13
+ attr_accessor max_concurrent_requests: Integer
14
+
13
15
  @options: Options
14
- @max_concurrent_requests: Integer
15
16
  @max_requests: Integer
16
17
  @parser: Parser::HTTP1
17
18
  @buffer: Buffer
data/sig/connection.rbs CHANGED
@@ -44,25 +44,23 @@ module HTTPX
44
44
 
45
45
  def addresses: () -> Array[ipaddr]?
46
46
 
47
- def addresses=: (Array[ipaddr]) -> void
47
+ def addresses=: (Array[ipaddr] addresses) -> void
48
+
49
+ def send: (Request request) -> void
48
50
 
49
51
  def match?: (URI::Generic uri, Options options) -> bool
50
52
 
51
53
  def expired?: () -> boolish
52
54
 
53
- def mergeable?: (Connection) -> bool
55
+ def mergeable?: (Connection connection) -> bool
54
56
 
55
- def coalescable?: (Connection) -> bool
57
+ def coalescable?: (Connection connection) -> bool
56
58
 
57
59
  def create_idle: (?Hash[Symbol, untyped] options) -> Connection
58
60
 
59
- def merge: (Connection) -> void
60
-
61
- def purge_pending: () { (Request) -> void } -> void
62
-
63
- def match_altsvcs?: (URI::Generic uri) -> bool
61
+ def merge: (Connection connection) -> void
64
62
 
65
- def match_altsvc_options?: (URI::Generic uri, Options options) -> bool
63
+ def purge_pending: () { (Request request) -> void } -> void
66
64
 
67
65
  def connecting?: () -> bool
68
66
 
@@ -74,12 +72,12 @@ module HTTPX
74
72
 
75
73
  def call: () -> void
76
74
 
75
+ def terminate: () -> void
76
+
77
77
  def close: () -> void
78
78
 
79
79
  def reset: () -> void
80
80
 
81
- def send: (Request) -> void
82
-
83
81
  def timeout: () -> Numeric?
84
82
 
85
83
  def idling: () -> void
@@ -94,7 +92,9 @@ module HTTPX
94
92
 
95
93
  private
96
94
 
97
- def initialize: (io_type, URI::Generic, options) -> untyped
95
+ def initialize: (URI::Generic uri, options) -> void
96
+
97
+ def initialize_type: (URI::Generic uri, options) -> io_type
98
98
 
99
99
  def connect: () -> void
100
100
 
@@ -112,15 +112,15 @@ module HTTPX
112
112
 
113
113
  def set_parser_callbacks: (HTTP1 | HTTP2 parser) -> void
114
114
 
115
- def transition: (Symbol) -> void
115
+ def transition: (Symbol nextstate) -> void
116
116
 
117
- def handle_transition: (Symbol) -> void
117
+ def handle_transition: (Symbol nextstate) -> void
118
118
 
119
119
  def build_socket: (?Array[ipaddr]? addrs) -> (TCP | SSL | UNIX)
120
120
 
121
- def on_error: (HTTPX::TimeoutError | Error | StandardError) -> void
121
+ def on_error: (HTTPX::TimeoutError | Error | StandardError error) -> void
122
122
 
123
- def handle_error: (StandardError) -> void
123
+ def handle_error: (StandardError error) -> void
124
124
 
125
125
  def purge_after_closed: () -> void
126
126
 
data/sig/options.rbs CHANGED
@@ -9,9 +9,11 @@ module HTTPX
9
9
  OPERATION_TIMEOUT: Integer
10
10
  KEEP_ALIVE_TIMEOUT: Integer
11
11
  SETTINGS_TIMEOUT: Integer
12
+ CLOSE_HANDSHAKE_TIMEOUT: Integer
12
13
  DEFAULT_OPTIONS: Hash[Symbol, untyped]
14
+ REQUEST_BODY_IVARS: Array[Symbol]
13
15
 
14
- type timeout_type = :connect_timeout | :settings_timeout | :operation_timeout | :keep_alive_timeout | :read_timeout | :write_timeout | :request_timeout
16
+ type timeout_type = :connect_timeout | :settings_timeout | :close_handshake_timeout | :operation_timeout | :keep_alive_timeout | :read_timeout | :write_timeout | :request_timeout
15
17
  type timeout = Hash[timeout_type, Numeric?]
16
18
 
17
19
  def self.new: (?options) -> instance
@@ -120,10 +122,16 @@ module HTTPX
120
122
  # ip_families
121
123
  attr_reader ip_families: Array[ip_family]
122
124
 
123
- def ==: (untyped other) -> bool
125
+ def ==: (Options other) -> bool
126
+
127
+ def options_equals?: (Options other, ?Array[Symbol] ignore_ivars) -> bool
128
+
124
129
  def merge: (_ToHash[Symbol, untyped] other) -> instance
130
+
125
131
  def to_hash: () -> Hash[Symbol, untyped]
126
132
 
133
+ def extend_with_plugin_classes: (Module pl) -> void
134
+
127
135
  private
128
136
 
129
137
  REQUEST_IVARS: Array[Symbol]
@@ -0,0 +1,38 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module Callbacks
4
+ class CallbackError < Exception
5
+ end
6
+
7
+ module InstanceMethods
8
+ include HTTPX::Callbacks
9
+
10
+ type socket = TCPSocket | SSLSocket | UNIXSocket
11
+
12
+ def on_connection_opened: () { (http_uri origin, socket sock) -> void } -> self
13
+
14
+ def on_connection_closed: () { (http_uri origin) -> void } -> self
15
+
16
+ def on_request_error: () { (Request request, StandardError error) -> void } -> self
17
+
18
+ def on_request_started: () { (Request request) -> void } -> self
19
+
20
+ def on_request_body_chunk: () { (Request request, String chunk) -> void } -> self
21
+
22
+ def on_request_completed: () { (Request request) -> void } -> self
23
+
24
+ def on_response_started: () { (Request request, Response response) -> void } -> self
25
+
26
+ def on_response_body_chunk: () { (Request request, Response response, String chunk) -> void } -> self
27
+
28
+ def on_response_completed: () { (Request request, response response) -> void } -> self
29
+
30
+ private
31
+
32
+ def emit_or_callback_error: (*untyped) -> void
33
+ end
34
+ end
35
+
36
+ type sessionCallbacks = Session & Callbacks::InstanceMethods
37
+ end
38
+ end
@@ -5,6 +5,8 @@ module HTTPX
5
5
 
6
6
  interface _CookieOptions
7
7
  def cookies: () -> Jar?
8
+
9
+ def merge_cookie_in_jar: (Array[String] cookies, Jar jar) -> void
8
10
  end
9
11
 
10
12
  def self.extra_options: (Options) -> (Options & _CookieOptions)
@@ -12,6 +12,8 @@ module HTTPX
12
12
  def follow_insecure_redirects: () -> bool?
13
13
 
14
14
  def allow_auth_to_other_origins: () -> bool?
15
+
16
+ def redirect_on: (http_uri) -> bool?
15
17
  end
16
18
 
17
19
  def self.extra_options: (Options) -> (Options & _FollowRedirectsOptions)
@@ -1,5 +1,6 @@
1
1
  module HTTPX
2
- Socks4Error: singleton(Error)
2
+ class Socks4Error < HTTPProxyError
3
+ end
3
4
 
4
5
  module Plugins
5
6
  module Proxy
@@ -1,5 +1,6 @@
1
1
  module HTTPX
2
- Socks5Error: singleton(Error)
2
+ class Socks5Error < HTTPProxyError
3
+ end
3
4
 
4
5
  module Plugins
5
6
  module Proxy
@@ -1,5 +1,8 @@
1
1
  module HTTPX
2
- class HTTPProxyError < Error
2
+ class HTTPProxyError < ConnectionError
3
+ end
4
+
5
+ class ProxySSL < SSL
3
6
  end
4
7
 
5
8
  module Plugins
@@ -36,6 +39,13 @@ module HTTPX
36
39
 
37
40
  module InstanceMethods
38
41
  @__proxy_uris: Array[generic_uri]
42
+
43
+ private
44
+
45
+ def proxy_error?: (Request request, response) -> bool
46
+ end
47
+
48
+ module ConnectionMethods
39
49
  end
40
50
  end
41
51
 
data/sig/pool.rbs CHANGED
@@ -6,8 +6,6 @@ module HTTPX
6
6
  @timers: Timers
7
7
  @selector: Selector
8
8
  @connections: Array[Connection]
9
- @eden_connections: Array[Connection]
10
- @connected_connections: Integer
11
9
 
12
10
  def empty?: () -> void
13
11
 
@@ -37,7 +35,7 @@ module HTTPX
37
35
 
38
36
  def register_connection: (Connection) -> void
39
37
 
40
- def unregister_connection: (Connection) -> void
38
+ def unregister_connection: (Connection, ?bool cleanup) -> void
41
39
 
42
40
  def select_connection: (Selector::selectable) -> void
43
41
 
@@ -14,6 +14,8 @@ module HTTPX
14
14
 
15
15
  def close: () -> void
16
16
 
17
+ alias terminate close
18
+
17
19
  def closed?: () -> bool
18
20
 
19
21
  def empty?: () -> bool
@@ -22,7 +24,7 @@ module HTTPX
22
24
 
23
25
  private
24
26
 
25
- def emit_resolved_connection: (Connection connection, Array[IPAddr] addresses) -> void
27
+ def emit_resolved_connection: (Connection connection, Array[IPAddr] addresses, bool early_resolve) -> void
26
28
 
27
29
  def initialize: (ip_family? family, options options) -> void
28
30
 
data/sig/session.rbs CHANGED
@@ -33,7 +33,9 @@ module HTTPX
33
33
 
34
34
  def set_connection_callbacks: (Connection connection, Array[Connection] connections, Options options) -> void
35
35
 
36
- def build_altsvc_connection: (Connection existing_connection, Array[Connection] connections, URI::Generic alt_origin, String origin, Hash[String, String] alt_params, Options options) -> Connection?
36
+ def set_request_callbacks: (Request request) -> void
37
+
38
+ def build_altsvc_connection: (Connection existing_connection, Array[Connection] connections, URI::Generic alt_origin, String origin, Hash[String, String] alt_params, Options options) -> (Connection & AltSvc::ConnectionMixin)?
37
39
 
38
40
  def build_requests: (verb, uri, options) -> Array[Request]
39
41
  | (Array[[verb, uri, options]], options) -> Array[Request]
@@ -41,9 +43,7 @@ module HTTPX
41
43
  | (verb, _Each[[uri, options]], Options) -> Array[Request]
42
44
  | (verb, _Each[uri], options) -> Array[Request]
43
45
 
44
- def build_connection: (URI::HTTP | URI::HTTP uri, Options options) -> Connection
45
-
46
- def init_connection: (String type, URI::HTTP | URI::HTTP uri, Options options) -> Connection
46
+ def init_connection: (URI::HTTP | URI::HTTP uri, Options options) -> Connection
47
47
 
48
48
  def send_requests: (*Request) -> Array[response]
49
49
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: httpx
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.5
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tiago Cardoso
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-23 00:00:00.000000000 Z
11
+ date: 2024-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http-2-next
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 1.0.1
19
+ version: 1.0.3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 1.0.1
26
+ version: 1.0.3
27
27
  description: A client library for making HTTP requests from Ruby.
28
28
  email:
29
29
  - cardoso_tiago@hotmail.com
@@ -137,6 +137,8 @@ extra_rdoc_files:
137
137
  - doc/release_notes/1_1_3.md
138
138
  - doc/release_notes/1_1_4.md
139
139
  - doc/release_notes/1_1_5.md
140
+ - doc/release_notes/1_2_0.md
141
+ - doc/release_notes/1_2_1.md
140
142
  files:
141
143
  - LICENSE.txt
142
144
  - README.md
@@ -245,6 +247,8 @@ files:
245
247
  - doc/release_notes/1_1_3.md
246
248
  - doc/release_notes/1_1_4.md
247
249
  - doc/release_notes/1_1_5.md
250
+ - doc/release_notes/1_2_0.md
251
+ - doc/release_notes/1_2_1.md
248
252
  - lib/httpx.rb
249
253
  - lib/httpx/adapters/datadog.rb
250
254
  - lib/httpx/adapters/faraday.rb
@@ -279,6 +283,7 @@ files:
279
283
  - lib/httpx/plugins/aws_sigv4.rb
280
284
  - lib/httpx/plugins/basic_auth.rb
281
285
  - lib/httpx/plugins/brotli.rb
286
+ - lib/httpx/plugins/callbacks.rb
282
287
  - lib/httpx/plugins/circuit_breaker.rb
283
288
  - lib/httpx/plugins/circuit_breaker/circuit.rb
284
289
  - lib/httpx/plugins/circuit_breaker/circuit_store.rb
@@ -309,6 +314,7 @@ files:
309
314
  - lib/httpx/plugins/response_cache/file_store.rb
310
315
  - lib/httpx/plugins/response_cache/store.rb
311
316
  - lib/httpx/plugins/retries.rb
317
+ - lib/httpx/plugins/ssrf_filter.rb
312
318
  - lib/httpx/plugins/stream.rb
313
319
  - lib/httpx/plugins/upgrade.rb
314
320
  - lib/httpx/plugins/upgrade/h2.rb
@@ -350,6 +356,7 @@ files:
350
356
  - lib/httpx/transcoder/xml.rb
351
357
  - lib/httpx/utils.rb
352
358
  - lib/httpx/version.rb
359
+ - sig/altsvc.rbs
353
360
  - sig/buffer.rbs
354
361
  - sig/callbacks.rbs
355
362
  - sig/chainable.rbs
@@ -377,6 +384,7 @@ files:
377
384
  - sig/plugins/aws_sigv4.rbs
378
385
  - sig/plugins/basic_auth.rbs
379
386
  - sig/plugins/brotli.rbs
387
+ - sig/plugins/callbacks.rbs
380
388
  - sig/plugins/circuit_breaker.rbs
381
389
  - sig/plugins/compression.rbs
382
390
  - sig/plugins/cookies.rbs
@@ -437,8 +445,8 @@ licenses:
437
445
  - Apache 2.0
438
446
  metadata:
439
447
  bug_tracker_uri: https://gitlab.com/os85/httpx/issues
440
- changelog_uri: https://os85.gitlab.io/httpx/#release-notes
441
- documentation_uri: https://os85.gitlab.io/httpx/rdoc/
448
+ changelog_uri: https://honeyryderchuck.gitlab.io/httpx/#release-notes
449
+ documentation_uri: https://honeyryderchuck.gitlab.io/httpx/rdoc/
442
450
  source_code_uri: https://gitlab.com/os85/httpx
443
451
  homepage_uri: https://honeyryderchuck.gitlab.io/httpx/
444
452
  rubygems_mfa_required: 'true'