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

317 lines
7.8 KiB
Markdown

# 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`):
```typescript
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`):
```typescript
// ✅ 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`):
```typescript
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:
#### Option A: Start the Backend (Recommended)
```bash
# 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:
```bash
# 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**
```bash
# 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
4. **`TROUBLESHOOTING.md`**
- Common issues and solutions
- Mock mode setup
- Debugging tips
- Backend setup guide
5. **`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
```bash
# 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
```bash
# 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`:
```typescript
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!**