because I got bored of customising my CV for every job
1import { AuthCookieService, RequestMetadata } from "@cv/auth";
2import { Controller, Post, Res } from "@nestjs/common";
3import type { Response } from "express";
4import { AuthenticationService } from "../authentication.service";
5import { RefreshTokenCookie } from "../token/refresh-token-cookie.decorator";
6import { RefreshTokenResponseDto } from "../token/refresh-token-response.dto";
7import { TokenExpiration } from "../token/token-expiration.type";
8
9@Controller("api/auth")
10export class AuthenticationController {
11 constructor(
12 private readonly authenticationService: AuthenticationService,
13 private readonly authCookieService: AuthCookieService,
14 ) {}
15
16 @Post("credentials/refresh")
17 async refreshToken(
18 @RefreshTokenCookie() refresh_token: string,
19 @RequestMetadata() requestMetadata: RequestMetadata,
20 @Res({ passthrough: true }) res: Response,
21 ): Promise<RefreshTokenResponseDto> {
22 const result = await this.authenticationService.refreshToken(
23 { refresh_token },
24 requestMetadata,
25 );
26
27 this.authCookieService.setAuthCookies(
28 res,
29 result.access_token,
30 result.refresh_token,
31 );
32
33 const accessTokenExpiration = TokenExpiration.fromExpiryDate(
34 result.expires_at,
35 );
36
37 return new RefreshTokenResponseDto({
38 expiresAt: accessTokenExpiration.expiresAt.toISOString(),
39 expiresInSeconds: accessTokenExpiration.expiresInSeconds,
40 });
41 }
42}