# Зворотний проксі NetPulse.
#
# Caddy бере на себе сертифікати Let's Encrypt і оновлює їх сам. Це
# знімає з розгортання найчастішу причину нічного дзвінка — прострочений
# сертифікат на системі, яка сама має повідомляти про проблеми.

{
	email {$ACME_EMAIL}
}

# --- інтерфейс і API -------------------------------------------------
{$NETPULSE_DOMAIN} {
	encode zstd gzip

	# WebSocket живих оновлень. Окремим блоком, бо йому не можна
	# ставити таймаут на відповідь: зʼєднання висить годинами й
	# мовчить, поки на мапі нічого не змінюється.
	@ws path /api/v1/ws
	reverse_proxy @ws api:8080 {
		flush_interval -1
	}

	# API і вшитий у бінарник інтерфейс — за однією адресою, тож
	# розділяти їх не потрібно: SPA віддає той самий процес.
	reverse_proxy api:8080

	header {
		Strict-Transport-Security "max-age=31536000; includeSubDomains"
		X-Content-Type-Options "nosniff"
		X-Frame-Options "DENY"
		Referrer-Policy "strict-origin-when-cross-origin"
		-Server
	}

	log {
		output stdout
		format console
	}
}

# --- колектор зондів -------------------------------------------------
#
# Зонди говорять gRPC поверх HTTP/2. Усередині мережі — h2c без TLS:
# сертифікат живе тут, а не в кожному примірнику колектора.
{$NETPULSE_DOMAIN}:9443 {
	reverse_proxy h2c://collector:9443 {
		# Потік Control двонаправлений і довгий: агент тримає його
		# відкритим, доки живий. Буферизація тут ламає саме те, заради
		# чого потік існує — миттєву доставку команд.
		flush_interval -1
	}

	log {
		output stdout
		format console
	}
}
