Skip to content

Commit b3bcd45

Browse files
committed
style: apply prettier formatting and eslint fixes
Run prettier and eslint auto-fix to standardize code formatting, improve readability, and ensure consistency across the codebase. No functional changes.
1 parent 7449100 commit b3bcd45

9 files changed

Lines changed: 313 additions & 210 deletions

File tree

src/web/server/CallbackManager.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
1-
import { registerRawOutputCallback, registerSessionUpdateCallback, removeRawOutputCallback, removeSessionUpdateCallback } from "../../plugin/pty/manager"
2-
import type { PTYSessionInfo } from "../../plugin/pty/types"
3-
import type { WSMessageServerSessionUpdate, WSMessageServerRawData } from "../shared/types"
1+
import {
2+
registerRawOutputCallback,
3+
registerSessionUpdateCallback,
4+
removeRawOutputCallback,
5+
removeSessionUpdateCallback,
6+
} from '../../plugin/pty/manager'
7+
import type { PTYSessionInfo } from '../../plugin/pty/types'
8+
import type { WSMessageServerSessionUpdate, WSMessageServerRawData } from '../shared/types'
49

510
export class CallbackManager implements Disposable {
611
constructor(private server: Bun.Server<any>) {
@@ -18,7 +23,7 @@ export class CallbackManager implements Disposable {
1823
const message: WSMessageServerRawData = { type: 'raw_data', session, rawData }
1924
// console.log('Publishing raw data for session:', session.id, 'Raw data:', rawData)
2025
this.server.publish(`session:${session.id}`, JSON.stringify(message))
21-
}
26+
};
2227

2328
[Symbol.dispose]() {
2429
removeSessionUpdateCallback(this.sessionUpdateCallback)

src/web/server/handlers/sessions.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,7 @@ export function killSession(req: BunRequest<'/api/sessions/:id/kill'>) {
8181
return new JsonResponse({ success: true })
8282
}
8383

84-
export function getRawBuffer(
85-
req: BunRequest<'/api/sessions/:id/buffer/raw'>
86-
) {
84+
export function getRawBuffer(req: BunRequest<'/api/sessions/:id/buffer/raw'>) {
8785
const sessionId = req.params.id
8886
if (!sessionId || typeof sessionId !== 'string' || sessionId.trim() === '') {
8987
return new ErrorResponse('Invalid session ID', 400)
@@ -97,9 +95,7 @@ export function getRawBuffer(
9795
return new JsonResponse(bufferData)
9896
}
9997

100-
export function getPlainBuffer(
101-
req: BunRequest<'/api/sessions/:id/buffer/plain'>
102-
) {
98+
export function getPlainBuffer(req: BunRequest<'/api/sessions/:id/buffer/plain'>) {
10399
const sessionId = req.params.id
104100
if (!sessionId || typeof sessionId !== 'string' || sessionId.trim() === '') {
105101
return new ErrorResponse('Invalid session ID', 400)

src/web/server/handlers/upgrade.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
export function handleUpgrade(server: Bun.Server<any>, req: Request) {
2-
if (!(req.headers.get('upgrade') === 'websocket')) {
3-
return new Response('WebSocket endpoint - use WebSocket upgrade', { status: 426 })
4-
}
5-
const success = server.upgrade(req)
6-
if (success) {
7-
return undefined // Upgrade succeeded, Bun sends 101 automatically
8-
}
9-
return new Response('WebSocket upgrade failed', { status: 400 })
10-
}
2+
if (!(req.headers.get('upgrade') === 'websocket')) {
3+
return new Response('WebSocket endpoint - use WebSocket upgrade', { status: 426 })
4+
}
5+
const success = server.upgrade(req)
6+
if (success) {
7+
return undefined // Upgrade succeeded, Bun sends 101 automatically
8+
}
9+
return new Response('WebSocket upgrade failed', { status: 400 })
10+
}
Lines changed: 150 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -1,113 +1,163 @@
1-
import type { ServerWebSocket } from "bun"
2-
import { manager } from "../../../plugin/pty/manager"
3-
import { type WSMessageServerSessionList, type WSMessageClientSubscribeSession, type WSMessageServerError, type WSMessageClientUnsubscribeSession, type WSMessageClientSessionList, type WSMessageClient, type WSMessageClientSpawnSession, type WSMessageClientInput, type WSMessageClientReadRaw, type WSMessageServerReadRawResponse, type WSMessageServerSubscribedSession, CustomError, type WSMessageServerUnsubscribedSession } from "../../shared/types"
1+
import type { ServerWebSocket } from 'bun'
2+
import { manager } from '../../../plugin/pty/manager'
3+
import {
4+
type WSMessageServerSessionList,
5+
type WSMessageClientSubscribeSession,
6+
type WSMessageServerError,
7+
type WSMessageClientUnsubscribeSession,
8+
type WSMessageClientSessionList,
9+
type WSMessageClient,
10+
type WSMessageClientSpawnSession,
11+
type WSMessageClientInput,
12+
type WSMessageClientReadRaw,
13+
type WSMessageServerReadRawResponse,
14+
type WSMessageServerSubscribedSession,
15+
CustomError,
16+
type WSMessageServerUnsubscribedSession,
17+
} from '../../shared/types'
418

519
class WebSocketHandler {
6-
private sendSessionList(ws: ServerWebSocket<any>): void {
7-
const sessions = manager.list()
8-
const message: WSMessageServerSessionList = { type: 'session_list', sessions }
9-
ws.send(JSON.stringify(message))
20+
private sendSessionList(ws: ServerWebSocket<any>): void {
21+
const sessions = manager.list()
22+
const message: WSMessageServerSessionList = { type: 'session_list', sessions }
23+
ws.send(JSON.stringify(message))
24+
}
25+
26+
private handleSubscribe(
27+
ws: ServerWebSocket<any>,
28+
message: WSMessageClientSubscribeSession
29+
): void {
30+
const session = manager.get(message.sessionId)
31+
if (!session) {
32+
const error: WSMessageServerError = {
33+
type: 'error',
34+
error: new CustomError(`Session ${message.sessionId} not found`),
35+
}
36+
ws.send(JSON.stringify(error))
37+
} else {
38+
ws.subscribe(`session:${message.sessionId}`)
39+
const response: WSMessageServerSubscribedSession = {
40+
type: 'subscribed',
41+
sessionId: message.sessionId,
42+
}
43+
ws.send(JSON.stringify(response))
1044
}
11-
12-
private handleSubscribe(ws: ServerWebSocket<any>, message: WSMessageClientSubscribeSession): void {
13-
const session = manager.get(message.sessionId)
14-
if (!session) {
15-
const error: WSMessageServerError = { type: 'error', error: new CustomError(`Session ${message.sessionId} not found`) }
16-
ws.send(JSON.stringify(error))
17-
} else {
18-
ws.subscribe(`session:${message.sessionId}`)
19-
const response: WSMessageServerSubscribedSession = { type: 'subscribed', sessionId: message.sessionId }
20-
ws.send(JSON.stringify(response))
21-
}
45+
}
46+
47+
private handleUnsubscribe(
48+
ws: ServerWebSocket<any>,
49+
message: WSMessageClientUnsubscribeSession
50+
): void {
51+
const topic = `session:${message.sessionId}`
52+
ws.unsubscribe(topic)
53+
const response: WSMessageServerUnsubscribedSession = {
54+
type: 'unsubscribed',
55+
sessionId: message.sessionId,
2256
}
23-
24-
private handleUnsubscribe(ws: ServerWebSocket<any>, message: WSMessageClientUnsubscribeSession): void {
25-
const topic = `session:${message.sessionId}`
26-
ws.unsubscribe(topic)
27-
const response: WSMessageServerUnsubscribedSession = { type: 'unsubscribed', sessionId: message.sessionId }
28-
ws.send(JSON.stringify(response))
57+
ws.send(JSON.stringify(response))
58+
}
59+
60+
private handleSessionListRequest(
61+
ws: ServerWebSocket<any>,
62+
_message: WSMessageClientSessionList
63+
): void {
64+
this.sendSessionList(ws)
65+
}
66+
67+
private handleUnknownMessage(ws: ServerWebSocket<any>, message: WSMessageClient): void {
68+
const error: WSMessageServerError = {
69+
type: 'error',
70+
error: new CustomError(`Unknown message type ${message.type}`),
2971
}
30-
31-
private handleSessionListRequest(ws: ServerWebSocket<any>, _message: WSMessageClientSessionList): void {
32-
this.sendSessionList(ws)
72+
ws.send(JSON.stringify(error))
73+
}
74+
75+
public handleWebSocketMessage(
76+
ws: ServerWebSocket<any>,
77+
data: string | Buffer<ArrayBuffer>
78+
): void {
79+
if (typeof data !== 'string') {
80+
const error: WSMessageServerError = {
81+
type: 'error',
82+
error: new CustomError('Binary messages are not supported yet. File an issue.'),
83+
}
84+
ws.send(JSON.stringify(error))
85+
return
3386
}
34-
35-
private handleUnknownMessage(ws: ServerWebSocket<any>, message: WSMessageClient): void {
36-
const error: WSMessageServerError = { type: 'error', error: new CustomError(`Unknown message type ${message.type}`) }
37-
ws.send(JSON.stringify(error))
87+
try {
88+
const message: WSMessageClient = JSON.parse(data)
89+
90+
switch (message.type) {
91+
case 'subscribe':
92+
this.handleSubscribe(ws, message as WSMessageClientSubscribeSession)
93+
break
94+
95+
case 'unsubscribe':
96+
this.handleUnsubscribe(ws, message as WSMessageClientUnsubscribeSession)
97+
break
98+
99+
case 'session_list':
100+
this.handleSessionListRequest(ws, message as WSMessageClientSessionList)
101+
break
102+
103+
case 'spawn':
104+
this.handleSpawn(ws, message as WSMessageClientSpawnSession)
105+
break
106+
107+
case 'input':
108+
this.handleInput(message as WSMessageClientInput)
109+
break
110+
111+
case 'readRaw':
112+
this.handleReadRaw(ws, message as WSMessageClientReadRaw)
113+
break
114+
115+
default:
116+
this.handleUnknownMessage(ws, message)
117+
}
118+
} catch (err) {
119+
const error: WSMessageServerError = {
120+
type: 'error',
121+
error: new CustomError(Bun.inspect(err)),
122+
}
123+
ws.send(JSON.stringify(error))
38124
}
125+
}
39126

40-
public handleWebSocketMessage(ws: ServerWebSocket<any>, data: string | Buffer<ArrayBuffer>): void {
41-
if (typeof data !== 'string') {
42-
const error: WSMessageServerError = { type: 'error', error: new CustomError('Binary messages are not supported yet. File an issue.') }
43-
ws.send(JSON.stringify(error))
44-
return
45-
}
46-
try {
47-
const message: WSMessageClient = JSON.parse(data)
48-
49-
switch (message.type) {
50-
case 'subscribe':
51-
this.handleSubscribe(ws, message as WSMessageClientSubscribeSession)
52-
break
53-
54-
case 'unsubscribe':
55-
this.handleUnsubscribe(ws, message as WSMessageClientUnsubscribeSession)
56-
break
57-
58-
case 'session_list':
59-
this.handleSessionListRequest(ws, message as WSMessageClientSessionList)
60-
break
61-
62-
case 'spawn':
63-
this.handleSpawn(ws, message as WSMessageClientSpawnSession)
64-
break
65-
66-
case 'input':
67-
this.handleInput(message as WSMessageClientInput)
68-
break
69-
70-
case 'readRaw':
71-
this.handleReadRaw(ws, message as WSMessageClientReadRaw)
72-
break
73-
74-
default:
75-
this.handleUnknownMessage(ws, message)
76-
}
77-
} catch (err) {
78-
const error: WSMessageServerError = { type: 'error', error: new CustomError(Bun.inspect(err)) }
79-
ws.send(JSON.stringify(error))
80-
}
127+
private handleSpawn(ws: ServerWebSocket<any>, message: WSMessageClientSpawnSession) {
128+
const sessionInfo = manager.spawn(message)
129+
if (message.subscribe) {
130+
this.handleSubscribe(ws, { type: 'subscribe', sessionId: sessionInfo.id })
81131
}
82-
83-
private handleSpawn(ws: ServerWebSocket<any>, message: WSMessageClientSpawnSession) {
84-
const sessionInfo = manager.spawn(message)
85-
if (message.subscribe) {
86-
this.handleSubscribe(ws, { type: 'subscribe', sessionId: sessionInfo.id })
87-
}
132+
}
133+
134+
private handleInput(message: WSMessageClientInput) {
135+
manager.write(message.sessionId, message.data)
136+
}
137+
138+
private handleReadRaw(ws: ServerWebSocket<any>, message: WSMessageClientReadRaw) {
139+
const rawData = manager.getRawBuffer(message.sessionId)
140+
if (!rawData) {
141+
const error: WSMessageServerError = {
142+
type: 'error',
143+
error: new CustomError(`Session ${message.sessionId} not found`),
144+
}
145+
ws.send(JSON.stringify(error))
146+
return
88147
}
89-
90-
private handleInput(message: WSMessageClientInput) {
91-
manager.write(message.sessionId, message.data)
92-
}
93-
94-
private handleReadRaw(ws: ServerWebSocket<any>, message: WSMessageClientReadRaw) {
95-
const rawData = manager.getRawBuffer(message.sessionId)
96-
if (!rawData) {
97-
const error: WSMessageServerError = { type: 'error', error: new CustomError(`Session ${message.sessionId} not found`) }
98-
ws.send(JSON.stringify(error))
99-
return
100-
}
101-
const response: WSMessageServerReadRawResponse = {
102-
type: 'readRawResponse',
103-
sessionId: message.sessionId,
104-
rawData: rawData.raw
105-
}
106-
ws.send(JSON.stringify(response))
148+
const response: WSMessageServerReadRawResponse = {
149+
type: 'readRawResponse',
150+
sessionId: message.sessionId,
151+
rawData: rawData.raw,
107152
}
153+
ws.send(JSON.stringify(response))
154+
}
108155
}
109156

110-
export function handleWebSocketMessage(ws: ServerWebSocket<any>, data: string | Buffer<ArrayBuffer>): void {
111-
const handler = new WebSocketHandler()
112-
handler.handleWebSocketMessage(ws, data)
113-
}
157+
export function handleWebSocketMessage(
158+
ws: ServerWebSocket<any>,
159+
data: string | Buffer<ArrayBuffer>
160+
): void {
161+
const handler = new WebSocketHandler()
162+
handler.handleWebSocketMessage(ws, data)
163+
}

src/web/server/server.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,20 +75,20 @@ export class PTYServer implements Disposable {
7575

7676
websocket: {
7777
perMessageDeflate: true,
78-
open: ws => ws.subscribe('sessions:update'),
78+
open: (ws) => ws.subscribe('sessions:update'),
7979
message: handleWebSocketMessage,
8080
close: (ws) => {
81-
ws.subscriptions.forEach(topic => {
81+
ws.subscriptions.forEach((topic) => {
8282
ws.unsubscribe(topic)
8383
})
84-
}
84+
},
8585
},
8686

8787
fetch: () => new Response(null, { status: 302, headers: { Location: '/index.html' } }),
8888
})
8989
}
9090

9191
public getWsUrl(): string {
92-
return `${this.server.url.origin.replace(/^http/, "ws")}${PTYServer.wsPath}`
92+
return `${this.server.url.origin.replace(/^http/, 'ws')}${PTYServer.wsPath}`
9393
}
9494
}

0 commit comments

Comments
 (0)