diff options
Diffstat (limited to 'u/server/filter/json.ts')
-rw-r--r-- | u/server/filter/json.ts | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/u/server/filter/json.ts b/u/server/filter/json.ts index 527d483..bc53d47 100644 --- a/u/server/filter/json.ts +++ b/u/server/filter/json.ts @@ -15,30 +15,22 @@ export interface JsonTransformer<R, ParsedJson = unknown> { (json: ITraceable<ParsedJson, ServerTrace>): IEither<PenguenoError, R>; } -const ParseJsonMetric = Metric.fromName('JsonParse'); +const ParseJsonMetric = Metric.fromName('JsonParse').asResult(); export const jsonModel = <MessageT>(jsonTransformer: JsonTransformer<MessageT>): RequestFilter<MessageT> => (r: ITraceable<PenguenoRequest, ServerTrace>) => r - .bimap(TraceUtil.withFunctionTrace(jsonModel)) - .bimap(TraceUtil.withMetricTrace(ParseJsonMetric)) + .flatMap(TraceUtil.withFunctionTrace(jsonModel)) + .flatMap(TraceUtil.withMetricTrace(ParseJsonMetric)) .map((j) => - Either.fromFailableAsync<Error, MessageT>(<Promise<MessageT>>j.get().json()).then((either) => + Either.fromFailableAsync<Error, MessageT>(<Promise<MessageT>>j.get().req.json()).then((either) => either.mapLeft((errReason) => { - j.trace.addTrace(LogLevel.WARN).trace(errReason); + j.trace.traceScope(LogLevel.WARN).trace(errReason); return new PenguenoError('seems to be invalid JSON (>//<) can you fix?', 400); }), ), ) - .peek( - TraceUtil.promiseify((traceableEither) => - traceableEither - .get() - .fold(({ isLeft }) => - traceableEither.trace.trace(ParseJsonMetric[isLeft ? 'failure' : 'success']), - ), - ), - ) + .flatMapAsync(TraceUtil.promiseify(TraceUtil.traceResultingEither(ParseJsonMetric))) .map( TraceUtil.promiseify((traceableEitherJson) => traceableEitherJson |