#!/usr/bin/env node /** * Fake Telegram Bot API for the workstation dev body (compose.yaml). * Echoes sent messages back as mentions so the wake path can be exercised * without network or a real bot token. Not production code. */ import { createServer } from 'node:http' let nextUpdate = 1 let nextMessage = 100 const updates = [] const server = createServer((req, res) => { let data = '' req.on('data', (c) => { data += c }) req.on('end', () => { let body = {} try { body = data === '' ? {} : JSON.parse(data) } catch { body = {} } const json = (p) => { res.writeHead(200, { 'content-type': 'application/json' }) res.end(JSON.stringify(p)) } const method = (req.url ?? '').split('/').pop()?.split('?')[0] ?? '' switch (method) { case 'getMe': return json({ ok: true, result: { id: 42, username: 'will_bot' } }) case 'getUpdates': { const offset = body.offset ?? 0 return json({ ok: true, result: updates.filter((u) => u.update_id >= offset) }) } case 'sendMessage': { const msg = { update_id: nextUpdate++, message: { message_id: nextMessage++, date: Math.floor(Date.now() / 1000), chat: { id: body.chat_id }, from: { id: 42, username: 'will_bot', is_bot: true }, text: body.text, }, } // Echo back as a mention wake after a short delay. setTimeout(() => { updates.push({ update_id: nextUpdate++, message: { ...msg.message, message_id: nextMessage++, from: { id: 7, username: 'friend' }, text: `@will_bot ${body.text}`, entities: [{ type: 'mention', offset: 0, length: 9 }], }, }) }, 1000) return json({ ok: true, result: { message_id: msg.message.message_id } }) } default: return json({ ok: true, result: {} }) } }) }) const port = Number.parseInt(process.env.PORT ?? '38080', 10) server.listen(port, () => console.log(`fake telegram listening on :${port}`))