@eka-care/patient-ts-sdk
Version:
TypeScript SDK for Trinity Patient Profile Management System
118 lines (117 loc) • 3.26 kB
JavaScript
/**
* Custom error classes for the Trinity Profiles SDK
*/
/**
* Base class for all SDK errors
*/
export class TrinitySDKError extends Error {
constructor(message, statusCode, response) {
super(message);
this.name = this.constructor.name;
this.statusCode = statusCode;
this.response = response;
// Maintains proper stack trace for where our error was thrown
if (Error.captureStackTrace) {
Error.captureStackTrace(this, this.constructor);
}
}
}
/**
* Authentication error (401)
*/
export class AuthenticationError extends TrinitySDKError {
constructor(message = "Authentication failed", response) {
super(message, 401, response);
}
}
/**
* Authorization error (403)
*/
export class AuthorizationError extends TrinitySDKError {
constructor(message = "Access denied", response) {
super(message, 403, response);
}
}
/**
* Validation error (400)
*/
export class ValidationError extends TrinitySDKError {
constructor(message, response, validationErrors) {
super(message, 400, response);
this.validationErrors = validationErrors;
}
}
/**
* Not found error (404)
*/
export class NotFoundError extends TrinitySDKError {
constructor(message = "Resource not found", response) {
super(message, 404, response);
}
}
/**
* Conflict error (409)
*/
export class ConflictError extends TrinitySDKError {
constructor(message = "Resource conflict", response) {
super(message, 409, response);
}
}
/**
* Server error (5xx)
*/
export class ServerError extends TrinitySDKError {
constructor(message = "Internal server error", statusCode = 500, response) {
super(message, statusCode, response);
}
}
/**
* Network error (connection issues)
*/
export class NetworkError extends TrinitySDKError {
constructor(message = "Network error", response) {
super(message, 0, response);
}
}
/**
* Timeout error
*/
export class TimeoutError extends TrinitySDKError {
constructor(message = "Request timeout", response) {
super(message, 408, response);
}
}
/**
* Rate limit error (429)
*/
export class RateLimitError extends TrinitySDKError {
constructor(message = "Rate limit exceeded", response) {
super(message, 429, response);
}
}
/**
* Create appropriate error based on HTTP status code
*/
export function createErrorFromResponse(statusCode, message, response) {
switch (statusCode) {
case 400:
return new ValidationError(message, response);
case 401:
return new AuthenticationError(message, response);
case 403:
return new AuthorizationError(message, response);
case 404:
return new NotFoundError(message, response);
case 408:
return new TimeoutError(message, response);
case 409:
return new ConflictError(message, response);
case 429:
return new RateLimitError(message, response);
default:
if (statusCode >= 500) {
return new ServerError(message, statusCode, response);
}
return new TrinitySDKError(message, statusCode, response);
}
}