|
import { base } from "$app/paths"; |
|
import { collections } from "$lib/server/database"; |
|
import { redirect } from "@sveltejs/kit"; |
|
import { z } from "zod"; |
|
import { models, validateModel } from "$lib/server/models"; |
|
import { authCondition } from "$lib/server/auth"; |
|
import { DEFAULT_SETTINGS } from "$lib/types/Settings"; |
|
|
|
export const actions = { |
|
default: async function ({ request, locals }) { |
|
const formData = await request.formData(); |
|
|
|
const { ethicsModalAccepted, ...settings } = z |
|
.object({ |
|
shareConversationsWithModelAuthors: z |
|
.boolean({ coerce: true }) |
|
.default(DEFAULT_SETTINGS.shareConversationsWithModelAuthors), |
|
ethicsModalAccepted: z.boolean({ coerce: true }).optional(), |
|
activeModel: validateModel(models), |
|
customPrompts: z.record(z.string()).default({}), |
|
}) |
|
.parse({ |
|
shareConversationsWithModelAuthors: formData.get("shareConversationsWithModelAuthors"), |
|
ethicsModalAccepted: formData.get("ethicsModalAccepted"), |
|
activeModel: formData.get("activeModel") ?? DEFAULT_SETTINGS.activeModel, |
|
customPrompts: JSON.parse(formData.get("customPrompts")?.toString() ?? "{}"), |
|
}); |
|
|
|
await collections.settings.updateOne( |
|
authCondition(locals), |
|
{ |
|
$set: { |
|
...settings, |
|
...(ethicsModalAccepted && { ethicsModalAcceptedAt: new Date() }), |
|
updatedAt: new Date(), |
|
}, |
|
$setOnInsert: { |
|
createdAt: new Date(), |
|
}, |
|
}, |
|
{ |
|
upsert: true, |
|
} |
|
); |
|
throw redirect(303, request.headers.get("referer") || `${base}/`); |
|
}, |
|
}; |
|
|