studiocms
Version:
Astro Native CMS for AstroDB. Built from the ground up by the Astro community.
57 lines (56 loc) • 2.13 kB
JavaScript
import { apiResponseLogger } from "studiocms:logger";
import { SDKCore } from "studiocms:sdk";
import {
AllResponse,
createEffectAPIRoutes,
createJsonResponse,
Effect,
genLogger,
OptionsResponse,
readAPIContextJson
} from "../../../effect.js";
const { POST, OPTIONS, ALL } = createEffectAPIRoutes(
{
POST: (ctx) => genLogger("studiocms/routes/api/dashboard/email-notification-settings-site.POST")(
function* () {
const sdk = yield* SDKCore;
const userData = ctx.locals.StudioCMS.security?.userSessionData;
if (!userData?.isLoggedIn) {
return apiResponseLogger(403, "Unauthorized");
}
const isAuthorized = ctx.locals.StudioCMS.security?.userPermissionLevel.isOwner;
if (!isAuthorized) {
return apiResponseLogger(403, "Unauthorized");
}
yield* readAPIContextJson(ctx).pipe(
Effect.map((raw) => {
const rawData = raw ?? {};
const safe = {
emailVerification: typeof rawData.emailVerification === "boolean" ? rawData.emailVerification : void 0,
requireAdminVerification: typeof rawData.requireAdminVerification === "boolean" ? rawData.requireAdminVerification : void 0,
requireEditorVerification: typeof rawData.requireEditorVerification === "boolean" ? rawData.requireEditorVerification : void 0,
oAuthBypassVerification: typeof rawData.oAuthBypassVerification === "boolean" ? rawData.oAuthBypassVerification : void 0
};
return safe;
}),
Effect.flatMap((data) => sdk.notificationSettings.site.update(data))
);
return apiResponseLogger(200, "Notification settings updated");
}
),
OPTIONS: () => Effect.try(() => OptionsResponse({ allowedMethods: ["POST"] })),
ALL: () => Effect.try(() => AllResponse())
},
{
cors: { methods: ["POST", "OPTIONS"] },
onError: (error) => {
console.error("API Error:", error);
return createJsonResponse({ error: "Internal Server Error" }, { status: 500 });
}
}
);
export {
ALL,
OPTIONS,
POST
};