httpx 0.15.4 → 0.18.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.
Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/doc/release_notes/0_16_0.md +93 -0
  3. data/doc/release_notes/0_16_1.md +5 -0
  4. data/doc/release_notes/0_17_0.md +49 -0
  5. data/doc/release_notes/0_18_0.md +69 -0
  6. data/lib/httpx/adapters/datadog.rb +1 -1
  7. data/lib/httpx/adapters/faraday.rb +8 -14
  8. data/lib/httpx/adapters/webmock.rb +9 -3
  9. data/lib/httpx/altsvc.rb +2 -2
  10. data/lib/httpx/buffer.rb +1 -1
  11. data/lib/httpx/callbacks.rb +1 -1
  12. data/lib/httpx/chainable.rb +18 -11
  13. data/lib/httpx/connection/http1.rb +21 -13
  14. data/lib/httpx/connection/http2.rb +20 -25
  15. data/lib/httpx/connection.rb +73 -77
  16. data/lib/httpx/domain_name.rb +1 -1
  17. data/lib/httpx/errors.rb +11 -11
  18. data/lib/httpx/extensions.rb +50 -4
  19. data/lib/httpx/headers.rb +1 -1
  20. data/lib/httpx/io/ssl.rb +3 -3
  21. data/lib/httpx/io/tls.rb +8 -8
  22. data/lib/httpx/loggable.rb +5 -5
  23. data/lib/httpx/options.rb +108 -81
  24. data/lib/httpx/parser/http1.rb +11 -7
  25. data/lib/httpx/plugins/aws_sdk_authentication.rb +42 -18
  26. data/lib/httpx/plugins/aws_sigv4.rb +19 -20
  27. data/lib/httpx/plugins/compression.rb +17 -14
  28. data/lib/httpx/plugins/cookies/cookie.rb +4 -2
  29. data/lib/httpx/plugins/cookies/jar.rb +21 -2
  30. data/lib/httpx/plugins/cookies.rb +20 -7
  31. data/lib/httpx/plugins/digest_authentication.rb +19 -15
  32. data/lib/httpx/plugins/expect.rb +26 -18
  33. data/lib/httpx/plugins/follow_redirects.rb +9 -9
  34. data/lib/httpx/plugins/grpc/call.rb +4 -1
  35. data/lib/httpx/plugins/grpc/message.rb +2 -2
  36. data/lib/httpx/plugins/grpc.rb +72 -46
  37. data/lib/httpx/plugins/h2c.rb +7 -3
  38. data/lib/httpx/plugins/internal_telemetry.rb +8 -8
  39. data/lib/httpx/plugins/multipart/decoder.rb +187 -0
  40. data/lib/httpx/plugins/multipart/mime_type_detector.rb +3 -3
  41. data/lib/httpx/plugins/multipart/part.rb +2 -2
  42. data/lib/httpx/plugins/multipart.rb +16 -2
  43. data/lib/httpx/plugins/ntlm_authentication.rb +12 -10
  44. data/lib/httpx/plugins/proxy/socks4.rb +2 -1
  45. data/lib/httpx/plugins/proxy/socks5.rb +2 -1
  46. data/lib/httpx/plugins/proxy/ssh.rb +20 -13
  47. data/lib/httpx/plugins/proxy.rb +10 -10
  48. data/lib/httpx/plugins/response_cache/store.rb +55 -0
  49. data/lib/httpx/plugins/response_cache.rb +88 -0
  50. data/lib/httpx/plugins/retries.rb +46 -23
  51. data/lib/httpx/plugins/stream.rb +3 -4
  52. data/lib/httpx/plugins/upgrade.rb +7 -6
  53. data/lib/httpx/pool.rb +39 -13
  54. data/lib/httpx/registry.rb +2 -2
  55. data/lib/httpx/request.rb +16 -25
  56. data/lib/httpx/resolver/https.rb +4 -8
  57. data/lib/httpx/resolver/native.rb +19 -5
  58. data/lib/httpx/resolver/resolver_mixin.rb +2 -1
  59. data/lib/httpx/resolver/system.rb +2 -0
  60. data/lib/httpx/resolver.rb +2 -2
  61. data/lib/httpx/response.rb +91 -48
  62. data/lib/httpx/selector.rb +11 -24
  63. data/lib/httpx/session.rb +41 -23
  64. data/lib/httpx/session2.rb +23 -0
  65. data/lib/httpx/timers.rb +84 -0
  66. data/lib/httpx/transcoder/body.rb +3 -2
  67. data/lib/httpx/transcoder/chunker.rb +2 -1
  68. data/lib/httpx/transcoder/form.rb +20 -0
  69. data/lib/httpx/transcoder/json.rb +12 -0
  70. data/lib/httpx/transcoder.rb +62 -1
  71. data/lib/httpx/utils.rb +10 -2
  72. data/lib/httpx/version.rb +1 -1
  73. data/lib/httpx.rb +7 -3
  74. data/sig/buffer.rbs +3 -1
  75. data/sig/chainable.rbs +31 -29
  76. data/sig/connection/http1.rbs +11 -5
  77. data/sig/connection/http2.rbs +16 -5
  78. data/sig/connection.rbs +31 -13
  79. data/sig/errors.rbs +35 -1
  80. data/sig/headers.rbs +20 -19
  81. data/sig/httpx.rbs +4 -1
  82. data/sig/loggable.rbs +3 -1
  83. data/sig/options.rbs +45 -34
  84. data/sig/parser/http1.rbs +3 -3
  85. data/sig/plugins/authentication.rbs +1 -1
  86. data/sig/plugins/aws_sdk_authentication.rbs +25 -3
  87. data/sig/plugins/aws_sigv4.rbs +13 -5
  88. data/sig/plugins/basic_authentication.rbs +1 -1
  89. data/sig/plugins/compression.rbs +4 -6
  90. data/sig/plugins/cookies/cookie.rbs +5 -7
  91. data/sig/plugins/cookies/jar.rbs +9 -10
  92. data/sig/plugins/cookies.rbs +4 -5
  93. data/sig/plugins/digest_authentication.rbs +2 -3
  94. data/sig/plugins/expect.rbs +2 -4
  95. data/sig/plugins/follow_redirects.rbs +3 -5
  96. data/sig/plugins/grpc.rbs +4 -7
  97. data/sig/plugins/h2c.rbs +0 -2
  98. data/sig/plugins/multipart.rbs +64 -10
  99. data/sig/plugins/ntlm_authentication.rbs +2 -3
  100. data/sig/plugins/persistent.rbs +3 -8
  101. data/sig/plugins/proxy/ssh.rbs +4 -4
  102. data/sig/plugins/proxy.rbs +13 -13
  103. data/sig/plugins/push_promise.rbs +0 -2
  104. data/sig/plugins/response_cache.rbs +35 -0
  105. data/sig/plugins/retries.rbs +7 -8
  106. data/sig/plugins/stream.rbs +1 -1
  107. data/sig/plugins/upgrade.rbs +2 -3
  108. data/sig/pool.rbs +7 -2
  109. data/sig/registry.rbs +1 -1
  110. data/sig/request.rbs +11 -8
  111. data/sig/resolver/native.rbs +10 -5
  112. data/sig/resolver/resolver_mixin.rbs +4 -5
  113. data/sig/resolver/system.rbs +4 -0
  114. data/sig/resolver.rbs +7 -0
  115. data/sig/response.rbs +26 -13
  116. data/sig/selector.rbs +11 -9
  117. data/sig/session.rbs +22 -23
  118. data/sig/timers.rbs +32 -0
  119. data/sig/transcoder/body.rbs +6 -1
  120. data/sig/transcoder/chunker.rbs +8 -2
  121. data/sig/transcoder/form.rbs +3 -1
  122. data/sig/transcoder/json.rbs +2 -0
  123. data/sig/transcoder.rbs +13 -5
  124. data/sig/utils.rbs +6 -0
  125. metadata +18 -18
  126. data/lib/httpx/request2.rb +0 -14
