Skip to main content

Module fetch

Module fetch 

Source
Expand description

Reusable fetch + export core for the node.

These are the building blocks the node’s Fetch/Export handlers call against their persistent FsStore and shared Downloader: a multi-provider iroh download (download_iroh_to_store), an HTTP-into-store download (http_to_store, so HTTP blobs become seedable), and atomic export helpers (export_blob_to, export_collection_to). None of them own the endpoint, store, or runtime — the caller supplies those.

Progress is reported through a FetchProgress callback so the caller decides how to surface it: the node forwards frames over the control socket, which the CLI then renders as a progress bar.

Both transports bound how long an unreachable provider can tie up a fetch. HTTP sets connect and receive-response timeouts on the ureq::Agent; iroh applies a connect timeout on the connection pool (pool_options) and an idle-progress timeout around the Downloader stream. Mid-body HTTP stalls are intentionally not bounded — ureq 3.3 only offers a total-body timeout, which would break large downloads.

Per-provider iroh causes are not preserved (the iroh_blobs downloader drops them on ProviderFailed); set RUST_LOG=iroh_blobs=debug in the node to surface them (subscriber is installed in rad-artifact node start --foreground).