diff options
Diffstat (limited to 'u/server/filter/json.ts')
-rw-r--r-- | u/server/filter/json.ts | 69 |
1 files changed, 36 insertions, 33 deletions
diff --git a/u/server/filter/json.ts b/u/server/filter/json.ts index 4a2961e..79eabac 100644 --- a/u/server/filter/json.ts +++ b/u/server/filter/json.ts @@ -16,36 +16,39 @@ export interface JsonTransformer<R, ParsedJson = unknown> { } const ParseJsonMetric = Metric.fromName("JsonParse"); -export const jsonModel = <MessageT>( - jsonTransformer: JsonTransformer<MessageT>, -): RequestFilter<MessageT> => -(r: ITraceable<PenguenoRequest, ServerTrace>) => - r.bimap(TraceUtil.withMetricTrace(ParseJsonMetric)) - .map((j) => - Either.fromFailableAsync<Error, MessageT>(j.get().json()) - .then((either) => - either.mapLeft((errReason) => { - j.trace.addTrace(LogLevel.WARN).trace(`${errReason}`); - return new PenguenoError( - "seems to be invalid JSON (>//<) can you fix?", - 400, - ); - }) - ) - ) - .peek( - TraceUtil.promiseify((traceableEither) => - traceableEither.get().mapBoth( - () => traceableEither.trace.trace(ParseJsonMetric.failure), - () => traceableEither.trace.trace(ParseJsonMetric.success), - ) - ), - ) - .map( - TraceUtil.promiseify((traceableEitherJson) => - traceableEitherJson.get() - .mapRight(traceableEitherJson.move) - .flatMap(jsonTransformer) - ), - ) - .get(); +export const jsonModel = + <MessageT>( + jsonTransformer: JsonTransformer<MessageT>, + ): RequestFilter<MessageT> => + (r: ITraceable<PenguenoRequest, ServerTrace>) => + r + .bimap(TraceUtil.withMetricTrace(ParseJsonMetric)) + .map((j) => + Either.fromFailableAsync<Error, MessageT>(j.get().json()).then( + (either) => + either.mapLeft((errReason) => { + j.trace.addTrace(LogLevel.WARN).trace(`${errReason}`); + return new PenguenoError( + "seems to be invalid JSON (>//<) can you fix?", + 400, + ); + }), + ), + ) + .peek( + TraceUtil.promiseify((traceableEither) => + traceableEither.get().mapBoth( + () => traceableEither.trace.trace(ParseJsonMetric.failure), + () => traceableEither.trace.trace(ParseJsonMetric.success), + ), + ), + ) + .map( + TraceUtil.promiseify((traceableEitherJson) => + traceableEitherJson + .get() + .mapRight(traceableEitherJson.move) + .flatMap(jsonTransformer), + ), + ) + .get(); |