summaryrefslogtreecommitdiff
path: root/u/server/filter/json.ts
diff options
context:
space:
mode:
Diffstat (limited to 'u/server/filter/json.ts')
-rw-r--r--u/server/filter/json.ts69
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();