openvibers/openvibe.vip .env.example
.env.example
| 1 | # OpenVibe.VIP — environment (development: .env; production: /etc/openvibe/vip.env). |
| 2 | # Names only here; never commit a value. |
| 3 | |
| 4 | # ── Runtime ────────────────────────────────────────────── |
| 5 | NODE_ENV=development |
| 6 | PORT=4620 |
| 7 | HOST=127.0.0.1 |
| 8 | BASE_URL=http://localhost:4620 |
| 9 | # PostgreSQL (ADR-035), written by OpenVibe.Host roles/data/add-service.sh vip: the runtime role through PgBouncer, |
| 10 | # the owner on a direct connection (migrations), and Valkey (shared limit counters). |
| 11 | # Without DATABASE_URL, development uses an embedded PGlite database in data/pglite. |
| 12 | DATABASE_URL= |
| 13 | DATABASE_DIRECT_URL= |
| 14 | VALKEY_URL= |
| 15 | VALKEY_PREFIX= |
| 16 | # TRUST_PROXY=1 |
| 17 | |
| 18 | # ── OpenVibe.Network (identity) ────────────────────────── |
| 19 | OV_NETWORK_URL=https://openvibe.network |
| 20 | OV_NETWORK_INTERNAL_URL=http://127.0.0.1:4000 |
| 21 | # OV_NETWORK_ISSUER=https://openvibe.network |
| 22 | # OV_NETWORK_PUBLIC_KEY= # optional; otherwise fetched from /api/.well-known/jwks |
| 23 | # VIP_AUDIENCE=openvibe.vip |
| 24 | # Client `vip`: service tokens (Billing, Events, Network) and browser sign-in |
| 25 | OV_OAUTH_CLIENT_ID=vip |
| 26 | OV_OAUTH_CLIENT_SECRET= |
| 27 | # OV_OAUTH_REDIRECT_URI=https://openvibe.vip/auth/callback |
| 28 | # Signs the pages' anti-forgery tokens (required in production): openssl rand -hex 32 |
| 29 | VIP_FORM_SECRET= |
| 30 | # Staff who manage network plans and see any creator's members hold staff.site.configure in the |
| 31 | # contracts staff map (Network admins); VIP_STAFF_ROLES is gone. |
| 32 | |
| 33 | # ── OpenVibe.Billing (entitlement truth, checkout, cancel) ── |
| 34 | BILLING_URL=http://127.0.0.1:4600 |
| 35 | |
| 36 | # OpenVibe.Media: the image on a members-only post (the bytes live in Media, under the VIP_MEDIA_APP tenant). |
| 37 | OV_MEDIA_URL=https://openvibe.media |
| 38 | OV_MEDIA_INTERNAL_URL=http://127.0.0.1:4100 |
| 39 | VIP_MEDIA_APP=vip |
| 40 | # BILLING_AUDIENCE=openvibe.billing |
| 41 | # VIP_BILLING_TIMEOUT_MS=5000 |
| 42 | # Providers offered on plan pages (must be enabled on Billing); `credit` pays from Vibes credit. |
| 43 | # Leave EMPTY until Billing is authoritative (Wave 8 cutover): checkout is then closed. |
| 44 | # optional: unset = 'powerchat,credit'; set but empty = no checkout (before launch) |
| 45 | # VIP_CHECKOUT_PROVIDERS= |
| 46 | # Turns Billing's PowerChat checkout_ref into a link: {ref} and {cents} |
| 47 | # optional: empty = no PowerChat link |
| 48 | # VIP_POWERCHAT_LINK_TEMPLATE= |
| 49 | # VIP_BILLING_RATES_TTL_MS=300000 |
| 50 | |
| 51 | # ── Entitlement projection ─────────────────────────────── |
| 52 | # A projection answer is trusted at most this long after VIP last heard from Billing (and never |
| 53 | # past the paid period's end); within the grace a projection-only check still answers (stale), |
| 54 | # after it VIP answers "unknown" until Billing confirms. |
| 55 | # optional: defaults to 900000 |
| 56 | # VIP_PROJECTION_MAX_AGE_MS=900000 |
| 57 | # optional: defaults to 60000 |
| 58 | # VIP_PROJECTION_GRACE_MS=60000 |
| 59 | |
| 60 | # ── OpenVibe.Events ────────────────────────────────────── |
| 61 | # Outbox relay (vip.plan.published, vip.membership.changed); off when empty |
| 62 | EVENTS_URL= |
| 63 | # EVENTS_RELAY_INTERVAL_MS=2000 |
| 64 | # Signing secret of VIP's Billing-event subscriptions (scripts/subscribe.js); comma-separate to rotate |
| 65 | VIP_EVENTS_SECRET= |
| 66 | |
| 67 | # ── Jobs ───────────────────────────────────────────────── |
| 68 | # VIP_JOBS=off |
| 69 | # VIP_REFRESH_INTERVAL_MS=60000 |
| 70 | |
| 71 | # ── Public card, badge and widget (/embed) ─────────────── |
| 72 | # The widget's CSP frame-ancestors: any site by default (it is meant to be embedded); e.g. |
| 73 | # "https://openvibe.live https://*.openvibe.network" to restrict it. The rest of VIP stays 'self'. |
| 74 | # VIP_WIDGET_FRAME_ANCESTORS=* |
| 75 | # How long a creator's member count (from Billing) is reused |
| 76 | # VIP_MEMBER_COUNT_TTL_MS=300000 |
| 77 | |
| 78 | # ── IndexNow (openvibe-shared/indexnow) ────────────────── |
| 79 | # With a key (8-128 hex or alphanumeric characters, what IndexNow's own tools generate), search |
| 80 | # engines are told the moment a published plan appears, changes or is archived (the key file is served |
| 81 | # at /<key>.txt). Unset: off — nothing is mounted and nothing is sent. |
| 82 | #INDEXNOW_KEY= |
| 83 | |
| 84 | # ── Per-actor limits (server/api/actor-limits.js) ─────── |
| 85 | # Reads one caller (a service principal, a person, else an address) may make to /api/v1 per minute |
| 86 | # and per hour; past them 429 rate_limited with Retry-After. Entitlement checks, policy evaluation, |
| 87 | # checkout and catalog changes have their own numbers (README). |
| 88 | # optional: defaults to 120 |
| 89 | # VIP_LIMITS_MINUTE=120 |
| 90 | # optional: defaults to 3000 |
| 91 | # VIP_LIMITS_HOUR=3000 |
| 92 |