mission-control/scripts/e2e-openclaw/mock-gateway.mjs

62 lines
1.5 KiB
JavaScript
Executable File

#!/usr/bin/env node
import http from 'node:http'
import { WebSocketServer } from 'ws'
const host = process.env.OPENCLAW_GATEWAY_HOST || '127.0.0.1'
const port = Number(process.env.OPENCLAW_GATEWAY_PORT || 18789)
const server = http.createServer((req, res) => {
if (!req.url) {
res.writeHead(404)
res.end()
return
}
if (req.url === '/health') {
res.writeHead(200, { 'content-type': 'application/json' })
res.end(JSON.stringify({ ok: true, service: 'openclaw-mock-gateway' }))
return
}
res.writeHead(200, { 'content-type': 'application/json' })
res.end(JSON.stringify({ ok: true }))
})
const wss = new WebSocketServer({ noServer: true })
wss.on('connection', (ws) => {
ws.send(JSON.stringify({ type: 'status', connected: true, source: 'mock-gateway' }))
ws.on('message', (raw) => {
const text = raw.toString()
if (text.includes('ping')) {
ws.send(JSON.stringify({ type: 'pong', ts: Date.now() }))
return
}
ws.send(JSON.stringify({ type: 'event', message: 'ack', raw: text }))
})
})
server.on('upgrade', (req, socket, head) => {
wss.handleUpgrade(req, socket, head, (ws) => {
wss.emit('connection', ws, req)
})
})
server.listen(port, host, () => {
process.stdout.write(`[openclaw-mock-gateway] listening on ${host}:${port}\n`)
})
function shutdown() {
wss.clients.forEach((client) => {
try {
client.close()
} catch {
// noop
}
})
server.close(() => process.exit(0))
}
process.on('SIGINT', shutdown)
process.on('SIGTERM', shutdown)