Spaces:
Runtime error
Runtime error
File size: 1,503 Bytes
5da61b4 923e0f4 5da61b4 fc15a4c 5da61b4 fc15a4c 5da61b4 fc15a4c 76d4779 fc15a4c 76d4779 fc15a4c 17a481a fc15a4c 5da61b4 fc15a4c 76d4779 5da61b4 06e879d fc15a4c 76d4779 fc15a4c 17a481a fc15a4c 5da61b4 fc15a4c 17a481a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
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}`;
}
|