nterminal 1.2.73 → 1.2.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/assets/brand/vscode.png +0 -0
  2. package/dist/client/assets/MarkdownPreview-CStdB1d5.js +1 -0
  3. package/dist/client/assets/{TranscriptMarkdownBody-DVi2ZXX_.js → TranscriptMarkdownBody-B-RKybd7.js} +1 -1
  4. package/dist/client/assets/{index--B5U92vq.js → index-CH_JmAuw.js} +1 -1
  5. package/dist/client/assets/index-DwmyYdjx.css +1 -0
  6. package/dist/client/assets/index-idJa2lVq.js +57 -0
  7. package/dist/client/brand/vscode.png +0 -0
  8. package/dist/client/index.html +2 -2
  9. package/dist/server/agent/agentProxy.d.ts +1 -0
  10. package/dist/server/agent/agentProxy.js +3 -2
  11. package/dist/server/agent/agentProxy.js.map +1 -1
  12. package/dist/server/agent/agentWebSocketProxy.js +6 -58
  13. package/dist/server/agent/agentWebSocketProxy.js.map +1 -1
  14. package/dist/server/code/codeServerManager.d.ts +83 -0
  15. package/dist/server/code/codeServerManager.js +782 -0
  16. package/dist/server/code/codeServerManager.js.map +1 -0
  17. package/dist/server/http.d.ts +2 -0
  18. package/dist/server/http.js +12 -0
  19. package/dist/server/http.js.map +1 -1
  20. package/dist/server/index.js +4 -0
  21. package/dist/server/index.js.map +1 -1
  22. package/dist/server/routes/agentManagementRoutes.js +412 -0
  23. package/dist/server/routes/agentManagementRoutes.js.map +1 -1
  24. package/dist/server/routes/codeServerRoutes.d.ts +13 -0
  25. package/dist/server/routes/codeServerRoutes.js +552 -0
  26. package/dist/server/routes/codeServerRoutes.js.map +1 -0
  27. package/dist/server/routes/webSocketRelay.d.ts +12 -0
  28. package/dist/server/routes/webSocketRelay.js +174 -0
  29. package/dist/server/routes/webSocketRelay.js.map +1 -0
  30. package/dist/server/terminal/TmuxPtyAdapter.d.ts +1 -0
  31. package/dist/server/terminal/TmuxPtyAdapter.js +68 -21
  32. package/dist/server/terminal/TmuxPtyAdapter.js.map +1 -1
  33. package/dist/server/terminal/transcriptHistory.js +9 -4
  34. package/dist/server/terminal/transcriptHistory.js.map +1 -1
  35. package/dist/server/update/packageUpdate.d.ts +8 -0
  36. package/dist/server/update/packageUpdate.js +42 -2
  37. package/dist/server/update/packageUpdate.js.map +1 -1
  38. package/dist/shared/protocol.d.ts +49 -0
  39. package/dist/shared/protocol.js.map +1 -1
  40. package/package.json +1 -1
  41. package/public/brand/vscode.png +0 -0
  42. package/dist/client/assets/MarkdownPreview-CXveD-XH.js +0 -1
  43. package/dist/client/assets/index-BW6hHU75.js +0 -55
  44. package/dist/client/assets/index-BsAHXRGw.css +0 -1
