# OpenVibe.Report — environment (production: /etc/openvibe/report.env). Names only; never commit values. NODE_ENV=production PORT=5080 HOST=127.0.0.1 BASE_URL=https://openvibe.report TRUST_PROXY=2 # Report's own PostgreSQL (ADR-035). The runtime role serves through PgBouncer on DATABASE_URL; migrations run # on DATABASE_DIRECT_URL as the owner. Without DATABASE_URL development uses an embedded PGlite database. DATABASE_URL= DATABASE_DIRECT_URL= #REPORT_PGLITE_DIR=./data/pglite # Which source the pages and GET /api/v1/stats answer from: network (today's behaviour) or report (after cutover). REPORT_SOURCE=network # OpenVibe.Network's open stats (GET /api/v1/stats?days=7|30|90). Both sources serve their read APIs on loopback. OV_NETWORK_INTERNAL_URL=http://127.0.0.1:4000 # The public origin, used only for the OAuth token endpoint (Report's service token to Billing). OV_NETWORK_URL=https://openvibe.network # OpenVibe.Live's Rundown and after-show reports (GET /api/rundown/*, /api/recap/*). OV_LIVE_INTERNAL_URL=http://127.0.0.1:3000 # OpenVibe.Media's one view store (GET /api/v1/views/aggregate): views, engaged viewers, Feed share, live peak. OV_MEDIA_INTERNAL_URL=http://127.0.0.1:4100 # Bench's public read API; set to an internal origin if Report and Bench share one. OV_BENCH_INTERNAL_URL=https://bench.openvibe.services # OpenVibe.AI public Exchange catalogue and measured provider offers. OV_AI_INTERNAL_URL=https://api.openvibe.exchange # OpenVibe.Billing's read API. Report quotes Billing and never computes money. The service needs the grants # billing.stats.read (GET /api/v1/stats) and billing.balance.read (GET /api/v1/transactions?subject=…). OV_BILLING_INTERNAL_URL=http://127.0.0.1:4600 # Report's Network OAuth client (client_credentials → audience openvibe.billing). The secret stays in the env file. OV_OAUTH_CLIENT_ID=report OV_OAUTH_CLIENT_SECRET= # An explicit Billing bearer token for an operator run (instead of the OAuth client); never commit it. #REPORT_BILLING_TOKEN= # OpenVibe.Events → Report (POST /internal/events): live.stream.ended and the frame beacon. Comma-separated for # rotation, 32+ characters each; unset makes the route answer 503. REPORT_EVENTS_SECRET= # AI Exchange analytics (plan G-P9), off by default. On: consume Billing's billing.credit.settled events into # aggregates by day/model/provider access, and open the staff-only /ai/exchange page and GET /api/v1/ai/exchange. # Off: a settlement delivery is ignored before anything is written. #REPORT_AI_EXCHANGE=0 # The ingest and shadow jobs (on by default; REPORT_JOBS=0 turns both off). #REPORT_JOBS=1 #REPORT_JOBS_ON_BOOT=1 #REPORT_INGEST_INTERVAL_MS=300000 #REPORT_SHADOW_WINDOW_DAYS=7 #REPORT_SHADOW_INTERVAL_MS=900000 # Optional: the per-address API limit (default 120 a minute), the personal routes' own limit (default 60) and the # readiness probe timeout (default 2500 ms). #REPORT_API_RATE_LIMIT_PER_MIN=120 #REPORT_ME_RATE_LIMIT_PER_MIN=60 #REPORT_READY_TIMEOUT_MS=2500 # Optional: the deployed commit for /release.json. Without it the release is read from git in the checkout. #RELEASE_COMMIT=