diff options
Diffstat (limited to 'u/server/filter/mod.ts')
-rw-r--r-- | u/server/filter/mod.ts | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/u/server/filter/mod.ts b/u/server/filter/mod.ts index 22ddad5..bbf37df 100644 --- a/u/server/filter/mod.ts +++ b/u/server/filter/mod.ts @@ -1,13 +1,29 @@ -import type { - IEither, - ITraceable, - PenguenoRequest, - ServerTrace, +import { + type IEither, + type ITraceable, + LogLevel, + type PenguenoRequest, + type ServerTrace, } from "@emprespresso/pengueno"; +export enum ErrorSource { + USER = LogLevel.WARN, + SYSTEM = LogLevel.ERROR, +} + +export class PenguenoError extends Error { + public readonly source: ErrorSource; + constructor(message: string, public readonly status: number) { + super(message); + this.source = Math.floor(status / 100) === 4 + ? ErrorSource.USER + : ErrorSource.SYSTEM; + } +} + export interface RequestFilter< T, - Err, + Err extends PenguenoError = PenguenoError, RIn = ITraceable<PenguenoRequest, ServerTrace>, > { (req: RIn): Promise<IEither<Err, T>>; |