studiocms
Version:
Astro Native CMS for AstroDB. Built from the ground up by the Astro community.
53 lines (52 loc) • 1.69 kB
JavaScript
import { AstroError } from "astro/errors";
import { z } from "astro/zod";
import {
createJsonResponse,
Effect,
genLogger,
parseFormDataEntryToString,
readAPIContextFormData,
readAPIContextJson,
Schema
} from "../../../effect.js";
class FormDataEntryFields extends Schema.Class("FormDataEntryFields")({
title: Schema.String,
description: Schema.String
}) {
}
class AuthAPIUtils extends Effect.Service()(
"studiocms/routes/api/auth/shared/AuthAPIUtils",
{
effect: genLogger("studiocms/routes/api/auth/shared/AuthAPIUtils.effect")(function* () {
return {
parseFormDataEntryToString,
// biome-ignore lint/suspicious/noExplicitAny: This is a generic utility function
readJson: (context) => readAPIContextJson(context),
readFormData: (context) => readAPIContextFormData(context),
badFormDataEntry: (title, description) => genLogger("studiocms/routes/api/auth/shared/AuthAPIUtils.badFormDataEntry")(function* () {
const error = yield* Schema.decode(FormDataEntryFields)({ title, description });
return createJsonResponse(
{ error },
{
status: 400,
statusText: "Bad Request"
}
);
}),
validateEmail: (email) => Effect.try({
try: () => {
const emailSchema = z.coerce.string().email({ message: "Email address is invalid" });
return emailSchema.safeParse(email);
},
catch: () => new AstroError("Failed to parse email with zod.")
})
};
})
}
) {
static Provide = Effect.provide(this.Default);
}
export {
AuthAPIUtils,
FormDataEntryFields
};