| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- import jwt from "jsonwebtoken";
- import redis from "../../../config/redis";
- import {
- User
- } from "../../../models/User";
- import {
- RefreshTokenResult
- } from "./types";
- const refreshToken = async (token: string): Promise<RefreshTokenResult> => {
- try {
- if (!token) {
- return {
- message: "refreshToken-required",
- code: 400
- };
- }
- const user = await User.findOne({
- refreshToken: token
- });
- if (!user) {
- return {
- message: "user-not-found",
- code: 404
- };
- }
- const userID = user._id.toString();
- let decoded: {
- companyName: string;
- fullName: string;
- userID: string;
- };
- try {
- decoded = jwt.verify(
- token,
- process.env.JWT_SECRET as string
- ) as typeof decoded;
- } catch {
- return {
- message: "invalid-refresh-token",
- code: 401
- };
- }
- const newAccessToken = jwt.sign(
- {
- companyName: user.companyName,
- fullName: user.fullName,
- userID: user._id
- },
- process.env.JWT_SECRET as string,
- {
- expiresIn: "4h"
- }
- );
- const newRefreshToken = jwt.sign(
- {
- companyName: user.companyName,
- fullName: user.fullName,
- userID: user._id
- },
- process.env.JWT_SECRET as string,
- {
- expiresIn: "30d"
- }
- );
- await redis.setex(userID, 14400, newAccessToken);
- user.refreshToken = newRefreshToken;
- await user.save();
- return {
- code: 200,
- message: "token-refreshed",
- payload: {
- refreshToken: newRefreshToken,
- accessToken: newAccessToken,
- },
- };
- } catch (error) {
- console.error("RefreshToken action error:", error);
- return {
- message: "internal-server-error",
- code: 500
- };
- }
- };
- export default refreshToken;
|