# OpenVibe.Fun — environment (production: /etc/openvibe/fun.env). Names only; never commit values. NODE_ENV=production PORT=5140 HOST=127.0.0.1 BASE_URL=https://openvibe.fun TRUST_PROXY=2 # PostgreSQL (ADR-035), written by OpenVibe.Host roles/data/add-service.sh: the runtime role through PgBouncer, # the owner on a direct connection (migrations), and Valkey (shared counters/readiness). # Without DATABASE_URL, development uses an embedded PGlite database in data/pglite. DATABASE_URL= DATABASE_DIRECT_URL= VALKEY_URL= VALKEY_PREFIX=ov:fun: # Per-actor limits (server/http/api.js) and per-address limits (server/app.js). #FUN_LIMITS_MINUTE=120 #FUN_LIMITS_HOUR=3000 #FUN_API_RATE_LIMIT_PER_MIN=240 #FUN_RATE_LIMIT_PER_MIN=300 # OpenVibe.Network: SSO (OAuth client `fun`, PKCE S256), JWKS, and (only when FUN_COINS=on) OpenCoins. OV_NETWORK_URL=https://openvibe.network OV_NETWORK_INTERNAL_URL=http://127.0.0.1:4000 # OV_NETWORK_ISSUER=https://openvibe.network OV_OAUTH_CLIENT_ID=fun OV_OAUTH_CLIENT_SECRET= # OV_OAUTH_REDIRECT_URI=https://openvibe.fun/auth/callback # FUN_AUDIENCE=openvibe.fun # OV_SESSION_AUDIENCE=openvibe.network # FUN_PGLITE_DIR=./data/pglite # OpenVibe.Events: account export/deletion deliveries to POST /internal/events. The secret signs a delivery # (comma-separated for rotation, 32+ characters each; unset makes the route answer 503). The subscription # needs the events.subscription.manage capability for svc:fun. FUN_EVENTS_SECRET= FUN_EVENTS_URL= # OpenVibe.Search's owner API: the queued Search documents (fun_outbox) are delivered there. Unset: they wait. #FUN_SEARCH_URL=http://127.0.0.1:4710 #FUN_EVENTS_ENDPOINT=http://127.0.0.1:5140/internal/events #FUN_EVENTS_INTERVAL_MS=5000 # Public upstreams. Live is the channel/live check; Chat is the public history Fun reads (never posts); # Today is called with the viewer's own token only. OV_LIVE_URL=https://openvibe.live OV_CHAT_URL=https://openvibe.chat OV_TODAY_URL=https://openvibe.today #FUN_UPSTREAM_TIMEOUT_MS=8000 # OpenStreetMap: identify, pace, cache, bound. Ticketmaster is OFF unless TICKETMASTER_API_KEY is set. FUN_NOMINATIM_URL=https://nominatim.openstreetmap.org FUN_OVERPASS_URL=https://overpass-api.de/api/interpreter FUN_OSM_USER_AGENT=OpenVibeFun/0.1 (+https://openvibe.fun; contact@openvibe.network) #FUN_OSM_EMAIL=contact@openvibe.network #FUN_OSM_MIN_INTERVAL_MS=1000 #FUN_OSM_TIMEOUT_MS=20000 #FUN_OSM_RETRY_AFTER_MS=120000 #FUN_GEO_CACHE_TTL_MS=604800000 #FUN_GEO_STALE_TTL_MS=2592000000 #FUN_GUIDE_RADIUS_KM=5 #FUN_GUIDE_MAX_RADIUS_KM=25 #FUN_GUIDE_MAX_RESULTS=30 # Ticketmaster Discovery: only read when this is set. Free API, never a paid provider; never log the key. #TICKETMASTER_API_KEY= # or the prefixed alias: #FUN_TICKETMASTER_API_KEY= #FUN_TICKETMASTER_URL=https://app.ticketmaster.com/discovery/v2/events.json #FUN_TICKETMASTER_MIN_INTERVAL_MS=1000 #FUN_TICKETMASTER_TIMEOUT_MS=8000 #FUN_TICKETMASTER_TTL_MS=900000 #FUN_TICKETMASTER_STALE_TTL_MS=86400000 #FUN_TICKETMASTER_RADIUS_KM=10 #FUN_TICKETMASTER_SIZE=12 # IRL quests and the read-only chat vote timer. #FUN_QUEST_VERIFY_VOTES=3 #FUN_QUEST_MAX_SUGGESTIONS=30 #FUN_QUEST_COINS=25 #FUN_CHAT_SYNC_INTERVAL_MS=60000 #FUN_CHAT_SYNC_LIMIT=200 # OpenCoins (loyalty points, never money): off by default. When on, svc:fun needs identity.subject.resolve and # network.coins.credit, and the wallet applies these caps. FUN_COINS=off #FUN_COINS_DAILY_CAP=50 #FUN_COINS_GLOBAL_DAILY_CAP=5000 #FUN_COINS_RETRY_MS=300000 # A restore drill starts no jobs and creates no subscriptions. #FUN_DRILL=0 # optional: defaults to true in production # COOKIE_SECURE=true