From 7c0d2c7449fe9d4bdaccdf8b1c99ce344541395b Mon Sep 17 00:00:00 2001 From: MumuTW <42820974+MumuTW@users.noreply.github.com> Date: Mon, 27 Jul 2026 02:15:18 +0800 Subject: [PATCH] docs(env): document NEXT_PUBLIC_OMNIROUTE_BASE_PATH and OMNIROUTE_BACKUP_SCHEDULE_JOB_INTERVAL_MS (#8690) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both vars were introduced in code without a .env.example / ENVIRONMENT.md entry, so `check:env-doc-sync` (docs-sync-strict / docs-gates) went red on release/v3.8.49 with "In code but missing from .env.example: 2": - NEXT_PUBLIC_OMNIROUTE_BASE_PATH — src/shared/hooks/useDisplayBaseUrl.ts (#8514) - OMNIROUTE_BACKUP_SCHEDULE_JOB_INTERVAL_MS — src/lib/jobs/backupScheduleJob.ts (#8517) Documents both in .env.example and docs/reference/ENVIRONMENT.md rather than adding allowlist entries: both are real operator-tunable knobs, so the allowlist would hide a genuine gap. Refs #8540 Co-authored-by: rqzbeh Co-authored-by: maxmad64bis --- .env.example | 11 +++++++++++ docs/reference/ENVIRONMENT.md | 2 ++ 2 files changed, 13 insertions(+) diff --git a/.env.example b/.env.example index 9d6b0f5ca3..0113066024 100644 --- a/.env.example +++ b/.env.example @@ -86,6 +86,12 @@ PORT=20128 # Default: "" (served at the domain root). Example: /omniroute to serve under https://host/omniroute # OMNIROUTE_BASE_PATH= # +# Browser-visible mirror of OMNIROUTE_BASE_PATH, inlined at build time so the +# dashboard endpoint display can read it client-side. Set it to the same value +# as OMNIROUTE_BASE_PATH; when unset the hook falls back to OMNIROUTE_BASE_PATH. +# Used by: src/shared/hooks/useDisplayBaseUrl.ts +# NEXT_PUBLIC_OMNIROUTE_BASE_PATH= +# # Optional: set the public origin *with* the same path so OAuth and display URLs # stay consistent without relying on window.location.origin alone: # NEXT_PUBLIC_BASE_URL=https://host/omniroute @@ -1944,6 +1950,11 @@ APP_LOG_TO_FILE=true # Used by: src/lib/db/backup.ts. # DB_BACKUP_MAX_FILES=20 # DB_BACKUP_RETENTION_DAYS=0 +# Tick interval (ms) of the server-side job that executes backup-schedule.json. +# Must stay well under the 1-minute cron granularity; values below 5000 (or +# unparseable) fall back to the 30000 default. +# Used by: src/lib/jobs/backupScheduleJob.ts +# OMNIROUTE_BACKUP_SCHEDULE_JOB_INTERVAL_MS=30000 # ── TLS sidecar override ── # Used by: open-sse/services/chatgptTlsClient.ts tests. Production deployments diff --git a/docs/reference/ENVIRONMENT.md b/docs/reference/ENVIRONMENT.md index f2ebe214ea..e07d15a212 100644 --- a/docs/reference/ENVIRONMENT.md +++ b/docs/reference/ENVIRONMENT.md @@ -120,6 +120,7 @@ OmniRoute uses **SQLite** (via `better-sqlite3`) for all persistence. These vari | ------------------------------------------- | ------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `PORT` | `20128` | `src/lib/runtime/ports.ts` | Primary port for both Dashboard UI and API endpoints (single-port mode). | | `OMNIROUTE_BASE_PATH` | _(empty = root)_ | `next.config.mjs` | URL subpath for serving OmniRoute behind a reverse proxy under a subpath (sets Next.js `basePath`; auth redirects are basePath-aware). E.g. `/omniroute`. | +| `NEXT_PUBLIC_OMNIROUTE_BASE_PATH` | _(empty = root)_ | `src/shared/hooks/useDisplayBaseUrl.ts` | Browser-visible mirror of `OMNIROUTE_BASE_PATH`, inlined at build time so the dashboard endpoint display shows `https://host/omniroute/v1` instead of `https://host/v1`. Falls back to `OMNIROUTE_BASE_PATH` when unset. Rebuild after changing (Next `basePath` is build-time). | | `API_PORT` | _(unset)_ | `src/lib/runtime/ports.ts` | When set, serves the `/v1/*` proxy API on this separate port. | | `API_HOST` | `0.0.0.0` | `src/lib/runtime/ports.ts` | Bind address for the API port. | | `DASHBOARD_PORT` | _(unset)_ | `src/lib/runtime/ports.ts` | When set, serves the Dashboard UI on this separate port. | @@ -1099,6 +1100,7 @@ Provider quota endpoints, network tunnels (Tailscale, Ngrok, MITM debug proxy), | `NGROK_AUTHTOKEN` | _(unset)_ | `src/lib/ngrokTunnel.ts` | Authenticates outbound ngrok tunnels. | | `DB_BACKUP_MAX_FILES` | `20` | `src/lib/db/backup.ts` | Maximum SQLite backup files retained on disk. Overrides the value saved from Settings → Database backup retention. | | `DB_BACKUP_RETENTION_DAYS` | `0` | `src/lib/db/backup.ts` | Maximum age (days) of retained backups. `0` disables age-based pruning. Overrides the value saved from Settings → Database backup retention. | +| `OMNIROUTE_BACKUP_SCHEDULE_JOB_INTERVAL_MS` | `30000` | `src/lib/jobs/backupScheduleJob.ts` | Tick interval (ms) of the server-side job that executes `backup-schedule.json`. Must stay well under the 1-minute cron granularity; values below `5000` or unparseable fall back to `30000`. | | `OMNIROUTE_TLS_PROXY_URL` | _(unset)_ | `open-sse/services/chatgptTlsClient.ts` | Override the TLS sidecar URL for tests. Production should leave unset. | | `CONTAINER_HOST` | `docker` | `scripts/check-permissions.sh` | Container runtime hint for the entrypoint permission check. Set to `podman` under rootless Podman so the fix instructions use `podman unshare chown` instead of `sudo chown`. | | `QUOTA_STORE_DRIVER` | `sqlite` | `src/lib/quota/storeFactory.ts` | Quota-share consumption store backend: `sqlite` (default) or `redis`. |