@@ -84,6 +84,14 @@ NEXT_PUBLIC_POOL_CONTRACT_ID=CAKEWH7SJCXGV2MH2WZYIX3QDPTSSBQFXYVYBOWAGLNBBZMPLE2
8484# Required: yes
8585NEXT_PUBLIC_ESCROW_CONTRACT_ID = CAJWGUKDTTC3SKN4RAAY72J4DVIIYSCFHX6GIMNTT22ABMISJK4GBCEH
8686
87+ # NEXT_PUBLIC_AGENT_REGISTRY_CONTRACT_ID
88+ # Layer: frontend, SDK
89+ # Type: Stellar contract ID string
90+ # Required: no (until Underwrite's agent-registry contract is deployed;
91+ # mirrors the backend AGENT_REGISTRY_CONTRACT below)
92+ # Default: none
93+ NEXT_PUBLIC_AGENT_REGISTRY_CONTRACT_ID =
94+
8795# ── Asset configuration (frontend / SDK) ─────────────────────────────────────
8896# NEXT_PUBLIC_USDC_ISSUER
8997# Layer: frontend, SDK
@@ -189,6 +197,17 @@ DATABASE_URL=postgresql://postgres:postgres@localhost:5432/trusttrove?sslmode=di
189197# Source: Neon direct connection, migration tooling, or admin tasks
190198DATABASE_URL_UNPOOLED =
191199
200+ # TEST_DATABASE_URL
201+ # Layer: indexer/backend (test-only)
202+ # Type: PostgreSQL connection URL
203+ # Required: no
204+ # Default: none — when unset, the Go integration tests in indexer/db and
205+ # indexer/listener skip instead of failing (`go test ./...`
206+ # passes either way). Set this to a disposable Postgres instance
207+ # to actually exercise those tests and their coverage locally.
208+ # Source: local .env or CI service container
209+ TEST_DATABASE_URL =
210+
192211# API_PORT
193212# Layer: indexer/backend
194213# Type: integer port
@@ -213,6 +232,26 @@ PORT=
213232# Source: local .env or deployment env
214233INDEXER_POLL_INTERVAL_MS = 5000
215234
235+ # INDEXER_MIGRATIONS_DIR
236+ # Layer: indexer/backend
237+ # Type: absolute or relative directory path
238+ # Required: no
239+ # Default: auto-detected relative to the running binary/working directory
240+ # (indexer/db/migrations); only needed when that auto-detection
241+ # doesn't apply, e.g. running the compiled binary from an unusual
242+ # working directory or in CI.
243+ # Source: local .env or deployment env
244+ INDEXER_MIGRATIONS_DIR =
245+
246+ # APP_ENV
247+ # Layer: indexer/backend
248+ # Type: string enum: development | production
249+ # Required: no
250+ # Default: development
251+ # Source: local .env or deployment env. In production, JWT_SECRET and
252+ # SERVER_SEED below become required instead of auto-generated.
253+ APP_ENV = development
254+
216255# JWT_SECRET
217256# Layer: indexer/backend
218257# Type: string secret
@@ -229,6 +268,18 @@ JWT_SECRET=change_me_before_production
229268# Source: local .env or deployment env
230269JWT_EXPIRY_HOURS = 24
231270
271+ # SERVER_SEED
272+ # Layer: indexer/backend
273+ # Type: string secret (Stellar keypair seed, starts with 'S')
274+ # Required: yes in production; leave empty for local/development — the
275+ # indexer generates a valid random keypair automatically at
276+ # startup when this is unset. Unlike JWT_SECRET, this is parsed
277+ # as a real Stellar strkey immediately, so a placeholder string
278+ # like "change_me" fails startup instead of just being insecure.
279+ # Default: none (auto-generated when empty and APP_ENV != production)
280+ # Source: generated Stellar keypair in local/deployment secret manager
281+ SERVER_SEED =
282+
232283# ALLOWED_ORIGINS
233284# Layer: indexer/backend
234285# Type: comma-separated URLs
@@ -237,6 +288,30 @@ JWT_EXPIRY_HOURS=24
237288# Source: Render or local .env
238289ALLOWED_ORIGINS = https://trustrove.vercel.app,http://localhost:3000
239290
291+ # CORS_ALLOWED_ORIGINS
292+ # Layer: indexer/backend
293+ # Type: comma-separated URLs
294+ # Required: no
295+ # Default: only read when ALLOWED_ORIGINS above is unset
296+ # Source: alternate name for ALLOWED_ORIGINS; set one or the other, not both
297+ CORS_ALLOWED_ORIGINS =
298+
299+ # RATE_LIMIT_RPS
300+ # Layer: indexer/backend
301+ # Type: integer requests per second (per client)
302+ # Required: no
303+ # Default: 10
304+ # Source: local .env or deployment env
305+ RATE_LIMIT_RPS = 10
306+
307+ # SENTRY_DSN
308+ # Layer: indexer/backend
309+ # Type: URL string (Sentry project DSN)
310+ # Required: no
311+ # Default: none — leave empty to disable error tracking entirely
312+ # Source: Sentry project settings, set as a secret in the deployment env
313+ SENTRY_DSN =
314+
240315# ── Frontend-only deployment settings ────────────────────────────────────────
241316# NEXT_PUBLIC_API_BASE_URL
242317# Layer: frontend
@@ -245,3 +320,22 @@ ALLOWED_ORIGINS=https://trustrove.vercel.app,http://localhost:3000
245320# Default: http://localhost:8080 if the frontend API helper is left unconfigured
246321# Source: Vercel env or local .env.local
247322NEXT_PUBLIC_API_BASE_URL = http://localhost:8080
323+
324+ # NEXT_PUBLIC_APP_URL
325+ # Layer: frontend
326+ # Type: URL string
327+ # Required: no
328+ # Default: http://localhost:3000, used to build absolute links (e.g. shared
329+ # invoice URLs) when the request's own origin isn't available
330+ # Source: Vercel env or local .env.local
331+ NEXT_PUBLIC_APP_URL = http://localhost:3000
332+
333+ # ── Ambient / CI-provided (do not set by hand) ───────────────────────────────
334+ # CI
335+ # Layer: frontend (apps/web/playwright.config.ts)
336+ # Type: boolean-ish string, any non-empty value is truthy
337+ # Required: no
338+ # Default: unset locally; automatically set to "true" by GitHub Actions and
339+ # most other CI providers. Only affects Playwright's own retry/
340+ # worker/dev-server-reuse behavior — leave unset in .env.local.
341+ CI =
0 commit comments