Skip to main content

Overview

Sorionlib provides custom error classes with detailed error codes to help you handle errors effectively.
import { SorionError } from "sorionlib";

Custom error classes

SorionError

Base error class for all Sorionlib errors.
import { SorionError } from "sorionlib";

try {
  // Some operation
} catch (error) {
  if (error instanceof SorionError) {
    console.log(error.code);    // Error code
    console.log(error.message); // Error message
    console.log(error.details); // Additional details
  }
}

ApiError

Thrown by the API client for HTTP errors.
import { ApiError } from "sorionlib";

try {
  await api.get("/users");
} catch (error) {
  if (error instanceof ApiError) {
    console.log(error.status);  // HTTP status code
    console.log(error.code);    // Error code
    console.log(error.message); // Error message
  }
}

DatabaseError

Thrown by database helpers for connection and query errors.
import { DatabaseError } from "sorionlib";

try {
  await db.connect();
} catch (error) {
  if (error instanceof DatabaseError) {
    console.log(error.code);    // Error code
    console.log(error.message); // Error message
  }
}

ValidationError

Thrown when input validation fails.
import { ValidationError } from "sorionlib";

try {
  client.configure({ prefix: 123 }); // Invalid type
} catch (error) {
  if (error instanceof ValidationError) {
    console.log(error.field);   // Field that failed
    console.log(error.message); // Validation message
  }
}

Error codes

General errors

CodeDescription
UNKNOWN_ERRORAn unknown error occurred.
INVALID_CONFIGConfiguration is invalid.
NOT_INITIALIZEDClient not initialized.
ALREADY_INITIALIZEDClient already initialized.

API errors

CodeDescription
NETWORK_ERRORNetwork connection failed.
TIMEOUTRequest timed out.
UNAUTHORIZEDAuthentication failed (401).
FORBIDDENAccess denied (403).
NOT_FOUNDResource not found (404).
RATE_LIMITEDToo many requests (429).
SERVER_ERRORServer error (5xx).

Database errors

CodeDescription
CONNECTION_FAILEDFailed to connect to database.
CONNECTION_LOSTDatabase connection lost.
QUERY_FAILEDQuery execution failed.
DUPLICATE_KEYDuplicate key violation.
INVALID_QUERYQuery syntax is invalid.

Validation errors

CodeDescription
REQUIRED_FIELDRequired field is missing.
INVALID_TYPEField has wrong type.
INVALID_FORMATField format is invalid.
OUT_OF_RANGEValue is out of allowed range.

Handling examples

Basic error handling

import { Sorion, SorionError } from "sorionlib";

const client = new Sorion();

try {
  await client.start();
} catch (error) {
  if (error instanceof SorionError) {
    console.error(`Error [${error.code}]: ${error.message}`);
  } else {
    console.error("Unexpected error:", error);
  }
}

API error handling

import { ApiClient, ApiError } from "sorionlib";

const api = new ApiClient({ baseUrl: "https://api.example.com" });

async function fetchUser(id) {
  try {
    return await api.get(`/users/${id}`);
  } catch (error) {
    if (error instanceof ApiError) {
      switch (error.code) {
        case "NOT_FOUND":
          console.log("User not found");
          return null;
        case "UNAUTHORIZED":
          console.log("Please log in");
          throw error;
        case "RATE_LIMITED":
          console.log("Too many requests, retrying...");
          await sleep(1000);
          return fetchUser(id);
        default:
          throw error;
      }
    }
    throw error;
  }
}

Database error handling

import { MongoDB, DatabaseError } from "sorionlib";

const db = new MongoDB({ uri: "mongodb://localhost:27017", database: "myapp" });

async function createUser(data) {
  try {
    return await db.collection("users").create(data);
  } catch (error) {
    if (error instanceof DatabaseError) {
      if (error.code === "DUPLICATE_KEY") {
        throw new Error("User already exists");
      }
      if (error.code === "CONNECTION_LOST") {
        await db.reconnect();
        return createUser(data);
      }
    }
    throw error;
  }
}

Global error handler

import { Sorion } from "sorionlib";

const client = new Sorion();

client.on("error", (error) => {
  console.error(`[${error.code}] ${error.message}`);
  
  // Log to external service
  logger.error({
    code: error.code,
    message: error.message,
    stack: error.stack
  });
});

client.start();