π File detail
server/createDirectConnectSession.ts
π§© .tsπ 89 linesπΎ 2,193 bytesπ text
β Back to All Filesπ― Use case
This file lives under βserver/β, which covers local or auxiliary HTTP/WebSocket servers used by the product. On the API surface it exposes DirectConnectError and createDirectConnectSession β mainly functions, hooks, or classes. It composes internal code from utils, directConnectManager, and types (relative imports). What the file header says: eslint-disable eslint-plugin-n/no-unsupported-features/node-builtins.
Generated from folder role, exports, dependency roots, and inline comments β not hand-reviewed for every path.
π§ Inline summary
eslint-disable eslint-plugin-n/no-unsupported-features/node-builtins
π€ Exports (heuristic)
DirectConnectErrorcreateDirectConnectSession
π₯οΈ Source preview
/* 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,
}
}