@@ -1,27 +1,26 @@
1
1
  module HTTPX
2
2
  module Plugins::Cookies
3
3
  class Jar
4
- type cookie = Cookie | Array[String, String, cookie_attributes] | Array[String, String] | cookie_attributes
4
+ type cookie = Cookie | Array[[String, String, cookie_attributes]] | Array[[String, String]] | cookie_attributes
5
5
 
6
6
  include Enumerable[Cookie]
7
7
 
8
8
  @cookies: Array[Cookie]
9
9
 
10
- def parse: (String) -> void
10
+ def parse: (String set_cookie) -> void
11
11
 
12
- def add: (Cookie) -> void
13
- | (Cookie, String) -> void
12
+ def add: (Cookie name, ?String path) -> void
14
13
 
15
14
  def []: (uri) -> Array[Cookie]
16
15
 
17
- def each: (uri) { (Cookie) -> void } -> void
18
- | (uri) -> Enumerable[Cookie]
19
- | () { (Cookie) -> void } -> void
20
- | () -> Enumerable[Cookie]
16
+ def each: (?uri) { (Cookie) -> void } -> void
17
+ | (?uri) -> Enumerable[Cookie]
18
+
19
+ def merge: (_Each[cookie] cookies) -> instance
20
+
21
21
  private
