toes/src/server/index.tsx
2026-01-30 20:39:01 -08:00

30 lines
919 B
TypeScript

import { allApps, initApps } from '$apps'
import appsRouter from './api/apps'
import syncRouter from './api/sync'
import { Hype } from '@because/hype'
const app = new Hype({ layout: false })
app.route('/api/apps', appsRouter)
app.route('/api/sync', syncRouter)
// Tool URLs: /tool/code?app=todo&file=README.md -> redirect to tool port
app.get('/tool/:tool', c => {
const toolName = c.req.param('tool')
const tool = allApps().find(a => a.tool && a.name === toolName)
if (!tool || tool.state !== 'running' || !tool.port) {
return c.text(`Tool "${toolName}" not found or not running`, 404)
}
const params = new URLSearchParams(c.req.query()).toString()
const url = params ? `http://localhost:${tool.port}?${params}` : `http://localhost:${tool.port}`
return c.redirect(url)
})
console.log('🐾 Toes!')
initApps()
export default {
...app.defaults,
maxRequestBodySize: 1024 * 1024 * 50, // 50MB
}