Frontend: complete task list (C1–L4), security, a11y, L1 block card helper

- React: response.ok checks (address, transaction, search); block number validation; stable Table keys; API modules (addresses, transactions, blocks normalizer)
- SPA: escapeHtml/safe URLs/onclick; getRpcUrl in rpcCall; cancel blocks rAF on view change; named constants; hash route decode
- SPA: createBlockCardHtml + normalizeBlockDisplay (L1); DEBUG console gating; aria-live for errors; token/block/tx detail escaping
- Docs: FRONTEND_REVIEW.md, FRONTEND_TASKS_AND_REVIEW.md; favicons; .gitignore *.tsbuildinfo

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
defiQUG
2026-02-10 18:43:37 -08:00
parent 1c8ca4172a
commit 2b956a5a83
16 changed files with 847 additions and 315 deletions

View File

@@ -11,6 +11,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
FRONTEND_SOURCE="${REPO_ROOT}/explorer-monorepo/frontend/public/index.html"
[ -f "$FRONTEND_SOURCE" ] || FRONTEND_SOURCE="${SCRIPT_DIR}/../frontend/public/index.html"
FRONTEND_PUBLIC="$(dirname "$FRONTEND_SOURCE")"
PROXMOX_R630_02="${PROXMOX_HOST_R630_02:-192.168.11.12}"
echo "=========================================="
@@ -77,7 +78,45 @@ else
fi
echo ""
# Step 5: Update nginx (skip when remote; full config via ensure-explorer-nginx-api-proxy.sh)
# Step 4b: Deploy favicon and apple-touch-icon
echo "=== Step 4b: Deploying icons ==="
for ASSET in apple-touch-icon.png favicon.ico; do
SRC="${FRONTEND_PUBLIC}/${ASSET}"
if [ ! -f "$SRC" ]; then
echo "⚠️ Skip $ASSET (not found)"
continue
fi
if [ "$DEPLOY_METHOD" = "direct" ]; then
cp "$SRC" "/var/www/html/$ASSET"
chown www-data:www-data "/var/www/html/$ASSET" 2>/dev/null || true
echo "$ASSET deployed"
elif [ "$DEPLOY_METHOD" = "remote" ]; then
scp -o ConnectTimeout=10 -o StrictHostKeyChecking=no "$SRC" root@${PROXMOX_R630_02}:/tmp/"$ASSET"
ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no root@${PROXMOX_R630_02} "pct push $VMID /tmp/$ASSET /var/www/html/$ASSET --perms 0644 && pct exec $VMID -- chown www-data:www-data /var/www/html/$ASSET"
echo "$ASSET deployed via $PROXMOX_R630_02"
else
pct push $VMID "$SRC" "/var/www/html/$ASSET"
$EXEC_PREFIX chown www-data:www-data "/var/www/html/$ASSET" 2>/dev/null || true
echo "$ASSET deployed"
fi
done
echo ""
# Step 5 (remote): Apply nginx config so /favicon.ico and /apple-touch-icon.png are served
if [ "$DEPLOY_METHOD" = "remote" ]; then
echo "=== Step 5 (remote): Applying nginx config for icons ==="
FIX_NGINX_SCRIPT="${REPO_ROOT}/explorer-monorepo/scripts/fix-nginx-serve-custom-frontend.sh"
if [ -f "$FIX_NGINX_SCRIPT" ]; then
scp -o ConnectTimeout=10 -o StrictHostKeyChecking=no "$FIX_NGINX_SCRIPT" root@${PROXMOX_R630_02}:/tmp/fix-nginx-explorer.sh
ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no root@${PROXMOX_R630_02} "pct push $VMID /tmp/fix-nginx-explorer.sh /tmp/fix-nginx-explorer.sh --perms 0755 && pct exec $VMID -- /tmp/fix-nginx-explorer.sh"
echo "✅ Nginx config applied (favicon and apple-touch-icon locations)"
else
echo "⚠️ Nginx fix script not found ($FIX_NGINX_SCRIPT); icons may still 404 until nginx is updated on VM"
fi
echo ""
fi
# Step 5 (local/pct): Update nginx configuration
if [ "$DEPLOY_METHOD" != "remote" ]; then
echo "=== Step 5: Updating nginx configuration ==="
$EXEC_PREFIX bash << 'NGINX_UPDATE'
@@ -158,8 +197,8 @@ else
exit 1
fi
# Test HTTP endpoint
HTTP_RESPONSE=$(run_in_vm "curl -s http://localhost/ 2>/dev/null | head -5")
# Test HTTP endpoint (non-fatal: do not exit on failure)
HTTP_RESPONSE=$(run_in_vm "curl -s --max-time 5 http://localhost/ 2>/dev/null | head -5" 2>/dev/null) || true
if echo "$HTTP_RESPONSE" | grep -q "SolaceScanScout\|<!DOCTYPE html"; then
echo "✅ Frontend is accessible via nginx"
else