import { Either, HttpMethod, IEither, type ITraceable, LogLevel, PenguenoError, type PenguenoRequest, type RequestFilter, type ServerTrace, TraceUtil, } from '@emprespresso/pengueno'; export const requireMethod = (methods: Array): RequestFilter => (req: ITraceable) => req .flatMap(TraceUtil.withFunctionTrace(requireMethod)) .map((t): IEither => { const { req: { method }, } = t.get(); if (!methods.includes(method)) { const msg = "that's not how you pet me (â‹Ÿīšâ‹ž)~"; t.trace.traceScope(LogLevel.WARN).trace(msg); return Either.left(new PenguenoError(msg, 405)); } return Either.right(method); }) .get();