MCPcopy Create free account
hub / github.com/LeenHawk/sgproxy / proxy_request

Function proxy_request

src/proxy.rs:34–97  ·  view source on GitHub ↗
(
    mut req: Request,
    credential: &CredentialConfig,
)

Source from the content-addressed store, hash-verified

32}
33
34pub async fn proxy_request(
35 mut req: Request,
36 credential: &CredentialConfig,
37) -> Result<ProxyOutcome> {
38 let upstream_url = build_upstream_url(&req)?;
39 let method = req.method();
40 let prepared = maybe_prepare_request(&mut req, credential).await?;
41 let context_1m_enabled =
42 claudecode_1m_enabled_for_credential(credential, prepared.context_1m_target.as_ref());
43
44 let mut headers = build_upstream_headers(
45 req.headers(),
46 credential.access_token.as_str(),
47 context_1m_enabled,
48 )?;
49 let sent_with_context_1m = has_context_1m_beta(&headers);
50
51 let mut upstream_resp = send_upstream_request(
52 upstream_url.as_str(),
53 &method,
54 headers,
55 prepared.body.as_deref(),
56 )
57 .await?;
58 let mut status_code = upstream_resp.status_code();
59 let mut disable_sonnet_1m = false;
60 let mut disable_opus_1m = false;
61
62 if sent_with_context_1m && context_1m_enabled && status_code >= 400 {
63 headers = build_upstream_headers(req.headers(), credential.access_token.as_str(), false)?;
64 let retry_resp = send_upstream_request(
65 upstream_url.as_str(),
66 &method,
67 headers,
68 prepared.body.as_deref(),
69 )
70 .await?;
71 if retry_resp.status_code() < 400 {
72 match prepared.context_1m_target.as_ref() {
73 Some(ClaudeCode1mTarget::Sonnet) => disable_sonnet_1m = true,
74 Some(ClaudeCode1mTarget::Opus) => disable_opus_1m = true,
75 None => {}
76 }
77 }
78 upstream_resp = retry_resp;
79 status_code = upstream_resp.status_code();
80 }
81
82 let rate_limit_usage = extract_rate_limit_usage(upstream_resp.headers(), status_code)?;
83 let response_headers = filter_response_headers(upstream_resp.headers())?;
84 let (_, body) = upstream_resp.into_parts();
85 let response = Response::builder()
86 .with_status(status_code)
87 .with_headers(response_headers)
88 .body(body);
89
90 Ok(ProxyOutcome {
91 response,

Callers 1

proxyMethod · 0.85

Calls 8

build_upstream_urlFunction · 0.85
maybe_prepare_requestFunction · 0.85
build_upstream_headersFunction · 0.85
has_context_1m_betaFunction · 0.85
send_upstream_requestFunction · 0.85
extract_rate_limit_usageFunction · 0.85
filter_response_headersFunction · 0.85

Tested by

no test coverage detected