diff options
author | Elizabeth Hunt <lizhunt@amazon.com> | 2025-05-13 18:58:45 -0700 |
---|---|---|
committer | Elizabeth Hunt <lizhunt@amazon.com> | 2025-05-13 18:58:54 -0700 |
commit | 1d66a0f58e4ebcdf4f42c9d78f82a1ab49a2cf11 (patch) | |
tree | 07073c060b61688e4635fd4658315cc683589d3d /hooks/server | |
parent | 2543ac8b11af11f034836591046cdb52911f9403 (diff) | |
download | ci-1d66a0f58e4ebcdf4f42c9d78f82a1ab49a2cf11.tar.gz ci-1d66a0f58e4ebcdf4f42c9d78f82a1ab49a2cf11.zip |
snapshot!
Diffstat (limited to 'hooks/server')
-rw-r--r-- | hooks/server/activity/health.ts | 0 | ||||
-rw-r--r-- | hooks/server/activity/hook.ts | 0 | ||||
-rw-r--r-- | hooks/server/activity/mod.ts | 8 | ||||
-rw-r--r-- | hooks/server/filter/json.ts | 25 | ||||
-rw-r--r-- | hooks/server/filter/method.ts | 22 | ||||
-rw-r--r-- | hooks/server/filter/mod.ts | 18 | ||||
-rw-r--r-- | hooks/server/mod.ts | 0 |
7 files changed, 73 insertions, 0 deletions
diff --git a/hooks/server/activity/health.ts b/hooks/server/activity/health.ts new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/hooks/server/activity/health.ts diff --git a/hooks/server/activity/hook.ts b/hooks/server/activity/hook.ts new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/hooks/server/activity/hook.ts diff --git a/hooks/server/activity/mod.ts b/hooks/server/activity/mod.ts new file mode 100644 index 0000000..0dee57b --- /dev/null +++ b/hooks/server/activity/mod.ts @@ -0,0 +1,8 @@ +import type { RequestFilter } from "../filter/mod.ts"; + +export class r200 extends Response { + public override readonly status = 200; +} + +export interface IActivity extends RequestFilter<r200> { +} diff --git a/hooks/server/filter/json.ts b/hooks/server/filter/json.ts new file mode 100644 index 0000000..bcdd3ee --- /dev/null +++ b/hooks/server/filter/json.ts @@ -0,0 +1,25 @@ +import { Either, type IEither, type Traceable } from "@emprespresso/utils"; +import type { RequestFilter } from "./mod.ts"; + +type JsonTransformer<JsonT, R> = ( + json: Traceable<JsonT>, +) => IEither<Error, R>; +export const json = <BodyT, JsonT = unknown>( + jsonTransformer: JsonTransformer<JsonT, BodyT>, +): RequestFilter<BodyT> => +async (r: Traceable<Request>) => { + const { item: request, logger: _logger } = r; + const logger = _logger.addTracer(() => "[jsonVerification]"); + + const getJson = request.json().catch((errReason) => { + const err = "seems to be invalid JSON (>//<) can you fix?"; + logger.warn(err, errReason); + return new Error(err); + }); + return (await Either.fromAsync<Error, JsonT>(getJson)) + .mapRight(r.move).flatMap(jsonTransformer) + .mapLeft((err) => { + logger.warn(err); + return new Response(err.message, { status: 400 }); + }); +}; diff --git a/hooks/server/filter/method.ts b/hooks/server/filter/method.ts new file mode 100644 index 0000000..07fa5ee --- /dev/null +++ b/hooks/server/filter/method.ts @@ -0,0 +1,22 @@ +import { Either, type Traceable } from "@liz-ci/utils"; +import type { RequestFilter } from "./mod.ts"; + +type HttpMethod = "POST" | "GET" | "HEAD" | "PUT" | "DELETE"; +export const requireMethod = + (methods: Array<HttpMethod>): RequestFilter<HttpMethod> => + (req: Traceable<Request>) => { + const { item: request, logger: _logger } = req; + const logger = _logger.addTracer(() => "[aPost]"); + + const { method: _method } = request; + const method = <HttpMethod> _method; + if (!methods.includes(method)) { + const msg = "that's not how you pet me (âīšâ)~"; + logger.warn(msg); + return Promise.resolve(Either.left<Response, HttpMethod>( + new Response(msg + "\n", { status: 405 }), + )); + } + + return Promise.resolve(Either.right(method)); + }; diff --git a/hooks/server/filter/mod.ts b/hooks/server/filter/mod.ts new file mode 100644 index 0000000..bedc678 --- /dev/null +++ b/hooks/server/filter/mod.ts @@ -0,0 +1,18 @@ +import type { + IEither, + ITraceable, + ITraceableLogger, + TraceableLogger, +} from "@liz-ci/utils"; + +export interface RequestFilter< + T, + L extends ITraceableLogger<L> = TraceableLogger, + RIn = ITraceable<Request, L>, + Err = Response, +> { + (req: RIn): Promise<IEither<Err, T>>; +} + +export * from "./method.ts"; +export * from "./json.ts"; diff --git a/hooks/server/mod.ts b/hooks/server/mod.ts new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/hooks/server/mod.ts |