strip env vars, all config now via config.toml

This commit is contained in:
2026-06-02 22:12:37 -04:00
parent b916a3eaa4
commit a48f721dad

View File

@@ -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 <noreply@hep.gg>",
"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": []
}