Spaces:
Running
Running
| import { Elysia } from "elysia"; | |
| import { authPlugin } from "$api/authPlugin"; | |
| import { defaultModel } from "$lib/server/models"; | |
| import { collections } from "$lib/server/database"; | |
| import { authCondition } from "$lib/server/auth"; | |
| import { models, validateModel } from "$lib/server/models"; | |
| import { DEFAULT_SETTINGS, type SettingsEditable } from "$lib/types/Settings"; | |
| import { z } from "zod"; | |
| export const userGroup = new Elysia() | |
| .use(authPlugin) | |
| .get("/login", () => { | |
| // todo: login | |
| throw new Error("Not implemented"); | |
| }) | |
| .get("/login/callback", () => { | |
| // todo: login callback | |
| throw new Error("Not implemented"); | |
| }) | |
| .post("/logout", () => { | |
| // todo: logout | |
| throw new Error("Not implemented"); | |
| }) | |
| .group("/user", (app) => { | |
| return app | |
| .get("/", ({ locals }) => { | |
| return locals.user | |
| ? { | |
| id: locals.user._id.toString(), | |
| username: locals.user.username, | |
| avatarUrl: locals.user.avatarUrl, | |
| email: locals.user.email, | |
| isAdmin: locals.user.isAdmin ?? false, | |
| isEarlyAccess: locals.user.isEarlyAccess ?? false, | |
| } | |
| : null; | |
| }) | |
| .get("/settings", async ({ locals }) => { | |
| const settings = await collections.settings.findOne(authCondition(locals)); | |
| if (settings && !validateModel(models).safeParse(settings?.activeModel).success) { | |
| settings.activeModel = defaultModel.id; | |
| await collections.settings.updateOne(authCondition(locals), { | |
| $set: { activeModel: defaultModel.id }, | |
| }); | |
| } | |
| // if the model is unlisted, set the active model to the default model | |
| if ( | |
| settings?.activeModel && | |
| models.find((m) => m.id === settings?.activeModel)?.unlisted === true | |
| ) { | |
| settings.activeModel = defaultModel.id; | |
| await collections.settings.updateOne(authCondition(locals), { | |
| $set: { activeModel: defaultModel.id }, | |
| }); | |
| } | |
| // todo: get user settings | |
| return { | |
| welcomeModalSeen: !!settings?.welcomeModalSeenAt, | |
| welcomeModalSeenAt: settings?.welcomeModalSeenAt ?? null, | |
| activeModel: settings?.activeModel ?? DEFAULT_SETTINGS.activeModel, | |
| disableStream: settings?.disableStream ?? DEFAULT_SETTINGS.disableStream, | |
| directPaste: settings?.directPaste ?? DEFAULT_SETTINGS.directPaste, | |
| hidePromptExamples: settings?.hidePromptExamples ?? DEFAULT_SETTINGS.hidePromptExamples, | |
| shareConversationsWithModelAuthors: | |
| settings?.shareConversationsWithModelAuthors ?? | |
| DEFAULT_SETTINGS.shareConversationsWithModelAuthors, | |
| customPrompts: settings?.customPrompts ?? {}, | |
| multimodalOverrides: settings?.multimodalOverrides ?? {}, | |
| }; | |
| }) | |
| .post("/settings", async ({ locals, request }) => { | |
| const body = await request.json(); | |
| const { welcomeModalSeen, ...settings } = z | |
| .object({ | |
| shareConversationsWithModelAuthors: z | |
| .boolean() | |
| .default(DEFAULT_SETTINGS.shareConversationsWithModelAuthors), | |
| welcomeModalSeen: z.boolean().optional(), | |
| activeModel: z.string().default(DEFAULT_SETTINGS.activeModel), | |
| customPrompts: z.record(z.string()).default({}), | |
| multimodalOverrides: z.record(z.boolean()).default({}), | |
| disableStream: z.boolean().default(false), | |
| directPaste: z.boolean().default(false), | |
| hidePromptExamples: z.record(z.boolean()).default({}), | |
| }) | |
| .parse(body) satisfies SettingsEditable; | |
| // Tools removed: ignore tools updates | |
| await collections.settings.updateOne( | |
| authCondition(locals), | |
| { | |
| $set: { | |
| ...settings, | |
| ...(welcomeModalSeen && { welcomeModalSeenAt: new Date() }), | |
| updatedAt: new Date(), | |
| }, | |
| $setOnInsert: { | |
| createdAt: new Date(), | |
| }, | |
| }, | |
| { | |
| upsert: true, | |
| } | |
| ); | |
| // return ok response | |
| return new Response(); | |
| }) | |
| .get("/reports", async ({ locals }) => { | |
| if (!locals.user || !locals.sessionId) { | |
| return []; | |
| } | |
| const reports = await collections.reports | |
| .find({ | |
| createdBy: locals.user?._id ?? locals.sessionId, | |
| }) | |
| .toArray(); | |
| return reports; | |
| }); | |
| }); | |