Spaces:
Runtime error
Runtime error
import { base } from "$app/paths"; | |
import { PUBLIC_ORIGIN } from "$env/static/public"; | |
import { collections } from "$lib/server/database.js"; | |
import type { SharedConversation } from "$lib/types/SharedConversation.js"; | |
import { sha256 } from "$lib/utils/sha256.js"; | |
import { error } from "@sveltejs/kit"; | |
import { ObjectId } from "mongodb"; | |
import { nanoid } from "nanoid"; | |
export async function POST({ params, url, locals }) { | |
const conversation = await collections.conversations.findOne({ | |
_id: new ObjectId(params.id), | |
sessionId: locals.sessionId, | |
}); | |
if (!conversation) { | |
throw error(404, "Conversation not found"); | |
} | |
const hash = await sha256(JSON.stringify(conversation.messages)); | |
const existingShare = await collections.sharedConversations.findOne({ hash }); | |
if (existingShare) { | |
return new Response( | |
JSON.stringify({ | |
url: getShareUrl(url, existingShare._id), | |
}), | |
{ headers: { "Content-Type": "application/json" } } | |
); | |
} | |
const shared: SharedConversation = { | |
_id: nanoid(7), | |
createdAt: new Date(), | |
messages: conversation.messages, | |
hash, | |
updatedAt: new Date(), | |
title: conversation.title, | |
model: conversation.model, | |
}; | |
await collections.sharedConversations.insertOne(shared); | |
return new Response( | |
JSON.stringify({ | |
url: getShareUrl(url, shared._id), | |
}), | |
{ headers: { "Content-Type": "application/json" } } | |
); | |
} | |
function getShareUrl(url: URL, shareId: string): string { | |
return `${PUBLIC_ORIGIN || url.origin}${base}/r/${shareId}`; | |
} | |