diff --git a/client/package-lock.json b/client/package-lock.json index d92ff6c..e03be82 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -11,9 +11,7 @@ "@apollo/client": "^3.13.8", "@radix-ui/react-dialog": "^1.1.11", "graphql": "^16.11.0", - "jwt-decode": "^4.0.0", - "lucide-react": "^0.503.0", "react": "^19.0.0", "react-dom": "^19.0.0", diff --git a/package.json b/package.json index 7507d76..3c7e013 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "", "main": "index.js", "scripts": { - "start": "node server/server.js", + "start": "cd server && npm run start", "develop": "concurrently \"cd server && npm run watch\" \"cd client && npm run dev\"", "install": "cd server && npm i && cd ../client && npm i", "build": "concurrently \"cd server && npm run build\" \"cd client && npm run build\"", diff --git a/server/package.json b/server/package.json index ac9f345..b555474 100644 --- a/server/package.json +++ b/server/package.json @@ -7,7 +7,8 @@ "start": "node dist/server.js", "build": "tsc", "test": "echo \"Error: no test specified\" && exit 1", - "dev": "nodemon index.ts" + "dev": "nodemon index.ts", + "watch": "nodemon dist/server.js" }, "keywords": [], "author": "", diff --git a/server/src/server.ts b/server/src/server.ts index e527958..4504434 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -1,10 +1,10 @@ -import express, { Request, Response } from 'express'; -import cors from 'cors'; +import express, { type Request, type Response } from 'express'; + import dotenv from 'dotenv'; import { OpenAI } from 'openai'; -// import fs from 'fs'; -// import path from 'path'; -import { ApolloServer } from 'apollo-server-express'; + +import path from 'path'; +import { ApolloServer } from '@apollo/server'; import { expressMiddleware } from '@apollo/server/express4'; import typeDefs from './schemas/typeDefs'; import resolvers from './schemas/resolvers'; @@ -33,22 +33,25 @@ dotenv.config(); resolvers, }); - await server.start(); + const startApolloServer = async () => { + await server.start(); + await db; + + app.use(express.static('public')); // serve generated mp3 file app.use(express.urlencoded({ extended: false })); app.use(express.json()); - app.use(express.static('public')); // serve generated mp3 file + app.use('/graphql', expressMiddleware(server as any, { context: authenticateToken as any } )); - // if we're in production, serve client/build as static assets if (process.env.NODE_ENV === 'production') { - app.use(express.static(path.join(dirname, '../client/build'))); + app.use(express.static(path.join(__dirname, '../client/build'))); app.get('*', (_req: Request, res: Response) => { - res.sendFile(path.join(dirname, '../client/dist/index.html')); + res.sendFile(path.join(__dirname, '../client/dist/index.html')); }); } diff --git a/server/src/types/express/index.d.ts b/server/src/types/express/index.d.ts new file mode 100644 index 0000000..e649f26 --- /dev/null +++ b/server/src/types/express/index.d.ts @@ -0,0 +1,8 @@ +declare namespace Express { + interface Request { + user: { + _id: unknown; + username: string; + }; + } +} diff --git a/server/src/utils/auth.ts b/server/src/utils/auth.ts index 01ef3ac..e0efdd3 100644 --- a/server/src/utils/auth.ts +++ b/server/src/utils/auth.ts @@ -11,7 +11,7 @@ interface JwtPayload { } export const authMiddleware = ({ req }: { req: any }) => { - const authHeader = req.headers.authorization; + const authHeader = req.headers.get('authorization'); if (authHeader) { const token = authHeader.split(' ')[1]; @@ -42,20 +42,25 @@ export const authMiddleware = ({ req }: { req: any }) => { return { user: null }; }; -export const authenticateToken = (token: string) => { - const secretKey = process.env.JWT_SECRET_KEY || ''; +export const authenticateToken = async ({ req }: { req: Request }) => { + const authHeader = req.headers.authorization; + let user = null; + console.log('AUTH HEADER', authHeader); - if (!token) { - throw new Error('No token provided'); - } + if (authHeader) { + const token = authHeader.split(' ')[1]; + console.log('TOKEN', token); + const secretKey = process.env.JWT_SECRET_KEY || ''; - try { - const user = jwt.verify(token, secretKey) as JwtPayload; - return user; - } catch (err) { - console.error('Invalid token:', err); - throw new Error('Invalid or expired token'); + try { + user = jwt.verify(token, secretKey) as JwtPayload; + console.log('USER', user); + } catch (err) { + console.error(err); + } } + + return { user }; }; export const signToken = (username: string, email: string, _id: unknown) => { diff --git a/server/tsconfig.json b/server/tsconfig.json index a082141..e3f0e0c 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -13,6 +13,6 @@ "@/*": ["src/*"] // Map the '@' alias to the 'src' directory } }, - "include": ["src/**/*"], + "include": ["src/**/*", "src/server.ts"], "exclude": ["node_modules"] } \ No newline at end of file