22
22
 
23
- def initialize: () -> void
24
- | (_Each[cookie]) -> untyped
23
+ def initialize: (?_Each[cookie] cookies) -> untyped
25
24
  end
26
25
  end
27
26
  end
@@ -1,13 +1,12 @@
1
1
  module HTTPX
2
2
  module Plugins
3
3
  module Cookies
4
- type jar = Jar | _Each[cookies]
4
+ type jar = Jar | _Each[Jar::cookie]
5
5
 
6
6
  interface _CookieOptions
7
7
  def cookies: () -> Jar?
8
- def cookies=: (jar) -> Jar
9
8
  end
10
-
9
+
11
10
  def self.extra_options: (Options) -> (Options & _CookieOptions)
12
11
 
13
12
  module InstanceMethods
@@ -19,7 +18,7 @@ module HTTPX
19
18
  end
20
19
  end
21
20
 
22
- type sessionCookies = Session & Plugins::Cookies::InstanceMethods
23
- type headersCookies = Headers & Plugins::Cookies::HeadersMethods
21
+ type sessionCookies = Session & Cookies::InstanceMethods
22
+ type headersCookies = Headers & Cookies::HeadersMethods
24
23
  end
25
24
  end
@@ -5,9 +5,8 @@ module HTTPX
5
5
 
6
6
  interface _DigestOptions
7
7
  def digest: () -> Digest?
8
- def digest=: (Digest) -> Digest
9
8
  end
10
-
9
+
11
10
  def self.extra_options: (Options) -> (Options & _DigestOptions)
12
11
 
13
12
  def self.load_dependencies: (*untyped) -> void
@@ -27,6 +26,6 @@ module HTTPX
27
26
  end
28
27
  end
29
28
 
30
- type sessionDigestAuthentication = Plugins::sessionAuthentication & Plugins::DigestAuthentication::InstanceMethods
29
+ type sessionDigestAuthentication = sessionAuthentication & DigestAuthentication::InstanceMethods
31
30
  end
32
31
  end
@@ -2,15 +2,13 @@ module HTTPX
2
2
  module Plugins
3
3
  module Expect
4
4
  EXPECT_TIMEOUT: Integer
5
-
5
+
6
6
  interface _ExpectOptions
7
7
  def expect_timeout: () -> Integer?
8
- def expect_timeout=: (int) -> Integer
9
8
 
10
9
  def expect_threshold_size: () -> Integer?
11
- def expect_threshold_size=: (int) -> Integer
12
10
  end
13
-
11
+
14
12
  def self.extra_options: (Options) -> (Options & _ExpectOptions)
15
13
  end
16
14
  end
@@ -5,15 +5,13 @@ module HTTPX
5
5
  module FollowRedirects
6
6
  MAX_REDIRECTS: Integer
7
7
  REDIRECT_STATUS: Range[Integer]
8
-
8
+
9
9
  interface _FollowRedirectsOptions
10
10
  def max_redirects: () -> Integer?
11
- def max_redirects=: (int) -> Integer
12
11
 
13
12
  def follow_insecure_redirects: () -> bool?
14
- def follow_insecure_redirects=: (bool) -> bool
15
13
  end
16
-
14
+
17
15
  def self.extra_options: (Options) -> (Options & _FollowRedirectsOptions)
