Files
wehub-resource-sync 3a28426bf4
Lint and Format Check / lint-and-format (push) Failing after 0s
Check Migrations / Check for duplicate migration numbers (push) Failing after 1s
CI Pre-merge Check / CI Pre-merge Check (push) Failing after 2m17s
chore: import upstream snapshot with attribution
2026-07-13 12:23:40 +08:00

3.9 KiB

InsForge Debug SDK

Common SDK Errors

Auth Errors

// Token not stored
{ code: 'MISSING_AUTHORIZATION_HEADER' }
// Fix: User needs to login

// Token expired
{ code: 'INVALID_TOKEN' }
// Fix: client.auth.signInWithPassword()

// Invalid credentials
{ code: 'INVALID_CREDENTIALS' }
// Fix: Check email/password

Database Errors

// Table doesn't exist
{ statusCode: 404, message: 'Table not found' }
// Fix: Use MCP tool to create table

// Missing required field
{ code: '23502', message: 'null value in column "user_id"' }
// Fix: Include all required fields

// Foreign key violation
{ code: '23503', message: 'violates foreign key constraint' }
// Fix: Referenced record must exist

// Permission denied
{ code: '42501', message: 'permission denied for table' }
// Fix: User must be authenticated

Debug Techniques

1. Check Authentication

const { data, error } = await client.auth.getCurrentUser();
if (error) {
  console.log('Not authenticated:', error.message);
  // Need to login first
}

2. Verify Token Storage

const { data } = await client.auth.getCurrentSession();
console.log('Stored token:', data?.session?.accessToken ? 'Present' : 'Missing');

3. Test Database Connection

// Simple query to test connection
const { error } = await client.database.from('users').select().limit(1);
if (error) {
  console.log('Database issue:', error);
}

4. Enable Network Inspection

// Browser: Open DevTools > Network tab
// Check request headers for Authorization: Bearer token
// Check response for error details

5. Test With Raw HTTP

// When SDK fails, test endpoint directly
const response = await fetch('http://localhost:7130/api/database/records/posts', {
  headers: {
    'Authorization': 'Bearer ' + token
  }
});
const data = await response.json();
console.log('Raw response:', data);

Common Issues

Empty Response

// INSERT/UPDATE/DELETE return empty without Prefer header
// SDK handles this automatically, but check if using raw API

Array Format

// POST requires array
// ❌ Wrong: { title: 'Test' }
// ✅ Right: [{ title: 'Test' }]
// SDK handles this automatically

Token Not Persisting

// Check storage adapter
const client = createClient({
  baseUrl: 'http://localhost:7130',
});

CORS Issues

// Backend allows all origins by default
// If modified, check backend CORS settings

Test Utilities

Full Test Suite

async function testSDK() {
  const email = `test-${Date.now()}@example.com`;
  
  // Test auth
  console.log('Testing auth...');
  const { error: signUpError } = await client.auth.signUp({ email, password: 'test123' });
  if (signUpError) return console.error('SignUp failed:', signUpError);
  
  // Test current user
  const { data: user, error: userError } = await client.auth.getCurrentUser();
  if (userError) return console.error('GetUser failed:', userError);
  console.log('✅ Auth working, user:', user.user.id);
  
  // Test database
  console.log('Testing database...');
  const { data: posts, error: dbError } = await client.database.from('posts').select().limit(1);
  if (dbError) return console.error('Database failed:', dbError);
  console.log('✅ Database working, posts:', posts.length);
  
  // Test insert
  const { error: insertError } = await client.database
    .from('posts')
    .insert({ title: 'Test', user_id: user.user.id })
    .select();
  if (insertError) return console.error('Insert failed:', insertError);
  console.log('✅ Insert working');
}

testSDK().catch(console.error);

Backend Verification

// Check backend is running
fetch('http://localhost:7130/api/health')
  .then(r => r.json())
  .then(d => console.log('Backend:', d))
  .catch(e => console.error('Backend not running'));