tinyhumansai/openhuman · error

failed to build integration download HTTP client

Error message

failed to build integration download HTTP client

What it means

Panic payload on the separate download client used by IntegrationClient::get_bytes: this deliberately untagged client (no x-sdk-name header, since it follows a 302 to presigned S3) still must construct, and builder.build() failed — again a configuration-level failure (proxy/TLS) rather than a per-request one. Aborts the client constructor.

Source

Thrown at src/openhuman/integrations/client.rs:368

        // Its one caller (`get_bytes`) fetches
        // `/agent-integrations/file-storage/files/{id}/download`, which answers
        // a 302 to a presigned S3 URL. reqwest follows redirects by default and
        // strips only *sensitive* headers (Authorization, Cookie, …) when the
        // host changes — a custom header like `x-sdk-name` survives the hop, so
        // tagging this transport would disclose the product identity to the
        // storage provider. Attaching it per-request would not help: redirected
        // requests carry the original request headers too.
        //
        // The lost attribution is deliberate and cheap: the header cannot be
        // scoped to the first hop without hand-rolling redirect following, and
        // any session that downloads a file has already made SDK-path calls that
        // are tagged.
        let download_client = crate::openhuman::util::tls::tls_client_builder()
            .http1_only()
            .timeout(Duration::from_secs(15 * 60))
            .connect_timeout(Duration::from_secs(15))
            .build()
            .expect("failed to build integration download HTTP client");

        Self {
            backend_url,
            auth_token,
            budget_config,
            sdk,
            download_client,
            pricing: tokio::sync::OnceCell::new(),
        }
    }

    async fn ensure_budget_available(&self, path: &str) -> anyhow::Result<()> {
        if !managed_budget_applies_to_path(path) {
            return Ok(());
        }
        if let Some(config) = &self.budget_config {
            if crate::openhuman::hosted::team::managed_tool_budget_exhausted(config).await {
                anyhow::bail!(

View on GitHub (pinned to 7491200858)

Solutions

  1. Validate proxy URL configuration shared with the main integration client
  2. Check TLS backend availability for the platform
  3. Propagate the build error instead of expecting, so file downloads can fail per-call rather than kill the client
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at src/openhuman/integrations/client.rs:368 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17). Data as JSON: /api/errors/f58ef442147124c2. Report an issue: GitHub.