18
16
 
19
17
  module InstanceMethods
@@ -30,6 +28,6 @@ module HTTPX
30
28
  end
31
29
  end
32
30
 
33
- type sessionFollowRedirects = Session & Plugins::FollowRedirects::InstanceMethods
31
+ type sessionFollowRedirects = Session & FollowRedirects::InstanceMethods
34
32
  end
35
33
  end
data/sig/plugins/grpc.rbs CHANGED
@@ -15,6 +15,8 @@ module HTTPX
15
15
  type grpc_request = untyped | _Each[untyped]
16
16
  type grpc_response = untyped | _Each[untyped]
17
17
 
18
+ type credentials = Proc
19
+
18
20
  class Call
19
21
  attr_writer decoder: _Callable
20
22
 
@@ -39,7 +41,7 @@ module HTTPX
39
41
 
40
42
  def self?.decode: (String message, encodings: Array[String], encoders: Compression::encodings_registry) -> String
41
43
  | (String message, encodings: Array[String], encoders: Compression::encodings_registry) { (String) -> void } -> void
42
-
44
+
43
45
  def self?.cancel: (Request) -> void
44
46
 
45
47
  def self?.verify_status: (StreamResponse | response) -> void
@@ -47,19 +49,14 @@ module HTTPX
47
49
 
48
50
  interface _GRPCOptions
49
51
  def grpc_service: () -> String?
50
- def grpc_service=: (string) -> String
51
52
 
52
53
  def grpc_compression: () -> compression_option?
53
- def grpc_compression=: (compression_option) -> compression_option
54
54
 
55
55
  def grpc_rpcs: () -> Hash[String, rpc_def]?
56
- def grpc_rpcs=: (Hash[String, rpc_def]) -> Hash[String, rpc_def]
57
56
 
58
57
  def grpc_deadline: () -> Integer?
59
- def grpc_deadline=: (Integer) -> Integer
60
58
 
61
59
  def call_credentials: () -> credentials?
62
- def call_credentials=: (credentials) -> credentials
63
60
  end
64
61
 
65
62
  def self.extra_options: (Options) -> (Options & _GRPCOptions)
@@ -88,6 +85,6 @@ module HTTPX
88
85
  end
89
86
  end
90
87
 
91
- type grpcSession = Session & Plugins::GRPC::InstanceMethods
88
+ type grpcSession = Session & GRPC::InstanceMethods
92
89
  end
93
90
  end
data/sig/plugins/h2c.rbs CHANGED
@@ -15,7 +15,5 @@ module HTTPX
15
15
  def upgrade_to_h2c: (Request, Response) -> void
16
16
  end
17
17
  end
18
-
19
- type sessionH2C = Session & Plugins::H2C::InstanceMethods
20
18
  end
21
19
  end
@@ -1,43 +1,97 @@
1
1
  module HTTPX
2
2
  module Plugins
3
3
  module Multipart
4
+ interface _MultipartInput
5
+ def filename: () -> String
6
+ def content_type: () -> String
7
+ def read: (?int? length, ?string? output) -> String?
8
+ end
9
+
10
+ MULTIPART_VALUE_COND: ^(_Reader | record_multipart_value value) -> bool
11
+
4
12
  def self.load_dependencies: (singleton(Session)) -> void
5
13
  def self.configure: (*untyped) -> void
6
14
  def self?.encode: (untyped) -> (Encoder | Transcoder::Form::Encoder)
15
+ def self?.decode: (HTTPX::Response response) -> Transcoder::_Decoder
16
+
17
+ def self?.normalize_keys: [U] (_ToS key, _ToAry[untyped] | _ToHash[_ToS, untyped] | untyped value) { (String, ?untyped) -> U } -> U
7
18
 
8
19
  type multipart_value = string | Pathname | File | _Reader
9
20
 
10
- type record_multipart_value = multipart_value |
11
- { content_type: String, filename: String, body: multipart_value } |
21
+ type record_multipart_value = { content_type: String, filename: String, body: multipart_value } |
12
22
  { content_type: String, body: multipart_value }
13
23
 
14
24
  type multipart_nested_value = multipart_value | _ToAry[multipart_value] | _ToHash[string, multipart_value]
15
25
 
