# Build em uma imagem, runtime em outra: o TypeScript e o `npm` não precisam
# existir na máquina do parceiro, e a imagem final não os carrega.
FROM node:22-alpine AS build
WORKDIR /app
COPY package.json package-lock.json tsconfig.json ./
RUN npm ci
COPY src ./src
RUN npm run build

FROM node:22-alpine
WORKDIR /app

# O agente não tem dependência de runtime, então `dist/` e o manifesto bastam.
# Sem `node_modules` na imagem final não há árvore de terceiros para auditar
# nem para vazar.
COPY --from=build /app/dist ./dist
COPY package.json ./

# Nunca como root: o processo segura a chave privada do parceiro, e um bug de
# leitura de arquivo num processo root lê a máquina inteira.
USER node

ENV NODE_ENV=production
ENV LOOTFY_CONTROL_HOST=127.0.0.1
ENV LOOTFY_CONTROL_PORT=8899

# A porta de controle ASSINA. Não há `EXPOSE` de propósito: publicá-la com
# `-p` entregaria a autoridade do parceiro a quem alcançar a máquina. Quem
# precisa dela usa `--network host` ou fala pelo spool.

ENTRYPOINT ["node", "dist/main.js"]
