eggfetch 0.1.4__tar.gz → 0.2.0__tar.gz

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 (303) hide show
  1. {eggfetch-0.1.4 → eggfetch-0.2.0}/Cargo.lock +58 -133
  2. {eggfetch-0.1.4 → eggfetch-0.2.0}/Cargo.toml +3 -3
  3. {eggfetch-0.1.4 → eggfetch-0.2.0}/PKG-INFO +47 -16
  4. {eggfetch-0.1.4/crates/eggfetch-core → eggfetch-0.2.0}/README.md +44 -15
  5. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/Cargo.toml +52 -14
  6. {eggfetch-0.1.4/crates/eggfetch-python → eggfetch-0.2.0/crates/eggfetch-core}/README.md +44 -15
  7. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/auth.rs +53 -12
  8. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/body.rs +431 -35
  9. eggfetch-0.2.0/crates/eggfetch-core/src/client/config.rs +120 -0
  10. eggfetch-0.2.0/crates/eggfetch-core/src/client/connectors.rs +179 -0
  11. eggfetch-0.2.0/crates/eggfetch-core/src/client/routes.rs +462 -0
  12. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/client.rs +842 -493
  13. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/compression.rs +149 -88
  14. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/cookie.rs +271 -55
  15. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/error.rs +233 -2
  16. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/headers.rs +62 -2
  17. eggfetch-0.2.0/crates/eggfetch-core/src/http_origin.rs +393 -0
  18. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/http_version.rs +8 -8
  19. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/lib.rs +37 -9
  20. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/limits.rs +8 -0
  21. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/multipart.rs +34 -12
  22. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/network_stream.rs +12 -0
  23. eggfetch-0.2.0/crates/eggfetch-core/src/pipeline/finalize.rs +132 -0
  24. eggfetch-0.2.0/crates/eggfetch-core/src/pipeline/h3_dispatch.rs +350 -0
  25. eggfetch-0.2.0/crates/eggfetch-core/src/pipeline/hyper_dispatch.rs +282 -0
  26. eggfetch-0.2.0/crates/eggfetch-core/src/pipeline/lean.rs +121 -0
  27. eggfetch-0.2.0/crates/eggfetch-core/src/pipeline/mod.rs +804 -0
  28. eggfetch-0.2.0/crates/eggfetch-core/src/pipeline/prepare.rs +658 -0
  29. eggfetch-0.2.0/crates/eggfetch-core/src/pipeline/proxy_dispatch.rs +132 -0
  30. eggfetch-0.2.0/crates/eggfetch-core/src/pipeline/redirect.rs +847 -0
  31. eggfetch-0.2.0/crates/eggfetch-core/src/pipeline/retry.rs +527 -0
  32. eggfetch-0.2.0/crates/eggfetch-core/src/pipeline/route.rs +169 -0
  33. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/pool.rs +578 -80
  34. eggfetch-0.2.0/crates/eggfetch-core/src/proxy/environment.rs +37 -0
  35. eggfetch-0.2.0/crates/eggfetch-core/src/proxy/identity.rs +53 -0
  36. eggfetch-0.2.0/crates/eggfetch-core/src/proxy/no_proxy.rs +340 -0
  37. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/proxy.rs +720 -357
  38. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/redact.rs +24 -3
  39. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/redirect.rs +347 -4
  40. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/request.rs +220 -116
  41. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/response.rs +12 -2
  42. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/response_decode.rs +5 -5
  43. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/retry.rs +45 -9
  44. eggfetch-0.2.0/crates/eggfetch-core/src/service.rs +84 -0
  45. eggfetch-0.2.0/crates/eggfetch-core/src/stream/body_timeout.rs +371 -0
  46. eggfetch-0.2.0/crates/eggfetch-core/src/stream/mod.rs +13 -0
  47. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/timeout.rs +81 -6
  48. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/tls.rs +427 -68
  49. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/transport/alt_svc.rs +119 -58
  50. eggfetch-0.2.0/crates/eggfetch-core/src/transport/connect.rs +1213 -0
  51. eggfetch-0.2.0/crates/eggfetch-core/src/transport/dialer.rs +347 -0
  52. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/transport/direct.rs +272 -46
  53. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/transport/direct_connector.rs +130 -13
  54. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/transport/http3.rs +108 -47
  55. eggfetch-0.2.0/crates/eggfetch-core/src/transport/hyper_client.rs +461 -0
  56. eggfetch-0.2.0/crates/eggfetch-core/src/transport/lifecycle.rs +893 -0
  57. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/transport/metrics.rs +88 -4
  58. eggfetch-0.2.0/crates/eggfetch-core/src/transport/mod.rs +129 -0
  59. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/transport/proxy.rs +465 -57
  60. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/transport/socks.rs +271 -35
  61. eggfetch-0.2.0/crates/eggfetch-core/src/transport/standard_resolver.rs +196 -0
  62. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/transport/uds.rs +8 -6
  63. eggfetch-0.2.0/crates/eggfetch-core/src/transport_hints.rs +165 -0
  64. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/tests/adverse_tests.rs +87 -0
  65. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/tests/cross_feature_tests.rs +42 -1
  66. eggfetch-0.2.0/crates/eggfetch-core/tests/custom_dialer_tests.rs +677 -0
  67. eggfetch-0.2.0/crates/eggfetch-core/tests/lean_policy_tests.rs +229 -0
  68. eggfetch-0.2.0/crates/eggfetch-core/tests/lean_route_tests.rs +278 -0
  69. eggfetch-0.2.0/crates/eggfetch-core/tests/native_http_body_tests.rs +566 -0
  70. eggfetch-0.2.0/crates/eggfetch-core/tests/native_tower_service_tests.rs +279 -0
  71. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/tests/pool_tests.rs +164 -0
  72. eggfetch-0.2.0/crates/eggfetch-core/tests/proxy_env_tests.rs +150 -0
  73. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/tests/proxy_tests.rs +1138 -8
  74. eggfetch-0.2.0/crates/eggfetch-core/tests/public_api_contracts.rs +78 -0
  75. eggfetch-0.2.0/crates/eggfetch-core/tests/redirect_strict_tests.rs +253 -0
  76. eggfetch-0.2.0/crates/eggfetch-core/tests/request_failure_tests.rs +104 -0
  77. eggfetch-0.2.0/crates/eggfetch-core/tests/resolved_route_cache_tests.rs +680 -0
  78. eggfetch-0.2.0/crates/eggfetch-core/tests/response_body_public_shape.rs +38 -0
  79. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/tests/retry_integration.rs +359 -1
  80. eggfetch-0.2.0/crates/eggfetch-core/tests/streaming_decompression_tests.rs +565 -0
  81. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/tests/test_server.rs +22 -0
  82. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/tests/tls_fixtures.rs +23 -10
  83. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/tests/tls_integration.rs +37 -0
  84. eggfetch-0.2.0/crates/eggfetch-core/tests/total_body_deadline_tests.rs +856 -0
  85. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/tests/transport_metrics_tests.rs +126 -0
  86. eggfetch-0.2.0/crates/eggfetch-http-connect/Cargo.toml +24 -0
  87. {eggfetch-0.1.4 → eggfetch-0.2.0/crates/eggfetch-http-connect}/README.md +44 -15
  88. eggfetch-0.2.0/crates/eggfetch-http-connect/src/error.rs +86 -0
  89. eggfetch-0.2.0/crates/eggfetch-http-connect/src/lib.rs +66 -0
  90. eggfetch-0.2.0/crates/eggfetch-http-connect/src/request.rs +248 -0
  91. eggfetch-0.2.0/crates/eggfetch-http-connect/src/response.rs +245 -0
  92. eggfetch-0.2.0/crates/eggfetch-http-connect/src/target.rs +112 -0
  93. eggfetch-0.2.0/crates/eggfetch-http-connect/tests/wire.rs +394 -0
  94. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/Cargo.toml +4 -10
  95. eggfetch-0.2.0/crates/eggfetch-python/README.md +244 -0
  96. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/src/async_client.rs +90 -443
  97. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/src/auth.rs +5 -4
  98. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/src/client.rs +92 -448
  99. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/src/conversion.rs +101 -68
  100. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/src/cookies.rs +6 -6
  101. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/src/errors.rs +8 -0
  102. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/src/extensions.rs +1 -1
  103. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/src/headers.rs +1 -1
  104. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/src/lib.rs +52 -196
  105. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/src/limits.rs +1 -1
  106. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/src/multipart.rs +5 -5
  107. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/src/network_stream.rs +12 -7
  108. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/src/proxy.rs +66 -3
  109. eggfetch-0.2.0/crates/eggfetch-python/src/request_preparation.rs +487 -0
  110. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/src/response.rs +210 -66
  111. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/src/retry.rs +1 -1
  112. eggfetch-0.2.0/crates/eggfetch-python/src/streaming/async_iterators.rs +470 -0
  113. eggfetch-0.2.0/crates/eggfetch-python/src/streaming/decoding.rs +97 -0
  114. eggfetch-0.2.0/crates/eggfetch-python/src/streaming/state.rs +29 -0
  115. eggfetch-0.2.0/crates/eggfetch-python/src/streaming/sync_bridge.rs +87 -0
  116. eggfetch-0.2.0/crates/eggfetch-python/src/streaming/sync_iterators.rs +499 -0
  117. eggfetch-0.2.0/crates/eggfetch-python/src/streaming.rs +737 -0
  118. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/src/timeout.rs +13 -7
  119. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/src/tls.rs +91 -55
  120. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/src/trace_bridge.rs +1 -1
  121. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/native_fixtures.py +26 -4
  122. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_auth.py +2 -1
  123. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_corrective_02_extensions_and_wire_metadata.py +32 -0
  124. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_corrective_kernel.py +18 -0
  125. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_response_streaming.py +1 -0
  126. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_ssl_context_translation.py +364 -0
  127. eggfetch-0.2.0/crates/eggfetch-python/tests/native_api_manifest.json +343 -0
  128. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/test_async.py +137 -2
  129. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/test_auth.py +2 -1
  130. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/test_http2.py +38 -0
  131. eggfetch-0.2.0/crates/eggfetch-python/tests/test_native_api.py +56 -0
  132. eggfetch-0.2.0/crates/eggfetch-python/tests/test_python_typing_surface.py +73 -0
  133. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/test_response_compat.py +72 -0
  134. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/test_sync.py +11 -1
  135. eggfetch-0.2.0/crates/eggfetch-python/tests/typing/compat_consumer.py +15 -0
  136. eggfetch-0.2.0/crates/eggfetch-python/tests/typing/consumer.py +85 -0
  137. eggfetch-0.2.0/crates/eggfetch-python/tests/typing/negative_sync_async_body.py +14 -0
  138. eggfetch-0.2.0/crates/eggfetch-python/tests/typing/negative_verify_and_return.py +16 -0
  139. {eggfetch-0.1.4 → eggfetch-0.2.0}/pyproject.toml +3 -1
  140. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/__init__.py +14 -0
  141. eggfetch-0.2.0/python/eggfetch/__init__.pyi +89 -0
  142. eggfetch-0.2.0/python/eggfetch/_native.pyi +341 -0
  143. {eggfetch-0.1.4/python/eggfetch/compat/httpx → eggfetch-0.2.0/python/eggfetch}/_ssl_context.py +37 -0
  144. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx/__init__.py +1 -3
  145. eggfetch-0.2.0/python/eggfetch/compat/httpx/__init__.pyi +119 -0
  146. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx/_auth.py +1 -1
  147. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx/_client.py +31 -15
  148. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx/_diagnostics.py +1 -1
  149. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx/_proxy.py +10 -2
  150. eggfetch-0.2.0/python/eggfetch/compat/httpx/_ssl_context.py +17 -0
  151. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/__init__.py +1 -1
  152. eggfetch-0.2.0/python/eggfetch/compat/httpx2/__init__.pyi +100 -0
  153. eggfetch-0.2.0/python/eggfetch/py.typed +1 -0
  154. eggfetch-0.1.4/crates/eggfetch-core/src/config.rs +0 -15
  155. eggfetch-0.1.4/crates/eggfetch-core/src/pipeline.rs +0 -2476
  156. eggfetch-0.1.4/crates/eggfetch-core/src/stream/mod.rs +0 -7
  157. eggfetch-0.1.4/crates/eggfetch-core/src/stream/read_timeout.rs +0 -161
  158. eggfetch-0.1.4/crates/eggfetch-core/src/transport/connect.rs +0 -578
  159. eggfetch-0.1.4/crates/eggfetch-core/src/transport/mod.rs +0 -68
  160. eggfetch-0.1.4/crates/eggfetch-python/src/streaming.rs +0 -1786
  161. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/examples/quickstart.rs +0 -0
  162. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/h2_headers.rs +0 -0
  163. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/stream/write_timeout.rs +0 -0
  164. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/trace.rs +0 -0
  165. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/src/transport/connect_timeout.rs +0 -0
  166. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/tests/direct_transport_tests.rs +0 -0
  167. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/tests/h3_alt_svc_discovery.rs +0 -0
  168. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/tests/h3_hardening.rs +0 -0
  169. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/tests/h3_integration.rs +0 -0
  170. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/tests/h3_interop_qualification.rs +0 -0
  171. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/tests/http2_tests.rs +0 -0
  172. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/tests/http3_tests.rs +0 -0
  173. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/tests/integration.rs +0 -0
  174. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/tests/native_json.rs +2 -2
  175. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/tests/network_stream_tests.rs +0 -0
  176. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/tests/resource_stabilization.rs +0 -0
  177. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/tests/timeout_tests.rs +0 -0
  178. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-core/tests/trailer_tests.rs +0 -0
  179. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/__init__.py +0 -0
  180. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/conftest.py +0 -0
  181. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/fixtures.py +0 -0
  182. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_asgi.py +0 -0
  183. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_auth_input_normalization.py +0 -0
  184. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_auth_replay.py +0 -0
  185. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_backends.py +0 -0
  186. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_behavior_cases.py +0 -0
  187. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_client.py +0 -0
  188. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_client_mutability_and_state.py +0 -0
  189. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_client_stream_overrides.py +0 -0
  190. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_config_objects.py +0 -0
  191. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_cookie_scope_parity.py +0 -0
  192. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_cookies.py +0 -0
  193. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_corrective_01_tls_and_proxy_trust_safety.py +0 -0
  194. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_corrective_01_tls_network_proof.py +0 -0
  195. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_corrective_03_network_stream_upgrade.py +0 -0
  196. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_downstream_portfolio.py +0 -0
  197. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_downstream_runner_negative.py +0 -0
  198. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_environment.py +0 -0
  199. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_exceptions.py +0 -0
  200. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_extensions.py +0 -0
  201. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_h2_differential.py +0 -0
  202. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_headers.py +0 -0
  203. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_hook_auth_ordering.py +0 -0
  204. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_hook_cookie_auth_ordering.py +0 -0
  205. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_hooks.py +0 -0
  206. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_httpx2_api_parity.py +0 -0
  207. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_httpx2_behavior.py +0 -0
  208. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_httpx2_sse.py +0 -0
  209. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_httpx2_websocket.py +0 -0
  210. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_httpx_extras.py +0 -0
  211. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_httpx_reference_pinning.py +0 -0
  212. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_httpx_required.py +0 -0
  213. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_imports.py +0 -0
  214. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_lifecycle.py +0 -0
  215. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_lossy_conversions.py +0 -0
  216. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_merge_lossless.py +0 -0
  217. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_merge_matrix.py +0 -0
  218. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_mock_transport.py +0 -0
  219. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_mounts.py +0 -0
  220. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_multihop_cleanup.py +0 -0
  221. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_native_proxy_tls.py +0 -0
  222. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_native_timeout_classification.py +0 -0
  223. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_no_proxy_differential.py +0 -0
  224. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_oracle_negative.py +0 -0
  225. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_protocol_and_unsupported_options.py +0 -0
  226. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_proxy_differential.py +0 -0
  227. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_proxy_phase05_tracks.py +0 -0
  228. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_raw_stream_httpx_differential.py +0 -0
  229. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_raw_stream_lifecycle.py +0 -0
  230. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_redirect_state_machine_parity.py +0 -0
  231. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_request.py +0 -0
  232. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_request_construction_parity.py +0 -0
  233. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_request_stream_state.py +0 -0
  234. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_request_streaming.py +0 -0
  235. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_resource_assertions.py +0 -0
  236. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_response.py +0 -0
  237. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_response_encoding_parity.py +0 -0
  238. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_response_metadata_parity.py +0 -0
  239. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_response_status_and_redirect_state.py +0 -0
  240. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_response_stream_state_parity.py +0 -0
  241. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_shutdown.py +0 -0
  242. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_soak.py +0 -0
  243. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_socks_transport.py +0 -0
  244. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_ssl_context_network_proof.py +0 -0
  245. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_stream_resources.py +0 -0
  246. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_timeout_integration.py +0 -0
  247. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_timeout_proxysis.py +0 -0
  248. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_timeout_reference_differential.py +0 -0
  249. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_top_level_helpers_parity.py +0 -0
  250. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_trace_detection.py +0 -0
  251. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_transports.py +0 -0
  252. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_uds_transport.py +0 -0
  253. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_url_query.py +0 -0
  254. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/compat/test_wsgi.py +0 -0
  255. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/conftest.py +0 -0
  256. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/test_close_races.py +0 -0
  257. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/test_cookie_auth.py +0 -0
  258. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/test_cookies.py +0 -0
  259. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/test_differential.py +0 -0
  260. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/test_interpreter_shutdown.py +0 -0
  261. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/test_parity.py +0 -0
  262. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/test_proxy.py +0 -0
  263. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/test_redirects.py +0 -0
  264. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/test_retry.py +0 -0
  265. {eggfetch-0.1.4 → eggfetch-0.2.0}/crates/eggfetch-python/tests/test_streaming.py +0 -0
  266. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/__init__.py +0 -0
  267. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx/_asgi.py +0 -0
  268. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx/_cookies.py +0 -0
  269. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx/_exceptions.py +0 -0
  270. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx/_headers.py +0 -0
  271. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx/_limits.py +0 -0
  272. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx/_mock.py +0 -0
  273. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx/_request.py +0 -0
  274. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx/_response.py +0 -0
  275. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx/_status_codes.py +0 -0
  276. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx/_stream.py +0 -0
  277. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx/_timeout.py +0 -0
  278. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx/_transports.py +0 -0
  279. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx/_urls.py +0 -0
  280. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx/_wsgi.py +0 -0
  281. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/_alias.py +0 -0
  282. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/_api.py +0 -0
  283. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/_asgi.py +0 -0
  284. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/_auth.py +0 -0
  285. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/_client.py +0 -0
  286. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/_config.py +0 -0
  287. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/_cookies.py +0 -0
  288. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/_exceptions.py +0 -0
  289. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/_headers.py +0 -0
  290. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/_mock.py +0 -0
  291. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/_request.py +0 -0
  292. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/_response.py +0 -0
  293. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/_sse.py +0 -0
  294. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/_status_codes.py +0 -0
  295. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/_stream.py +0 -0
  296. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/_transports.py +0 -0
  297. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/_urls.py +0 -0
  298. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/_wsgi.py +0 -0
  299. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/websockets/__init__.py +0 -0
  300. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/websockets/_api.py +0 -0
  301. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/websockets/_exceptions.py +0 -0
  302. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/websockets/_ping.py +0 -0
  303. {eggfetch-0.1.4 → eggfetch-0.2.0}/python/eggfetch/compat/httpx2/websockets/_transport.py +0 -0
