Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 33 additions & 4 deletions deno.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions down.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
BASE_DIR="${BASE_DIR:-$(dirname "$SCRIPT_DIR")}"
PROVIDER_PLATFORM_PATH="${PROVIDER_PLATFORM_PATH:-$BASE_DIR/provider-platform}"
COUNCIL_PLATFORM_PATH="${COUNCIL_PLATFORM_PATH:-$BASE_DIR/council-platform}"
NETWORK_DASHBOARD_PLATFORM_PATH="${NETWORK_DASHBOARD_PLATFORM_PATH:-$BASE_DIR/network-dashboard-platform}"

export PATH="$HOME/.local/bin:$HOME/.cargo/bin:$PATH"

Expand All @@ -28,6 +29,7 @@ PAY_PLATFORM_PORT="${PAY_PLATFORM_PORT:-3025}"
COUNCIL_CONSOLE_PORT="${COUNCIL_CONSOLE_PORT:-3030}"
MOONLIGHT_PAY_PORT="${MOONLIGHT_PAY_PORT:-3050}"
NETWORK_DASHBOARD_PORT="${NETWORK_DASHBOARD_PORT:-3040}"
NETWORK_DASHBOARD_PLATFORM_PORT="${NETWORK_DASHBOARD_PLATFORM_PORT:-3035}"
PG_CONTAINER="${PG_CONTAINER:-provider-platform-db}"

# Colors
Expand Down Expand Up @@ -74,6 +76,7 @@ stop_process "provider-console" "$SCRIPT_DIR/.provider-console.pid" "$PROVIDER_C
stop_process "council-console" "$SCRIPT_DIR/.council-console.pid" "$COUNCIL_CONSOLE_PORT"
stop_process "moonlight-pay" "$SCRIPT_DIR/.moonlight-pay.pid" "$MOONLIGHT_PAY_PORT"
stop_process "network-dashboard" "$SCRIPT_DIR/.network-dashboard.pid" "$NETWORK_DASHBOARD_PORT"
stop_process "network-dashboard-platform" "$SCRIPT_DIR/.network-dashboard-platform.pid" "$NETWORK_DASHBOARD_PLATFORM_PORT"

# --- Stop PostgreSQL container ---
if docker ps -a --format '{{.Names}}' | grep -q "^${PG_CONTAINER}$"; then
Expand All @@ -97,10 +100,12 @@ for f in \
"$PROVIDER_PLATFORM_PATH/.env" \
"$COUNCIL_PLATFORM_PATH/.env" \
"$PAY_PLATFORM_PATH/.env" \
"$NETWORK_DASHBOARD_PLATFORM_PATH/.env" \
"$SCRIPT_DIR/.local-dev-state" \
"$SCRIPT_DIR/provider.log" \
"$SCRIPT_DIR/council-platform.log" \
"$SCRIPT_DIR/pay-platform.log" \
"$SCRIPT_DIR/network-dashboard-platform.log" \
"$SCRIPT_DIR/provider-console.log" \
"$SCRIPT_DIR/council-console.log" \
"$SCRIPT_DIR/moonlight-pay.log" \
Expand Down
95 changes: 74 additions & 21 deletions infra-up.sh
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ COUNCIL_PLATFORM_PATH="${COUNCIL_PLATFORM_PATH:-$BASE_DIR/council-platform}"
PAY_PLATFORM_PATH="${PAY_PLATFORM_PATH:-$BASE_DIR/pay-platform}"
MOONLIGHT_PAY_PATH="${MOONLIGHT_PAY_PATH:-$BASE_DIR/moonlight-pay}"
NETWORK_DASHBOARD_PATH="${NETWORK_DASHBOARD_PATH:-$BASE_DIR/network-dashboard}"
NETWORK_DASHBOARD_PLATFORM_PATH="${NETWORK_DASHBOARD_PLATFORM_PATH:-$BASE_DIR/network-dashboard-platform}"

