Ship bridge lanes, public API access doc, and WalletConnect client stack.
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:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user