@@ -1,6 +1,6 @@
1
1
  # This file is automatically @generated by Cargo.
2
2
  # It is not intended for manual editing.
3
- version = 3
3
+ version = 4
4
4
 
5
5
  [[package]]
6
6
  name = "adler2"
@@ -120,9 +120,15 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
120
120
 
121
121
  [[package]]
122
122
  name = "base64"
123
- version = "0.22.1"
123
+ version = "0.21.7"
124
124
  source = "registry+https://github.com/rust-lang/crates.io-index"
125
- checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
125
+ checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
126
+
127
+ [[package]]
128
+ name = "base64"
129
+ version = "0.23.1"
130
+ source = "registry+https://github.com/rust-lang/crates.io-index"
131
+ checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5"
126
132
 
127
133
  [[package]]
128
134
  name = "base64ct"
@@ -216,9 +222,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
216
222
 
217
223
  [[package]]
218
224
  name = "chacha20"
219
- version = "0.10.1"
225
+ version = "0.10.2"
220
226
  source = "registry+https://github.com/rust-lang/crates.io-index"
221
- checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81"
227
+ checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06"
222
228
  dependencies = [
223
229
  "cfg-if",
224
230
  "cpufeatures",
@@ -461,20 +467,6 @@ dependencies = [
461
467
  "syn",
462
468
  ]
463
469
 
464
- [[package]]
465
- name = "dashmap"
466
- version = "6.2.1"
467
- source = "registry+https://github.com/rust-lang/crates.io-index"
468
- checksum = "e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c"
469
- dependencies = [
470
- "cfg-if",
471
- "crossbeam-utils",
472
- "hashbrown 0.14.5",
473
- "lock_api",
474
- "once_cell",
475
- "parking_lot_core",
476
- ]
477
-
478
470
  [[package]]
479
471
  name = "deranged"
480
472
  version = "0.5.8"
@@ -509,7 +501,7 @@ dependencies = [
509
501
 
510
502
  [[package]]
511
503
  name = "eggfetch-cli"
512
- version = "0.1.4"
504
+ version = "0.2.0"
513
505
  dependencies = [
514
506
  "anyhow",
515
507
  "bytes",
@@ -526,14 +518,14 @@ dependencies = [
526
518
 
527
519
  [[package]]
528
520
  name = "eggfetch-core"
529
- version = "0.1.4"
521
+ version = "0.2.0"
530
522
  dependencies = [
531
523
  "async-compression",
532
- "base64",
524
+ "base64 0.23.1",
533
525
  "brotli",
534
526
  "bytes",
535
527
  "cookie",
536
- "dashmap",
528
+ "eggfetch-http-connect",
537
529
  "flate2",
538
530
  "futures-core",
539
531
  "futures-util",
@@ -572,7 +564,7 @@ dependencies = [
572
564
 
573
565
  [[package]]
574
566
  name = "eggfetch-ffi"
575
- version = "0.1.4"
567
+ version = "0.2.0"
576
568
  dependencies = [
577
569
  "bytes",
578
570
  "eggfetch-core",
@@ -582,9 +574,18 @@ dependencies = [
582
574
  "url",
583
575
  ]
584
576
 
577
+ [[package]]
578
+ name = "eggfetch-http-connect"
579
+ version = "0.2.0"
580
+ dependencies = [
581
+ "base64 0.23.1",
582
+ "thiserror",
583
+ "tokio",
584
+ ]
585
+
585
586
  [[package]]
586
587
  name = "eggfetch-node"
587
- version = "0.1.4"
588
+ version = "0.2.0"
588
589
  dependencies = [
589
590
  "eggfetch-ffi",
590
591
  "napi",
@@ -596,7 +597,7 @@ dependencies = [
596
597
 
597
598
  [[package]]
598
599
  name = "eggfetch-python"
599
- version = "0.1.4"
600
+ version = "0.2.0"
600
601
  dependencies = [
601
602
  "bytes",
602
603
  "eggfetch-core",
@@ -605,12 +606,8 @@ dependencies = [
605
606
  "http",
606
607
  "pyo3",
607
608
  "pyo3-async-runtimes",
608
- "pyo3-build-config",
609
- "rustls",
610
609
  "tokio",
611
- "tokio-rustls",
612
610
  "url",
613
- "webpki-roots 0.26.11",
614
611
  ]
615
612
 
616
613
  [[package]]
@@ -641,7 +638,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
641
638
  checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
642
639
  dependencies = [
643
640
  "libc",
644
- "windows-sys 0.52.0",
641
+ "windows-sys 0.61.2",
645
642
  ]
646
643
 
647
644
  [[package]]
@@ -854,12 +851,6 @@ dependencies = [
854
851
  "zerocopy",
855
852
  ]
856
853
 
857
- [[package]]
858
- name = "hashbrown"
859
- version = "0.14.5"
860
- source = "registry+https://github.com/rust-lang/crates.io-index"
861
- checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
862
-
863
854
  [[package]]
864
855
  name = "hashbrown"
865
856
  version = "0.17.1"
@@ -1090,16 +1081,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1090
1081
  checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"
1091
1082
  dependencies = [
1092
1083
  "equivalent",
1093
- "hashbrown 0.17.1",
1094
- ]
1095
-
1096
- [[package]]
1097
- name = "indoc"
1098
- version = "2.0.7"
1099
- source = "registry+https://github.com/rust-lang/crates.io-index"
1100
- checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706"
1101
- dependencies = [
1102
- "rustversion",
1084
+ "hashbrown",
1103
1085
  ]
1104
1086
 
1105
1087
  [[package]]
@@ -1110,7 +1092,7 @@ checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46"
1110
1092
  dependencies = [
1111
1093
  "hermit-abi",
1112
1094
  "libc",
1113
- "windows-sys 0.52.0",
1095
+ "windows-sys 0.61.2",
1114
1096
  ]
1115
1097
 
1116
1098
  [[package]]
@@ -1195,15 +1177,6 @@ version = "0.8.2"
1195
1177
  source = "registry+https://github.com/rust-lang/crates.io-index"
1196
1178
  checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"
1197
1179
 
1198
- [[package]]
1199
- name = "lock_api"
1200
- version = "0.4.14"
1201
- source = "registry+https://github.com/rust-lang/crates.io-index"
1202
- checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
1203
- dependencies = [
1204
- "scopeguard",
1205
- ]
1206
-
1207
1180
  [[package]]
1208
1181
  name = "log"
1209
1182
  version = "0.4.33"
@@ -1222,15 +1195,6 @@ version = "2.8.3"
1222
1195
  source = "registry+https://github.com/rust-lang/crates.io-index"
1223
1196
  checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98"
1224
1197
 
1225
- [[package]]
1226
- name = "memoffset"
1227
- version = "0.9.1"
1228
- source = "registry+https://github.com/rust-lang/crates.io-index"
1229
- checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
1230
- dependencies = [
1231
- "autocfg",
1232
- ]
1233
-
1234
1198
  [[package]]
1235
1199
  name = "miniz_oxide"
1236
1200
  version = "0.8.9"
@@ -1352,27 +1316,14 @@ version = "0.2.1"
1352
1316
  source = "registry+https://github.com/rust-lang/crates.io-index"
1353
1317
  checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
1354
1318
 
1355
- [[package]]
1356
- name = "parking_lot_core"
1357
- version = "0.9.12"
1358
- source = "registry+https://github.com/rust-lang/crates.io-index"
1359
- checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
1360
- dependencies = [
1361
- "cfg-if",
1362
- "libc",
1363
- "redox_syscall",
1364
- "smallvec",
1365
- "windows-link",
1366
- ]
1367
-
1368
1319
  [[package]]
1369
1320
  name = "pem"
1370
- version = "3.0.6"
1321
+ version = "3.0.3"
1371
1322
  source = "registry+https://github.com/rust-lang/crates.io-index"
1372
- checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be"
1323
+ checksum = "1b8fcc794035347fb64beda2d3b462595dd2753e3f268d89c5aae77e8cf2c310"
1373
1324
  dependencies = [
1374
- "base64",
1375
- "serde_core",
1325
+ "base64 0.21.7",
1326
+ "serde",
1376
1327
  ]
1377
1328
 
1378
1329
  [[package]]
@@ -1491,29 +1442,26 @@ dependencies = [
1491
1442
 
1492
1443
  [[package]]
1493
1444
  name = "pyo3"
1494
- version = "0.23.5"
1445
+ version = "0.29.2"
1495
1446
  source = "registry+https://github.com/rust-lang/crates.io-index"
1496
- checksum = "7778bffd85cf38175ac1f545509665d0b9b92a198ca7941f131f85f7a4f9a872"
1447
+ checksum = "4688ddedf473e32662b9b067670129a8afb8c18e351482c70d62ba4a88171e8b"
1497
1448
  dependencies = [
1498
- "cfg-if",
1499
- "indoc",
1500
1449
  "libc",
1501
- "memoffset",
1502
1450
  "once_cell",
1503
1451
  "portable-atomic",
1504
1452
  "pyo3-build-config",
1505
1453
  "pyo3-ffi",
1506
1454
  "pyo3-macros",
1507
- "unindent",
1508
1455
  ]
1509
1456
 
1510
1457
  [[package]]
1511
1458
  name = "pyo3-async-runtimes"
1512
- version = "0.23.0"
1459
+ version = "0.29.0"
1513
1460
  source = "registry+https://github.com/rust-lang/crates.io-index"
1514
- checksum = "977dc837525cfd22919ba6a831413854beb7c99a256c03bf8624ad707e45810e"
1461
+ checksum = "b3ef68daa7316a3fac65e5e18b2203f010346de1c1c53456811a2624673ab046"
1515
1462
  dependencies = [
1516
- "futures",
1463
+ "futures-channel",
1464
+ "futures-util",
1517
1465
  "once_cell",
1518
1466
  "pin-project-lite",
1519
1467
  "pyo3",
@@ -1522,19 +1470,18 @@ dependencies = [
1522
1470
 
1523
1471
  [[package]]
1524
1472
  name = "pyo3-build-config"
1525
- version = "0.23.5"
1473
+ version = "0.29.2"
1526
1474
  source = "registry+https://github.com/rust-lang/crates.io-index"
1527
- checksum = "94f6cbe86ef3bf18998d9df6e0f3fc1050a8c5efa409bf712e661a4366e010fb"
1475
+ checksum = "f41027e41b4bd03f6e60f9f417fe24a6341a6bb744edd62b6f709f2a52ea30e9"
1528
1476
  dependencies = [
1529
- "once_cell",
1530
1477
  "target-lexicon",
1531
1478
  ]
1532
1479
 
1533
1480
  [[package]]
1534
1481
  name = "pyo3-ffi"
1535
- version = "0.23.5"
1482
+ version = "0.29.2"
1536
1483
  source = "registry+https://github.com/rust-lang/crates.io-index"
1537
- checksum = "e9f1b4c431c0bb1c8fb0a338709859eed0d030ff6daa34368d3b152a63dfdd8d"
1484
+ checksum = "e591a95526fead067432c3b3a33fc74770b87b1e04e73671090d9c2055a2b327"
1538
1485
  dependencies = [
1539
1486
  "libc",
1540
1487
  "pyo3-build-config",
@@ -1542,9 +1489,9 @@ dependencies = [
1542
1489
 
1543
1490
  [[package]]
1544
1491
  name = "pyo3-macros"
1545
- version = "0.23.5"
1492
+ version = "0.29.2"
1546
1493
  source = "registry+https://github.com/rust-lang/crates.io-index"
1547
- checksum = "fbc2201328f63c4710f68abdf653c89d8dbc2858b88c5d88b0ff38a75288a9da"
1494
+ checksum = "73225868fc1cd84eef2c3c230ddb91273bf1de46aeb8a4248da76d32a0924a1c"
1548
1495
  dependencies = [
1549
1496
  "proc-macro2",
1550
1497
  "pyo3-macros-backend",
@@ -1554,13 +1501,12 @@ dependencies = [
1554
1501
 
1555
1502
  [[package]]
1556
1503
  name = "pyo3-macros-backend"
1557
- version = "0.23.5"
1504
+ version = "0.29.2"
1558
1505
  source = "registry+https://github.com/rust-lang/crates.io-index"
1559
- checksum = "fca6726ad0f3da9c9de093d6f116a93c1a38e417ed73bf138472cf4064f72028"
1506
+ checksum = "571575aa3749fa6216757dd47d2a3e7ef360f329a40f0666a9fbd14889024952"
1560
1507
  dependencies = [
1561
1508
  "heck",
1562
1509
  "proc-macro2",
1563
- "pyo3-build-config",
1564
1510
  "quote",
1565
1511
  "syn",
1566
1512
  ]
@@ -1625,7 +1571,7 @@ dependencies = [
1625
1571
  "once_cell",
1626
1572
  "socket2",
1627
1573
  "tracing",
1628
- "windows-sys 0.52.0",
1574
+ "windows-sys 0.61.2",
1629
1575
  ]
1630
1576
 
1631
1577
  [[package]]
@@ -1741,15 +1687,6 @@ dependencies = [
1741
1687
  "yasna",
1742
1688
  ]
1743
1689
 
1744
- [[package]]
1745
- name = "redox_syscall"
1746
- version = "0.5.18"
1747
- source = "registry+https://github.com/rust-lang/crates.io-index"
1748
- checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
1749
- dependencies = [
1750
- "bitflags",
1751
- ]
1752
-
1753
1690
  [[package]]
1754
1691
  name = "regex"
1755
1692
  version = "1.13.0"
@@ -1809,14 +1746,14 @@ dependencies = [
1809
1746
  "errno",
1810
1747
  "libc",
1811
1748
  "linux-raw-sys",
1812
- "windows-sys 0.52.0",
1749
+ "windows-sys 0.61.2",
1813
1750
  ]
1814
1751
 
1815
1752
  [[package]]
1816
1753
  name = "rustls"
1817
- version = "0.23.41"
1754
+ version = "0.23.45"
1818
1755
  source = "registry+https://github.com/rust-lang/crates.io-index"
1819
- checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f"
1756
+ checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634"
1820
1757
  dependencies = [
1821
1758
  "log",
1822
1759
  "once_cell",
@@ -1851,9 +1788,9 @@ dependencies = [
1851
1788
 
1852
1789
  [[package]]
1853
1790
  name = "rustls-webpki"
1854
- version = "0.103.13"
1791
+ version = "0.103.15"
1855
1792
  source = "registry+https://github.com/rust-lang/crates.io-index"
1856
- checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e"
1793
+ checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2"
1857
1794
  dependencies = [
1858
1795
  "ring",
1859
1796
  "rustls-pki-types",
@@ -1896,12 +1833,6 @@ dependencies = [
1896
1833
  "windows-sys 0.61.2",
1897
1834
  ]
1898
1835
 
1899
- [[package]]
1900
- name = "scopeguard"
1901
- version = "1.2.0"
1902
- source = "registry+https://github.com/rust-lang/crates.io-index"
1903
- checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
1904
-
1905
1836
  [[package]]
1906
1837
  name = "security-framework"
1907
1838
  version = "3.7.0"
@@ -2060,9 +1991,9 @@ dependencies = [
2060
1991
 
2061
1992
  [[package]]
2062
1993
  name = "target-lexicon"
2063
- version = "0.12.16"
1994
+ version = "0.13.5"
2064
1995
  source = "registry+https://github.com/rust-lang/crates.io-index"
2065
- checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
1996
+ checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
2066
1997
 
2067
1998
  [[package]]
2068
1999
  name = "tempfile"
@@ -2074,7 +2005,7 @@ dependencies = [
2074
2005
  "getrandom 0.4.3",
2075
2006
  "once_cell",
2076
2007
  "rustix",
2077
- "windows-sys 0.52.0",
2008
+ "windows-sys 0.61.2",
2078
2009
  ]
2079
2010
 
2080
2011
  [[package]]
@@ -2283,12 +2214,6 @@ version = "1.13.3"
2283
2214
  source = "registry+https://github.com/rust-lang/crates.io-index"
2284
2215
  checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8"
2285
2216
 
2286
- [[package]]
2287
- name = "unindent"
2288
- version = "0.2.4"
2289
- source = "registry+https://github.com/rust-lang/crates.io-index"
2290
- checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3"
2291
-
2292
2217
  [[package]]
2293
2218
  name = "untrusted"
2294
2219
  version = "0.9.0"
@@ -2448,7 +2373,7 @@ version = "0.1.11"
2448
2373
  source = "registry+https://github.com/rust-lang/crates.io-index"
2449
2374
  checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
2450
2375
  dependencies = [
2451
- "windows-sys 0.52.0",
2376
+ "windows-sys 0.61.2",
2452
2377
  ]
2453
2378
 
2454
2379
  [[package]]
@@ -1,10 +1,10 @@
1
1
  [workspace]
2
- resolver = "2"
3
- members = ["crates/eggfetch-core", "crates/eggfetch-python"]
2
+ resolver = "3"
3
+ members = ["crates/eggfetch-http-connect", "crates/eggfetch-core", "crates/eggfetch-python"]
4
4
 
5
5
  [workspace.package]
6
6
  edition = "2021"
7
- rust-version = "1.80"
7
+ rust-version = "1.89"
8
8
  license = "MIT"
9
9
  repository = "https://github.com/eggstack/eggfetch"
10
10
  homepage = "https://github.com/eggstack/eggfetch"
@@ -1,12 +1,14 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eggfetch
3
- Version: 0.1.4
3
+ Version: 0.2.0
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Programming Language :: Python :: 3
6
6
  Classifier: Programming Language :: Python :: 3.10
7
7
  Classifier: Programming Language :: Python :: 3.11
8
8
  Classifier: Programming Language :: Python :: 3.12
9
9
  Classifier: Programming Language :: Python :: 3.13
10
+ Classifier: Programming Language :: Python :: 3.14
11
+ Classifier: Programming Language :: Python :: 3.15
10
12
  Classifier: Programming Language :: Rust
11
13
  Classifier: License :: OSI Approved :: MIT License
12
14
  Requires-Dist: pytest>=8.4 ; extra == 'test'
@@ -31,24 +33,29 @@ Project-URL: Repository, https://github.com/eggstack/eggfetch
31
33
  [![PyPI Downloads](https://static.pepy.tech/personalized-badge/eggfetch?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/eggfetch)
32
34
  [![License](https://img.shields.io/crates/l/eggfetch-core)](LICENSE-MIT)
33
35
 
34
- eggfetch is a Rust-native async HTTP client engine (tokio + hyper) with Python bindings and a CLI. There is exactly one networking implementation, living entirely in `eggfetch-core`; the Python sync API blocks on the async engine while releasing the GIL, and the async API integrates with asyncio.
36
+ eggfetch is a Rust-native async HTTP client engine (tokio + hyper) with Python bindings and a CLI. There is exactly one networking implementation, living entirely in `eggfetch-core` plus the small `eggfetch-http-connect` CONNECT wire primitive it owns; the Python sync API blocks on the async engine while releasing the GIL, and the async API integrates with asyncio.
35
37
 
36
38
  ## Features
37
39
 
38
- - **HTTP/1.1, HTTP/2, HTTP/3** — ALPN negotiation; HTTP/3 over QUIC stays experimental ([graduation gate](docs/architecture/core-tls-proxy-protocols.md))
39
- - **Streaming** — request/response bodies without eager buffering (`bytes_stream()`, `text_lines()`); trailers via `Response::trailers()` ([guide](docs/rust/guide.md))
40
- - **Pooling, timeouts, observability** — per-origin in-flight limits, phase-aware timeouts (pool/connect/write/read/total), connector/DNS/TLS and H3 transport metrics ([pool/timeouts](docs/architecture/core-timeout-pool.md))
41
- - **TLS** — rustls with custom CA bundles, mTLS client certs, version policy, verification toggle ([TLS](docs/concepts/tls.md))
42
- - **Proxy** — HTTP forwarding, HTTPS CONNECT, proxy auth, per-request override, `NO_PROXY`; SOCKS5 and UDS routes ([proxy](docs/concepts/proxy.md))
40
+ - **HTTP/1.1, HTTP/2, HTTP/3** — ALPN negotiation; HTTP/3 over QUIC is experimental ([guide](docs/rust/guide.md))
41
+ - **Streaming** — response bodies stream without eager buffering (`bytes_stream()`, `text_lines()`), with trailers after EOF ([guide](docs/rust/guide.md))
42
+ - **Performance qualification** — API-safe Rust/Python hot-path benchmarks and reproduction commands are documented in [architecture/benchmarks](docs/architecture/benchmarks.md)
43
+ - **Pooling and timeouts** — per-origin connection pools, phase-aware timeouts (pool/connect/write/read/total), and transport metrics ([pool/timeouts](docs/architecture/core-timeout-pool.md))
44
+ - **TLS** — rustls with per-client crypto providers, custom or additive CA roots, mTLS client certs, version policy, and verification toggle ([TLS](docs/concepts/tls.md))
45
+ - **Proxy** — HTTP forwarding, HTTPS CONNECT, proxy auth, per-request override, `NO_PROXY`, SOCKS5, and UDS routes ([proxy](docs/concepts/proxy.md)). CONNECT wire bytes live in the small `eggfetch-http-connect` crate (no sockets/TLS/retry) consumed by `eggfetch-core` via the `proxy` feature.
43
46
  - **Cookies, auth, multipart** — RFC 6265 jar, Basic/Bearer with redaction, streaming multipart uploads ([cookies](docs/concepts/cookies.md))
44
- - **Retries and redirects** — policy-driven backoff with `Retry-After`, replayable-body redirect handling ([retry](docs/concepts/retry.md))
47
+ - **Retries, redirects, and routing** — policy-driven backoff with `Retry-After`, replayable-body redirect handling ([retry](docs/concepts/retry.md)). Retry/redirect/Basic are coarse Cargo capabilities (`logical-retry`, `redirects`, `basic-auth`); advanced routing (custom Dialer, resolved-target/SNI, socket options, UDS) is `advanced-routing`: the lean `standard-http1` + `tls-rustls` profile omits both for Bearer-only single-attempt standard-route clients while `http1`/`http2`/default retain current behavior.
45
48
  - **Compression** — feature-gated streaming gzip/brotli/zstd/deflate with zip-bomb limits ([compression](docs/concepts/compression.md))
46
- - **Native Rust JSON (opt-in)** — replayable `RequestBuilder::json()`, single-consumption `Response::json()` via the `json` feature ([guide](docs/rust/guide.md))
47
- - **Python API** — requests/HTTPX-compatible sync and async interfaces ([guide](docs/python/guide.md)), plus versioned `eggfetch.compat.httpx` (0.28.1) and `eggfetch.compat.httpx2` (2.12.0) facades ([compatibility](#httpx-compatibility))
49
+ - **Native Rust JSON (opt-in)** — `RequestBuilder::json()` / `Response::json()` via the `json` feature ([guide](docs/rust/guide.md))
50
+ - **Python API** — requests/HTTPX-compatible sync and async interfaces ([guide](docs/python/guide.md)), lazy request bodies, PEP 561 typing, plus versioned `eggfetch.compat.httpx` (0.28.1) and `eggfetch.compat.httpx2` (2.12.0) facades ([compatibility](#httpx-compatibility))
48
51
  - **Upgrades** — 101 responses expose an owned `network_stream` (WebSocket/SSE building blocks); CONNECT tunnels stay body-iterator only
49
52
  - **CLI** — streaming output, machine-readable formats, shell completions ([guide](docs/cli/guide.md))
50
53
  - **C ABI and Node.js prototype** — opaque-handle FFI plus an experimental N-API wrapper ([ffi-and-node](docs/architecture/ffi-and-node.md))
51
54
 
55
+ The implementation ownership and frozen low-level Rust compatibility surfaces
56
+ are tracked in the [architecture overview](docs/architecture/overview.md) and
57
+ the [Rust surface-containment inventory](docs/architecture/rust-surface-containment.md).
58
+
52
59
  ## Installation
53
60
 
54
61
  **Python:**
@@ -61,10 +68,10 @@ pip install eggfetch
61
68
 
62
69
  ```toml
63
70
  [dependencies]
64
- eggfetch-core = { version = "0.1", features = ["http1", "tls-rustls", "tls-native-roots"] }
71
+ eggfetch-core = "0.2"
65
72
  ```
66
73
 
67
- See the [feature profile matrix](docs/architecture/feature-flags.md#supported-core-profiles) for minimal, deterministic, and embedded recipes.
74
+ The default features are the secure HTTP/1.1 client with Rustls and native roots. See the [feature profile matrix](docs/architecture/feature-flags.md#supported-core-profiles) for minimal, deterministic, and embedded recipes. Low-level embedding without the `url`/`idna`/ICU closure selects `native-http1` (or `native-http2`) without `high-level-url` and uses `Client::execute_http_body` with a caller-owned `http::Uri` (callers own IDNA/punycode conversion). The lean high-level recipe (`standard-http1` + `tls-rustls`, without `advanced-routing` or the `logical-retry`/`redirects`/`basic-auth` policy bundle) keeps the URL/request/response conveniences, Bearer auth, timeouts, body bounds, pooling, TLS, and typed failures while dispatching once over the standard route and returning 3xx without following.
68
75
 
69
76
  **CLI:**
70
77
 
@@ -139,6 +146,20 @@ from eggfetch.compat.httpx2 import Client as H2Client # httpx2 2.12.0 surface
139
146
 
140
147
  See [`docs/python/guide.md`](docs/python/guide.md) for the full Python API reference.
141
148
 
149
+ The native package supports Python 3.10–3.15 (3.15 wheels pending the build-only rehearsal tracked in `plans/README.md`) and ships `py.typed` stubs for its public API. `Client` and the top-level sync helpers accept lazy sync `content=` iterables (async-only iterables are rejected before dispatch); `AsyncClient` additionally accepts lazy async iterables, pulled only as the transport asks for them. `eggfetch._native` is a private implementation module — import from `eggfetch`.
150
+
151
+ Buffered Python responses retain the raw body and decode `.text` lazily; their
152
+ `iter_bytes()`, `iter_text()`, and `iter_lines()` iterators yield one item at a
153
+ time without pre-materializing the complete iterator result. Sync streaming
154
+ uses bounded async-aware backpressure so a slow consumer does not block the
155
+ client runtime. These are private implementation details and do not change
156
+ the public API or chunking contracts.
157
+
158
+ Maintainers can run `./scripts/check.sh` for routine local CI-equivalent
159
+ validation. The stable Rust profile contracts run in Tier 1; the exact Rust
160
+ surface snapshots and semver cross-check are an extended gate documented in
161
+ [`compat/rust-public-api/README.md`](compat/rust-public-api/README.md).
162
+
142
163
  ## Usage -- Rust
143
164
 
144
165
  ```rust
@@ -168,7 +189,16 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
168
189
  }
169
190
  ```
170
191
 
171
- The opt-in `json` feature adds `RequestBuilder::json()` / `Response::json()` Serde helpers, and `resolved_addresses()` pins caller-validated destinations without a second DNS lookup. See [`docs/rust/guide.md`](docs/rust/guide.md) for the full Rust API reference.
192
+ The opt-in `json` feature adds `RequestBuilder::json()` / `Response::json()` Serde helpers. For a private CA in addition to the selected native or WebPKI roots, use the additive TLS methods:
193
+
194
+ ```rust
195
+ let tls = eggfetch_core::TlsConfig::builder()
196
+ .additional_ca_certificate_path("/path/to/private-ca.pem")?
197
+ .build();
198
+ let client = eggfetch_core::Client::builder().tls_config(tls).build();
199
+ ```
200
+
201
+ `additional_ca_certificate_*` augments the base trust store; `ca_certificate_*` replaces it. Advanced embedding — custom dialers, direct/proxy address pinning, detailed failure introspection, frame-level bodies, the Tower service adapter, and physical-connection guards — is covered in [`docs/rust/guide.md`](docs/rust/guide.md).
172
202
 
173
203
  ## Usage -- CLI
174
204
 
@@ -203,7 +233,7 @@ More patterns are in [`docs/cookbook/`](docs/cookbook/).
203
233
 
204
234
  ## HTTPX Compatibility
205
235
 
206
- Two versioned, independent facades over the single Rust engine — `eggfetch.compat.httpx` (0.28.1) and `eggfetch.compat.httpx2` (2.12.0, adds `FunctionAuth`, `Origin`/`URL.origin`, `QUERY`, SSE, optional WebSocket). Both are Stage C qualified on frozen executable SHA `22a6f5c0dc0207c1356b6143c0eda3d4075063b0`; HTTPX 1.0 preview under `compat/httpx/1.0-preview/` is reconnaissance only.
236
+ Two versioned, independent facades over the single Rust engine — `eggfetch.compat.httpx` (0.28.1) and `eggfetch.compat.httpx2` (2.12.0, adds `FunctionAuth`, `Origin`/`URL.origin`, `QUERY`, SSE, optional WebSocket).
207
237
 
208
238
  See [`docs/reference/compatibility.md`](docs/reference/compatibility.md) for the full feature matrix and retained differences.
209
239
 
@@ -219,13 +249,14 @@ See [`docs/reference/compatibility.md`](docs/reference/compatibility.md) for the
219
249
  | [migration/](docs/migration/) | Migration guides from requests and HTTPX |
220
250
  | [cookbook/](docs/cookbook/) | Practical runnable examples |
221
251
  | [reference/](docs/reference/) | Compatibility matrix, feature matrix, error reference |
252
+ | [releases/](docs/releases/) | Release process and compatibility policy |
222
253
  | [security/](docs/security/) | Security guidelines and troubleshooting |
223
254
  | [architecture/](docs/architecture/) | Internal architecture documentation |
224
255
  | [ffi/](docs/ffi/) | C ABI and FFI binding guide |
225
256
 
226
257
  ## Security
227
258
 
228
- - **Dependency auditing:** `cargo-deny` configured in `deny.toml`
259
+ - **Dependency auditing:** run the live preflight with `./scripts/check_security.sh` before publication
229
260
  - **Secret redaction:** all `Debug`/`Display`/error output redacts credentials, cookies, bearer tokens, and proxy passwords
230
261
  - **Threat model:** see [docs/architecture/threat-model.md](docs/architecture/threat-model.md)
231
262
  - **Vulnerability reporting:** see [SECURITY.md](SECURITY.md)
@@ -236,5 +267,5 @@ eggfetch is licensed under the [MIT License](LICENSE-MIT).
236
267
 
237
268
  ## MSRV
238
269
 
239
- The minimum supported Rust version is **1.80**, declared in `workspace.package.rust-version` and checked in extended validation. `rust-toolchain.toml` pins the stable channel for development.
270
+ The minimum supported Rust version is **1.89**, declared in `workspace.package.rust-version` and checked in extended validation with the exact 1.89.0 toolchain. `rust-toolchain.toml` pins the stable channel for normal development.
240
271