summaryrefslogtreecommitdiff
path: root/hooks/server
diff options
context:
space:
mode:
authorElizabeth Hunt <lizhunt@amazon.com>2025-05-13 18:58:45 -0700
committerElizabeth Hunt <lizhunt@amazon.com>2025-05-13 18:58:54 -0700
commit1d66a0f58e4ebcdf4f42c9d78f82a1ab49a2cf11 (patch)
tree07073c060b61688e4635fd4658315cc683589d3d /hooks/server
parent2543ac8b11af11f034836591046cdb52911f9403 (diff)
downloadci-1d66a0f58e4ebcdf4f42c9d78f82a1ab49a2cf11.tar.gz
ci-1d66a0f58e4ebcdf4f42c9d78f82a1ab49a2cf11.zip
snapshot!
Diffstat (limited to 'hooks/server')
-rw-r--r--hooks/server/activity/health.ts0
-rw-r--r--hooks/server/activity/hook.ts0
-rw-r--r--hooks/server/activity/mod.ts8
-rw-r--r--hooks/server/filter/json.ts25
-rw-r--r--hooks/server/filter/method.ts22
-rw-r--r--hooks/server/filter/mod.ts18
-rw-r--r--hooks/server/mod.ts0
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