@@ -300,17 +300,17 @@ if (!proxyAgent) {
300300 * @param {string } copilotTarget
301301 * @param {string } [openaiBasePath]
302302 * @param {string } [anthropicBasePath]
303- * @returns {{ target: string, headers: Record<string,string>, basePath: string|undefined } | null }
303+ * @returns {{ target: string, headers: Record<string,string>, basePath: string|undefined, needsAnthropicVersion: boolean } | null }
304304 */
305305function resolveOpenCodeRoute ( openaiKey , anthropicKey , copilotToken , openaiTarget , anthropicTarget , copilotTarget , openaiBasePath , anthropicBasePath ) {
306306 if ( openaiKey ) {
307- return { target : openaiTarget , headers : { 'Authorization' : `Bearer ${ openaiKey } ` } , basePath : openaiBasePath } ;
307+ return { target : openaiTarget , headers : { 'Authorization' : `Bearer ${ openaiKey } ` } , basePath : openaiBasePath , needsAnthropicVersion : false } ;
308308 }
309309 if ( anthropicKey ) {
310- return { target : anthropicTarget , headers : { 'x-api-key' : anthropicKey } , basePath : anthropicBasePath } ;
310+ return { target : anthropicTarget , headers : { 'x-api-key' : anthropicKey } , basePath : anthropicBasePath , needsAnthropicVersion : true } ;
311311 }
312312 if ( copilotToken ) {
313- return { target : copilotTarget , headers : { 'Authorization' : `Bearer ${ copilotToken } ` } , basePath : undefined } ;
313+ return { target : copilotTarget , headers : { 'Authorization' : `Bearer ${ copilotToken } ` } , basePath : undefined , needsAnthropicVersion : false } ;
314314 }
315315 return null ;
316316}
@@ -1063,7 +1063,12 @@ if (require.main === module) {
10631063 // 1. OPENAI_API_KEY → OpenAI/Copilot-compatible route (OPENAI_API_TARGET)
10641064 // 2. ANTHROPIC_API_KEY → Anthropic BYOK route (ANTHROPIC_API_TARGET)
10651065 // 3. COPILOT_AUTH_TOKEN → Copilot route (COPILOT_API_TARGET)
1066- if ( OPENAI_API_KEY || ANTHROPIC_API_KEY || COPILOT_AUTH_TOKEN ) {
1066+ const opencodeStartupRoute = resolveOpenCodeRoute (
1067+ OPENAI_API_KEY , ANTHROPIC_API_KEY , COPILOT_AUTH_TOKEN ,
1068+ OPENAI_API_TARGET , ANTHROPIC_API_TARGET , COPILOT_API_TARGET ,
1069+ OPENAI_API_BASE_PATH , ANTHROPIC_API_BASE_PATH
1070+ ) ;
1071+ if ( opencodeStartupRoute ) {
10671072 const opencodeServer = http . createServer ( ( req , res ) => {
10681073 if ( req . url === '/health' && req . method === 'GET' ) {
10691074 res . writeHead ( 200 , { 'Content-Type' : 'application/json' } ) ;
@@ -1103,7 +1108,7 @@ if (require.main === module) {
11031108 } ) ;
11041109
11051110 const headers = Object . assign ( { } , route . headers ) ;
1106- if ( ANTHROPIC_API_KEY && ! OPENAI_API_KEY && ! req . headers [ 'anthropic-version' ] ) {
1111+ if ( route . needsAnthropicVersion && ! req . headers [ 'anthropic-version' ] ) {
11071112 headers [ 'anthropic-version' ] = '2023-06-01' ;
11081113 }
11091114 proxyRequest ( req , res , route . target , headers , 'opencode' , route . basePath ) ;
@@ -1123,19 +1128,14 @@ if (require.main === module) {
11231128 }
11241129
11251130 const headers = Object . assign ( { } , route . headers ) ;
1126- if ( ANTHROPIC_API_KEY && ! OPENAI_API_KEY && ! req . headers [ 'anthropic-version' ] ) {
1131+ if ( route . needsAnthropicVersion && ! req . headers [ 'anthropic-version' ] ) {
11271132 headers [ 'anthropic-version' ] = '2023-06-01' ;
11281133 }
11291134 proxyWebSocket ( req , socket , head , route . target , headers , 'opencode' , route . basePath ) ;
11301135 } ) ;
11311136
11321137 opencodeServer . listen ( 10004 , '0.0.0.0' , ( ) => {
1133- const routingTarget = OPENAI_API_KEY
1134- ? `OpenAI/Copilot at ${ OPENAI_API_TARGET } `
1135- : ANTHROPIC_API_KEY
1136- ? `Anthropic at ${ ANTHROPIC_API_TARGET } `
1137- : `Copilot at ${ COPILOT_API_TARGET } ` ;
1138- logRequest ( 'info' , 'server_start' , { message : `OpenCode proxy listening on port 10004 (-> ${ routingTarget } )` } ) ;
1138+ logRequest ( 'info' , 'server_start' , { message : `OpenCode proxy listening on port 10004 (-> ${ opencodeStartupRoute . target } )` } ) ;
11391139 } ) ;
11401140 }
11411141
0 commit comments