FROM oven/bun:1.4.4 AS bun
FROM node:24-bookworm-slim AS build
COPY --from=bun /usr/local/bin/bun /usr/local/bin/bun
WORKDIR /src
COPY . .
RUN npm ci --prefix cloud && cd vendor/hapi && bun install --frozen-lockfile
RUN bun build cloud/src/index.ts --target=bun --external better-auth --outfile=/out/server.js
# Offer the actual modified server source and its locked build inputs to users.
RUN tar --exclude=node_modules --exclude=dist --exclude=.git -czf /out/source.tar.gz cloud vendor/hapi tools deploy docs package.json upstream-lock.json THIRD_PARTY_NOTICES.md LICENSE README.md

FROM oven/bun:1.4.4-slim
WORKDIR /app
COPY --from=build /out/ /app/
COPY --from=build /src/cloud/node_modules/ /app/node_modules/
RUN mkdir -p /data && chown bun:bun /data
USER bun
ENV NODE_ENV=production DSH_HOST=0.0.0.0 DSH_PORT=3088 DSH_DATA_DIR=/data DSH_SOURCE_ARCHIVE=/app/source.tar.gz
EXPOSE 3088
HEALTHCHECK --interval=30s --timeout=5s CMD bun -e "const r=await fetch('http://127.0.0.1:3088/health');if(!r.ok)process.exit(1)"
CMD ["bun", "/app/server.js"]
