From a48f721dad08b1ac0b9c98177a3af06b5144227d Mon Sep 17 00:00:00 2001 From: Sticks Date: Tue, 2 Jun 2026 22:12:37 -0400 Subject: [PATCH] strip env vars, all config now via config.toml --- egg-oneround-api.json | 411 +----------------------------------------- 1 file changed, 5 insertions(+), 406 deletions(-) diff --git a/egg-oneround-api.json b/egg-oneround-api.json index 4f3f26e..a4e0597 100644 --- a/egg-oneround-api.json +++ b/egg-oneround-api.json @@ -4,16 +4,16 @@ "version": "PTDL_v2", "update_url": "http://git.hep.gg/sticks/eggs/raw/branch/master/egg-oneround-api.json" }, - "exported_at": "2026-05-31T00:00:00+00:00", + "exported_at": "2026-06-02T00:00:00+00:00", "name": "OneRound API", "author": "sticks@hep.gg", - "description": "OneRound golf platform API server. Requires a PostgreSQL database with PostGIS.", + "description": "OneRound golf platform API server. All configuration is in config.toml (edit via File Manager).", "features": [], "docker_images": { "git.hep.gg/sticks/oneround-api:latest": "git.hep.gg/sticks/oneround-api:latest" }, "file_denylist": [], - "startup": "API_LISTEN_ADDR=:{{SERVER_PORT}} entrypoint.sh", + "startup": "/usr/local/bin/entrypoint.sh", "config": { "files": "{}", "startup": "{\"done\": \"OneRound API is ready\"}", @@ -22,411 +22,10 @@ }, "scripts": { "installation": { - "script": "#!/bin/ash\necho \"OneRound API - nothing to install, binary is baked into the Docker image.\"\necho \"Set your environment variables in the Startup tab.\"", + "script": "#!/bin/ash\necho \"OneRound API - nothing to install, binary is baked into the Docker image.\"\necho \"Edit config.toml in the File Manager to configure.\"", "container": "alpine:3.21", "entrypoint": "ash" } }, - "variables": [ - { - "name": "Database URL", - "description": "PostgreSQL connection string (e.g. postgres://user:pass@host:5432/oneround)", - "env_variable": "DATABASE_URL", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "field_type": "text" - }, - { - "name": "JWT Secret", - "description": "HS256 signing key for auth tokens. Generate with: openssl rand -base64 32", - "env_variable": "JWT_SECRET", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "field_type": "text" - }, - { - "name": "Apple Bundle ID", - "description": "iOS app bundle identifier for Apple Sign-In verification", - "env_variable": "APPLE_BUNDLE_ID", - "default_value": "gg.hep.oneround", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "field_type": "text" - }, - { - "name": "Log Level", - "description": "Logging verbosity: debug, info, warn, error", - "env_variable": "LOG_LEVEL", - "default_value": "info", - "user_viewable": true, - "user_editable": true, - "rules": "required|string|in:debug,info,warn,error", - "field_type": "text" - }, - { - "name": "CORS Origins", - "description": "Allowed CORS origins (comma-separated, or * for all)", - "env_variable": "API_CORS_ORIGINS", - "default_value": "*", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "field_type": "text" - }, - { - "name": "Production Mode", - "description": "Enable production safety checks (true/false)", - "env_variable": "PRODUCTION", - "default_value": "false", - "user_viewable": true, - "user_editable": true, - "rules": "required|string|in:true,false", - "field_type": "text" - }, - { - "name": "No-Auth Mode", - "description": "Skip authentication for development (true/false). Never enable in production.", - "env_variable": "NOAUTH", - "default_value": "false", - "user_viewable": true, - "user_editable": true, - "rules": "required|string|in:true,false", - "field_type": "text" - }, - { - "name": "ID Generator URL", - "description": "URL of the ID generation service", - "env_variable": "IDGEN_URL", - "default_value": "https://id.hep.gg/", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "ID Generator Username", - "description": "Username for the ID generation service", - "env_variable": "IDGEN_USERNAME", - "default_value": "oneround-api", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "ID Generator Token", - "description": "Auth token for the ID generation service", - "env_variable": "IDGEN_TOKEN", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "Email API URL", - "description": "URL of the email sending service", - "env_variable": "EMAIL_API_URL", - "default_value": "https://hep.gg/api/v1/email/send", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "Email API Key", - "description": "Auth key for the email sending service", - "env_variable": "EMAIL_API_KEY", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "Email From", - "description": "Sender address for outgoing emails", - "env_variable": "EMAIL_FROM", - "default_value": "OneRound ", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "Overpass URL", - "description": "Overpass API endpoint for OSM data harvesting", - "env_variable": "OVERPASS_URL", - "default_value": "https://overpass-api.de/api/interpreter", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "Harvester Contact", - "description": "Contact email sent in User-Agent header to Overpass API", - "env_variable": "HARVESTER_CONTACT", - "default_value": "tanner@teamhydra.dev", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "Internal Secret", - "description": "Shared secret between orchestrator and voice gateway. Generate with: openssl rand -base64 32", - "env_variable": "INTERNAL_SECRET", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "field_type": "text" - }, - { - "name": "Redis URL", - "description": "Redis connection string for call state (e.g. redis://localhost:6379/0)", - "env_variable": "REDIS_URL", - "default_value": "redis://localhost:6379/0", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "field_type": "text" - }, - { - "name": "Twilio Account SID", - "description": "Twilio account SID from console.twilio.com", - "env_variable": "TWILIO_ACCOUNT_SID", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "field_type": "text" - }, - { - "name": "Twilio Auth Token", - "description": "Twilio auth token from console.twilio.com", - "env_variable": "TWILIO_AUTH_TOKEN", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "field_type": "text" - }, - { - "name": "Twilio From Number", - "description": "Twilio phone number to place calls from (e.g. +16161234567)", - "env_variable": "TWILIO_FROM_NUMBER", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "field_type": "text" - }, - { - "name": "Webhook Base URL", - "description": "Public URL for Twilio status callbacks (e.g. https://orchestrator.oneround.app)", - "env_variable": "WEBHOOK_BASE_URL", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "field_type": "text" - }, - { - "name": "Voice Gateway Public URL", - "description": "Public URL for Twilio media streams (e.g. https://voice.oneround.app)", - "env_variable": "VOICE_GATEWAY_PUBLIC_URL", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "field_type": "text" - }, - { - "name": "Orchestrator Listen Addr", - "description": "Listen address for the orchestrator service", - "env_variable": "ORCHESTRATOR_LISTEN_ADDR", - "default_value": ":8081", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "field_type": "text" - }, - { - "name": "Orchestrator Poll Interval", - "description": "How often the orchestrator polls for pending bookings", - "env_variable": "ORCHESTRATOR_POLL_INTERVAL", - "default_value": "5s", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "Max Call Attempts", - "description": "Maximum number of call attempts per booking", - "env_variable": "MAX_CALL_ATTEMPTS", - "default_value": "3", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "Hold Timeout Seconds", - "description": "Max seconds to wait on hold before hanging up", - "env_variable": "HOLD_TIMEOUT_SECS", - "default_value": "180", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "OpenAI API Key", - "description": "OpenAI API key for the realtime voice model", - "env_variable": "OPENAI_API_KEY", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "field_type": "text" - }, - { - "name": "OpenAI Realtime Model", - "description": "OpenAI realtime model to use for voice calls", - "env_variable": "OPENAI_REALTIME_MODEL", - "default_value": "gpt-realtime-1.5", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "Orchestrator URL", - "description": "Internal URL for voice gateway to reach orchestrator", - "env_variable": "ORCHESTRATOR_URL", - "default_value": "http://localhost:8081", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "Voice Gateway Listen Addr", - "description": "Listen address for the voice gateway service", - "env_variable": "VOICE_GATEWAY_LISTEN_ADDR", - "default_value": ":8082", - "user_viewable": true, - "user_editable": true, - "rules": "required|string", - "field_type": "text" - }, - { - "name": "APNs Team ID", - "description": "Apple Developer Team ID for push notifications. Leave empty to disable push.", - "env_variable": "APNS_TEAM_ID", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "APNs Key ID", - "description": "Key ID for the APNs auth key (.p8 file)", - "env_variable": "APNS_KEY_ID", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "APNs Key Path", - "description": "Path to the APNs .p8 auth key file inside the container", - "env_variable": "APNS_KEY_PATH", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "SMS API Key", - "description": "API key for the SMS service (used for phone verification). Leave empty to disable.", - "env_variable": "SMS_API_KEY", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "Apple Maps Team ID", - "description": "Apple Developer Team ID for Apple Maps (used for phone number enrichment on bookings)", - "env_variable": "APPLE_MAPS_TEAM_ID", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "Apple Maps Key ID", - "description": "Key ID for Apple Maps Server token", - "env_variable": "APPLE_MAPS_KEY_ID", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "Apple Maps Key Path", - "description": "Path to the Apple Maps .p8 auth key file inside the container", - "env_variable": "APPLE_MAPS_KEY_PATH", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "Add Region", - "description": "Named region to ingest on startup (e.g. michigan, florida, california). Leave empty to skip.", - "env_variable": "ADD_REGION", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "Add Region BBox", - "description": "Custom bounding box to ingest on startup as min_lat,min_lon,max_lat,max_lon. Used when Add Region is empty.", - "env_variable": "ADD_REGION_BBOX", - "default_value": "", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - }, - { - "name": "Tile Size", - "description": "Tile size in degrees for region ingestion (default 0.5)", - "env_variable": "TILE_SIZE", - "default_value": "0.5", - "user_viewable": true, - "user_editable": true, - "rules": "nullable|string", - "field_type": "text" - } - ] + "variables": [] }