FROM node:22-slim

WORKDIR /app

# Native deps + Chromium for OpenClaw managed browser
RUN apt-get update && apt-get install -y --no-install-recommends \
    openssl libssl-dev ca-certificates libgcc-12-dev \
    chromium fonts-liberation libnss3 libatk-bridge2.0-0 libdrm2 \
    libxkbcommon0 libxcomposite1 libxdamage1 libxrandr2 libgbm1 \
    libpango-1.0-0 libasound2 libcups2 \
    && rm -rf /var/lib/apt/lists/*

# Chromium path for Playwright/OpenClaw browser
ENV CHROME_BIN=/usr/bin/chromium
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
ENV PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/chromium

# Install OpenClaw globally
RUN npm install -g openclaw

# Install SpendOS deps (full install, not --production, to get devDeps for build step)
COPY package.json package-lock.json ./
RUN npm ci --legacy-peer-deps 2>/dev/null || npm install --legacy-peer-deps

# Copy SpendOS source (this IS the workspace)
COPY . .

# Pre-compile MCP server to JS (avoids npx tsx in OpenClaw subprocess)
RUN npx esbuild src/mcp-server.ts --bundle --platform=node --target=node22 --format=esm --outfile=dist/mcp-server.mjs --external:@modelcontextprotocol/sdk 2>/dev/null || true

# ACP seller runtime (agent-to-agent commerce)
# Bundled as apps/spendos/acp-seller/ — copied via start.sh from monorepo or baked in
COPY acp-seller/ /app/acp-seller/
RUN cd /app/acp-seller && npm install --legacy-peer-deps 2>/dev/null || true

# Data dirs (Railway volume mounts at /data)
ENV OPENCLAW_STATE_DIR=/data/.openclaw
ENV OPENCLAW_WORKSPACE_DIR=/app
ENV OWS_VAULT_PATH=/data/ows
ENV SPENDOS_DATA_DIR=/data/spendos
ENV PORT=8080

# Create data dirs
RUN mkdir -p /data/.openclaw /data/ows /data/spendos

EXPOSE 8080

# Start script: launch SpendOS server + OpenClaw gateway together
COPY start.sh /app/start.sh
RUN chmod +x /app/start.sh
CMD ["/app/start.sh"]
# Cache bust: 1775288389