16
- type multipart_input = Enumerable[[string, multipart_value], untyped]
17
-
18
26
  class Encoder
19
27
  include Transcoder::_Encoder
20
- include _Reader
28
+
29
+ @boundary: String
30
+ @part_index: Integer
31
+ @buffer: String
32
+
33
+ @form: Enumerable[[Symbol | string, multipart_nested_value]]
34
+ @parts: Array[_Reader]
21
35
 
22
36
  def content_type: () -> String
23
37
 
38
+ def read: (?int? length, ?string? buffer) -> String?
39
+
40
+ def rewind: () -> void
41
+
24
42
  private
25
43
 
26
- def initialize: (_Each[Symbol | string, multipart_nested_value] multipart_data) -> untyped
44
+ def to_parts: (Enumerable[[Symbol | string, multipart_nested_value]] multipart_data) -> Array[_Reader]
45
+
46
+ def initialize: (Enumerable[[Symbol | string, multipart_nested_value]] multipart_data) -> untyped
27
47
 
28
48
  def header_part: (string key, String content_type, String? filename) -> StringIO
29
49
 
30
- def read_chunks: (String buffer, Integer? length) -> void
50
+ def read_chunks: (String buffer, ?Integer? length) -> void
51
+
52
+ def read_from_part: (?Integer? max_length) -> String?
53
+ end
54
+
55
+ class Decoder
56
+ BOUNDARY_RE: Regexp
57
+
58
+ @state: :idle | :part_header | :part_body | :parse_boundary | :done
59
+ @buffer: String
60
+ @parts: Hash[String, untyped]
61
+ @boundary: String
62
+ @intermediate_boundary: String
63
+
64
+ def call: (Response response, untyped) -> Hash[String, untyped]
65
+
66
+ private
67
+
68
+ def initialize: (Response response) -> void
69
+
70
+ def parse: () -> void
31
71
 
32
- def read_from_part: (Integer? max_length) -> void
72
+ def get_filename: (String head) -> String?
73
+ end
74
+
75
+ class FilePart # < SimpleDelegator
76
+ attr_reader original_filename: String
77
+ attr_reader content_type: String
78
+
79
+ # @file: Tempfile
80
+
81
+ # private
82
+
83
+ def initialize: (String filename, String content_type) -> void
33
84
  end
34
85
 
35
86
  module Part
36
- def self?.call: (multipart_nested_value) -> ([_Reader, String, String?])
87
+ def self?.call: [U] (_MultipartInput multipart_input) -> [U, String, String]
88
+ | (multipart_nested_value input) -> ([StringIO, String, String?] | [File, String, String])
37
89
  end
38
90
 
39
91
  module MimeTypeDetector
40
- def self?.call: (IO file, ?String filename) -> String?
92
+ DEFAULT_MIMETYPE: String
93
+
94
+ def self?.call: (::IO file, String filename) -> String?
41
95
  end
42
96
  end
43
97
  end
@@ -4,9 +4,8 @@ module HTTPX
4
4
 
5
5
  interface _NTLMOptions
6
6
  def ntlm: () -> NTLMParams?
7
- def ntlm=: (NTLMParams) -> NTLMParams
8
7
  end
9
-
8
+
10
9
  def self.extra_options: (Options) -> (Options & _NTLMOptions)
11
10
 
12
11
  def self.load_dependencies: (*untyped) -> void
@@ -22,6 +21,6 @@ module HTTPX
22
21
  end
23
22
  end
24
23
 
25
- type sessionNTLMAuthentication = Plugins::sessionAuthentication & Plugins::NTLMAuthentication::InstanceMethods
24
+ type sessionNTLMAuthentication = sessionAuthentication & NTLMAuthentication::InstanceMethods
26
25
  end
27
26
  end
@@ -2,15 +2,10 @@ module HTTPX
2
2
  module Plugins
3
3
  module Persistent
4
4
  def self.load_dependencies: (singleton(Session)) -> void
5
-
6
- interface _PersistentOptions
7
- def persistent: () -> bool?
8
- def persistent=: (bool) -> bool
9
- end
10
-
11
- def self.extra_options: (Options) -> (Options & _PersistentOptions)
5
+
6
+ def self.extra_options: (Options) -> (Options)
12
7
  end
