Something went wrong. Try again.
source dump of claude code forked from oppi.li/claude-code
Something went wrong. Try again.
2.2 kB · 88 lines
TypeScript
at main
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889/* eslint-disable eslint-plugin-n/no-unsupported-features/node-builtins */
import { errorMessage } from '../utils/errors.js'import { jsonStringify } from '../utils/slowOperations.js'import type { DirectConnectConfig } from './directConnectManager.js'import { connectResponseSchema } from './types.js'
/** * Errors thrown by createDirectConnectSession when the connection fails. */export class DirectConnectError extends Error { constructor(message: string) { super(message) this.name = 'DirectConnectError' }}
/** * Create a session on a direct-connect server. * * Posts to `${serverUrl}/sessions`, validates the response, and returns * a DirectConnectConfig ready for use by the REPL or headless runner. * * Throws DirectConnectError on network, HTTP, or response-parsing failures. */export async function createDirectConnectSession({ serverUrl, authToken, cwd, dangerouslySkipPermissions,}: { serverUrl: string authToken?: string cwd: string dangerouslySkipPermissions?: boolean}): Promise<{ config: DirectConnectConfig workDir?: string}> { const headers: Record<string, string> = { 'content-type': 'application/json', } if (authToken) { headers['authorization'] = `Bearer ${authToken}` }
let resp: Response try { resp = await fetch(`${serverUrl}/sessions`, { method: 'POST', headers, body: jsonStringify({ cwd, ...(dangerouslySkipPermissions && { dangerously_skip_permissions: true, }), }), }) } catch (err) { throw new DirectConnectError( `Failed to connect to server at ${serverUrl}: ${errorMessage(err)}`, ) }
if (!resp.ok) { throw new DirectConnectError( `Failed to create session: ${resp.status} ${resp.statusText}`, ) }
const result = connectResponseSchema().safeParse(await resp.json()) if (!result.success) { throw new DirectConnectError( `Invalid session response: ${result.error.message}`, ) }
const data = result.data return { config: { serverUrl, sessionId: data.session_id, wsUrl: data.ws_url, authToken, }, workDir: data.work_dir, }}