| | const express = require('express'); |
| | const { isEnabled } = require('@librechat/api'); |
| | const { logger } = require('@librechat/data-schemas'); |
| | const { |
| | getSharedMessages, |
| | createSharedLink, |
| | updateSharedLink, |
| | deleteSharedLink, |
| | getSharedLinks, |
| | getSharedLink, |
| | } = require('~/models'); |
| | const requireJwtAuth = require('~/server/middleware/requireJwtAuth'); |
| | const router = express.Router(); |
| |
|
| | |
| | |
| | |
| | const allowSharedLinks = |
| | process.env.ALLOW_SHARED_LINKS === undefined || isEnabled(process.env.ALLOW_SHARED_LINKS); |
| |
|
| | if (allowSharedLinks) { |
| | const allowSharedLinksPublic = |
| | process.env.ALLOW_SHARED_LINKS_PUBLIC === undefined || |
| | isEnabled(process.env.ALLOW_SHARED_LINKS_PUBLIC); |
| | router.get( |
| | '/:shareId', |
| | allowSharedLinksPublic ? (req, res, next) => next() : requireJwtAuth, |
| | async (req, res) => { |
| | try { |
| | const share = await getSharedMessages(req.params.shareId); |
| |
|
| | if (share) { |
| | res.status(200).json(share); |
| | } else { |
| | res.status(404).end(); |
| | } |
| | } catch (error) { |
| | logger.error('Error getting shared messages:', error); |
| | res.status(500).json({ message: 'Error getting shared messages' }); |
| | } |
| | }, |
| | ); |
| | } |
| |
|
| | |
| | |
| | |
| | router.get('/', requireJwtAuth, async (req, res) => { |
| | try { |
| | const params = { |
| | pageParam: req.query.cursor, |
| | pageSize: Math.max(1, parseInt(req.query.pageSize) || 10), |
| | isPublic: isEnabled(req.query.isPublic), |
| | sortBy: ['createdAt', 'title'].includes(req.query.sortBy) ? req.query.sortBy : 'createdAt', |
| | sortDirection: ['asc', 'desc'].includes(req.query.sortDirection) |
| | ? req.query.sortDirection |
| | : 'desc', |
| | search: req.query.search ? decodeURIComponent(req.query.search.trim()) : undefined, |
| | }; |
| |
|
| | const result = await getSharedLinks( |
| | req.user.id, |
| | params.pageParam, |
| | params.pageSize, |
| | params.isPublic, |
| | params.sortBy, |
| | params.sortDirection, |
| | params.search, |
| | ); |
| |
|
| | res.status(200).send({ |
| | links: result.links, |
| | nextCursor: result.nextCursor, |
| | hasNextPage: result.hasNextPage, |
| | }); |
| | } catch (error) { |
| | logger.error('Error getting shared links:', error); |
| | res.status(500).json({ |
| | message: 'Error getting shared links', |
| | error: error.message, |
| | }); |
| | } |
| | }); |
| |
|
| | router.get('/link/:conversationId', requireJwtAuth, async (req, res) => { |
| | try { |
| | const share = await getSharedLink(req.user.id, req.params.conversationId); |
| |
|
| | return res.status(200).json({ |
| | success: share.success, |
| | shareId: share.shareId, |
| | conversationId: req.params.conversationId, |
| | }); |
| | } catch (error) { |
| | logger.error('Error getting shared link:', error); |
| | res.status(500).json({ message: 'Error getting shared link' }); |
| | } |
| | }); |
| |
|
| | router.post('/:conversationId', requireJwtAuth, async (req, res) => { |
| | try { |
| | const { targetMessageId } = req.body; |
| | const created = await createSharedLink(req.user.id, req.params.conversationId, targetMessageId); |
| | if (created) { |
| | res.status(200).json(created); |
| | } else { |
| | res.status(404).end(); |
| | } |
| | } catch (error) { |
| | logger.error('Error creating shared link:', error); |
| | res.status(500).json({ message: 'Error creating shared link' }); |
| | } |
| | }); |
| |
|
| | router.patch('/:shareId', requireJwtAuth, async (req, res) => { |
| | try { |
| | const updatedShare = await updateSharedLink(req.user.id, req.params.shareId); |
| | if (updatedShare) { |
| | res.status(200).json(updatedShare); |
| | } else { |
| | res.status(404).end(); |
| | } |
| | } catch (error) { |
| | logger.error('Error updating shared link:', error); |
| | res.status(500).json({ message: 'Error updating shared link' }); |
| | } |
| | }); |
| |
|
| | router.delete('/:shareId', requireJwtAuth, async (req, res) => { |
| | try { |
| | const result = await deleteSharedLink(req.user.id, req.params.shareId); |
| |
|
| | if (!result) { |
| | return res.status(404).json({ message: 'Share not found' }); |
| | } |
| |
|
| | return res.status(200).json(result); |
| | } catch (error) { |
| | logger.error('Error deleting shared link:', error); |
| | return res.status(400).json({ message: 'Error deleting shared link' }); |
| | } |
| | }); |
| |
|
| | module.exports = router; |
| |
|