#!/bin/bash set -euo pipefail # Normalizar rutas de DB a absolutas para que bot y web apunten al mismo archivo if [ -n "${DB_PATH:-}" ]; then # readlink -f resuelve a ruta absoluta y elimina ./, ../, etc. DB_PATH="$(readlink -f "$DB_PATH")" || true export DB_PATH else DATA_DIR="${DATA_DIR:-/app/data}" DATA_DIR="$(readlink -f "$DATA_DIR")" || true export DATA_DIR fi # Determinar archivo de base de datos para esperas if [ -n "${DB_PATH:-}" ]; then DB_FILE="$DB_PATH" else DB_FILE="${DATA_DIR:-/app/data}/tasks.db" fi # Arranca el bot en segundo plano (puerto 3007 por defecto) BOT_PORT="${BOT_PORT:-3007}" PORT="$BOT_PORT" bun run index.ts & # Esperar a que exista el archivo de DB (máx ~30s) echo "[startup] Esperando a que exista la base de datos en: $DB_FILE" for i in $(seq 1 150); do if [ -f "$DB_FILE" ]; then break; fi sleep 0.2 done # Esperar a que las tablas de auth estén creadas por las migraciones del bot (máx ~30s) if command -v sqlite3 >/dev/null 2>&1; then echo "[startup] Verificando tablas de autenticación (web_tokens, web_sessions)..." for i in $(seq 1 150); do if [ -f "$DB_FILE" ]; then HAS_AUTH=$(sqlite3 "$DB_FILE" "SELECT 1 FROM sqlite_master WHERE type='table' AND name IN ('web_tokens','web_sessions') LIMIT 1;" || true) if [ "$HAS_AUTH" = "1" ]; then break fi fi sleep 0.2 done else echo "[startup] sqlite3 no disponible; se omite verificación de tablas (continuando)." fi # Arranca la web (SvelteKit) en segundo plano en el puerto 3008 WEB_PORT="${WEB_PORT:-3008}" pushd apps/web >/dev/null PORT="$WEB_PORT" bun ./build/index.js & popd >/dev/null # Pequeña espera para evitar condiciones de carrera sleep 1 # Arranca el router en primer plano en el puerto 3000 (o $PORT si viene de CapRover) exec bun proxy.ts