Spaces:
Paused
Paused
| import { collections } from "$lib/server/database"; | |
| import { ObjectId } from "mongodb"; | |
| import { error } from "@sveltejs/kit"; | |
| import { authCondition } from "$lib/server/auth"; | |
| import { UrlDependency } from "$lib/types/UrlDependency"; | |
| import { convertLegacyConversation } from "$lib/utils/tree/convertLegacyConversation.js"; | |
| export const load = async ({ params, depends, locals }) => { | |
| let conversation; | |
| let shared = false; | |
| // if the conver | |
| if (params.id.length === 7) { | |
| // shared link of length 7 | |
| conversation = await collections.sharedConversations.findOne({ | |
| _id: params.id, | |
| }); | |
| shared = true; | |
| if (!conversation) { | |
| throw error(404, "Conversation not found"); | |
| } | |
| } else { | |
| // todo: add validation on params.id | |
| conversation = await collections.conversations.findOne({ | |
| _id: new ObjectId(params.id), | |
| ...authCondition(locals), | |
| }); | |
| depends(UrlDependency.Conversation); | |
| if (!conversation) { | |
| const conversationExists = | |
| (await collections.conversations.countDocuments({ | |
| _id: new ObjectId(params.id), | |
| })) !== 0; | |
| if (conversationExists) { | |
| throw error( | |
| 403, | |
| "You don't have access to this conversation. If someone gave you this link, ask them to use the 'share' feature instead." | |
| ); | |
| } | |
| throw error(404, "Conversation not found."); | |
| } | |
| } | |
| const convertedConv = { ...conversation, ...convertLegacyConversation(conversation) }; | |
| return { | |
| messages: convertedConv.messages, | |
| title: convertedConv.title, | |
| model: convertedConv.model, | |
| preprompt: convertedConv.preprompt, | |
| rootMessageId: convertedConv.rootMessageId, | |
| assistant: convertedConv.assistantId | |
| ? JSON.parse( | |
| JSON.stringify( | |
| await collections.assistants.findOne({ | |
| _id: new ObjectId(convertedConv.assistantId), | |
| }) | |
| ) | |
| ) | |
| : null, | |
| shared, | |
| }; | |
| }; | |