Files
archy-demo/neode-ui/ERROR_FIXES.md
2026-03-17 02:14:04 +00:00

7.8 KiB

Error Fixes - WebSocket & Marketplace Issues

Issues Fixed

1. WebSocket Patch Error

Error: Cannot read properties of undefined (reading 'length')

Root Cause: The applyDataPatch function was trying to read the length property of an undefined or null patch array.

Fix Applied (src/api/websocket.ts):

export function applyDataPatch<T>(data: T, patch: PatchOperation[]): T {
  // ✅ NEW: Validate patch is an array before applying
  if (!Array.isArray(patch) || patch.length === 0) {
    console.warn('Invalid or empty patch received, returning original data')
    return data
  }
  
  // ✅ NEW: Wrap in try/catch for safety
  try {
    const result = applyPatch(data, patch as any, false, false)
    return result.newDocument as T
  } catch (error) {
    console.error('Failed to apply patch:', error, 'Patch:', patch)
    return data // Return original data on error
  }
}

Also Fixed (src/stores/app.ts):

// ✅ Added null checks and error handling
wsClient.subscribe((update) => {
  if (data.value && update?.patch) { // Added update?.patch check
    try {
      data.value = applyDataPatch(data.value, update.patch)
    } catch (err) {
      console.error('Failed to apply WebSocket patch:', err)
      // Gracefully continue - app still works without real-time updates
    }
  }
})

Result:

  • No more crashes from malformed WebSocket messages
  • App continues working even if patches fail
  • Better logging for debugging

2. Marketplace API Error

Error: Method not found: marketplace.get

Root Causes:

  1. Backend not running
  2. Not authenticated
  3. Method requires authentication

Fixes Applied (src/views/Marketplace.vue):

async function loadMarketplace() {
  // ✅ NEW: Check authentication first
  if (!store.isAuthenticated) {
    error.value = 'Please login first to access the marketplace'
    loading.value = false
    return
  }

  try {
    const data = await store.getMarketplace(selectedMarketplace.value)
    // ... rest of logic
  } catch (err) {
    const errorMessage = err instanceof Error ? err.message : 'Failed to load marketplace'
    
    // ✅ NEW: Provide specific, actionable error messages
    if (errorMessage.includes('Method not found')) {
      error.value = 'Backend marketplace API not available. Ensure Neode backend is running and up to date.'
    } else if (errorMessage.includes('authenticated') || errorMessage.includes('401')) {
      error.value = 'Authentication required. Please login first.'
    } else if (errorMessage.includes('Network') || errorMessage.includes('fetch')) {
      error.value = 'Cannot connect to backend. Ensure Neode backend is running on port 5959.'
    } else {
      error.value = errorMessage
    }
  }
}

Result:

  • Clear, actionable error messages
  • Authentication check before API calls
  • Better user experience

What You Need to Do

Immediate Next Steps

1. Ensure Backend is Running

The marketplace requires a running Neode backend. You have two options:

# Build and run the backend
cd /Users/tx1138/Code/Neode/core
cargo build --release
./target/release/startos

# Should see: "Neode backend listening on :5959"

Option B: Use Mock Mode (Development Only)

See TROUBLESHOOTING.md for how to enable mock mode for UI development without backend.

2. Login First

Before accessing the marketplace:

# Start UI
cd /Users/tx1138/Code/Neode/neode-ui
npm run dev

# Visit: http://localhost:8100
# Navigate to Login
# Enter credentials
# Then access Marketplace

3. Test the Fixes

# With backend running and authenticated:
# Navigate to Marketplace
# Should see: Loading → Apps OR Clear error message (not a crash)

Testing the Fixes

Test WebSocket Error Fix

  1. Start the UI: npm run dev
  2. Open DevTools Console
  3. Login (to trigger WebSocket connection)
  4. Look for:
    • Should see: "WebSocket connected"
    • Should NOT crash on malformed patches
    • May see warnings: "Invalid or empty patch received" (this is OK)

Test Marketplace Error Fix

  1. Without Backend:

    • Navigate to Marketplace
    • Should see: "Backend marketplace API not available..." (clear message)
    • No crashes or undefined errors
  2. Without Login:

    • Navigate to Marketplace
    • Should see: "Please login first..." (clear message)
  3. With Backend & Login:

    • Navigate to Marketplace
    • Should see: Loading → Apps list OR specific error

File Changes Summary

Modified Files

  1. src/api/websocket.ts

    • Added validation for patch array
    • Added try/catch for safety
    • Better error logging
  2. src/stores/app.ts

    • Added null checks for WebSocket updates
    • Added try/catch in subscription handler
    • Removed premature isConnected reset on logout
  3. src/views/Marketplace.vue

    • Added authentication check
    • Added specific error messages
    • Better error categorization

New Documentation

  1. TROUBLESHOOTING.md

    • Common issues and solutions
    • Mock mode setup
    • Debugging tips
    • Backend setup guide
  2. ERROR_FIXES.md (this file)

    • Summary of fixes
    • Testing procedures
    • Next steps

Architecture Notes

Why These Errors Happened

  1. WebSocket Error:

    • Backend sends JSON Patch operations over WebSocket
    • If patch format is unexpected or empty, code crashed
    • Now: Validates format and handles errors gracefully
  2. Marketplace Error:

    • RPC method marketplace.get exists in backend
    • But requires running backend + authentication
    • Now: Checks auth first, provides clear error messages

How It Works Now

User navigates to Marketplace
    ↓
Check isAuthenticated ✅
    ↓
Call store.getMarketplace(url)
    ↓
RPC Client → POST /rpc/v1
    ↓
Backend: marketplace.get
    ↓
Return apps OR error with clear message ✅
    ↓
Display apps OR show actionable error ✅

Verification Checklist

Run through this checklist to verify fixes:

  • UI starts without errors: npm run dev
  • Login works (with or without backend)
  • WebSocket connects (if backend available)
  • WebSocket errors don't crash app
  • Marketplace shows clear error when not logged in
  • Marketplace shows clear error when backend unavailable
  • Marketplace loads apps (when backend running + logged in)
  • No console errors about "Cannot read properties of undefined"
  • No crashes when navigating between pages

Still Getting Errors?

Check Backend Status

# Is backend running?
lsof -i :5959

# Test backend directly
curl -X POST http://localhost:5959/rpc/v1 \
  -H "Content-Type: application/json" \
  -d '{"method":"echo","params":{"message":"hello"}}'

# Should return: {"result":"hello"}

Check UI Status

# Is UI running?
curl http://localhost:8100

# Check console for errors
# Open browser DevTools → Console tab

Enable Debug Logging

Add to src/api/rpc-client.ts:

async call<T>(options: RPCOptions): Promise<T> {
  console.log('🔵 RPC:', options.method, options.params)
  // ... rest of method
  console.log('🟢 Result:', data.result)
}

Summary

What Was Fixed

WebSocket no longer crashes on bad patches
Marketplace shows clear, actionable errors
Better authentication checks
Comprehensive error handling

What You Should See Now

No crashes or undefined errors
Clear error messages with next steps
App continues working even if WebSocket fails
Marketplace works when backend is available

Next Steps

  1. Start backend: cargo run --release
  2. Start UI: npm run dev
  3. Login at http://localhost:8100
  4. Test marketplace functionality

See TROUBLESHOOTING.md for detailed debugging help!