diff options
Diffstat (limited to 'lib/server/filter/index.ts')
-rw-r--r-- | lib/server/filter/index.ts | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/lib/server/filter/index.ts b/lib/server/filter/index.ts new file mode 100644 index 0000000..509deb3 --- /dev/null +++ b/lib/server/filter/index.ts @@ -0,0 +1,34 @@ +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( + override readonly message: string, + public readonly status: number, + ) { + super(message); + this.source = Math.floor(status / 100) === 4 ? ErrorSource.USER : ErrorSource.SYSTEM; + } +} + +export interface RequestFilter< + T, + Err extends PenguenoError = PenguenoError, + RIn = ITraceable<PenguenoRequest, ServerTrace>, +> { + (req: RIn): IEither<Err, T> | Promise<IEither<Err, T>>; +} + +export * from './method'; +export * from './json'; |