13
-
8
+
14
9
  type sessionPersistent = sessionFollowRedirects
15
10
  end
16
11
  end
@@ -3,16 +3,16 @@ module HTTPX
3
3
  module Proxy
4
4
  module SSH
5
5
  def self.load_dependencies: (singleton(Session)) -> void
6
-
7
- module InstancenMethods
6
+
7
+ module InstanceMethods
8
8
  private
9
9
 
10
- def build_gateway_socket: (int, URI::HTTPS | URI::HTTPS, Options) -> IO
10
+ def build_gateway_socket: (int, URI::HTTP | URI::HTTPS, Options) -> _ToIO
11
11
  end
12
12
  end
13
13
  end
14
14
 
15
15
 
16
- type sessionSSHProxy = Plugins::Proxy::InstanceMethods & Plugins::Proxy::SSH::InstanceMethods
16
+ type sessionSSHProxy = Proxy::InstanceMethods & Proxy::SSH::InstanceMethods
17
17
  end
18
18
  end
@@ -1,5 +1,6 @@
1
1
  module HTTPX
2
- HTTPProxyError: singleton(Error)
2
+ class HTTPProxyError < Error
3
+ end
3
4
 
4
5
  module Plugins
5
6
  module Proxy
@@ -8,8 +9,8 @@ module HTTPX
8
9
 
9
10
  class Parameters
10
11
  attr_reader uri: URI::Generic
11
- attr_reader username: string?
12
- attr_reader password: string?
12
+ attr_reader username: String?
13
+ attr_reader password: String?
13
14
 
14
15
  def authenticated?: () -> boolish
15
16
  def token_authentication: () -> String?
@@ -18,29 +19,28 @@ module HTTPX
18
19
 
19
20
  private
20
21
 
21
- def initialize: (uri: generic_uri, ?username: string, ?password: string) -> untyped
22
+ def initialize: (uri: generic_uri, ?username: String, ?password: String) -> untyped
22
23
  end
23
24
 
24
25
  def self.configure: (singleton(Session)) -> void
25
-
26
- type proxyParam = Parameters | Hash
27
-
26
+
27
+ type proxyParam = Parameters | Hash[Symbol, untyped]
28
+
28
29
  interface _ProxyOptions
29
30
  def proxy: () -> proxyParam?
30
- def proxy=: (Parameters | _ToHash) -> proxyParam
31
31
  end
32
-
32
+
33
33
  def self.extra_options: (Options) -> (Options & _ProxyOptions)
34
34
 
35
35
  module InstanceMethods
36
36
  private
37
37
 
38
- def proxy_uris: (uri, Options & _ProxyOptions) -> { uri: (URI | string), username: string, password: string }
39
- | (uri, Options & _ProxyOptions) -> { uri: (URI | string) }
40
- | (uri, Options & _ProxyOptions) -> nil
38
+ def proxy_uris: (generic_uri, Options & _ProxyOptions) -> { uri: generic_uri, username: String, password: String }
39
+ | (generic_uri, Options & _ProxyOptions) -> { uri: generic_uri }
40
+ | (generic_uri, Options & _ProxyOptions) -> nil
41
41
  end
42
42
  end
43
43
 
44
- type sessionProxy = Session & Plugins::Proxy::InstanceMethods
44
+ type sessionProxy = Session & Proxy::InstanceMethods
45
45
  end
46
46
  end
@@ -1,8 +1,6 @@
1
1
  module HTTPX
2
2
  module Plugins
3
3
  module PushPromise
4
- def self.extra_options: (Options) -> Options
5
-
6
4
  module ResponseMethods
7
5
  def pushed?: () -> boolish
8
6
  def mark_as_pushed!: () -> void
