# Working env-file for the Cyberia ecosystem compose stack (custom workflow).
# Used as-is by the CLI (not generated). Set real credentials here, then run:
#   underpost docker-compose --up --deploy-id dd-cyberia --docker-compose-id cyberia
#
# Loaded explicitly via --env-file so container service-discovery values (the
# Docker network hostnames below) are not overridden by any host-local .env.

# --- Ecosystem images (dev variants, published by docker-image.*.dev.ci.yml) --
# This stack is development-only, so it uses the `-dev` images built from the
# Dockerfile.dev variants (debug builds + live-inspection tooling).
MONGO_IMAGE=mongo:latest
VALKEY_IMAGE=valkey/valkey:latest
ENGINE_CYBERIA_IMAGE=underpost/engine-cyberia-dev
ENGINE_CYBERIA_TAG=latest
CYBERIA_SERVER_IMAGE=underpost/cyberia-server-dev
CYBERIA_SERVER_TAG=latest
CYBERIA_CLIENT_IMAGE=underpost/cyberia-client-dev
CYBERIA_CLIENT_TAG=latest
PROXY_IMAGE=nginx:stable-alpine
IPFS_IMAGE=ipfs/kubo:latest
IPFS_CLUSTER_IMAGE=ipfs/ipfs-cluster:latest

# --- Private-repo bootstrap (engine-cyberia clones the private dd-cyberia conf) -
# The engine-cyberia image ships only the underpost CLI; at start it runs the
# `underpost start --build` bootstrap, which clones ${GITHUB_USERNAME}/engine-cyberia.
GITHUB_USERNAME=underpostnet
GITHUB_ORG_NAME=underpost
GITHUB_TOKEN=change_me_private_repo_token

# --- MongoDB (translation of Secret mongodb-secret) --------------------------
MONGO_INITDB_ROOT_USERNAME=admin
MONGO_INITDB_ROOT_PASSWORD=change_me_dev_password

# --- Application DB / cache connection (Docker service discovery, not localhost)
NODE_ENV=development
DB_PROVIDER=mongoose
DB_HOST=mongodb://mongodb:27017
DB_REPLICA_SET=rs0
DB_AUTH_SOURCE=admin
VALKEY_HOST=valkey-service
VALKEY_PORT=6379

# --- Cyberia instance wiring (compose service DNS) ---------------------------
# cyberia-server-* -> stable engine gateway for HTTP and the raw engine runtime
# for gRPC. The public engine-cyberia name belongs to nginx, avoiding ambiguous
# Docker DNS while keeping one stable HTTP endpoint for every module. It resolves
# to www.cyberiaonline.com, the host that owns the Cyberia APIs.
CYBERIA_DATA_SERVER_URL=http://engine-cyberia
CYBERIA_DATA_SERVER_GRPC=engine-cyberia-runtime:50051

# Client-visible Content Authority origin, forwarded to browser/Raylib clients
# for every engine-cyberia content/asset/metadata request. Host-reachable: Docker
# publishes every engine port, and 4008 is the Cyberia host. Unlike the internal
# CYBERIA_DATA_SERVER_URL, this value is consumed outside the Compose network:
# the two responsibilities must never overwrite each other.
ENGINE_PUBLIC_URL=http://localhost:4008
ENGINE_GRPC_RELOAD_INTERVAL_SEC=300

# Shared secret between the engine and every game server. It guards the server
# registry report (server -> engine) and the hot-reload trigger (engine ->
# server). Unset disables both: a server then stays out of the public list.
CYBERIA_SERVER_API_KEY=change_me_dev_server_api_key

# Public origin of the server gateway. Each server reports this origin plus its
# own sub-path, which is the URL a client dials.
CYBERIA_SERVER_PUBLIC_ORIGIN=http://localhost:8081

# --- Browser-facing client runtime config (injected by wasm-driver.py) -----
# The single WASM bundle resolves its instance from the URL sub-path and builds
# its endpoints from these origins. HTTP client/API traffic uses nginx on :80;
# WebSocket traffic uses the dedicated multi-path server gateway on :8081.
#   http://localhost/          -> default, ws://localhost:8081/ws
#   http://localhost/test      -> test,    ws://localhost:8081/test/ws
CYBERIA_WS_ORIGIN=ws://localhost:8081
# The browser's own route to the Data Server, through nginx on :80. Distinct from the internal
# CYBERIA_DATA_SERVER_URL above: both name a Data Server origin, but from opposite sides of the
# Compose network, and one file cannot hold two values under one name.
CYBERIA_CLIENT_DATA_SERVER_URL=http://localhost

# cyberia-server logging. This is the dev stack, so default to DEBUG. Set
# CYBERIA_SERVER_LOG_LEVEL (debug|info|warn|error) to override the APP_ENV
# fallback without touching APP_ENV.
CYBERIA_SERVER_APP_ENV=development
CYBERIA_SERVER_LOG_LEVEL=

# --- cyberia-server WebSocket admission and rate limits ----------------------
# Unset keeps the built-in default. An explicit 0 turns that one limit off.
# The startup log prints the effective profile ("ws limits: ...").
#
# Set CYBERIA_DISABLE_CONNECTION_LIMITS=1 to turn every limit off. The load test
# (test/cyberia-load.test.js) drives every simulated client from one address, so
# it needs this. NEVER enable it on a public deploy.
CYBERIA_DISABLE_CONNECTION_LIMITS=
CYBERIA_MAX_CONNECTIONS=
CYBERIA_MAX_CONNECTIONS_PER_IP=
CYBERIA_CONNECT_RATE_PER_IP=
CYBERIA_CONNECT_BURST_PER_IP=
CYBERIA_MESSAGE_RATE=
CYBERIA_MESSAGE_BURST=
CYBERIA_MAX_STRIKES=

