#!/usr/bin/env bash # Build and start Z Ecosystem stack only (no OMNL portal deploy). set -euo pipefail REPO_DIR="${Z_ECOSYSTEM_ROOT:-$HOME/smom-dbis-138}" LOG_DIR="${Z_ECOSYSTEM_LOG_DIR:-$HOME/z-ecosystem/logs}" ENV_FILE="${Z_ECOSYSTEM_ENV:-$REPO_DIR/config/z-ecosystem.local.env}" FRONTEND_PORT="${Z_ECOSYSTEM_FRONTEND_PORT:-3002}" API_PORT="${Z_TOKEN_AGGREGATION_PORT:-${PORT:-3000}}" log() { echo "[$(date -Iseconds)] $*"; } mkdir -p "$LOG_DIR" cd "$REPO_DIR" if [[ -f "$REPO_DIR/.env" ]]; then set -a; set +u; source "$REPO_DIR/.env"; set -u; set +a fi if [[ -f "$ENV_FILE" ]]; then set -a; set +u; source "$ENV_FILE"; set -u; set +a fi export VITE_ECOSYSTEM=z export VITE_ENABLE_Z_WALLET=true export OMNL_SUPPORTED_CHAINS_CONFIG="${Z_SUPPORTED_CHAINS_CONFIG:-$REPO_DIR/config/z-supported-chains.v1.json}" export SETTLEMENT_MIDDLEWARE_CONFIG="${SETTLEMENT_MIDDLEWARE_CONFIG:-$REPO_DIR/config/settlement-middleware.production.v1.json}" export CHAIN_900002_RPC_URL="${CHAIN_900002_RPC_URL:-https://rpc.zblockchainsystem.com}" export VITE_RPC_URL_900002="${VITE_RPC_URL_900002:-$CHAIN_900002_RPC_URL}" export VITE_Z_CHAIN_EXPLORER_URL="${VITE_Z_CHAIN_EXPLORER_URL:-https://explorer.zblockchainsystem.com}" export VITE_Z_ECOSYSTEM_URL="${VITE_Z_ECOSYSTEM_URL:-https://zblockchainsystem.com}" export VITE_TOKEN_AGGREGATION_URL="${VITE_TOKEN_AGGREGATION_URL:-/api/v1}" export VITE_SETTLEMENT_MIDDLEWARE_URL="${VITE_SETTLEMENT_MIDDLEWARE_URL:-/settlement}" export VITE_DBIS_EXCHANGE_URL="${VITE_DBIS_EXCHANGE_URL:-/exchange}" build_pkg() { local dir="$1" log "Building $dir..." cd "$REPO_DIR/$dir" NODE_ENV=development npm install --no-fund --no-audit npm run build } for dir in packages/integration-foundation packages/settlement-core \ services/token-aggregation services/settlement-middleware services/dbis-exchange; do build_pkg "$dir" done log "Building Z frontend (VITE_ECOSYSTEM=z)..." cd "$REPO_DIR/frontend-dapp" unset VITE_OMNL_API_KEY if command -v pnpm >/dev/null 2>&1; then pnpm install --frozen-lockfile 2>/dev/null || pnpm install VITE_ECOSYSTEM=z pnpm run build:z else npm install VITE_ECOSYSTEM=z npm run build:z fi start_svc() { local name="$1" local dir="$2" local port="$3" local cmd="$4" log "Starting $name on :$port" cd "$REPO_DIR/$dir" pkill -f "smom-dbis-138/$dir" 2>/dev/null || true fuser -k "${port}/tcp" 2>/dev/null || true sleep 1 nohup env \ SETTLEMENT_MIDDLEWARE_CONFIG="$SETTLEMENT_MIDDLEWARE_CONFIG" \ OMNL_SUPPORTED_CHAINS_CONFIG="$OMNL_SUPPORTED_CHAINS_CONFIG" \ Z_SUPPORTED_CHAINS_CONFIG="$OMNL_SUPPORTED_CHAINS_CONFIG" \ PORT="$port" \ TOKEN_AGGREGATION_URL="${TOKEN_AGGREGATION_URL:-http://127.0.0.1:$port}" \ CHAIN_900002_RPC_URL="$CHAIN_900002_RPC_URL" \ AZURE_OPENAI_ENDPOINT="${AZURE_OPENAI_ENDPOINT:-}" \ AZURE_OPENAI_API_KEY="${AZURE_OPENAI_API_KEY:-}" \ AZURE_OPENAI_DEPLOYMENT="${AZURE_OPENAI_DEPLOYMENT:-}" \ AZURE_OPENAI_API_VERSION="${AZURE_OPENAI_API_VERSION:-2024-02-15-preview}" \ bash -c "$cmd" >"$LOG_DIR/$name.log" 2>&1 & echo $! >"$LOG_DIR/$name.pid" } start_svc token-aggregation services/token-aggregation "$API_PORT" "npm run start" sleep 2 start_svc settlement-middleware services/settlement-middleware 3011 "npm run start" sleep 2 start_svc dbis-exchange services/dbis-exchange 3012 "npm run start" sleep 2 pkill -f "serve -s.*$FRONTEND_PORT" 2>/dev/null || true cd "$REPO_DIR/frontend-dapp" nohup npx --yes serve -s dist -l "$FRONTEND_PORT" >"$LOG_DIR/frontend.log" 2>&1 & echo $! >"$LOG_DIR/frontend.pid" sleep 5 log "Z health checks..." curl -sf "http://127.0.0.1:$API_PORT/api/v1/z-bot/health" | head -c 200 || true echo curl -sf "http://127.0.0.1:3011/api/v1/settlement/health" | head -c 200 || true echo curl -sf -o /dev/null -w "z-hub=%{http_code}\n" "http://127.0.0.1:$FRONTEND_PORT/z" curl -sf -o /dev/null -w "z-wallet=%{http_code}\n" "http://127.0.0.1:$FRONTEND_PORT/z-wallet" log "Z stack ready on :$FRONTEND_PORT"