# Ports — override via env to run multiple stacks in parallel
STELLAR_RPC_PORT="${STELLAR_RPC_PORT:-8000}" # shared
Expand All @@ -49,6 +50,7 @@ COUNCIL_CONSOLE_PORT="${COUNCIL_CONSOLE_PORT:-3030}"
PAY_PLATFORM_PORT="${PAY_PLATFORM_PORT:-3025}"
MOONLIGHT_PAY_PORT="${MOONLIGHT_PAY_PORT:-3050}"
NETWORK_DASHBOARD_PORT="${NETWORK_DASHBOARD_PORT:-3040}"
NETWORK_DASHBOARD_PLATFORM_PORT="${NETWORK_DASHBOARD_PLATFORM_PORT:-3035}"

# Container name — override to avoid collisions
PG_CONTAINER="${PG_CONTAINER:-provider-platform-db}"
Expand All @@ -66,7 +68,7 @@ error() { echo -e "${RED}[ERROR]${NC} $*"; exit 1; }
section() { echo -e "\n${BLUE}=== $* ===${NC}"; }

# ============================================================
section "1/11 Prerequisites"
section "1/12 Prerequisites"
# ============================================================

command -v docker >/dev/null 2>&1 || error "Docker not found."
Expand Down Expand Up @@ -100,9 +102,10 @@ info "Deno: $($DENO_BIN --version | head -1)"
[ -d "$COUNCIL_PLATFORM_PATH" ] || error "council-platform not found at $COUNCIL_PLATFORM_PATH"
[ -d "$PAY_PLATFORM_PATH" ] || error "pay-platform not found at $PAY_PLATFORM_PATH"
[ -d "$NETWORK_DASHBOARD_PATH" ] || error "network-dashboard not found at $NETWORK_DASHBOARD_PATH"
[ -d "$NETWORK_DASHBOARD_PLATFORM_PATH" ] || error "network-dashboard-platform not found at $NETWORK_DASHBOARD_PLATFORM_PATH"

# ============================================================
section "2/11 Jaeger (ports 4317/4318/16686)"
section "2/12 Jaeger (ports 4317/4318/16686)"
# ============================================================

JAEGER_CONTAINER="${JAEGER_CONTAINER:-jaeger}"
Expand Down Expand Up @@ -130,7 +133,7 @@ else
fi

# ============================================================
section "3/11 Stellar Network"
section "3/12 Stellar Network"
# ============================================================

# Start the shared Stellar network if not already running
Expand Down Expand Up @@ -178,7 +181,7 @@ done
sleep 2

# ============================================================
section "4/11 PostgreSQL (port $PG_PORT)"
section "4/12 PostgreSQL (port $PG_PORT)"
# ============================================================

if docker ps --format '{{.Names}}' | grep -q "^${PG_CONTAINER}$"; then
Expand Down Expand Up @@ -221,7 +224,7 @@ docker exec "$PG_CONTAINER" psql -U admin -d postgres -tc \
"CREATE DATABASE pay_platform_db" >/dev/null

# ============================================================
section "5/11 Provider Platform (port $PROVIDER_PORT)"
section "5/12 Provider Platform (port $PROVIDER_PORT)"
# ============================================================

cd "$PROVIDER_PLATFORM_PATH"
Expand Down Expand Up @@ -283,7 +286,7 @@ for i in $(seq 1 15); do
done

# ============================================================
section "6/11 Council Platform (port $COUNCIL_PLATFORM_PORT)"
section "6/12 Council Platform (port $COUNCIL_PLATFORM_PORT)"
# ============================================================

cd "$COUNCIL_PLATFORM_PATH"
Expand Down Expand Up @@ -335,7 +338,7 @@ for i in $(seq 1 15); do
done

# ============================================================
section "7/11 Pay Platform (port $PAY_PLATFORM_PORT)"
section "7/12 Pay Platform (port $PAY_PLATFORM_PORT)"
# ============================================================

cd "$PAY_PLATFORM_PATH"
Expand Down Expand Up @@ -401,7 +404,57 @@ for i in $(seq 1 15); do
done

# ============================================================
section "8/11 Provider Console (port $PROVIDER_CONSOLE_PORT)"
section "8/12 Network Dashboard Platform (port $NETWORK_DASHBOARD_PLATFORM_PORT)"
# ============================================================

