Releases: eggstack/eggfetch
Releases · eggstack/eggfetch
Release list
v0.1.4
Added
- Native Rust JSON behind the opt-in
jsonfeature: replayableRequestBuilder::json()and single-consumptionResponse::json(). Per-request decoded-body limits override client limits across retries and redirects. - Static resolved routing: pinned-destination
TransportHints(resolved_target). Static destinations reject proxy, UDS, and H3 combinations before any I/O. - Runnable examples:
crates/eggfetch-core/examples/quickstart.rs,examples/python_sync.py,examples/python_async.py.
Changed
- Core feature and TLS boundary hardening: all origin TLS routes build through
TlsConfig/TrustStore. - README condensed to a quickstart plus grouped feature bullets linking into
docs/.
Fixed
- Documentation corrected to
response = await client.stream(...)for the native async API.
Full changelog: https://github.com/eggstack/eggfetch/blob/main/CHANGELOG.md
crates.io: eggfetch-core, eggfetch-cli, eggfetch-ffi, eggfetch-python, eggfetch-node 0.1.4
v0.1.3
Fixed
- Windows (
x86_64-pc-windows-msvc) build withRUSTFLAGS=-D warnings(PyPI wheel matrix):cfg(unix)-gated the Unix-domain-socket-only imports intransport/uds.rs, removed the dead non-Unixunsupported()fallback (the non-Unix dispatch site inpipeline.rsalready returnsError::Unsupporteddirectly) and the obsoleteBytesimport keep-alive, and acknowledged the intentionally cross-platformClientBuilder::uds_pathfield inbuild()on non-Unix targets. No behavior change on any platform;uds_path()remains accepted everywhere and still errors at request time off Unix.
v0.1.2
Added
- Python
request.extensionsaccepts typed keystarget(str or bytes),sni_hostname(str), andtrace(callable). These are extracted once byextract_native_extensionsintoeggfetch_core::TransportHintsbefore dispatch. Unknown keys are passed through to the HTTPX compatibility facade. - Native
PyTraceObserver(incrates/eggfetch-python/src/trace_bridge.rs) bridges Python callables intoeggfetch_core::trace::TraceObserverso callables never enter the core crate. Sync callbacks work on bothClientandAsyncClient; coroutine callbacks (detected viainspect.iscoroutinefunction) are rejected withTypeErrorbefore dispatch on both APIs because the coreTraceObserveris synchronous. Response.extensionsandStreamingResponse.extensionsproperties expose{http_version, reason_phrase, network_stream}snapshots of the wire state.NetworkStream(sync, GIL-released) andAsyncNetworkStreamexposed throughResponse.extensions["network_stream"]for 101 Switching Protocols upgrades. The sync wrapper carries an explicittokio::runtime::Handleand optionalRuntimeLeaseso it can drive IO without relying on an ambient runtime. Cloning aNetworkStreamshares the same underlyingArc<Mutex<>>so the IO is shared, not duplicated. Internal HTTPS CONNECT tunnels are never surfaced as writableNetworkStream(the canonical access path is the body iterator).NetworkStream.start_tls(ssl_context=..., server_hostname=..., timeout=...)uses the same safe TLS translation as the default client. It is rejected for Hyper-opaqueAdaptervariants and for streams that are already TLS-wrapped; only innerTcp-variant streams supportstart_tls.UpgradedStreamcarries anUpgradedStreamVariant(Tcp/Tls/Adapter) classification so callers can detectstart_tlseligibility before any IO is consumed.
Fixed
pipeline::send_with_redirectsredirects-disabled fast path now reattaches the originalTransportHintsto the reconstructed request, sotarget,sni_hostname, andtraceare no longer silently dropped when internal redirect handling is bypassed.Response.reason_phrasepreferswire_reason_phrase()over the canonical lookup table, so responses with non-canonical status-line reason phrases are surfaced truthfully.