File

src/auth/providers/refresh-token-generator.provider.ts

Description

Provider for generating refresh tokens It uses the JwtService to create and verify JWT tokens.

Index

Methods

Constructor

constructor(jwtService: JwtService, jwtConfiguration: ConfigType<>, usersService: UsersService, tokenGeneratorProvider: TokenGeneratorProvider)

RefreshTokenGeneratorProvider It uses the JwtService to create and verify JWT tokens.

Parameters :
Name Type Optional Description
jwtService JwtService No
  • Service for handling JWT operations
jwtConfiguration ConfigType<> No
  • Configuration for JWT settings
usersService UsersService No
  • Service for handling user-related operations
tokenGeneratorProvider TokenGeneratorProvider No
  • Provider for generating tokens

Methods

Public Async refreshTokens
refreshTokens(refreshTokenDto: RefreshTokenDto)

Refreshes the access and refresh tokens using the provided refresh token

Parameters :
Name Type Optional Description
refreshTokenDto RefreshTokenDto No
  • Data transfer object containing the refresh token
Returns : unknown
  • Returns a promise that resolves to an object containing new access and refresh tokens
import {
  forwardRef,
  Inject,
  Injectable,
  NotFoundException,
  UnauthorizedException,
} from '@nestjs/common';
import jwtConfig from '../config/jwt.config';
import { JwtService } from '@nestjs/jwt';
import { ConfigType } from '@nestjs/config';
import { UsersService } from 'src/user/providers/users.service';
import { TokenGeneratorProvider } from './token-generator.provider';
import { RefreshTokenDto } from '../dtos/refresh-token.dto';
import { User } from 'src/user/user.entity';
import { ActiveUserData } from '../interfaces/active-user-data.interface';
import { USER_NOT_FOUND_ERROR } from 'src/user/constants/users.errors.constants';

/**
 * Provider for generating refresh tokens
 * @class RefreshTokenGeneratorProvider
 * @version 1
 * @description This provider is responsible for generating refresh tokens.
 * It uses the JwtService to create and verify JWT tokens.
 */
@Injectable()
export class RefreshTokenGeneratorProvider {
  /**
   * RefreshTokenGeneratorProvider
   * @description This provider is responsible for generating refresh tokens.
   * It uses the JwtService to create and verify JWT tokens.
   * @param {JwtService} jwtService - Service for handling JWT operations
   * @param {ConfigType<typeof jwtConfig>} jwtConfiguration - Configuration for JWT settings
   * @param {UsersService} usersService - Service for handling user-related operations
   * @param {TokenGeneratorProvider} tokenGeneratorProvider - Provider for generating tokens
   */
  constructor(
    private readonly jwtService: JwtService,
    @Inject(jwtConfig.KEY)
    private readonly jwtConfiguration: ConfigType<typeof jwtConfig>,
    @Inject(forwardRef(() => UsersService))
    private readonly usersService: UsersService,
    private readonly tokenGeneratorProvider: TokenGeneratorProvider,
  ) {}

  /**
   * Refreshes the access and refresh tokens using the provided refresh token
   * @param {RefreshTokenDto} refreshTokenDto - Data transfer object containing the refresh token
   * @returns {Promise<object>} - Returns a promise that resolves to an object containing new access and refresh tokens
   * @throws {UnauthorizedException} - Throws an exception if the refresh token is invalid or expired
   */
  public async refreshTokens(refreshTokenDto: RefreshTokenDto) {
    try {
      const { sub: userId } = await this.jwtService.verifyAsync<
        Pick<ActiveUserData, 'sub'>
      >(refreshTokenDto.refreshToken, {
        secret: this.jwtConfiguration.secret,
        audience: this.jwtConfiguration.audience,
        issuer: this.jwtConfiguration.issuer,
      });

      const user: User = await this.usersService.findUserById(userId);
      return this.tokenGeneratorProvider.generateAccessAndRefreshTokens(user);
    } catch (error) {
      if (error instanceof NotFoundException) {
        throw new UnauthorizedException(USER_NOT_FOUND_ERROR);
      }

      throw new UnauthorizedException('Invalid or expired refresh token');
    }
  }
}

results matching ""

    No results matching ""