| 124 | } |
| 125 | |
| 126 | func TestBuildUpstreamHeaders(t *testing.T) { |
| 127 | t.Parallel() |
| 128 | |
| 129 | t.Run("preserves auth from SDK", func(t *testing.T) { |
| 130 | t.Parallel() |
| 131 | |
| 132 | sdkHeader := http.Header{ |
| 133 | "Authorization": {"Bearer sk-provider-key"}, |
| 134 | } |
| 135 | clientHeaders := http.Header{ |
| 136 | "Authorization": {"Bearer coder-session-token"}, |
| 137 | "User-Agent": {"claude-code/1.0"}, |
| 138 | } |
| 139 | |
| 140 | result := intercept.BuildUpstreamHeaders(sdkHeader, clientHeaders, "Authorization") |
| 141 | |
| 142 | assert.Equal(t, "Bearer sk-provider-key", result.Get("Authorization")) |
| 143 | assert.Equal(t, "claude-code/1.0", result.Get("User-Agent")) |
| 144 | }) |
| 145 | |
| 146 | t.Run("preserves X-Api-Key from SDK and strips client Authorization", func(t *testing.T) { |
| 147 | t.Parallel() |
| 148 | |
| 149 | sdkHeader := http.Header{ |
| 150 | "X-Api-Key": {"sk-ant-provider-key"}, |
| 151 | } |
| 152 | clientHeaders := http.Header{ |
| 153 | "X-Api-Key": {"sk-ant-client-key"}, |
| 154 | "Authorization": {"Bearer coder-session-token"}, |
| 155 | "Anthropic-Beta": {"prompt-caching-2024-07-31"}, |
| 156 | } |
| 157 | |
| 158 | result := intercept.BuildUpstreamHeaders(sdkHeader, clientHeaders, "X-Api-Key") |
| 159 | |
| 160 | assert.Equal(t, "sk-ant-provider-key", result.Get("X-Api-Key")) |
| 161 | assert.Empty(t, result.Get("Authorization")) |
| 162 | assert.Equal(t, "prompt-caching-2024-07-31", result.Get("Anthropic-Beta")) |
| 163 | }) |
| 164 | |
| 165 | t.Run("preserves actor headers from SDK", func(t *testing.T) { |
| 166 | t.Parallel() |
| 167 | |
| 168 | sdkHeader := http.Header{ |
| 169 | "Authorization": {"Bearer sk-key"}, |
| 170 | "X-Ai-Bridge-Actor-Id": {"user-123"}, |
| 171 | "X-Ai-Bridge-Actor-Metadata-Name": {"alice"}, |
| 172 | } |
| 173 | clientHeaders := http.Header{ |
| 174 | "Authorization": {"Bearer coder-token"}, |
| 175 | "User-Agent": {"claude-code/1.0"}, |
| 176 | } |
| 177 | |
| 178 | result := intercept.BuildUpstreamHeaders(sdkHeader, clientHeaders, "Authorization") |
| 179 | |
| 180 | assert.Equal(t, "Bearer sk-key", result.Get("Authorization")) |
| 181 | assert.Equal(t, "user-123", result.Get("X-Ai-Bridge-Actor-Id")) |
| 182 | assert.Equal(t, "alice", result.Get("X-Ai-Bridge-Actor-Metadata-Name")) |
| 183 | assert.Equal(t, "claude-code/1.0", result.Get("User-Agent")) |