cd "$NETWORK_DASHBOARD_PLATFORM_PATH"

# Infra-only env: ports, log level, network bindings, council-platform
# linkage. The service has NO database — its in-memory state is rebuilt
# from council-platform + a 24h Soroban scan on every cold start, so
# there's no `deno task db:migrate` step. The new-council listener pulls
# its Channel Auth WASM hash set from soroban-core's GitHub releases at
# boot + hourly resync, so no hash is injected here.
cat > .env <<EOF
# Generated by local-dev/up.sh on $(date -u +%Y-%m-%dT%H:%M:%SZ)
PORT=$NETWORK_DASHBOARD_PLATFORM_PORT
MODE=development
LOG_LEVEL=TRACE
SERVICE_DOMAIN=localhost

NETWORK=local
STELLAR_RPC_URL=http://localhost:${STELLAR_RPC_PORT}/soroban/rpc

COUNCIL_PLATFORM_URL=http://localhost:${COUNCIL_PLATFORM_PORT}

# CORS — local network-dashboard + arbitrary playwright origins.
ALLOWED_ORIGINS=http://localhost:${NETWORK_DASHBOARD_PORT}
EOF

info "Starting network-dashboard-platform (background)..."
NETWORK_DASHBOARD_PLATFORM_LOG="$SCRIPT_DIR/network-dashboard-platform.log"
OTEL_DENO=true \
OTEL_SERVICE_NAME=network-dashboard-platform \
OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:${JAEGER_OTLP_PORT}" \
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf \
nohup "$DENO_BIN" task serve > "$NETWORK_DASHBOARD_PLATFORM_LOG" 2>&1 &
NETWORK_DASHBOARD_PLATFORM_PID=$!
echo "$NETWORK_DASHBOARD_PLATFORM_PID" > "$SCRIPT_DIR/.network-dashboard-platform.pid"
info "Network Dashboard Platform running (PID $NETWORK_DASHBOARD_PLATFORM_PID, log: $NETWORK_DASHBOARD_PLATFORM_LOG)"

for i in $(seq 1 15); do
if curl -sf "http://localhost:${NETWORK_DASHBOARD_PLATFORM_PORT}/api/v1/health" >/dev/null 2>&1; then
info "Network Dashboard Platform is ready on port $NETWORK_DASHBOARD_PLATFORM_PORT."
break
fi
if [ "$i" -eq 15 ]; then
warn "Network Dashboard Platform may not be ready yet. Check $NETWORK_DASHBOARD_PLATFORM_LOG"
fi
sleep 1
done

# ============================================================
section "9/12 Provider Console (port $PROVIDER_CONSOLE_PORT)"
# ============================================================

cd "$PROVIDER_CONSOLE_PATH"
Expand Down Expand Up @@ -440,7 +493,7 @@ for i in $(seq 1 10); do
done

# ============================================================
section "9/11 Council Console (port $COUNCIL_CONSOLE_PORT)"
section "10/12 Council Console (port $COUNCIL_CONSOLE_PORT)"
# ============================================================

cd "$COUNCIL_CONSOLE_PATH"
Expand Down Expand Up @@ -482,7 +535,7 @@ for i in $(seq 1 10); do
done

# ============================================================
section "10/11 Moonlight Pay (port $MOONLIGHT_PAY_PORT)"
section "11/12 Moonlight Pay (port $MOONLIGHT_PAY_PORT)"
# ============================================================

cd "$MOONLIGHT_PAY_PATH"
Expand Down Expand Up @@ -523,18 +576,17 @@ for i in $(seq 1 10); do
done

# ============================================================
section "11/11 Network Dashboard (port $NETWORK_DASHBOARD_PORT)"
section "12/12 Network Dashboard (port $NETWORK_DASHBOARD_PORT)"
# ============================================================

cd "$NETWORK_DASHBOARD_PATH"

