FROM node:22-alpine AS source
RUN apk add --no-cache unzip
WORKDIR /src
COPY annonet-arrowstack-ready.zip /tmp/annonet.zip
RUN unzip -q /tmp/annonet.zip -d /src
COPY mcpAuthMiddleware.js /src/src/auth/mcpAuthMiddleware.js
COPY proxyPolicyPatch.js /tmp/proxyPolicyPatch.js
RUN node /tmp/proxyPolicyPatch.js /src/src/server.js
# Arrowstack's database-per-tenant runtime role intentionally cannot install
# extensions. PostgreSQL 13+ provides gen_random_uuid() in core, and annoNet
# does not use any other pgcrypto functions.
RUN sed -i '/^CREATE EXTENSION IF NOT EXISTS pgcrypto;$/d' /src/sql/001_init.sql

FROM node:22-alpine AS frontend-build
WORKDIR /build/frontend-astro
COPY --from=source /src/frontend-astro/package*.json ./
RUN npm ci
COPY --from=source /src/frontend-astro/ ./
RUN npm run build

FROM node:22-alpine AS runtime
WORKDIR /app

ENV NODE_ENV=production \
    HOST=0.0.0.0 \
    PORT=8787

RUN apk add --no-cache curl

COPY --from=source /src/package*.json ./
RUN npm ci --omit=dev && npm cache clean --force

COPY --from=source /src/src ./src
COPY --from=source /src/sql ./sql
COPY --from=source /src/scripts ./scripts
COPY --from=source /src/frontend ./frontend
COPY --from=frontend-build /build/frontend-astro/dist ./public

RUN npm run check \
    && mkdir -p /app/uploads/images \
    && cp /app/frontend/annotation-overlay.js /app/public/annotation-overlay.js \
    && cp /app/frontend/*.html /app/public/

EXPOSE 8787

HEALTHCHECK --interval=10s --timeout=5s --start-period=20s --retries=6 \
  CMD node -e "fetch('http://127.0.0.1:8787/api/health/ready').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"

CMD ["npm", "start"]
