The template talks to Telegram and stores per-chat rows in the built-in
SQLite database. The copy-paste failure mode is a query that forgets
chatId.
Do not open a public issue for:
- a way for chat A to read, toggle, or delete chat B's todos
- a leaked bot token or a committed
.tgcloud/directory - a handler that trusts
callback_datawithout checking the chat
Use a
private vulnerability advisory.
Do not include a token or a dump of .tgcloud/.
- Missing
chatId(or equivalent) on a select, update, or delete - Callback payloads that act on another chat's row
- Anything that would get a token or CLI credential into git
- Docs that tell someone to commit
.tgcloud/or paste a bot token into a handler
- Telegram's serverless platform, Bot API, or BotFather. Those are Telegram's.
- Enabling Serverless on a bot you do not own.
- The educational todo bot having no auth beyond "you are this chat". That is how Telegram bots work.
.tgcloud/ is gitignored for a reason. If it has been committed or
pasted, revoke the bot token with BotFather and run npx tgcloud login
again. Queries in lib/todos.js are the pattern: every read and write
is and(eq(todos.id, id), eq(todos.chatId, chatId)) or scoped by
chatId alone.