import { Injectable } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { PassportStrategy } from '@nestjs/passport'; import { ExtractJwt, Strategy } from 'passport-jwt'; import { FastifyRequest } from 'fastify'; import { JwtPayload } from '../types/jwt-payload.type'; @Injectable() export class RefreshTokenStrategy extends PassportStrategy(Strategy, 'jwt-refresh') { constructor(configService: ConfigService) { super({ jwtFromRequest: ExtractJwt.fromExtractors([ (request: FastifyRequest) => request?.cookies?.['refresh_token'] || null, ]), secretOrKey: configService.get('JWT_REFRESH_SECRET') || 'refresh-secret', passReqToCallback: true, ignoreExpiration: false, }); } async validate(request: FastifyRequest, payload: JwtPayload) { const refreshToken = request.cookies?.['refresh_token']; return { ...payload, refreshToken }; } }