Spaces:
Running
Running
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, | |
}; | |
}; | |