Ship bridge lanes, public API access doc, and WalletConnect client stack.
Some checks failed
Deploy Explorer Live / deploy (push) Failing after 15s
Validate Explorer / frontend (push) Failing after 20s
Validate Explorer / smoke-e2e (push) Has been skipped

Align CCIP catalog UX with 11-lane config-ready routes, document the no-key public API decision, and enable browser WalletConnect pairing with backend session registration and deploy-time project ID wiring.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
defiQUG
2026-05-23 02:21:37 -07:00
parent efd7c8bbcb
commit ab9c1f9f98
18 changed files with 4278 additions and 150 deletions

View File

@@ -14,6 +14,8 @@ EXPLORER_DATABASE_URL_VALUE="${EXPLORER_DATABASE_URL_VALUE:-}"
SECURE_AI_ENV_FILE="${SECURE_AI_ENV_FILE:-$HOME/.secure-secrets/explorer-ai.env}"
ACCESS_ADMIN_EMAILS_VALUE="${ACCESS_ADMIN_EMAILS:-}"
ACCESS_INTERNAL_SECRET_VALUE="${ACCESS_INTERNAL_SECRET:-}"
WALLETCONNECT_PROJECT_ID_VALUE="${WALLETCONNECT_PROJECT_ID:-${VITE_WALLETCONNECT_PROJECT_ID:-}}"
WALLETCONNECT_RELAY_URL_VALUE="${WALLETCONNECT_RELAY_URL:-}"
if [ -f "$SECURE_AI_ENV_FILE" ]; then
set -a
@@ -22,6 +24,12 @@ if [ -f "$SECURE_AI_ENV_FILE" ]; then
set +a
fi
if [ -z "${WALLETCONNECT_PROJECT_ID_VALUE:-}" ] && [ -f "$REPO_ROOT/smom-dbis-138/.env" ]; then
WALLETCONNECT_PROJECT_ID_VALUE="$(grep -E '^VITE_WALLETCONNECT_PROJECT_ID=' "$REPO_ROOT/smom-dbis-138/.env" | head -1 | cut -d= -f2- | tr -d '\r\"' || true)"
fi
WALLETCONNECT_PROJECT_ID_VALUE="${WALLETCONNECT_PROJECT_ID:-${VITE_WALLETCONNECT_PROJECT_ID:-${WALLETCONNECT_PROJECT_ID_VALUE:-}}}"
WALLETCONNECT_RELAY_URL_VALUE="${WALLETCONNECT_RELAY_URL:-${WALLETCONNECT_RELAY_URL_VALUE:-}}"
cleanup() {
rm -rf "$TMP_DIR"
}
@@ -67,9 +75,11 @@ export XAI_API_KEY_VALUE="${XAI_API_KEY:-}"
export EXPLORER_DATABASE_URL_VALUE
export ACCESS_ADMIN_EMAILS_VALUE
export ACCESS_INTERNAL_SECRET_VALUE
export WALLETCONNECT_PROJECT_ID_VALUE
export WALLETCONNECT_RELAY_URL_VALUE
ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no root@"$PROXMOX_HOST" \
"JWT_SECRET_VALUE='$JWT_SECRET_VALUE' EXPLORER_AI_MODEL_VALUE='$EXPLORER_AI_MODEL_VALUE' XAI_API_KEY_VALUE='$XAI_API_KEY_VALUE' EXPLORER_DATABASE_URL_VALUE='$EXPLORER_DATABASE_URL_VALUE' ACCESS_ADMIN_EMAILS_VALUE='$ACCESS_ADMIN_EMAILS_VALUE' ACCESS_INTERNAL_SECRET_VALUE='$ACCESS_INTERNAL_SECRET_VALUE' bash -s" <<'REMOTE'
"JWT_SECRET_VALUE='$JWT_SECRET_VALUE' EXPLORER_AI_MODEL_VALUE='$EXPLORER_AI_MODEL_VALUE' XAI_API_KEY_VALUE='$XAI_API_KEY_VALUE' EXPLORER_DATABASE_URL_VALUE='$EXPLORER_DATABASE_URL_VALUE' ACCESS_ADMIN_EMAILS_VALUE='$ACCESS_ADMIN_EMAILS_VALUE' ACCESS_INTERNAL_SECRET_VALUE='$ACCESS_INTERNAL_SECRET_VALUE' WALLETCONNECT_PROJECT_ID_VALUE='$WALLETCONNECT_PROJECT_ID_VALUE' WALLETCONNECT_RELAY_URL_VALUE='$WALLETCONNECT_RELAY_URL_VALUE' bash -s" <<'REMOTE'
set -euo pipefail
VMID=5000
@@ -160,6 +170,17 @@ else
rm -f /etc/systemd/system/explorer-config-api.service.d/xai.conf
fi
if [ -n "'"$WALLETCONNECT_PROJECT_ID_VALUE"'" ]; then
cat > /etc/systemd/system/explorer-config-api.service.d/walletconnect.conf <<EOF
[Service]
Environment=WALLETCONNECT_PROJECT_ID='"$WALLETCONNECT_PROJECT_ID_VALUE"'
Environment=WALLETCONNECT_RELAY_URL='"${WALLETCONNECT_RELAY_URL_VALUE:-wss://relay.walletconnect.org}"'
EOF
chmod 600 /etc/systemd/system/explorer-config-api.service.d/walletconnect.conf
else
rm -f /etc/systemd/system/explorer-config-api.service.d/walletconnect.conf
fi
systemctl daemon-reload
systemctl restart explorer-config-api
sleep 2

View File

@@ -41,6 +41,18 @@ test.describe('Explorer sprint smoke', () => {
await page.goto(`${EXPLORER_URL}/bridge`, { waitUntil: 'domcontentloaded', timeout: 30000 })
await expect(page.getByRole('heading', { name: /Bridge & Relay Monitoring/i })).toBeVisible({ timeout: 15000 })
await expect(page.getByText(/CCIP route catalog/i).first()).toBeVisible({ timeout: 15000 })
await expect(page.getByText(/Wemix/i).first()).toBeVisible({ timeout: 15000 })
})
test('public API access doc page loads', async ({ page }) => {
await page.goto(`${EXPLORER_URL}/docs/public-api-access`, { waitUntil: 'domcontentloaded', timeout: 30000 })
await expect(page.getByRole('heading', { name: /Public API access/i })).toBeVisible({ timeout: 15000 })
await expect(page.getByText(/Decision summary/i).first()).toBeVisible({ timeout: 10000 })
})
test('wallet page exposes WalletConnect action', async ({ page }) => {
await page.goto(`${EXPLORER_URL}/wallet`, { waitUntil: 'domcontentloaded', timeout: 30000 })
await expect(page.getByRole('button', { name: /^WalletConnect$/i })).toBeVisible({ timeout: 15000 })
})
test('operations hub shows WETH in surface navigation', async ({ page }) => {
@@ -95,6 +107,6 @@ test.describe('Explorer sprint smoke', () => {
expect(response.ok()).toBeTruthy()
const payload = await response.json()
expect(payload.fallbackAuth).toBe('/api/v1/auth/wallet')
expect(String(payload.message || '')).toMatch(/browser wallet auth/i)
expect(String(payload.message || '')).toMatch(/auth\/wallet|WalletConnect/i)
})
})