FROM rust:1.94.0-bookworm AS crypto-build
WORKDIR /workspace
RUN rustup target add wasm32-unknown-unknown \
  && cargo install wasm-pack --version 0.14.0 --locked
COPY Cargo.toml Cargo.lock ./
COPY crates/crypto-core ./crates/crypto-core
COPY LICENSE ./crates/crypto-core/LICENSE
COPY services/rendezvous ./services/rendezvous
RUN wasm-pack build crates/crypto-core --target web --release --out-dir /crypto --out-name p2p_crypto_core

FROM node:22.22.0-alpine AS build
WORKDIR /workspace
ARG VITE_DIRECT_NAT_PORT_PREDICTION=off
ENV VITE_DIRECT_NAT_PORT_PREDICTION=${VITE_DIRECT_NAT_PORT_PREDICTION}
COPY apps/web/package*.json ./
RUN npm ci
COPY apps/web ./
RUN npm run build
COPY --from=crypto-build /crypto/p2p_crypto_core.js /workspace/release-crypto/p2p_crypto_core.js
COPY --from=crypto-build /crypto/p2p_crypto_core_bg.wasm /workspace/release-crypto/p2p_crypto_core_bg.wasm
RUN RELEASE_WASM_ROOT=/workspace/release-crypto npm run test:release-wasm

FROM nginxinc/nginx-unprivileged:1.27.4-alpine
COPY --from=build /workspace/dist /usr/share/nginx/html
COPY --from=crypto-build /crypto/p2p_crypto_core.js /crypto/p2p_crypto_core_bg.wasm /usr/share/nginx/html/crypto/
ENV RENDEZVOUS_ORIGIN=""
ENV RENDEZVOUS_URL="wss://rendezvous:8443/v1/rendezvous"
ENV ICE_TRANSPORT_POLICY="direct"
ENV DEPLOYMENT_PROFILE="development"
ENV RELAY_URL=""
ENV RELAY_ORIGIN=""
ENV RELAY_MODE="hosted-message"
ENV PAYMENTS_ORIGIN=""
ENV PASSES_ORIGIN=""
COPY apps/web/nginx.conf.template /etc/nginx/templates/default.conf.template
COPY apps/web/derive-rendezvous-csp.envsh /docker-entrypoint.d/18-rendezvous-csp.envsh
COPY apps/web/validate-rendezvous-origin.sh /docker-entrypoint.d/19-validate-rendezvous-origin.sh
COPY apps/web/generate-runtime-config.sh /docker-entrypoint.d/20-generate-runtime-config.sh
USER root
RUN sed -i 's/\r$//' /docker-entrypoint.d/18-rendezvous-csp.envsh \
  && sed -i 's/\r$//' /docker-entrypoint.d/19-validate-rendezvous-origin.sh \
  && sed -i 's/\r$//' /docker-entrypoint.d/20-generate-runtime-config.sh \
  && chmod 755 /docker-entrypoint.d/18-rendezvous-csp.envsh /docker-entrypoint.d/19-validate-rendezvous-origin.sh /docker-entrypoint.d/20-generate-runtime-config.sh
USER 101
EXPOSE 8080
