{"record":{"id":"ab8501efdb62cf07","repo":"Kuberwastaken/claurst","slug":"bridge-register-server-returned","errorCode":null,"errorMessage":"Bridge register: server returned {}","messagePattern":"Bridge register: server returned (.+?)","errorType":"http","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src-rust/crates/bridge/src/lib.rs","lineNumber":486,"sourceCode":"            .header(\"x-environment-runner-version\", &self.config.runner_version)\r\n            .json(&body)\r\n            .send()\r\n            .await\r\n            .context(\"Bridge register: HTTP send failed\")?;\r\n\r\n        let status = resp.status().as_u16();\r\n        match status {\r\n            200 | 201 => {\r\n                self.set_state(BridgeState::Connected);\r\n                info!(session_id = %self.session_id, \"Bridge session registered\");\r\n                Ok(())\r\n            }\r\n            401 | 403 => {\r\n                self.set_state(BridgeState::Error(format!(\"Auth error: {status}\")));\r\n                anyhow::bail!(\"Bridge register: auth error ({})\", status)\r\n            }\r\n            _ => {\r\n                anyhow::bail!(\"Bridge register: server returned {}\", status)\r\n            }\r\n        }\r\n    }\r\n\r\n    /// Deregister the session on clean shutdown.\r\n    ///\r\n    /// DELETE `/api/claude_code/sessions/{id}` — best-effort; errors are\r\n    /// logged and swallowed so they don't block process exit.\r\n    pub async fn deregister(&self) {\r\n        let Some(token) = self.config.session_token.as_deref() else {\r\n            return;\r\n        };\r\n\r\n        let url = format!(\r\n            \"{}/api/claude_code/sessions/{}\",\r\n            self.config.server_url, self.session_id\r\n        );\r\n\r","sourceCodeStart":468,"sourceCodeEnd":504,"githubUrl":"https://github.com/Kuberwastaken/claurst/blob/b0637c97ec34144387cbf2f74f65df6d16a6cef1/src-rust/crates/bridge/src/lib.rs#L468-L504","documentation":"`exchange_code` POSTs the authorization code (form-encoded) to the provider's token endpoint using reqwest. If the HTTP request itself fails at the transport layer (DNS, connect, TLS, timeout), the reqwest error is wrapped as \"exchange_code: request failed: {}\". This is a network-level failure, distinct from a non-2xx token response.","triggerScenarios":"`client.post(token_endpoint).form(&params).send().await` returns Err — unreachable host, DNS failure, TLS handshake failure, connection refused, or request timeout while contacting the token endpoint.","commonSituations":"Offline machine or broken DNS; corporate proxy required but not configured (HTTPS_PROXY unset); token endpoint hostname typo in provider metadata; TLS cert issues (self-signed MITM proxy); endpoint temporarily down.","solutions":["Check network connectivity to the token endpoint host (curl the metadata-resolved token_endpoint URL).","Configure proxy env vars (HTTPS_PROXY/HTTP_PROXY) if behind a corporate proxy.","Verify `session.metadata.token_endpoint` is the correct HTTPS URL from the provider's authorization-server metadata.","Retry after confirming the provider's status page — transient outages produce this error too."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"for attempt in 0..3 {\n    match exchange_code(endpoint, &code, &verifier, &redirect_uri).await {\n        Ok(t) => break t,\n        Err(e) if e.to_string().contains(\"request failed\") && attempt < 2 => {\n            tokio::time::sleep(Duration::from_secs(2u64.pow(attempt))).await;\n        }\n        Err(e) => return Err(e),\n    }\n}","preventionTips":["Verify network/DNS connectivity to the token endpoint before running the flow","Set HTTPS_PROXY in corporate environments","Check the provider's status page on repeated failures"],"tags":["network","oauth","reqwest","http"],"backgroundTag":"api-request-failed","analyzedSha":"b0637c97ec34144387cbf2f74f65df6d16a6cef1","analyzedAt":"2026-09-10T00:24:58.650Z","contentChangedAt":"2026-09-10T00:24:58.650Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}