#!/bin/sh set -eu runtime_config=$(jq -cn \ --arg authMode "${TJWATER_AUTH_MODE:-required}" \ --arg keycloakIssuer "${TJWATER_KEYCLOAK_ISSUER:-}" \ --arg keycloakClientId "${TJWATER_KEYCLOAK_CLIENT_ID:-next-tjwater}" \ --arg mapboxAccessToken "${TJWATER_MAPBOX_ACCESS_TOKEN:-}" \ --arg tiandituToken "${TJWATER_TIANDITU_TOKEN:-}" \ --arg mapUrl "${TJWATER_MAP_URL:-https://geoserver.waternetwork.cn/geoserver}" \ --arg geoserverWorkspace "${TJWATER_GEOSERVER_WORKSPACE:-tjwater_next}" \ --arg serverApiBaseUrl "${TJWATER_SERVER_API_BASE_URL:-http://127.0.0.1:8000}" \ --arg agentApiBaseUrl "${TJWATER_AGENT_URL:-http://127.0.0.1:8787}" \ --arg workbenchRuntimeMode "${TJWATER_WORKBENCH_RUNTIME_MODE:-auto}" \ --arg peripheralSampleApiBaseUrl "${TJWATER_PERIPHERAL_SAMPLE_API_BASE_URL:-}" \ --arg peripheralSampleTimeMode "${TJWATER_PERIPHERAL_SAMPLE_TIME_MODE:-demo}" \ --arg peripheralSampleDemoStart "${TJWATER_PERIPHERAL_SAMPLE_DEMO_START:-2026-09-17T00:00:00Z}" \ --arg peripheralSampleDemoEnd "${TJWATER_PERIPHERAL_SAMPLE_DEMO_END:-2026-09-17T12:00:00Z}" \ --arg peripheralSampleRecentHours "${TJWATER_PERIPHERAL_SAMPLE_RECENT_HOURS:-8}" \ --arg enableDevPanel "${TJWATER_ENABLE_DEV_PANEL:-false}" \ --arg enableMsw "${TJWATER_ENABLE_MSW:-false}" \ '{ TJWATER_AUTH_MODE: $authMode, TJWATER_KEYCLOAK_ISSUER: $keycloakIssuer, TJWATER_KEYCLOAK_CLIENT_ID: $keycloakClientId, TJWATER_MAPBOX_ACCESS_TOKEN: $mapboxAccessToken, TJWATER_TIANDITU_TOKEN: $tiandituToken, TJWATER_MAP_URL: $mapUrl, TJWATER_GEOSERVER_WORKSPACE: $geoserverWorkspace, TJWATER_SERVER_API_BASE_URL: $serverApiBaseUrl, TJWATER_AGENT_URL: $agentApiBaseUrl, TJWATER_WORKBENCH_RUNTIME_MODE: $workbenchRuntimeMode, TJWATER_PERIPHERAL_SAMPLE_API_BASE_URL: $peripheralSampleApiBaseUrl, TJWATER_PERIPHERAL_SAMPLE_TIME_MODE: $peripheralSampleTimeMode, TJWATER_PERIPHERAL_SAMPLE_DEMO_START: $peripheralSampleDemoStart, TJWATER_PERIPHERAL_SAMPLE_DEMO_END: $peripheralSampleDemoEnd, TJWATER_PERIPHERAL_SAMPLE_RECENT_HOURS: $peripheralSampleRecentHours, TJWATER_ENABLE_DEV_PANEL: $enableDevPanel, TJWATER_ENABLE_MSW: $enableMsw }') printf 'globalThis.__TJWATER_CONFIG__ = %s;\n' "$runtime_config" > /srv/runtime-config.js node /usr/local/lib/tjwater-frontend/edge-tts-server.cjs & tts_pid=$! "$@" & app_pid=$! terminate() { kill "$app_pid" "$tts_pid" 2>/dev/null || true } trap terminate INT TERM status=0 wait -n "$app_pid" "$tts_pid" || status=$? terminate wait "$app_pid" 2>/dev/null || true wait "$tts_pid" 2>/dev/null || true exit "$status"