feat(broker+cli): multi-tenant telegram bridge with 4 entry points
Some checks failed
CI / Lint (push) Has been cancelled
CI / Typecheck (push) Has been cancelled
CI / Broker tests (Postgres) (push) Has been cancelled
CI / Docker build (linux/amd64) (push) Has been cancelled

- DB: mesh.telegram_bridge table + migration
- Broker: telegram-bridge.ts (Grammy bot + WS pool + routing)
- Broker: telegram-token.ts (JWT connect tokens)
- Broker: POST /tg/token endpoint + bridge boot on startup
- CLI: claudemesh connect/disconnect telegram commands
- Spec: docs/telegram-bridge-spec.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Alejandro Gutiérrez
2026-04-09 10:03:11 +01:00
parent c914f2b7db
commit 126bbfeb2c
11 changed files with 2120 additions and 3 deletions

View File

@@ -44,9 +44,22 @@ interface JoinedMesh {
}
function loadMeshConfig(): JoinedMesh[] {
// Support env-based config for Docker/VPS deployment
if (process.env.MESH_ID && process.env.MESH_MEMBER_ID && process.env.MESH_PUBKEY && process.env.MESH_SECRET_KEY) {
return [{
meshId: process.env.MESH_ID,
memberId: process.env.MESH_MEMBER_ID,
slug: process.env.MESH_SLUG ?? "mesh",
name: process.env.MESH_NAME ?? "mesh",
pubkey: process.env.MESH_PUBKEY,
secretKey: process.env.MESH_SECRET_KEY,
brokerUrl: process.env.MESH_BROKER_URL ?? "wss://ic.claudemesh.com/ws",
}];
}
// Fall back to config file
const path = join(CONFIG_DIR, "config.json");
if (!existsSync(path)) {
console.error(`No config at ${path} — run 'claudemesh join' first`);
console.error(`No config at ${path} set MESH_ID/MESH_MEMBER_ID/MESH_PUBKEY/MESH_SECRET_KEY env vars or run 'claudemesh join' first`);
process.exit(1);
}
const config = JSON.parse(readFileSync(path, "utf-8"));