123 lines
4.1 KiB
TypeScript
123 lines
4.1 KiB
TypeScript
/**
|
|
* Error thrown when an expected event is missing from the event store.
|
|
*
|
|
* This occurs when an event type has not been registered or cannot be found
|
|
* within the event store instance.
|
|
*
|
|
* @property type - The type of error, always `"EventMissingError"`.
|
|
*/
|
|
export class EventMissingError extends Error {
|
|
readonly type = "EventMissingError";
|
|
|
|
constructor(type: string) {
|
|
super(`EventStore Error: Event '${type}' has not been registered with the event store instance.`);
|
|
}
|
|
}
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------------
|
|
| Event Errors
|
|
|--------------------------------------------------------------------------------
|
|
*/
|
|
|
|
/**
|
|
* Error thrown when an event fails validation checks.
|
|
*
|
|
* This error indicates that an invalid event was provided during an insertion
|
|
* process.
|
|
*
|
|
* @property type - Type of error, always `"EventValidationError"`.
|
|
* @property errors - List of issues during validation.
|
|
*/
|
|
export class EventValidationError extends Error {
|
|
readonly type = "EventValidationError";
|
|
|
|
constructor(
|
|
readonly event: any,
|
|
readonly errors: string[],
|
|
) {
|
|
super([`✖ Failed to validate '${event.type}' event!`, ...errors].join("\n"));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Error thrown when an event fails to be inserted into the event store.
|
|
*
|
|
* This error occurs when an issue arises during the insertion of an
|
|
* event into storage, such as a constraint violation or storage failure.
|
|
*
|
|
* @property type - The type of error, always `"EventInsertionError"`.
|
|
*/
|
|
export class EventInsertionError extends Error {
|
|
readonly type = "EventInsertionError";
|
|
}
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------------
|
|
| Hybrid Logical Clock Errors
|
|
|--------------------------------------------------------------------------------
|
|
*/
|
|
|
|
/**
|
|
* Error thrown when a forward time jump exceeds the allowed tolerance in a Hybrid Logical Clock (HLC).
|
|
*
|
|
* This error occurs when the system detects a time jump beyond the configured tolerance,
|
|
* which may indicate clock synchronization issues in a distributed system.
|
|
*
|
|
* @property type - The type of error, always `"ForwardJumpError"`.
|
|
* @property timejump - The detected forward time jump in milliseconds.
|
|
* @property tolerance - The allowed maximum time jump tolerance in milliseconds.
|
|
*/
|
|
export class HLCForwardJumpError extends Error {
|
|
readonly type = "ForwardJumpError";
|
|
|
|
constructor(
|
|
readonly timejump: number,
|
|
readonly tolerance: number,
|
|
) {
|
|
super(`HLC Violation: Detected a forward time jump of ${timejump}ms, which exceed the allowed tolerance of ${tolerance}ms.`);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Error thrown when the received HLC timestamp is ahead of the system's wall time beyond the allowed offset.
|
|
*
|
|
* This error ensures that timestamps do not drift too far ahead of real time,
|
|
* preventing inconsistencies in distributed event ordering.
|
|
*
|
|
* @property type - The type of error, always `"ClockOffsetError"`.
|
|
* @property offset - The difference between the received time and the system's wall time in milliseconds.
|
|
* @property maxOffset - The maximum allowed clock offset in milliseconds.
|
|
*/
|
|
export class HLCClockOffsetError extends Error {
|
|
readonly type = "ClockOffsetError";
|
|
|
|
constructor(
|
|
readonly offset: number,
|
|
readonly maxOffset: number,
|
|
) {
|
|
super(`HLC Violation: Received time is ${offset}ms ahead of the wall time, exceeding the 'maxOffset' limit of ${maxOffset}ms.`);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Error thrown when the Hybrid Logical Clock (HLC) wall time exceeds the defined maximum limit.
|
|
*
|
|
* This error prevents time overflow issues that could lead to incorrect event ordering
|
|
* in a distributed system.
|
|
*
|
|
* @property type - The type of error, always `"WallTimeOverflowError"`.
|
|
* @property time - The current HLC wall time in milliseconds.
|
|
* @property maxTime - The maximum allowed HLC wall time in milliseconds.
|
|
*/
|
|
export class HLCWallTimeOverflowError extends Error {
|
|
readonly type = "WallTimeOverflowError";
|
|
|
|
constructor(
|
|
readonly time: number,
|
|
readonly maxTime: number,
|
|
) {
|
|
super(`HLC Violation: Wall time ${time}ms exceeds the max time of ${maxTime}ms.`);
|
|
}
|
|
}
|