openvibers/openvibe.tips .env.example
.env.example
| 1 | # ═══════════════════════════════════════════════════════════════ |
| 2 | # openvibe.tips — Environment Configuration |
| 3 | # Copy to .env for development. In production this lives at /etc/openvibe/tips.env (0600). |
| 4 | # Names only here; never commit a value. |
| 5 | # ═══════════════════════════════════════════════════════════════ |
| 6 | |
| 7 | # Server |
| 8 | PORT=4610 |
| 9 | HOST=127.0.0.1 |
| 10 | NODE_ENV=development |
| 11 | BASE_URL=http://localhost:4610 |
| 12 | TRUST_PROXY=1 |
| 13 | |
| 14 | # ── Data: PostgreSQL + Valkey (ADR-035) ────────────────────── |
| 15 | # In production OpenVibe.Host writes all four (sudo /opt/openvibe.host/roles/data/add-service.sh tips). |
| 16 | # DATABASE_URL: the runtime role through PgBouncer (transaction mode; DML only). Unset in development: |
| 17 | # an embedded PGlite database in data/pglite (one process). Tests need neither (PGlite, or the containers |
| 18 | # of node_modules/openvibe-sdk/scripts/test-services.sh). |
| 19 | DATABASE_URL= |
| 20 | # DATABASE_DIRECT_URL: the owner role on a direct connection, for the migrations at boot. |
| 21 | DATABASE_DIRECT_URL= |
| 22 | # VALKEY_URL: shared, never authoritative state (per-actor limits, overlay fan-out and stream slots). |
| 23 | # Unset: kept in each process, right for one process only. |
| 24 | VALKEY_URL= |
| 25 | VALKEY_PREFIX=ov:tips: |
| 26 | |
| 27 | # ── Identity: OpenVibe.Network ────────────────────────────── |
| 28 | OV_NETWORK_URL=https://openvibe.network |
| 29 | OV_NETWORK_INTERNAL_URL=http://127.0.0.1:4000 |
| 30 | #OV_NETWORK_ISSUER=https://openvibe.network |
| 31 | # Optional: pin the Network's RS256 public key (PEM, \n escaped) instead of fetching the JWKS. |
| 32 | #OV_NETWORK_PUBLIC_KEY= |
| 33 | # Audience Tips accepts on incoming service tokens. |
| 34 | TIPS_AUDIENCE=openvibe.tips |
| 35 | # Tips' client in the Network (client `tips`): browser sign-in (redirect ${BASE_URL}/auth/callback) |
| 36 | # and client-credentials tokens for Billing, Events, Live and Network. |
| 37 | OV_OAUTH_CLIENT_ID=tips |
| 38 | OV_OAUTH_CLIENT_SECRET= |
| 39 | #OV_OAUTH_REDIRECT_URI=https://openvibe.tips/auth/callback |
| 40 | #COOKIE_SECURE=true |
| 41 | # Signs the anti-forgery tokens of the server-rendered forms (openssl rand -hex 32). Every process must |
| 42 | # share it; unset, it is derived from OV_OAUTH_CLIENT_SECRET (and random per process without either). |
| 43 | TIPS_FORM_SECRET= |
| 44 | |
| 45 | # ── OpenVibe.Billing (money moves only there) ─────────────── |
| 46 | BILLING_URL=http://127.0.0.1:4600 |
| 47 | #BILLING_AUDIENCE=openvibe.billing |
| 48 | # Checkout providers offered on tip pages (must be enabled on Billing). |
| 49 | # optional: defaults to 'powerchat' |
| 50 | # TIPS_CHECKOUT_PROVIDERS=powerchat |
| 51 | # Billing's minimum purchase in bits; smaller tips can only be paid from a Vibes balance. |
| 52 | #TIPS_MIN_CHECKOUT_BITS=100 |
| 53 | # Billing answers a PowerChat intent with a checkout_ref, not a URL. If set, Tips builds the link |
| 54 | # from it: {ref}, {cents} and {bits} are replaced. Without it the receipt says no link is available. |
| 55 | #TIPS_POWERCHAT_LINK_TEMPLATE= |
| 56 | |
| 57 | # ── OpenVibe.Events ───────────────────────────────────────── |
| 58 | # Relay of Tips' outbox (tips.*); off when unset (rows wait in event_outbox). |
| 59 | #EVENTS_URL=http://127.0.0.1:4300 |
| 60 | #EVENTS_RELAY_INTERVAL_MS=2000 |
| 61 | # Signing secret of Tips' subscription to billing.transaction.* (scripts/subscribe.js hands it to |
| 62 | # Events). Comma-separated during a rotation. Without it /internal/events answers 503. |
| 63 | TIPS_EVENTS_SECRET= |
| 64 | |
| 65 | # ── Chat delivery ─────────────────────────────────────────── |
| 66 | # chat (OpenVibe.Chat's /internal/chat/messages + /internal/chat/events) | test | none (production default) |
| 67 | # chat needs the tips principal granted chat.message.send and chat.event.publish (audience openvibe.chat) |
| 68 | # and identity.subject.resolve (the creator's Live user id is Chat's room). |
| 69 | #TIPS_CHAT_ADAPTER=none |
| 70 | #TIPS_CHAT_URL=http://127.0.0.1:4400 |
| 71 | #CHAT_AUDIENCE=openvibe.chat |
| 72 | #OV_NETWORK_AUDIENCE=openvibe.network |
| 73 | #TIPS_DELIVERY_MAX_ATTEMPTS=6 |
| 74 | #TIPS_DELIVERY_BACKOFF_MS=2000,10000,60000,300000,900000 |
| 75 | |
| 76 | # ── Overlays ──────────────────────────────────────────────── |
| 77 | #TIPS_OVERLAY_TTL_MS=600000 |
| 78 | #TIPS_OVERLAY_HEARTBEAT_MS=25000 |
| 79 | #TIPS_OVERLAY_REPLAY_LIMIT=50 |
| 80 | # Open event streams per overlay token (more answer 429) |
| 81 | #TIPS_OVERLAY_MAX_STREAMS=10 |
| 82 | |
| 83 | # ── Limits ────────────────────────────────────────────────── |
| 84 | #TIPS_MAX_BITS=10000000 |
| 85 | #TIPS_MESSAGE_CHARS=300 |
| 86 | #TIPS_TTS_HARD_CAP=1200 |
| 87 | #TIPS_MEDIA_HOSTS=youtube.com,www.youtube.com,m.youtube.com,music.youtube.com,youtu.be |
| 88 | # Unpaid checkouts one supporter may hold within a day (more answer 429) |
| 89 | #TIPS_MAX_PENDING_CHECKOUTS=20 |
| 90 | # Per-actor limits on /api/v1 (server/api/actor-limits.js): reads one caller (a service principal, |
| 91 | # a person, else an address) may make per minute and per hour; past them 429 rate_limited with |
| 92 | # Retry-After. Payments (20 a minute per person) and other writes have their own numbers (README). |
| 93 | #TIPS_LIMITS_MINUTE=120 |
| 94 | #TIPS_LIMITS_HOUR=3000 |
| 95 | |
| 96 | # ── IndexNow ──────────────────────────────────────────────── |
| 97 | # IndexNow (openvibe-shared/indexnow): 8–128 hex/alphanumeric characters. Set: the key file is served |
| 98 | # at /<key>.txt and a creator's public page appearing, changing or going away pings the engines. |
| 99 | # Unset: off, nothing is mounted and nothing is sent. |
| 100 | #INDEXNOW_KEY= |
| 101 | |
| 102 | # ── Background jobs: effects worker, due transfers, overlay window, outbox relay ── |
| 103 | #TIPS_JOBS=on |
| 104 | #TIPS_JOBS_INTERVAL_MS=2000 |
| 105 | #LIVE_URL=https://openvibe.live |
| 106 |