|
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' } } |
|
); |
|
} |
|
|