Skip to content

Commit 6927ca0

Browse files
authored
Merge pull request #1807 from rocket-admin/backend_typescript_improvements
refactor: update return types and error handling across various use cases
2 parents a7b6915 + fa73080 commit 6927ca0

82 files changed

Lines changed: 230 additions & 139 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

backend/src/authorization/auth-with-api.middleware.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
} from '@nestjs/common';
1010
import { InjectRepository } from '@nestjs/typeorm';
1111
import Sentry from '@sentry/minimal';
12-
import { Request, Response } from 'express';
12+
import { NextFunction, Request, Response } from 'express';
1313
import jwt from 'jsonwebtoken';
1414
import { Repository } from 'typeorm';
1515
import { JwtScopesEnum } from '../entities/user/enums/jwt-scopes.enum.js';
@@ -29,7 +29,7 @@ export class AuthWithApiMiddleware implements NestMiddleware {
2929
private readonly userRepository: Repository<UserEntity>,
3030
) {}
3131

32-
async use(req: IRequestWithCognitoInfo, _res: Response, next: (err?: any, res?: any) => void): Promise<void> {
32+
async use(req: IRequestWithCognitoInfo, _res: Response, next: NextFunction): Promise<void> {
3333
try {
3434
await this.authenticateRequest(req);
3535
next();

backend/src/authorization/auth.middleware.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
} from '@nestjs/common';
99
import { InjectRepository } from '@nestjs/typeorm';
1010
import Sentry from '@sentry/minimal';
11-
import { Response } from 'express';
11+
import { NextFunction, Response } from 'express';
1212
import jwt from 'jsonwebtoken';
1313
import { Repository } from 'typeorm';
1414
import { LogOutEntity } from '../entities/log-out/log-out.entity.js';
@@ -29,7 +29,7 @@ export class AuthMiddleware implements NestMiddleware {
2929
@InjectRepository(LogOutEntity)
3030
private readonly logOutRepository: Repository<LogOutEntity>,
3131
) {}
32-
async use(req: IRequestWithCognitoInfo, _res: Response, next: (err?: any, res?: any) => void): Promise<void> {
32+
async use(req: IRequestWithCognitoInfo, _res: Response, next: NextFunction): Promise<void> {
3333
let token: string;
3434
try {
3535
token = req.cookies[Constants.JWT_COOKIE_KEY_NAME];

backend/src/authorization/basic-auth.middleware.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { Injectable, NestMiddleware, UnauthorizedException } from '@nestjs/common';
22
import auth from 'basic-auth';
3-
import { Request, Response } from 'express';
3+
import { NextFunction, Request, Response } from 'express';
44
import { Messages } from '../exceptions/text/messages.js';
55
import { appConfig } from '../shared/config/app-config.js';
66

77
@Injectable()
88
export class BasicAuthMiddleware implements NestMiddleware {
9-
use(req: Request, _res: Response, next: (err?: any, res?: any) => void): void {
9+
use(req: Request, _res: Response, next: NextFunction): void {
1010
const basicAuthLogin = appConfig.auth.basicAuthLogin;
1111
const basicAuthPassword = appConfig.auth.basicAuthPassword;
1212
const userCredentials = auth(req);

backend/src/authorization/cognito-decoded.interface.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { Request } from 'express';
2+
23
export interface ICognitoDecodedData {
34
at_hash: string;
45
sub: string;
@@ -14,8 +15,16 @@ export interface ICognitoDecodedData {
1415
email: string;
1516
}
1617

17-
export interface IRequestWithCognitoInfo extends Request {
18-
query: any;
18+
/**
19+
* Request type with the cognito-derived JWT payload attached by auth middleware.
20+
*
21+
* `params` and `query` are narrowed to `Record<string, string | undefined>`. Express's stock
22+
* `query` type is `ParsedQs` (allows arrays and nested objects), but this codebase only
23+
* issues simple `?key=value` URLs — narrowing here surfaces accidental multi-value usage
24+
* without forcing every callsite to narrow inline.
25+
*/
26+
export interface IRequestWithCognitoInfo extends Omit<Request, 'query' | 'params'> {
27+
query: Record<string, string | undefined>;
28+
params: Record<string, string | undefined>;
1929
decoded: Partial<ICognitoDecodedData>;
20-
params: any;
2130
}

backend/src/authorization/non-scoped-auth.middleware.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
} from '@nestjs/common';
88
import { InjectRepository } from '@nestjs/typeorm';
99
import Sentry from '@sentry/minimal';
10-
import { Response } from 'express';
10+
import { NextFunction, Response } from 'express';
1111
import jwt from 'jsonwebtoken';
1212
import { Repository } from 'typeorm';
1313
import { LogOutEntity } from '../entities/log-out/log-out.entity.js';
@@ -24,7 +24,7 @@ export class NonScopedAuthMiddleware implements NestMiddleware {
2424
@InjectRepository(LogOutEntity)
2525
private readonly logOutRepository: Repository<LogOutEntity>,
2626
) {}
27-
async use(req: IRequestWithCognitoInfo, _res: Response, next: (err?: any, res?: any) => void): Promise<void> {
27+
async use(req: IRequestWithCognitoInfo, _res: Response, next: NextFunction): Promise<void> {
2828
console.log(`auth middleware triggered ->: ${new Date().toISOString()}`);
2929
let token: string;
3030
try {

backend/src/authorization/saas-auth.middleware.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Injectable, NestMiddleware, UnauthorizedException } from '@nestjs/common';
2-
import { Response } from 'express';
2+
import { NextFunction, Response } from 'express';
33
import jwt from 'jsonwebtoken';
44
import { Messages } from '../exceptions/text/messages.js';
55
import { appConfig } from '../shared/config/app-config.js';
@@ -8,7 +8,7 @@ import { extractTokenFromHeader } from './utils/extract-token-from-header.js';
88

99
@Injectable()
1010
export class SaaSAuthMiddleware implements NestMiddleware {
11-
use(req: IRequestWithCognitoInfo, _res: Response, next: (err?: any, res?: any) => void): void {
11+
use(req: IRequestWithCognitoInfo, _res: Response, next: NextFunction): void {
1212
console.log(`saas auth middleware triggered ->: ${new Date().toISOString()}`);
1313
const token = extractTokenFromHeader(req);
1414
if (!token) {

backend/src/authorization/temporary-auth.middleware.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
} from '@nestjs/common';
88
import { InjectRepository } from '@nestjs/typeorm';
99
import Sentry from '@sentry/minimal';
10-
import { Response } from 'express';
10+
import { NextFunction, Response } from 'express';
1111
import jwt from 'jsonwebtoken';
1212
import { Repository } from 'typeorm';
1313
import { LogOutEntity } from '../entities/log-out/log-out.entity.js';
@@ -26,7 +26,7 @@ export class TemporaryAuthMiddleware implements NestMiddleware {
2626
@InjectRepository(LogOutEntity)
2727
private readonly logOutRepository: Repository<LogOutEntity>,
2828
) {}
29-
async use(req: IRequestWithCognitoInfo, _res: Response, next: (err?: any, res?: any) => void): Promise<void> {
29+
async use(req: IRequestWithCognitoInfo, _res: Response, next: NextFunction): Promise<void> {
3030
console.log(`temporary auth middleware triggered ->: ${new Date().toISOString()}`);
3131
let token: string;
3232
try {

backend/src/decorators/body-email.decorator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Messages } from '../exceptions/text/messages.js';
44
import { isObjectPropertyExists } from '../helpers/validators/is-object-property-exists-validator.js';
55
import { ValidationHelper } from '../helpers/validators/validation-helper.js';
66

7-
export const BodyEmail = createParamDecorator((_data: any, ctx: ExecutionContext): string => {
7+
export const BodyEmail = createParamDecorator((_data: unknown, ctx: ExecutionContext): string => {
88
const request: IRequestWithCognitoInfo = ctx.switchToHttp().getRequest();
99
const body = request.body;
1010
if (isObjectPropertyExists(body, 'email')) {

backend/src/decorators/gclid-decorator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { createParamDecorator, ExecutionContext } from '@nestjs/common';
22
import { IRequestWithCognitoInfo } from '../authorization/cognito-decoded.interface.js';
33

4-
export const GCLlId = createParamDecorator((_data: any, ctx: ExecutionContext): string => {
4+
export const GCLlId = createParamDecorator((_data: unknown, ctx: ExecutionContext): string => {
55
const request: IRequestWithCognitoInfo = ctx.switchToHttp().getRequest();
66
if (request.headers) {
77
return (request.headers.gclid as string | undefined) ?? null;

backend/src/decorators/master-password.decorator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { createParamDecorator, ExecutionContext } from '@nestjs/common';
22
import { IRequestWithCognitoInfo } from '../authorization/cognito-decoded.interface.js';
33

4-
export const MasterPassword = createParamDecorator((_data: any, ctx: ExecutionContext): string => {
4+
export const MasterPassword = createParamDecorator((_data: unknown, ctx: ExecutionContext): string => {
55
const request: IRequestWithCognitoInfo = ctx.switchToHttp().getRequest();
66
const masterPwd = request.headers.masterpwd as string | undefined;
77
return masterPwd ? masterPwd : null;

0 commit comments

Comments
 (0)