@@ -0,0 +1,35 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module ResponseCache
4
+ CACHEABLE_VERBS: Array[Symbol]
5
+
6
+ def self?.cacheable_request?: (Request request) -> bool
7
+ def self?.cacheable_response?: (response response) -> bool
8
+ def self?.cached_response?: (response response) -> bool
9
+
10
+ class Store
11
+ @store: Hash[URI::Generic, Response]
12
+
13
+ def lookup: (URI::Generic uri) -> Response?
14
+
15
+ def cached?: (URI::Generic uri) -> bool
16
+
17
+ def cache: (URI::Generic uri, Response response) -> void
18
+
19
+ def prepare: (Request request) -> void
20
+ end
21
+
22
+ module InstanceMethods
23
+ @response_cache: Store
24
+
25
+ def clear_response_cache: () -> void
26
+ end
27
+
28
+ module ResponseMethods
29
+ def copy_from_cached: (Response other) -> void
30
+ end
31
+ end
32
+
33
+ type sessionResponseCache = Session & ResponseCache::InstanceMethods
34
+ end
35
+ end
@@ -4,25 +4,24 @@ module HTTPX
4
4
  MAX_RETRIES: Integer
5
5
  IDEMPOTENT_METHODS: Array[verb]
6
6
  RETRYABLE_ERRORS: Array[singleton(StandardError)]
7
-
7
+ DEFAULT_JITTER: ^(Numeric) -> Numeric
8
+
8
9
  interface _RetryCallback
9
10
  def call: (response) -> bool?
10
11
  end
11
12
 
12
13
  interface _RetriesOptions
13
14
  def retry_after: () -> Numeric?
14
- def retry_after=: (Numeric) -> Numeric
15
+
16
+ def retry_jitter: () -> ^(Numeric) -> Numeric
15
17
 
16
18
  def max_retries: () -> Integer?
17
- def max_retries=: (int) -> Integer
18
19
 
19
- def retry_change_requests: () -> bool?
20
- def retry_change_requests=: (bool) -> bool
20
+ def retry_change_requests: () -> boolish
21
21
 
22
22
  def retry_on: () -> _RetryCallback?
23
- def retry_on=: (_RetryCallback) -> _RetryCallback
24
23
  end
25
-
24
+
26
25
  def self.extra_options: (Options) -> (Options & _RetriesOptions)
27
26
 
28
27
  module InstanceMethods
@@ -39,6 +38,6 @@ module HTTPX
39
38
  end
40
39
  end
41
40
 
42
- type sessionRetries = Session & Plugins::Retries::InstanceMethods
41
+ type sessionRetries = Session & Retries::InstanceMethods
43
42
  end
44
43
  end
@@ -35,6 +35,6 @@ module HTTPX
35
35
 
36
36
  end
37
37
 
38
- type sessionStream = Session & Plugins::Stream::InstanceMethods
38
+ type sessionStream = Session & Stream::InstanceMethods
39
39
  end
40
40
  end
@@ -7,9 +7,8 @@ module HTTPX
7
7
 
8
8
  interface _UpgradeOptions
9
9
  def upgrade_handlers: () -> handlers_registry?
10
- def upgrade_handlers=: (handlers_registry) -> handlers_registry
11
10
  end
12
-
11
+
13
12
  def self.extra_options: (Options) -> (Options & _UpgradeOptions)
14
13
 
15
14
  module ConnectionMethods
@@ -18,6 +17,6 @@ module HTTPX
18
17
 
19
18
  def hijack_io: () -> void
20
19
  end
21
- end
20
+ end
22
21
  end
23
22
  end
data/sig/pool.rbs CHANGED
@@ -4,13 +4,14 @@ module HTTPX
4
4
 
5
5
  def next_tick: () -> void
6
6
 
7
- def close: (Array[Connection]) -> void
8
- | () -> void
7
+ def close: (*Array[Connection]) -> void
9
8
 
10
9
  def init_connection: (Connection, Options) -> void
11
10
 
12
11
  def find_connection: (generic_uri, Options) -> Connection?
13
12
 
13
+ def deactivate: (*Array[Connection]) -> void
14
+
14
15
  private
15
16
 
16
17
  def initialize: () -> untyped
@@ -27,6 +28,10 @@ module HTTPX
27
28
 
28
29
  def unregister_connection: (Connection) -> void
29
30
 
31
+ def select_connection: (resolver | Connection connection) -> void
32
+
33
+ def deselect_connection: (resolver | Connection connection) -> void
34
+
30
35
  def coalesce_connections: (Connection, Connection) -> void
31
36
 
32
37
  def next_timeout: () -> Numeric?
