apps/chat/src/pages/api/share/details.ts (55 lines of code) (raw):

import { NextApiRequest, NextApiResponse } from 'next'; import { getServerSession } from 'next-auth'; import { getToken } from 'next-auth/jwt'; import { validateInvitationId } from '@/src/utils/app/share'; import { validateServerSession } from '@/src/utils/auth/session'; import { getApiHeaders } from '@/src/utils/server/get-headers'; import { logger } from '@/src/utils/server/logger'; import { DialAIError } from '@/src/types/error'; import { HTTPMethod } from '@/src/types/http'; import { errorsMessages } from '@/src/constants/errors'; import { authOptions } from '@/src/pages/api/auth/[...nextauth]'; import fetch from 'node-fetch'; const handler = async (req: NextApiRequest, res: NextApiResponse) => { const session = await getServerSession(req, res, authOptions); const isSessionValid = validateServerSession(session, req, res); if (!isSessionValid) { return; } const token = await getToken({ req }); try { const { invitationId } = req.body; validateInvitationId(invitationId); const proxyRes = await fetch( `${process.env.DIAL_API_HOST}/v1/invitations/${invitationId}`, { method: HTTPMethod.GET, headers: getApiHeaders({ jwt: token?.access_token as string }), }, ); let json: unknown; try { json = await proxyRes.json(); } catch (err) { json = undefined; } if (!proxyRes.ok) { throw new DialAIError( (typeof json === 'string' && json) || proxyRes.statusText, '', '', proxyRes.status + '', ); } return res.status(200).send(json); } catch (error: unknown) { logger.error(error); if (error instanceof DialAIError) { return res .status(parseInt(error.code, 10) || 500) .send(error.message || errorsMessages.generalServer); } return res.status(500).send(errorsMessages.generalServer); } }; export default handler;