import { base } from "$app/paths"; import { SHARE_BASE_URL } from "$env/static/private"; 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: url.origin + `${base}/r/${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, }; await collections.sharedConversations.insertOne(shared); return new Response( JSON.stringify({ url: (SHARE_BASE_URL || `${url.origin}${base}`) + `/r/${shared._id}`, }), { headers: { "Content-Type": "application/json" } } ); }