# --- engine-cyberia runtime env (loaded into the container via env_file) -----
# The dd-cyberia engine (engine-private/conf/dd-cyberia/conf.server.json) needs
# these to boot: DB auth + per-site DB names, the base PORT (each host of the
# conf takes one port from PORT+1 upward, in declaration order), JWT, and mailer.
# Secrets are DEV PLACEHOLDERS — no real credentials ship in the public image.
PORT=4004
NODE_OPTIONS=--max-old-space-size=8192
DEFAULT_DEPLOY_ID=dd-cyberia
DEPLOY_ID=dd-cyberia
# Configuration/DB selector from conf.server.json; this is not a Docker DNS alias.
DEFAULT_DEPLOY_HOST=www.cyberiaonline.com
DEFAULT_DEPLOY_PATH=/
DISABLE_API_RATE_LIMIT=true
DOTENV_CONFIG_QUIET=true
ACCESS_EXPIRE_MINUTES=1440
REFRESH_EXPIRE_MINUTES=5
DEV_PROXY_PORT_OFFSET=0
JWT_SECRET=change_me_dev_jwt_secret

# DB auth (must match the MONGO_INITDB_ROOT_* creds above) + per-site DB names.
DB_USER=admin
DB_PASSWORD=change_me_dev_password

DB_NAME_CYBERIA=cyberia
DB_NAME_CYBERIA_CONTENT=cyberia-content
DB_NAME_NEXODEV=nexodev
DB_NAME_CRYPTOKOYN=cryptokoyn
DB_NAME_ITEMLEDGER=itemledger
DB_NAME_OBJECTLAYER=objectlayer

# Shared key of the cross-domain writes between the hosts of this deploy (dev placeholder).
DOMAIN_API_SERVICE_KEY=dev-domain-api-service-key-change-me

# Mailer / SMTP (dev placeholders — mailer stays inert without real creds).
MAILER_SENDER_NAME=CYBERIA
MAILER_SENDER_EMAIL=noreply@example.com
SMTP_HOST=smtp.example.com
SMTP_PORT=465
SMTP_AUTH_USER=change_me
SMTP_AUTH_PASS=change_me
MAILER_SENDER_NAME_CYBERIA=CYBERIA
MAILER_SENDER_EMAIL_CYBERIA=noreply@example.com
SMTP_HOST_CYBERIA=smtp.example.com
SMTP_PORT_CYBERIA=465
SMTP_AUTH_USER_CYBERIA=change_me
SMTP_AUTH_PASS_CYBERIA=change_me

# Third-party integrations (dev placeholders).
CLOUDINARY_CLOUD_NAME=change_me
CLOUDINARY_API_KEY=change_me
CLOUDINARY_API_SECRET=change_me
GEMINI_API_KEY=change_me
HUGGINGFACE_API_KEY=change_me
DEFAULT_ADMIN_EMAIL=admin@example.com
DEFAULT_ADMIN_PASSWORD=change_me

# --- IPFS endpoints ----------------------------------------------------------
# Kubo (content plane) is the `ipfs` service; the Cluster REST API (:9094, pin
# replication) is the `ipfs-cluster` service. Override only to target a
# different node.
IPFS_API_URL=http://ipfs:5001
IPFS_GATEWAY_URL=http://ipfs:8080
IPFS_CLUSTER_API_URL=http://ipfs-cluster:9094
# 32-byte hex shared secret for the ipfs-cluster consensus (dev default is set
# in docker-compose.yml). Override for a real/shared cluster.
# CLUSTER_SECRET=

# --- Local access ------------------------------------------------------------
# Client gateway:  http://localhost/{,test}
# Client port alias: http://localhost:8082/{,test}
# Server gateway:  http://localhost:8081/{,test}
# Engine domains, through the proxy and on their own published port, in the
# order conf.server.json declares them:
#   http://underpost.net/          http://localhost:4005
#   http://www.underpost.net/      http://localhost:4007
#   http://www.cyberiaonline.com/  http://localhost:4008
#   http://cyberiaonline.com/      http://localhost:4010
#   http://cryptokoyn.net/         http://localhost:4011
#   http://www.cryptokoyn.net/     http://localhost:4013
#   http://itemledger.com/         http://localhost:4014
#   http://www.itemledger.com/     http://localhost:4016
#   http://objectlayer.org/        http://localhost:4017
#   http://www.objectlayer.org/    http://localhost:4019
# Docker-network gateways:
#   http://cyberia-client/{,test}
#   http://cyberia-server/{,test}
#   http://engine-cyberia/          (the Cyberia host: www.cyberiaonline.com)
#
# The *.localhost aliases normally resolve to loopback without configuration:
#   http://client.cyberia.localhost/{,test}
#   http://server.cyberia.localhost/{,test}
#   http://engine.cyberia.localhost/
# `node bin/cyberia run-workflow docker:up` maintains the host entry that points
# the service aliases and every engine domain at loopback.
#
# Host-published ports:
PROXY_HTTP_PORT=80
IPFS_API_PORT=5001
IPFS_GATEWAY_PORT=8080
IPFS_CLUSTER_API_PORT=9094
MONGO_HOST_PORT=27017
VALKEY_NODEPORT=32079
ENGINE_CYBERIA_GRPC_PORT=50051
# Multi-path nginx server gateway, not a single server container publication.
CYBERIA_SERVER_PORT=8081
# Multi-path nginx client gateway; raw client containers remain internal.
CYBERIA_CLIENT_PORT=8082
