Files
classroomio/apps/dashboard/src/lib/utils/services/api
..

API Client

Basic Usage

import { apiClient, safeRequest, classroomio } from '$lib/utils/services/api';

// GET request
const result = await safeRequest(async () => {
  return apiClient.request('/api/users', { method: 'GET' });
});

// POST request
const result = await safeRequest(async () => {
  return apiClient.request('/api/users', {
    method: 'POST',
    body: { name: 'John', email: 'john@example.com' }
  });
});

// Handle response
if (result.success) {
  console.log('Data:', result.data);
} else {
  console.error('Error:', result.error.message);
}

Error Handling

if (result.success) {
  // Success
  console.log(result.data);
} else {
  // Check error type
  if (result.error.error_code === 'auth') {
    window.location.href = '/login';
  } else if (result.error.error_code === 'client') {
    showError('Please check your input');
  } else if (result.error.error_code === 'server') {
    showError('Server error, please try again');
  }
}

Custom Fetch

import { createApiClient } from '$lib/utils/services/api';

const customClient = createApiClient({
  customFetch: (input, init) => {
    // Your custom fetch logic
    return fetch(input, init);
  }
});

const result = await safeRequest(async () => {
  return customClient.request('/api/data', { method: 'GET' });
});

RPC Usage

import { classroomio } from '$lib/utils/services/api';

// Use with Hono RPC
const data = await classroomio.users.$get();
const user = await classroomio.users.$post({ json: { name: 'John' } });

Error Codes

  • 'auth' - 401 Unauthorized
  • 'client' - 400-499 Client errors
  • 'server' - 500-599 Server errors
  • 'timeout' - 408 Request timeout
  • 'network' - 0 Network issues