diff --git a/pages/api/external/me.ts b/pages/api/external/me.ts new file mode 100644 index 000000000..fd5e8bc57 --- /dev/null +++ b/pages/api/external/me.ts @@ -0,0 +1,37 @@ +import { NextApiResponse } from 'next'; + +import { AppNextApiRequest } from '@app/types/index'; +import { ApiError, ApiErrorType } from '@app/utils/api-error'; +import { createApiHandler, respond } from '@app/utils/createa-api-handler'; +import prisma from '@app/utils/prisma-client'; + +const handler = createApiHandler(); + +export const me = async (req: AppNextApiRequest, res: NextApiResponse) => { + // get Bearer token from header + const authHeader = req.headers.authorization; + const apiKey = authHeader && authHeader.split(' ')?.[1]; + + if (!apiKey) { + throw new ApiError(ApiErrorType.INVALID_REQUEST); + } + + const found = await prisma.userApiKey.findUnique({ + where: { + key: apiKey, + }, + include: { + user: true, + }, + }); + + if (!found) { + throw new ApiError(ApiErrorType.UNAUTHORIZED); + } + + return found.user; +}; + +handler.get(respond(me)); + +export default handler;