data/sig/registry.rbs CHANGED
@@ -2,7 +2,7 @@ module HTTPX::Registry[T, V]
2
2
  # type registrable = Symbol | String | Class
3
3
 
4
4
  def self.registry: (T tag) -> Class
5
- | () -> Hash[K, V]
5
+ | () -> Hash[T, V]
6
6
  def self.register: (T tag, V handler) -> void
7
7
 
8
8
  def registry: (?T tag) -> V
data/sig/request.rbs CHANGED
@@ -1,12 +1,13 @@
1
1
  module HTTPX
2
2
  class Request
3
+ extend Forwardable
3
4
  include Callbacks
4
5
 
5
- METHODS: Array[verb]
6
+ METHODS: Array[Symbol]
6
7
  USER_AGENT: String
7
8
 
8
- attr_reader verb: verb
9
- attr_reader uri: URI::HTTP | URI::HTTPS
9
+ attr_reader verb: Symbol
10
+ attr_reader uri: URI::Generic
10
11
  attr_reader headers: Headers
11
12
  attr_reader body: Body
12
13
  attr_reader state: Symbol
@@ -14,13 +15,13 @@ module HTTPX
14
15
  attr_reader response: response?
15
16
  attr_reader drain_error: StandardError?
16
17
 
17
- def initialize: (verb | String, uri, ?options?) -> untyped
18
+ def initialize: (Symbol | String, generic_uri, ?options) -> untyped
18
19
 
19
20
  def interests: () -> (:r | :w)
20
21
 
21
- def merge_headers: (Headers | Hash) -> void
22
+ def merge_headers: (_Each[[String, headers_value]]) -> void
22
23
 
23
- def scheme: () -> ("http" | "https")
24
+ def scheme: () -> String
24
25
 
25
26
  def response=: (response) -> void
26
27
 
@@ -49,6 +50,7 @@ module HTTPX
49
50
  def each: () { (String) -> void } -> void
50
51
  | () -> Enumerable[String]
51
52
 
53
+ def rewind: () -> void
52
54
  def empty?: () -> bool
53
55
  def bytesize: () -> Numeric
54
56
  def stream: (Transcoder::_Encoder) -> bodyIO
@@ -59,8 +61,9 @@ module HTTPX
59
61
  end
60
62
 
61
63
  class ProcIO
62
- include _Writer
63
- def initialize: (^(_ToS) -> void) -> untyped
64
+ def initialize: (^(String) -> void) -> untyped
65
+
66
+ def write: (String data) -> Integer
64
67
  end
65
68
  end
66
69
  end
@@ -1,9 +1,13 @@
1
1
  module HTTPX
2
2
  module Resolver
3
3
  class Native
4
+ extend Forwardable
4
5
  include ResolverMixin
5
6
  include _ToIO
6
7
 
8
+ DEFAULTS: Hash[Symbol, untyped]
9
+ DNS_PORT: Integer
10
+
7
11
  @options: Options
8
12
  @ns_index: Integer
9
13
  @resolver_options: Hash[Symbol, untyped]
@@ -15,7 +19,8 @@ module HTTPX
15
19
  @queries: Hash[String, Connection]
16
20
  @read_buffer: String
17
21
  @write_buffer: Buffer
18
- @state: :idle | :closed
22
+
23
+ attr_reader state: Symbol
19
24
 
20
25
  def closed?: () -> bool
21
26
 
@@ -35,6 +40,8 @@ module HTTPX
35
40
 
36
41
  def initialize: (options) -> untyped
37
42
 
43
+ def calculate_interests: () -> (:r | :w)
44
+
38
45
  def consume: () -> void
39
46
 
40
47
  def do_retry: () -> void
@@ -46,15 +53,13 @@ module HTTPX
46
53
 
47
54
  def parse: (String) -> void
48
55
 
49
- def resolve: (Connection, String hostname) -> void
50
- | (Connection) -> void
51
- | () -> void
56
+ def resolve: (?Connection connection, ?String hostname) -> void
52
57
 
53
58
  def build_socket: () -> void
54
59
 
55
60
  def transition: (Symbol nextstate) -> void
56
61
 
57
- def handle_error: (StandardError) -> void
62
+ def handle_error: (NativeResolveError | StandardError) -> void
58
63
  end
59
64
  end
60
65
  end