diff options
author | Elizabeth <lizhunt@amazon.com> | 2025-05-28 15:05:38 -0700 |
---|---|---|
committer | Elizabeth <lizhunt@amazon.com> | 2025-05-28 15:05:38 -0700 |
commit | 3005cc83e605fb89b079cf0e6fd0ec95cd27b30e (patch) | |
tree | 992c5933f2ec4a75e32469ddd772c61dbcb2e2fd /u/server | |
parent | e3cf820b07e282221502cf2f116c9780b7375e0e (diff) | |
download | ci-3005cc83e605fb89b079cf0e6fd0ec95cd27b30e.tar.gz ci-3005cc83e605fb89b079cf0e6fd0ec95cd27b30e.zip |
Run prettier, add zed settings
Diffstat (limited to 'u/server')
-rw-r--r-- | u/server/activity/fourohfour.ts | 8 | ||||
-rw-r--r-- | u/server/activity/health.ts | 58 | ||||
-rw-r--r-- | u/server/filter/json.ts | 69 | ||||
-rw-r--r-- | u/server/filter/method.ts | 40 | ||||
-rw-r--r-- | u/server/filter/mod.ts | 10 | ||||
-rw-r--r-- | u/server/request.ts | 19 | ||||
-rw-r--r-- | u/server/response.ts | 16 |
7 files changed, 108 insertions, 112 deletions
diff --git a/u/server/activity/fourohfour.ts b/u/server/activity/fourohfour.ts index 6449abd..c09aef6 100644 --- a/u/server/activity/fourohfour.ts +++ b/u/server/activity/fourohfour.ts @@ -23,13 +23,9 @@ export interface IFourOhFourActivity { } export class FourOhFourActivityImpl implements IFourOhFourActivity { - public fourOhFour( - req: ITraceable<PenguenoRequest, ServerTrace>, - ) { + public fourOhFour(req: ITraceable<PenguenoRequest, ServerTrace>) { return req - .move( - new JsonResponse(req, randomFourOhFour(), { status: 404 }), - ) + .move(new JsonResponse(req, randomFourOhFour(), { status: 404 })) .map((resp) => Promise.resolve(resp.get())) .get(); } diff --git a/u/server/activity/health.ts b/u/server/activity/health.ts index 0f54a99..83be399 100644 --- a/u/server/activity/health.ts +++ b/u/server/activity/health.ts @@ -23,45 +23,47 @@ export interface IHealthCheckActivity { } const healthCheckMetric = Metric.fromName("Health"); -export interface HealthChecker extends - Mapper< +export interface HealthChecker + extends Mapper< ITraceable<HealthCheckInput, ServerTrace>, Promise<IEither<Error, HealthCheckOutput>> > {} export class HealthCheckActivityImpl implements IHealthCheckActivity { - constructor( - private readonly check: HealthChecker, - ) {} + constructor(private readonly check: HealthChecker) {} public checkHealth(req: ITraceable<PenguenoRequest, ServerTrace>) { return req .bimap(TraceUtil.withFunctionTrace(this.checkHealth)) .bimap(TraceUtil.withMetricTrace(healthCheckMetric)) .flatMap((r) => r.move(HealthCheckInput.CHECK).map(this.check)) - .peek(TraceUtil.promiseify((h) => - h.get().fold((err) => { - if (err) { - h.trace.trace(healthCheckMetric.failure); - h.trace.addTrace(LogLevel.ERROR).trace(`${err}`); - return; - } - h.trace.trace(healthCheckMetric.success); - }) - )) - .map(TraceUtil.promiseify((h) => - h.get() - .mapBoth( - () => "oh no, i need to eat more vegetables (。•́︿•̀。)...", - () => "think im healthy!! (✿˘◡˘) ready to do work~", - ) - .fold((errMsg, okMsg) => - new JsonResponse( - req, - errMsg ?? okMsg, - { status: errMsg ? 500 : 200 }, + .peek( + TraceUtil.promiseify((h) => + h.get().fold((err) => { + if (err) { + h.trace.trace(healthCheckMetric.failure); + h.trace.addTrace(LogLevel.ERROR).trace(`${err}`); + return; + } + h.trace.trace(healthCheckMetric.success); + }), + ), + ) + .map( + TraceUtil.promiseify((h) => + h + .get() + .mapBoth( + () => "oh no, i need to eat more vegetables (。•́︿•̀。)...", + () => "think im healthy!! (✿˘◡˘) ready to do work~", ) - ) - )) + .fold( + (errMsg, okMsg) => + new JsonResponse(req, errMsg ?? okMsg, { + status: errMsg ? 500 : 200, + }), + ), + ), + ) .get(); } } 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(); diff --git a/u/server/filter/method.ts b/u/server/filter/method.ts index 6b0419d..9901c6f 100644 --- a/u/server/filter/method.ts +++ b/u/server/filter/method.ts @@ -20,22 +20,24 @@ type HttpMethod = | "TRACE" | "PATCH"; -export const requireMethod = ( - methods: Array<HttpMethod>, -): RequestFilter<HttpMethod> => -(req: ITraceable<PenguenoRequest, ServerTrace>) => - req.bimap(TraceUtil.withFunctionTrace(requireMethod)) - .move(Promise.resolve(req.get())) - .map(TraceUtil.promiseify((t) => { - const { method: _method } = t.get(); - const method = <HttpMethod> _method; - if (!methods.includes(method)) { - const msg = "that's not how you pet me (⋟﹏⋞)~"; - t.trace.addTrace(LogLevel.WARN).trace(msg); - return Either.left<PenguenoError, HttpMethod>( - new PenguenoError(msg, 405), - ); - } - return Either.right<PenguenoError, HttpMethod>(method); - })) - .get(); +export const requireMethod = + (methods: Array<HttpMethod>): RequestFilter<HttpMethod> => + (req: ITraceable<PenguenoRequest, ServerTrace>) => + req + .bimap(TraceUtil.withFunctionTrace(requireMethod)) + .move(Promise.resolve(req.get())) + .map( + TraceUtil.promiseify((t) => { + const { method: _method } = t.get(); + const method = <HttpMethod>_method; + if (!methods.includes(method)) { + const msg = "that's not how you pet me (⋟﹏⋞)~"; + t.trace.addTrace(LogLevel.WARN).trace(msg); + return Either.left<PenguenoError, HttpMethod>( + new PenguenoError(msg, 405), + ); + } + return Either.right<PenguenoError, HttpMethod>(method); + }), + ) + .get(); diff --git a/u/server/filter/mod.ts b/u/server/filter/mod.ts index bbf37df..3b247fc 100644 --- a/u/server/filter/mod.ts +++ b/u/server/filter/mod.ts @@ -13,11 +13,13 @@ export enum ErrorSource { export class PenguenoError extends Error { public readonly source: ErrorSource; - constructor(message: string, public readonly status: number) { + constructor( + message: string, + public readonly status: number, + ) { super(message); - this.source = Math.floor(status / 100) === 4 - ? ErrorSource.USER - : ErrorSource.SYSTEM; + this.source = + Math.floor(status / 100) === 4 ? ErrorSource.USER : ErrorSource.SYSTEM; } } diff --git a/u/server/request.ts b/u/server/request.ts index 7aa9917..480ee69 100644 --- a/u/server/request.ts +++ b/u/server/request.ts @@ -33,25 +33,16 @@ export class PenguenoRequest extends Request { ServerResponseTime, DeltaTime, Hai: penguenoGreeting(), - }).reduce((acc, [key, val]) => ({ ...acc, [key]: (val.toString()) }), {}); + }).reduce((acc, [key, val]) => ({ ...acc, [key]: val.toString() }), {}); } - public static from( - request: Request, - ): LogMetricTraceable<PenguenoRequest> { + public static from(request: Request): LogMetricTraceable<PenguenoRequest> { const id = crypto.randomUUID(); const url = new URL(request.url); const { pathname } = url; const traceSupplier = () => `[${id} <- ${request.method}'d @ ${pathname}]`; - return LogMetricTraceable - .from( - new PenguenoRequest( - url, - { ...request }, - id, - new Date(), - ), - ) - .bimap((_request) => [_request.get(), traceSupplier]); + return LogMetricTraceable.from( + new PenguenoRequest(url, { ...request }, id, new Date()), + ).bimap((_request) => [_request.get(), traceSupplier]); } } diff --git a/u/server/response.ts b/u/server/response.ts index c21819a..9022fed 100644 --- a/u/server/response.ts +++ b/u/server/response.ts @@ -20,19 +20,19 @@ const getResponse = ( return { ...opts, headers: { - ...(req.baseResponseHeaders()), - ...(opts?.headers), - "Content-Type": (opts?.headers?.["Content-Type"] ?? "text/plain") + - "; charset=utf-8", + ...req.baseResponseHeaders(), + ...opts?.headers, + "Content-Type": + (opts?.headers?.["Content-Type"] ?? "text/plain") + "; charset=utf-8", }, }; }; const ResponseCodeMetrics = [1, 2, 3, 4, 5].map((x) => - Metric.fromName(`response.${x}xx`) + Metric.fromName(`response.${x}xx`), ); export const getResponseMetric = (status: number) => { - const index = (Math.floor(status / 100)) + 1; + const index = Math.floor(status / 100) + 1; return ResponseCodeMetrics[index] ?? ResponseCodeMetrics[5 - 1]; }; @@ -67,7 +67,7 @@ export class JsonResponse extends PenguenoResponse { super( req, JSON.stringify( - e.fold((err, ok) => err ? ({ error: err! }) : ({ ok: ok! })), + e.fold((err, ok) => (err ? { error: err! } : { ok: ok! })), ), optsWithJsonContentType, ); @@ -76,7 +76,7 @@ export class JsonResponse extends PenguenoResponse { super( req, JSON.stringify( - (Math.floor(opts.status / 100) < 4) ? { ok: e } : { error: e }, + Math.floor(opts.status / 100) < 4 ? { ok: e } : { error: e }, ), optsWithJsonContentType, ); |