Skip to main content
Fleetwork
Fleetwork

Contact us

We look forward to hearing from you. Please fill out the form below.

APIReference

Error Handling

Error handling patterns and retry strategies for the Fleetwork API in JavaScript.

Error Handler Class

JavaScript
class FleetworkApiClient {
  constructor(apiKey, baseUrl = "https://live.fleetwork.vn") {
    this.apiKey = apiKey;

    this.baseUrl = baseUrl;
  }

  async request(method, path, { body, params } = {}) {
    const url = new URL(`${this.baseUrl}/api/v1/workspace/accounts${path}`);
    if (params) {
      Object.entries(params).forEach(([k, v]) => url.searchParams.set(k, v));
    }

    const options = {
      method,
      headers: {
        "API-KEY": this.apiKey,
        "Content-Type": "application/json",
      },
    };
    if (body) options.body = JSON.stringify(body);

    for (let attempt = 0; attempt < 3; attempt++) {
      const response = await fetch(url, options);

      // Rate limited — retry after delay
      if (response.status === 429) {
        const retryAfter = parseInt(response.headers.get("Retry-After") || "1");
        console.warn(`Rate limited. Retrying in ${retryAfter}s...`);
        await new Promise((r) => setTimeout(r, retryAfter * 1000));
        continue;
      }

      const data = await response.json();

      if (!response.ok) {
        throw new FleetworkApiError(response.status, data);
      }

      return data;
    }

    throw new Error("Max retries exceeded");
  }

  // Convenience methods
  get(path, params) {
    return this.request("GET", path, { params });
  }
  post(path, body) {
    return this.request("POST", path, { body });
  }
  put(path, body) {
    return this.request("PUT", path, { body });
  }
  delete(path) {
    return this.request("DELETE", path);
  }
}

class FleetworkApiError extends Error {
  constructor(statusCode, body) {
    super(body.message || body.error || "Unknown API error");
    this.statusCode = statusCode;
    this.body = body;
  }
}

Usage

JavaScript
const client = new FleetworkApiClient("your-key", "your-account-id");

try {
  const users = await client.get("/users", { page: "1", size: "20" });
  console.log(users.data.content);
} catch (error) {
  if (error instanceof FleetworkApiError) {
    switch (error.statusCode) {
      case 401:
        console.error("Auth failed:", error.message);
        break;
      case 404:
        console.error("Not found:", error.message);
        break;
      case 429:
        console.error("Rate limited");
        break;
      default:
        console.error(`API Error ${error.statusCode}:`, error.message);
    }
  }
}