agent-first-pay 0.7.0

A payment tool for AI agents — send and receive across five networks through one interface, with spending limits you control.
Documentation
# ── Build stage ──
FROM rust:1.94-bookworm AS builder

ARG FEATURES="btc-esplora,cashu,ln-phoenixd,redb,rest,exchange-rate,backup"

RUN apt-get update && apt-get install -y --no-install-recommends \
        protobuf-compiler \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /src
COPY Cargo.toml Cargo.lock build.rs ./
COPY proto/ proto/
COPY src/ src/
COPY tests/ tests/

RUN cargo build --release --no-default-features --features "${FEATURES}" \
    && cp target/release/afpay /usr/local/bin/afpay

# ── Runtime stage ──
FROM debian:bookworm-slim

ARG INSTALL_PHOENIXD=false
ARG INSTALL_BITCOIND=false
ARG PHOENIXD_VERSION=0.7.2

RUN apt-get update && apt-get install -y --no-install-recommends \
        supervisor ca-certificates curl \
    && rm -rf /var/lib/apt/lists/*

COPY --from=builder /usr/local/bin/afpay /usr/local/bin/afpay

# Install phoenixd if requested
RUN if [ "$INSTALL_PHOENIXD" = "true" ]; then \
        ARCH=$(uname -m) && \
        if [ "$ARCH" = "x86_64" ]; then ARCH="linux-x64"; \
        elif [ "$ARCH" = "aarch64" ]; then ARCH="linux-arm64"; \
        else echo "unsupported arch: $ARCH" && exit 1; fi && \
        curl -fsSL "https://github.com/ACINQ/phoenixd/releases/download/v${PHOENIXD_VERSION}/phoenixd-${PHOENIXD_VERSION}-${ARCH}.zip" -o /tmp/phoenixd.zip && \
        apt-get update && apt-get install -y --no-install-recommends unzip && \
        unzip /tmp/phoenixd.zip -d /tmp/phoenixd && \
        cp /tmp/phoenixd/phoenixd-*/phoenixd /usr/local/bin/ && \
        chmod +x /usr/local/bin/phoenixd && \
        rm -rf /tmp/phoenixd /tmp/phoenixd.zip && \
        apt-get purge -y unzip && apt-get autoremove -y && rm -rf /var/lib/apt/lists/*; \
    fi

# Install bitcoind if requested
RUN if [ "$INSTALL_BITCOIND" = "true" ]; then \
        ARCH=$(uname -m) && \
        if [ "$ARCH" = "x86_64" ]; then ARCH="x86_64-linux-gnu"; \
        elif [ "$ARCH" = "aarch64" ]; then ARCH="aarch64-linux-gnu"; \
        else echo "unsupported arch: $ARCH" && exit 1; fi && \
        curl -fsSL "https://bitcoincore.org/bin/bitcoin-core-28.1/bitcoin-28.1-${ARCH}.tar.gz" -o /tmp/bitcoin.tar.gz && \
        tar -xzf /tmp/bitcoin.tar.gz -C /tmp && \
        cp /tmp/bitcoin-*/bin/bitcoind /usr/local/bin/ && \
        cp /tmp/bitcoin-*/bin/bitcoin-cli /usr/local/bin/ && \
        rm -rf /tmp/bitcoin* ; \
    fi

# Supervisor config
COPY container/docker/supervisord.conf /etc/supervisor/supervisord.conf
COPY container/docker/conf.d/ /etc/supervisor/conf.d/

# Entrypoint + setup script
COPY container/docker/entrypoint.sh /entrypoint.sh
COPY container/docker/container-setup.sh /container-setup.sh
RUN chmod +x /entrypoint.sh /container-setup.sh

ENV AFPAY_MODE=rest \
    AFPAY_DATA_DIR=/data/afpay \
    BITCOIND_DATADIR=/data/bitcoind \
    PHOENIXD_DATADIR=/data/phoenixd \
    AFPAY_PORT=9401

EXPOSE 9401

ENTRYPOINT ["/entrypoint.sh"]