UNPKG

studiocms

Version:

Astro Native CMS for AstroDB. Built from the ground up by the Astro community.

57 lines (56 loc) 2.13 kB
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 };