e857bf4ec6
- grammY bot: /start, /unlock, /tip, /contact, /claim, /settings, /wallet - AES-256-GCM mnemonic encryption with scrypt key derivation - In-memory unlock sessions with background sweep - Atomic claim handling (TOCTOU-safe) - PIN rate limiting (5 attempts → 15 min lockout) - Fastify API server + Telegram Mini App (setup, unlock, send, receive, history) - One-time seed reveal via Mini App or auto-deleted DM message - Federated registry client - Docker Compose deployment Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
29 lines
930 B
YAML
29 lines
930 B
YAML
services:
|
|
bot:
|
|
build: .
|
|
restart: unless-stopped
|
|
environment:
|
|
BOT_TOKEN: ${BOT_TOKEN}
|
|
BREEZ_API_KEY: ${BREEZ_API_KEY}
|
|
DATABASE_URL: sqlite:./data/bot.db
|
|
REGISTRY_URL: ${REGISTRY_URL:-}
|
|
REGISTRY_WRITE_KEY: ${REGISTRY_WRITE_KEY:-}
|
|
REGISTRY_READ_KEY: ${REGISTRY_READ_KEY:-}
|
|
SESSION_SWEEP_INTERVAL_MS: ${SESSION_SWEEP_INTERVAL_MS:-60000}
|
|
BOT_INSTANCE_NAME: ${BOT_INSTANCE_NAME:-mybot}
|
|
WEBAPP_PORT: ${WEBAPP_PORT:-3000}
|
|
WEBAPP_URL: ${WEBAPP_URL:-}
|
|
NODE_ENV: production
|
|
ports:
|
|
- "${WEBAPP_PORT:-3000}:${WEBAPP_PORT:-3000}"
|
|
volumes:
|
|
- bot_data:/app/data
|
|
healthcheck:
|
|
test: ["CMD", "node", "-e", "require('http').get('http://localhost:${WEBAPP_PORT:-3000}/health', r => process.exit(r.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
|
|
volumes:
|
|
bot_data:
|