init: add source code from src.zip
This commit is contained in:
45
src/cli/transports/transportUtils.ts
Normal file
45
src/cli/transports/transportUtils.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import { URL } from 'url'
|
||||
import { isEnvTruthy } from '../../utils/envUtils.js'
|
||||
import { HybridTransport } from './HybridTransport.js'
|
||||
import { SSETransport } from './SSETransport.js'
|
||||
import type { Transport } from './Transport.js'
|
||||
import { WebSocketTransport } from './WebSocketTransport.js'
|
||||
|
||||
/**
|
||||
* Helper function to get the appropriate transport for a URL.
|
||||
*
|
||||
* Transport selection priority:
|
||||
* 1. SSETransport (SSE reads + POST writes) when CLAUDE_CODE_USE_CCR_V2 is set
|
||||
* 2. HybridTransport (WS reads + POST writes) when CLAUDE_CODE_POST_FOR_SESSION_INGRESS_V2 is set
|
||||
* 3. WebSocketTransport (WS reads + WS writes) — default
|
||||
*/
|
||||
export function getTransportForUrl(
|
||||
url: URL,
|
||||
headers: Record<string, string> = {},
|
||||
sessionId?: string,
|
||||
refreshHeaders?: () => Record<string, string>,
|
||||
): Transport {
|
||||
if (isEnvTruthy(process.env.CLAUDE_CODE_USE_CCR_V2)) {
|
||||
// v2: SSE for reads, HTTP POST for writes
|
||||
// --sdk-url is the session URL (.../sessions/{id});
|
||||
// derive the SSE stream URL by appending /worker/events/stream
|
||||
const sseUrl = new URL(url.href)
|
||||
if (sseUrl.protocol === 'wss:') {
|
||||
sseUrl.protocol = 'https:'
|
||||
} else if (sseUrl.protocol === 'ws:') {
|
||||
sseUrl.protocol = 'http:'
|
||||
}
|
||||
sseUrl.pathname =
|
||||
sseUrl.pathname.replace(/\/$/, '') + '/worker/events/stream'
|
||||
return new SSETransport(sseUrl, headers, sessionId, refreshHeaders)
|
||||
}
|
||||
|
||||
if (url.protocol === 'ws:' || url.protocol === 'wss:') {
|
||||
if (isEnvTruthy(process.env.CLAUDE_CODE_POST_FOR_SESSION_INGRESS_V2)) {
|
||||
return new HybridTransport(url, headers, sessionId, refreshHeaders)
|
||||
}
|
||||
return new WebSocketTransport(url, headers, sessionId, refreshHeaders)
|
||||
} else {
|
||||
throw new Error(`Unsupported protocol: ${url.protocol}`)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user