cat > public/config.js <<EOF
// Runtime configuration — generated by local-dev/up.sh
window.__DASHBOARD_CONFIG__ = {
globalThis.__DASHBOARD_CONFIG__ = {
environment: "development",
stellarNetwork: "standalone",
rpcUrl: "http://localhost:${STELLAR_RPC_PORT}/soroban/rpc",
horizonUrl: "http://localhost:${STELLAR_RPC_PORT}",
networkDashboardPlatformUrl: "ws://localhost:${NETWORK_DASHBOARD_PLATFORM_PORT}",
};
EOF

Expand Down Expand Up @@ -567,13 +619,14 @@ echo " local-dev infra is ready!"
echo "========================================"
echo ""
echo "Services:"
echo " Provider Platform: http://localhost:$PROVIDER_PORT (PID $PROVIDER_PID)"
echo " Council Platform: http://localhost:$COUNCIL_PLATFORM_PORT (PID $COUNCIL_PLATFORM_PID)"
echo " Pay Platform: http://localhost:$PAY_PLATFORM_PORT (PID $PAY_PLATFORM_PID)"
echo " Provider Console: http://localhost:$PROVIDER_CONSOLE_PORT (PID $PROVIDER_CONSOLE_PID)"
echo " Council Console: http://localhost:$COUNCIL_CONSOLE_PORT (PID $COUNCIL_CONSOLE_PID)"
echo " Moonlight Pay: http://localhost:$MOONLIGHT_PAY_PORT (PID $MOONLIGHT_PAY_PID)"
echo " Network Dashboard: http://localhost:$NETWORK_DASHBOARD_PORT (PID $NETWORK_DASHBOARD_PID)"
echo " Provider Platform: http://localhost:$PROVIDER_PORT (PID $PROVIDER_PID)"
echo " Council Platform: http://localhost:$COUNCIL_PLATFORM_PORT (PID $COUNCIL_PLATFORM_PID)"
echo " Pay Platform: http://localhost:$PAY_PLATFORM_PORT (PID $PAY_PLATFORM_PID)"
echo " Network Dashboard Platform: http://localhost:$NETWORK_DASHBOARD_PLATFORM_PORT (PID $NETWORK_DASHBOARD_PLATFORM_PID)"
echo " Provider Console: http://localhost:$PROVIDER_CONSOLE_PORT (PID $PROVIDER_CONSOLE_PID)"
echo " Council Console: http://localhost:$COUNCIL_CONSOLE_PORT (PID $COUNCIL_CONSOLE_PID)"
echo " Moonlight Pay: http://localhost:$MOONLIGHT_PAY_PORT (PID $MOONLIGHT_PAY_PID)"
echo " Network Dashboard: http://localhost:$NETWORK_DASHBOARD_PORT (PID $NETWORK_DASHBOARD_PID)"
echo " PostgreSQL: localhost:$PG_PORT (container: $PG_CONTAINER)"
echo " Stellar RPC: http://localhost:$STELLAR_RPC_PORT (shared)"
echo " Jaeger UI: http://localhost:16686"
Expand Down
28 changes: 28 additions & 0 deletions network-dashboard-demo.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/usr/bin/env bash
set -euo pipefail

# network-dashboard-demo wrapper.
#
# Continuous demo loop that randomly creates councils and joins PPs to
# existing councils so the network-dashboard at :3040 paints constant
# activity. Each council uses a fresh ephemeral admin key; each PP uses
# a fresh operator key. State is held in-memory by the script — nothing
# is written to .local-dev-state.
#
# Tweak via env:
# DEMO_MAX_COUNCILS=12 cap on councils created
# DEMO_SLEEP_MIN_MS=3000 min jitter between actions
# DEMO_SLEEP_MAX_MS=8000 max jitter between actions
#
# Ctrl-C to stop.

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
DENO_BIN="${DENO_BIN:-deno}"
command -v "$DENO_BIN" >/dev/null 2>&1 || DENO_BIN="$HOME/.deno/bin/deno"
command -v "$DENO_BIN" >/dev/null 2>&1 || {
echo "ERROR: deno not found. Run up.sh first or install Deno." >&2
exit 1
}

cd "$SCRIPT_DIR"
exec "$DENO_BIN" run --allow-all network-dashboard-demo.ts "$@"
Loading
Loading