@@ -0,0 +1,552 @@
1
+ import http from 'node:http';
2
+ import WebSocket from 'ws';
3
+ import { isAllowedOrigin } from '../config.js';
4
+ import { requireAllowedOrigin } from './authRoutes.js';
5
+ import { authenticateTerminalRequest } from './terminalRoutes.js';
6
+ import { extractBearerToken, verifyAgentToken } from '../agent/agentAuth.js';
7
+ import { CodeServerError, instanceUrlPrefix } from '../code/codeServerManager.js';
8
+ import { relayWebSocketPair } from './webSocketRelay.js';
9
+ const codeServerProxyRoute = '/code/instances/:instanceId/*';
10
+ const agentCodeServerProxyRoute = '/api/agent/code-server/instances/:instanceId/*';
11
+ const httpProxyMethods = ['HEAD', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'];
12
+ const codeServerProxyBodyLimitBytes = 128 * 1024 * 1024;
13
+ const hopByHopHeaders = new Set([
14
+ 'connection',
15
+ 'keep-alive',
16
+ 'proxy-authenticate',
17
+ 'proxy-authorization',
18
+ 'te',
19
+ 'trailer',
20
+ 'transfer-encoding',
21
+ 'upgrade'
22
+ ]);
23
+ export async function registerCodeServerRoutes(app, config, services) {
24
+ if (config.role !== 'main') {
25
+ return;
26
+ }
27
+ app.get('/api/code-server/status', async (request, reply) => {
28
+ const auth = await authenticateTerminalRequest(services.authService, request, reply);
29
+ if (!auth)
30
+ return reply;
31
+ const query = request.query;
32
+ const checkLatest = query?.checkLatest === 'true';
33
+ return services.codeServerManager.status({ checkLatest });
34
+ });
35
+ app.post('/api/code-server/install', { preHandler: (request, reply) => requireAllowedOrigin(config, request, reply) }, async (request, reply) => {
36
+ const auth = await authenticateTerminalRequest(services.authService, request, reply);
37
+ if (!auth)
38
+ return reply;
39
+ if (config.previewMode)
40
+ return reply.code(403).send({ error: 'preview_mode' });
41
+ return handleCodeServerError(reply, () => services.codeServerManager.startInstall({ action: 'install' }));
42
+ });
43
+ app.post('/api/code-server/update', { preHandler: (request, reply) => requireAllowedOrigin(config, request, reply) }, async (request, reply) => {
44
+ const auth = await authenticateTerminalRequest(services.authService, request, reply);
45
+ if (!auth)
46
+ return reply;
47
+ if (config.previewMode)
48
+ return reply.code(403).send({ error: 'preview_mode' });
49
+ return handleCodeServerError(reply, () => services.codeServerManager.startInstall({ action: 'update', force: true }));
50
+ });
51
+ app.post('/api/code-server/open', { preHandler: (request, reply) => requireAllowedOrigin(config, request, reply) }, async (request, reply) => {
52
+ const auth = await authenticateTerminalRequest(services.authService, request, reply);
53
+ if (!auth)
54
+ return reply;
55
+ if (typeof request.body?.terminalId !== 'string' || !request.body.terminalId.trim()) {
56
+ return reply.code(400).send({ error: 'terminal_id_required' });
57
+ }
58
+ const serverName = sanitizeTitleInput(request.body.serverName);
59
+ const tabName = sanitizeTitleInput(request.body.tabName);
60
+ return handleCodeServerError(reply, () => services.codeServerManager.openForTerminal(request.body.terminalId, {
61
+ ...(serverName ? { serverName } : {}),
62
+ ...(tabName ? { tabName } : {})
63
+ }));
64
+ });
65
+ app.post('/api/code-server/stop', { preHandler: (request, reply) => requireAllowedOrigin(config, request, reply) }, async (request, reply) => {
66
+ const auth = await authenticateTerminalRequest(services.authService, request, reply);
67
+ if (!auth)
68
+ return reply;
69
+ const instanceId = typeof request.body?.instanceId === 'string' && request.body.instanceId ? request.body.instanceId : undefined;
70
+ return services.codeServerManager.stop(instanceId);
71
+ });
72
+ app.post('/api/code-server/uninstall', { preHandler: (request, reply) => requireAllowedOrigin(config, request, reply) }, async (request, reply) => {
73
+ const auth = await authenticateTerminalRequest(services.authService, request, reply);
74
+ if (!auth)
75
+ return reply;
76
+ if (config.previewMode)
77
+ return reply.code(403).send({ error: 'preview_mode' });
78
+ return handleCodeServerError(reply, () => services.codeServerManager.startUninstall());
79
+ });
80
+ app.get('/code/instances/:instanceId', async (request, reply) => {
81
+ const auth = await authenticateTerminalRequest(services.authService, request, reply);
82
+ if (!auth)
83
+ return reply;
84
+ return reply.redirect(`/code/instances/${encodeURIComponent(request.params.instanceId)}/`, 302);
85
+ });
86
+ app.get('/code/instances/:instanceId/__nterminal-title.js', async (request, reply) => {
87
+ const auth = await authenticateTerminalRequest(services.authService, request, reply);
88
+ if (!auth)
89
+ return reply;
90
+ const title = services.codeServerManager.getTitleForInstance(request.params.instanceId, titleTokenFromRequest(request));
91
+ if (!title) {
92
+ return reply.code(404).send('/* code-server instance not found */');
93
+ }
94
+ return reply
95
+ .type('application/javascript; charset=utf-8')
96
+ .header('Cache-Control', 'no-store')
97
+ .send(codeServerTitleLockScript(title));
98
+ });
99
+ await registerCodeServerProxyRoutes(app, config, {
100
+ codeServerManager: services.codeServerManager,
101
+ authenticateHttp: async (request, reply) => {
102
+ const auth = await authenticateTerminalRequest(services.authService, request, reply);
103
+ if (!auth)
104
+ return false;
105
+ if (!isProxyOriginAcceptable(config, request)) {
106
+ await reply.code(403).send({ error: 'origin_not_allowed' });
107
+ return false;
108
+ }
109
+ return true;
110
+ },
111
+ authenticateWebSocket: async (_socket, request) => {
112
+ if (!request.headers.origin || !isAllowedOrigin(config, request.headers.origin)) {
113
+ return false;
114
+ }
115
+ return Boolean(await authenticateTerminalRequest(services.authService, request));
116
+ },
117
+ route: codeServerProxyRoute,
118
+ routePrefix: instanceUrlPrefix
119
+ });
120
+ }
121
+ export async function registerAgentCodeServerRoutes(app, config, services) {
122
+ const authenticateAgentHttp = async (request, reply) => {
123
+ if (!verifyAgentToken(config, extractBearerToken(request))) {
124
+ await reply.code(401).send({ error: 'unauthorized' });
125
+ return false;
126
+ }
127
+ return true;
128
+ };
129
+ app.get('/api/agent/code-server/status', async (request, reply) => {
130
+ if (!await authenticateAgentHttp(request, reply))
131
+ return reply;
132
+ const query = request.query;
133
+ const checkLatest = query?.checkLatest === 'true';
134
+ return services.codeServerManager.status({ checkLatest });
135
+ });
136
+ app.post('/api/agent/code-server/install', async (request, reply) => {
137
+ if (!await authenticateAgentHttp(request, reply))
138
+ return reply;
139
+ return handleCodeServerError(reply, () => services.codeServerManager.startInstall({ action: 'install' }));
140
+ });
141
+ app.post('/api/agent/code-server/update', async (request, reply) => {
142
+ if (!await authenticateAgentHttp(request, reply))
143
+ return reply;
144
+ return handleCodeServerError(reply, () => services.codeServerManager.startInstall({ action: 'update', force: true }));
145
+ });
146
+ app.post('/api/agent/code-server/open', async (request, reply) => {
147
+ if (!await authenticateAgentHttp(request, reply))
148
+ return reply;
149
+ if (typeof request.body?.terminalId !== 'string' || !request.body.terminalId.trim()) {
150
+ return reply.code(400).send({ error: 'terminal_id_required' });
151
+ }
152
+ const serverName = sanitizeTitleInput(request.body.serverName);
153
+ const tabName = sanitizeTitleInput(request.body.tabName);
154
+ const publicBasePathTemplate = typeof request.body.publicBasePathTemplate === 'string'
155
+ ? request.body.publicBasePathTemplate
156
+ : undefined;
157
+ return handleCodeServerError(reply, () => services.codeServerManager.openForTerminal(request.body.terminalId, {
158
+ ...(serverName ? { serverName } : {}),
159
+ ...(tabName ? { tabName } : {}),
160
+ ...(publicBasePathTemplate ? { publicBasePathTemplate } : {})
161
+ }));
162
+ });
163
+ app.post('/api/agent/code-server/stop', async (request, reply) => {
164
+ if (!await authenticateAgentHttp(request, reply))
165
+ return reply;
166
+ const instanceId = typeof request.body?.instanceId === 'string' && request.body.instanceId ? request.body.instanceId : undefined;
167
+ return services.codeServerManager.stop(instanceId);
168
+ });
169
+ app.post('/api/agent/code-server/uninstall', async (request, reply) => {
170
+ if (!await authenticateAgentHttp(request, reply))
171
+ return reply;
172
+ return handleCodeServerError(reply, () => services.codeServerManager.startUninstall());
173
+ });
174
+ app.get('/api/agent/code-server/instances/:instanceId', async (request, reply) => {
175
+ if (!await authenticateAgentHttp(request, reply))
176
+ return reply;
177
+ return reply.redirect(`/api/agent/code-server/instances/${encodeURIComponent(request.params.instanceId)}/`, 302);
178
+ });
179
+ app.get('/api/agent/code-server/instances/:instanceId/__nterminal-title.js', async (request, reply) => {
180
+ if (!await authenticateAgentHttp(request, reply))
181
+ return reply;
182
+ const title = services.codeServerManager.getTitleForInstance(request.params.instanceId, titleTokenFromRequest(request));
183
+ if (!title) {
184
+ return reply.code(404).send('/* code-server instance not found */');
185
+ }
186
+ return reply
187
+ .type('application/javascript; charset=utf-8')
188
+ .header('Cache-Control', 'no-store')
189
+ .send(codeServerTitleLockScript(title));
190
+ });
191
+ await registerCodeServerProxyRoutes(app, config, {
192
+ codeServerManager: services.codeServerManager,
193
+ authenticateHttp: authenticateAgentHttp,
194
+ authenticateWebSocket: async (_socket, request) => verifyAgentToken(config, extractBearerToken(request)),
195
+ route: agentCodeServerProxyRoute,
196
+ routePrefix: (instanceId) => `/api/agent/code-server/instances/${encodeURIComponent(instanceId)}`
197
+ });
198
+ }
199
+ async function handleCodeServerError(reply, handler) {
200
+ try {
201
+ return await handler();
202
+ }
203
+ catch (error) {
204
+ if (error instanceof CodeServerError) {
205
+ return reply.code(error.statusCode).send({ error: error.code, message: error.message });
206
+ }
207
+ throw error;
208
+ }
209
+ }
210
+ async function registerCodeServerProxyRoutes(_app, _config, services) {
211
+ await _app.register(async (proxyApp) => {
212
+ proxyApp.removeAllContentTypeParsers();
213
+ proxyApp.addContentTypeParser('*', { parseAs: 'buffer', bodyLimit: codeServerProxyBodyLimitBytes }, (_request, body, done) => {
214
+ done(null, body);
215
+ });
216
+ proxyApp.route({
217
+ method: 'GET',
218
+ url: services.route,
219
+ exposeHeadRoute: false,
220
+ handler: async (request, reply) => {
221
+ if (!await services.authenticateHttp(request, reply))
222
+ return reply;
223
+ void proxyCodeServerHttp(services.codeServerManager, request, reply, services.routePrefix);
224
+ return reply;
225
+ },
226
+ wsHandler: async (socket, request) => {
227
+ if (!await services.authenticateWebSocket(socket, request)) {
228
+ socket.close(1008, 'unauthorized');
229
+ return;
230
+ }
231
+ proxyCodeServerWebSocket(services.codeServerManager, socket, request, services.routePrefix);
232
+ }
233
+ });
234
+ for (const method of httpProxyMethods) {
235
+ proxyApp.route({
236
+ method,
237
+ url: services.route,
238
+ bodyLimit: codeServerProxyBodyLimitBytes,
239
+ handler: async (request, reply) => {
240
+ if (!await services.authenticateHttp(request, reply))
241
+ return reply;
242
+ void proxyCodeServerHttp(services.codeServerManager, request, reply, services.routePrefix);
243
+ return reply;
244
+ }
245
+ });
246
+ }
247
+ });
248
+ }
249
+ function isProxyOriginAcceptable(config, request) {
250
+ const origin = request.headers.origin;
251
+ if (!origin) {
252
+ return request.method === 'GET' || request.method === 'HEAD';
253
+ }
254
+ return isAllowedOrigin(config, origin);
255
+ }
256
+ function sanitizeTitleInput(value) {
257
+ if (typeof value !== 'string') {
258
+ return undefined;
259
+ }
260
+ const trimmed = value.replace(/\s+/g, ' ').trim();
261
+ return trimmed ? trimmed.slice(0, 80) : undefined;
262
+ }
263
+ function proxyCodeServerHttp(manager, request, reply, routePrefix) {
264
+ const instance = manager.getInstance(request.params.instanceId);
265
+ if (!instance) {
266
+ void reply.code(404).send({ error: 'code_server_instance_not_found' });
267
+ return;
268
+ }
269
+ const publicPrefix = codeServerPublicPrefix(instance);
270
+ const targetPath = proxyTargetPath(request, instance.id, routePrefix);
271
+ const body = serializedBody(request);
272
+ const headers = proxyRequestHeaders(request, instance, body, publicPrefix);
273
+ reply.hijack();
274
+ const upstream = http.request({
275
+ hostname: '127.0.0.1',
276
+ port: instance.port,
277
+ path: targetPath,
278
+ method: request.method,
279
+ headers
280
+ }, (upstreamResponse) => {
281
+ if (request.method === 'HEAD') {
282
+ const responseHeaders = proxyResponseHeaders(upstreamResponse.headers, instance, { publicPrefix });
283
+ reply.raw.writeHead(upstreamResponse.statusCode ?? 502, responseHeaders);
284
+ reply.raw.end();
285
+ upstreamResponse.resume();
286
+ return;
287
+ }
288
+ if (shouldInjectTitleScript(upstreamResponse.headers)) {
289
+ const titleToken = titleTokenFromRequest(request);
290
+ const chunks = [];
291
+ upstreamResponse.on('data', (chunk) => chunks.push(chunk));
292
+ upstreamResponse.on('end', () => {
293
+ const body = injectTitleScript(Buffer.concat(chunks), instance, titleToken);
294
+ const responseHeaders = proxyResponseHeaders(upstreamResponse.headers, instance, { publicPrefix, contentLength: body.byteLength, mutated: true });
295
+ reply.raw.writeHead(upstreamResponse.statusCode ?? 502, responseHeaders);
296
+ reply.raw.end(body);
297
+ });
298
+ upstreamResponse.on('error', () => reply.raw.destroy());
299
+ return;
300
+ }
301
+ const responseHeaders = proxyResponseHeaders(upstreamResponse.headers, instance, { publicPrefix });
302
+ reply.raw.writeHead(upstreamResponse.statusCode ?? 502, responseHeaders);
303
+ upstreamResponse.pipe(reply.raw);
304
+ });
305
+ upstream.on('error', () => {
306
+ if (!reply.raw.headersSent) {
307
+ reply.raw.writeHead(502, { 'content-type': 'application/json' });
308
+ reply.raw.end(JSON.stringify({ error: 'code_server_proxy_failed' }));
309
+ return;
310
+ }
311
+ reply.raw.destroy();
312
+ });
313
+ if (body) {
314
+ upstream.write(body);
315
+ }
316
+ upstream.end();
317
+ }
318
+ function proxyCodeServerWebSocket(manager, socket, request, routePrefix) {
319
+ const instance = manager.getInstance(request.params.instanceId);
320
+ if (!instance) {
321
+ socket.close(1008, 'code-server instance not found');
322
+ return;
323
+ }
324
+ const publicPrefix = codeServerPublicPrefix(instance);
325
+ const targetPath = proxyTargetPath(request, instance.id, routePrefix);
326
+ const protocols = websocketProtocols(request.headers['sec-websocket-protocol']);
327
+ const upstream = new WebSocket(`ws://127.0.0.1:${instance.port}${targetPath}`, protocols, {
328
+ headers: websocketProxyHeaders(request, instance, publicPrefix)
329
+ });
330
+ relayWebSocketPair(socket, upstream, {
331
+ onClientMessage: () => manager.touchInstance(instance.id),
332
+ onUpstreamMessage: () => manager.touchInstance(instance.id)
333
+ });
334
+ }
335
+ function proxyTargetPath(request, instanceId, routePrefix) {
336
+ const rawUrl = request.raw.url ?? request.url;
337
+ const parsed = new URL(rawUrl, 'http://nterminal.local');
338
+ const prefix = routePrefix(instanceId);
339
+ const rest = parsed.pathname.startsWith(prefix) ? parsed.pathname.slice(prefix.length) : parsed.pathname;
340
+ const queryStart = rawUrl.indexOf('?');
341
+ const rawSearch = queryStart >= 0 ? rawUrl.slice(queryStart) : '';
342
+ return `${rest.startsWith('/') ? rest : `/${rest}`}${stripTitleTokenFromSearch(rawSearch)}`;
343
+ }
344
+ function serializedBody(request) {
345
+ if (request.method === 'GET' || request.method === 'HEAD') {
346
+ return undefined;
347
+ }
348
+ if (request.body === undefined || request.body === null) {
349
+ return undefined;
350
+ }
351
+ if (Buffer.isBuffer(request.body) || typeof request.body === 'string') {
352
+ return request.body;
353
+ }
354
+ return JSON.stringify(request.body);
355
+ }
356
+ function proxyRequestHeaders(request, instance, body, publicPrefix) {
357
+ const headers = request.headers;
358
+ const next = {};
359
+ // Title injection can only rewrite an uncompressed HTML body, so force
360
+ // identity encoding for requests that expect HTML — but only those:
361
+ // stripping accept-encoding globally would ship every workbench JS/CSS/
362
+ // WASM asset uncompressed.
363
+ const expectsHtml = headerString(headers.accept).toLowerCase().includes('text/html');
364
+ for (const [name, value] of Object.entries(headers)) {
365
+ const lower = name.toLowerCase();
366
+ if (hopByHopHeaders.has(lower) || lower === 'host' || lower === 'cookie' || lower === 'authorization' || lower === 'content-length') {
367
+ continue;
368
+ }
369
+ if (lower === 'accept-encoding' && expectsHtml) {
370
+ continue;
371
+ }
372
+ next[name] = value;
373
+ }
374
+ next.host = `127.0.0.1:${instance.port}`;
375
+ next['x-forwarded-host'] = headers['x-forwarded-host'] ?? headers.host;
376
+ next['x-forwarded-proto'] = headers['x-forwarded-proto'] ?? request.protocol;
377
+ next['x-forwarded-prefix'] = publicPrefix;
378
+ if (body !== undefined) {
379
+ next['content-length'] = Buffer.byteLength(body);
380
+ }
381
+ return next;
382
+ }
383
+ function websocketProxyHeaders(request, instance, publicPrefix) {
384
+ const headers = request.headers;
385
+ const next = {};
386
+ for (const [name, value] of Object.entries(headers)) {
387
+ const lower = name.toLowerCase();
388
+ if (hopByHopHeaders.has(lower) ||
389
+ lower === 'host' ||
390
+ lower === 'cookie' ||
391
+ lower === 'authorization' ||
392
+ lower === 'sec-websocket-key' ||
393
+ lower === 'sec-websocket-version' ||
394
+ lower === 'sec-websocket-protocol' ||
395
+ lower === 'sec-websocket-extensions') {
396
+ continue;
397
+ }
398
+ next[name] = value;
399
+ }
400
+ next.host = `127.0.0.1:${instance.port}`;
401
+ next['x-forwarded-host'] = headers['x-forwarded-host'] ?? headers.host;
402
+ next['x-forwarded-proto'] = headers['x-forwarded-proto'] ?? request.protocol;
403
+ next['x-forwarded-prefix'] = publicPrefix;
404
+ return next;
405
+ }
406
+ function proxyResponseHeaders(headers, instance, options) {
407
+ const next = {};
408
+ const mutated = options.mutated === true || options.contentLength !== undefined;
409
+ for (const [name, value] of Object.entries(headers)) {
410
+ const lower = name.toLowerCase();
411
+ if (hopByHopHeaders.has(lower) || lower === 'set-cookie') {
412
+ continue;
413
+ }
414
+ if (lower === 'content-length' && options.contentLength !== undefined) {
415
+ continue;
416
+ }
417
+ if (mutated && (lower === 'etag' || lower === 'content-md5' || lower === 'digest')) {
418
+ continue;
419
+ }
420
+ if (lower === 'location' && typeof value === 'string') {
421
+ next[name] = rewriteProxyLocation(value, instance, options.publicPrefix);
422
+ continue;
423
+ }
424
+ next[name] = value;
425
+ }
426
+ if (options.contentLength !== undefined) {
427
+ next['content-length'] = options.contentLength;
428
+ }
429
+ if (mutated) {
430
+ next['cache-control'] = 'no-store';
431
+ }
432
+ return next;
433
+ }
434
+ function rewriteProxyLocation(value, instance, prefix) {
435
+ if (value === prefix || value.startsWith(`${prefix}/`) || value.startsWith(`${prefix}?`) || value.startsWith(`${prefix}#`)) {
436
+ return value;
437
+ }
438
+ if (value.startsWith('/')) {
439
+ return `${prefix}${value}`;
440
+ }
441
+ try {
442
+ const parsed = new URL(value);
443
+ if ((parsed.hostname === '127.0.0.1' || parsed.hostname === 'localhost') &&
444
+ parsed.port === String(instance.port)) {
445
+ return `${prefix}${parsed.pathname}${parsed.search}${parsed.hash}`;
446
+ }
447
+ }
448
+ catch {
449
+ // Keep non-URL Location headers unchanged.
450
+ }
451
+ return value;
452
+ }
453
+ function websocketProtocols(value) {
454
+ const raw = Array.isArray(value) ? value.join(',') : value;
455
+ const protocols = raw
456
+ ?.split(',')
457
+ .map((part) => part.trim())
458
+ .filter(Boolean);
459
+ return protocols && protocols.length > 0 ? protocols : undefined;
460
+ }
461
+ function shouldInjectTitleScript(headers) {
462
+ const contentType = headerString(headers['content-type']).toLowerCase();
463
+ if (!contentType.includes('text/html')) {
464
+ return false;
465
+ }
466
+ return !headerString(headers['content-encoding']);
467
+ }
468
+ function injectTitleScript(body, instance, titleToken) {
469
+ const html = body.toString('utf8');
470
+ const tokenQuery = titleToken ? `?token=${encodeURIComponent(titleToken)}` : '';
471
+ const tag = `<script src="${codeServerPublicPrefix(instance)}/__nterminal-title.js${tokenQuery}" defer></script>`;
472
+ const headCloseIndex = html.search(/<\/head\s*>/i);
473
+ if (headCloseIndex >= 0) {
474
+ return Buffer.from(`${html.slice(0, headCloseIndex)}${tag}${html.slice(headCloseIndex)}`, 'utf8');
475
+ }
476
+ const bodyCloseIndex = html.search(/<\/body\s*>/i);
477
+ if (bodyCloseIndex >= 0) {
478
+ return Buffer.from(`${html.slice(0, bodyCloseIndex)}${tag}${html.slice(bodyCloseIndex)}`, 'utf8');
479
+ }
480
+ return Buffer.from(`${html}${tag}`, 'utf8');
481
+ }
482
+ function codeServerPublicPrefix(instance) {
483
+ try {
484
+ const parsed = new URL(instance.url, 'http://nterminal.local');
485
+ return parsed.pathname.endsWith('/') ? parsed.pathname.slice(0, -1) : parsed.pathname;
486
+ }
487
+ catch {
488
+ return instanceUrlPrefix(instance.id);
489
+ }
490
+ }
491
+ function titleTokenFromRequest(request) {
492
+ const token = request.query?.token ??
493
+ request.query?.nterminalTitle;
494
+ return typeof token === 'string' && token.trim() ? token.trim() : undefined;
495
+ }
496
+ function stripTitleTokenFromSearch(search) {
497
+ if (!search || !search.includes('nterminalTitle')) {
498
+ return search;
499
+ }
500
+ const kept = search
501
+ .slice(1)
502
+ .split('&')
503
+ .filter((part) => part.split('=', 1)[0] !== 'nterminalTitle');
504
+ return kept.length > 0 ? `?${kept.join('&')}` : '';
505
+ }
506
+ function codeServerTitleLockScript(title) {
507
+ const serializedTitle = JSON.stringify(title);
508
+ const serializedIconHref = JSON.stringify('/brand/vscode.png');
509
+ return `
510
+ (() => {
511
+ const desiredTitle = ${serializedTitle};
512
+ const desiredIconHref = ${serializedIconHref};
513
+ const ensureTitle = () => {
514
+ let titleElement = document.querySelector('title');
515
+ if (!titleElement) {
516
+ titleElement = document.createElement('title');
517
+ document.head.appendChild(titleElement);
518
+ }
519
+ if (document.title !== desiredTitle) {
520
+ document.title = desiredTitle;
521
+ }
522
+ };
523
+ const ensureIcon = () => {
524
+ let iconElement = document.querySelector('link[data-nterminal-code-favicon="true"]');
525
+ if (!iconElement) {
526
+ iconElement = document.createElement('link');
527
+ iconElement.setAttribute('data-nterminal-code-favicon', 'true');
528
+ iconElement.setAttribute('rel', 'icon');
529
+ iconElement.setAttribute('type', 'image/png');
530
+ }
531
+ if (iconElement.getAttribute('href') !== desiredIconHref) {
532
+ iconElement.setAttribute('href', desiredIconHref);
533
+ }
534
+ const iconLinks = Array.from(document.head.querySelectorAll('link[rel~="icon"]'));
535
+ if (iconLinks[iconLinks.length - 1] !== iconElement) {
536
+ document.head.appendChild(iconElement);
537
+ }
538
+ };
539
+ ensureTitle();
540
+ ensureIcon();
541
+ const target = document.querySelector('title') || document.head;
542
+ new MutationObserver(ensureTitle).observe(target, { childList: true, characterData: true, subtree: true });
543
+ new MutationObserver(ensureIcon).observe(document.head, { childList: true, subtree: true, attributes: true, attributeFilter: ['href', 'rel'] });
544
+ window.addEventListener('focus', ensureTitle, { passive: true });
545
+ window.addEventListener('focus', ensureIcon, { passive: true });
546
+ })();
547
+ `;
548
+ }
549
+ function headerString(value) {
550
+ return Array.isArray(value) ? value.join(',') : value ?? '';
551
+ }
552
+ //# sourceMappingURL=codeServerRoutes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeServerRoutes.js","sourceRoot":"","sources":["../../../src/server/routes/codeServerRoutes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import WebSocket from 'ws';
2
+ interface WebSocketRelayOptions {
3
+ maxPendingMessages?: number;
4
+ maxPendingBytes?: number;
5
+ pendingMessageOverflowCode?: number;
6
+ pendingByteOverflowCode?: number;
7
+ pendingOverflowReason?: string;
8
+ onClientMessage?: () => void;
9
+ onUpstreamMessage?: () => void;
10
+ }
11
+ export declare function relayWebSocketPair(clientSocket: WebSocket, upstreamSocket: WebSocket, options?: WebSocketRelayOptions): void;
12
+ export {};