# ═══════════════════════════════════════════════════════════════ # openvibe.tips — Environment Configuration # Copy to .env for development. In production this lives at /etc/openvibe/tips.env (0600). # Names only here; never commit a value. # ═══════════════════════════════════════════════════════════════ # Server PORT=4610 HOST=127.0.0.1 NODE_ENV=development BASE_URL=http://localhost:4610 TRUST_PROXY=1 # ── Data: PostgreSQL + Valkey (ADR-035) ────────────────────── # In production OpenVibe.Host writes all four (sudo /opt/openvibe.host/roles/data/add-service.sh tips). # DATABASE_URL: the runtime role through PgBouncer (transaction mode; DML only). Unset in development: # an embedded PGlite database in data/pglite (one process). Tests need neither (PGlite, or the containers # of node_modules/openvibe-sdk/scripts/test-services.sh). DATABASE_URL= # DATABASE_DIRECT_URL: the owner role on a direct connection, for the migrations at boot. DATABASE_DIRECT_URL= # VALKEY_URL: shared, never authoritative state (per-actor limits, overlay fan-out and stream slots). # Unset: kept in each process, right for one process only. VALKEY_URL= VALKEY_PREFIX=ov:tips: # ── Identity: OpenVibe.Network ────────────────────────────── OV_NETWORK_URL=https://openvibe.network OV_NETWORK_INTERNAL_URL=http://127.0.0.1:4000 #OV_NETWORK_ISSUER=https://openvibe.network # Optional: pin the Network's RS256 public key (PEM, \n escaped) instead of fetching the JWKS. #OV_NETWORK_PUBLIC_KEY= # Audience Tips accepts on incoming service tokens. TIPS_AUDIENCE=openvibe.tips # Tips' client in the Network (client `tips`): browser sign-in (redirect ${BASE_URL}/auth/callback) # and client-credentials tokens for Billing, Events, Live and Network. OV_OAUTH_CLIENT_ID=tips OV_OAUTH_CLIENT_SECRET= #OV_OAUTH_REDIRECT_URI=https://openvibe.tips/auth/callback #COOKIE_SECURE=true # Signs the anti-forgery tokens of the server-rendered forms (openssl rand -hex 32). Every process must # share it; unset, it is derived from OV_OAUTH_CLIENT_SECRET (and random per process without either). TIPS_FORM_SECRET= # ── OpenVibe.Billing (money moves only there) ─────────────── BILLING_URL=http://127.0.0.1:4600 #BILLING_AUDIENCE=openvibe.billing # Checkout providers offered on tip pages (must be enabled on Billing). # optional: defaults to 'powerchat' # TIPS_CHECKOUT_PROVIDERS=powerchat # Billing's minimum purchase in bits; smaller tips can only be paid from a Vibes balance. #TIPS_MIN_CHECKOUT_BITS=100 # Billing answers a PowerChat intent with a checkout_ref, not a URL. If set, Tips builds the link # from it: {ref}, {cents} and {bits} are replaced. Without it the receipt says no link is available. #TIPS_POWERCHAT_LINK_TEMPLATE= # ── OpenVibe.Events ───────────────────────────────────────── # Relay of Tips' outbox (tips.*); off when unset (rows wait in event_outbox). #EVENTS_URL=http://127.0.0.1:4300 #EVENTS_RELAY_INTERVAL_MS=2000 # Signing secret of Tips' subscription to billing.transaction.* (scripts/subscribe.js hands it to # Events). Comma-separated during a rotation. Without it /internal/events answers 503. TIPS_EVENTS_SECRET= # ── Chat delivery ─────────────────────────────────────────── # chat (OpenVibe.Chat's /internal/chat/messages + /internal/chat/events) | test | none (production default) # chat needs the tips principal granted chat.message.send and chat.event.publish (audience openvibe.chat) # and identity.subject.resolve (the creator's Live user id is Chat's room). #TIPS_CHAT_ADAPTER=none #TIPS_CHAT_URL=http://127.0.0.1:4400 #CHAT_AUDIENCE=openvibe.chat #OV_NETWORK_AUDIENCE=openvibe.network #TIPS_DELIVERY_MAX_ATTEMPTS=6 #TIPS_DELIVERY_BACKOFF_MS=2000,10000,60000,300000,900000 # ── Overlays ──────────────────────────────────────────────── #TIPS_OVERLAY_TTL_MS=600000 #TIPS_OVERLAY_HEARTBEAT_MS=25000 #TIPS_OVERLAY_REPLAY_LIMIT=50 # Open event streams per overlay token (more answer 429) #TIPS_OVERLAY_MAX_STREAMS=10 # ── Limits ────────────────────────────────────────────────── #TIPS_MAX_BITS=10000000 #TIPS_MESSAGE_CHARS=300 #TIPS_TTS_HARD_CAP=1200 #TIPS_MEDIA_HOSTS=youtube.com,www.youtube.com,m.youtube.com,music.youtube.com,youtu.be # Unpaid checkouts one supporter may hold within a day (more answer 429) #TIPS_MAX_PENDING_CHECKOUTS=20 # Per-actor limits on /api/v1 (server/api/actor-limits.js): reads one caller (a service principal, # a person, else an address) may make per minute and per hour; past them 429 rate_limited with # Retry-After. Payments (20 a minute per person) and other writes have their own numbers (README). #TIPS_LIMITS_MINUTE=120 #TIPS_LIMITS_HOUR=3000 # ── IndexNow ──────────────────────────────────────────────── # IndexNow (openvibe-shared/indexnow): 8–128 hex/alphanumeric characters. Set: the key file is served # at /.txt and a creator's public page appearing, changing or going away pings the engines. # Unset: off, nothing is mounted and nothing is sent. #INDEXNOW_KEY= # ── Background jobs: effects worker, due transfers, overlay window, outbox relay ── #TIPS_JOBS=on #TIPS_JOBS_INTERVAL_MS=2000 #LIVE_URL=https://openvibe.live