#!/usr/bin/env bash set -e # ── Màu terminal ────────────────────────────────────────────────────────────── GREEN='\033[0;32m'; YELLOW='\033[1;33m'; RED='\033[0;31m'; NC='\033[0m' ok() { echo -e "${GREEN}✓${NC} $1"; } warn() { echo -e "${YELLOW}!${NC} $1"; } fail() { echo -e "${RED}✗${NC} $1"; exit 1; } hdr() { echo -e "\n${GREEN}── $1 ──${NC}"; } echo "" echo " NotebookLM API — Setup" echo " ======================" # ── 1. Node.js ──────────────────────────────────────────────────────────────── hdr "Kiểm tra Node.js" if ! command -v node &>/dev/null; then fail "Node.js chưa được cài. Tải tại https://nodejs.org (cần v18+)" fi NODE_VER=$(node -e "process.exit(parseInt(process.versions.node))") # node -e exit trick: dùng node để lấy version number NODE_MAJOR=$(node -e "console.log(parseInt(process.versions.node))") if [ "$NODE_MAJOR" -lt 18 ]; then fail "Node.js $NODE_MAJOR quá cũ. Cần v18 trở lên." fi ok "Node.js $(node -v)" # ── 2. Chrome ──────────────────────────────────────────────────────────────── hdr "Kiểm tra Google Chrome" CHROME_FOUND=false CHROME_PATHS=( "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" "/Applications/Chromium.app/Contents/MacOS/Chromium" "/usr/bin/google-chrome" "/usr/bin/google-chrome-stable" "/usr/bin/chromium-browser" "/usr/bin/chromium" ) for p in "${CHROME_PATHS[@]}"; do if [ -f "$p" ]; then ok "Chrome: $p" CHROME_FOUND=true break fi done if [ "$CHROME_FOUND" = false ]; then warn "Không tìm thấy Chrome — Puppeteer sẽ dùng Chromium tích hợp" warn "Khuyến nghị cài Google Chrome: https://www.google.com/chrome" fi # ── 3. npm install ──────────────────────────────────────────────────────────── hdr "Cài đặt dependencies" if [ -d "node_modules" ]; then ok "node_modules đã tồn tại — bỏ qua npm install" warn "Chạy 'npm install' thủ công nếu cần cập nhật packages" else npm install ok "npm install xong" fi # ── 4. .env ─────────────────────────────────────────────────────────────────── hdr "Cấu hình môi trường" if [ ! -f ".env" ]; then if [ -f ".env.example" ]; then cp .env.example .env ok ".env tạo từ .env.example" else cat > .env <<'EOF' PORT=3456 HEADLESS=false # CHROME_PATH=/Applications/Google Chrome.app/Contents/MacOS/Google Chrome API_KEY= EOF ok ".env tạo mới với cấu hình mặc định" fi else ok ".env đã tồn tại" fi # ── 5. chrome-profile ───────────────────────────────────────────────────────── if [ ! -d "chrome-profile" ]; then mkdir -p chrome-profile ok "Thư mục chrome-profile/ tạo mới" fi # ── 6. Kết quả ──────────────────────────────────────────────────────────────── echo "" echo -e "${GREEN}Setup hoàn tất!${NC}" echo "" echo " Khởi động server:" echo " npm start" echo "" echo " Sau khi server chạy, đăng nhập Google:" echo " curl -X POST http://localhost:3456/api/auth/login" echo "" echo " Swagger UI: http://localhost:3456/docs" echo " Tài liệu: API.md" echo "" # ── 7. Hỏi có muốn start ngay không ───────────────────────────────────────── read -r -p "Khởi động server ngay bây giờ? [y/N] " REPLY if [[ "$REPLY" =~ ^[Yy]$ ]]; then echo "" npm start fi