diff --git a/src/claim-request-management/claim-request-management.controller.ts b/src/claim-request-management/claim-request-management.controller.ts index ed386cb..b261597 100644 --- a/src/claim-request-management/claim-request-management.controller.ts +++ b/src/claim-request-management/claim-request-management.controller.ts @@ -30,6 +30,7 @@ import { RolesGuard } from "src/auth/guards/role.guard"; import { Roles } from "src/decorators/roles.decorator"; import { CurrentUser } from "src/decorators/user.decorator"; import { RoleEnum } from "src/Types&Enums/role.enum"; +import { DEFAULT_MEDIA_MAX_BYTES } from "src/client/client.service"; import { ClaimRequestManagementService } from "./claim-request-management.service"; import { ClaimRequiredDocumentType } from "src/Types&Enums/claim-request-management/required-document-type.enum"; import { CarDamagePartDto, OtherCarDamagePartDto } from "./dto/car-part.dto"; @@ -93,7 +94,7 @@ export class ClaimRequestManagementController { @UseInterceptors( FileInterceptor("file", { limits: { - fileSize: 10 * 1024 * 1024, + fileSize: DEFAULT_MEDIA_MAX_BYTES, }, storage: diskStorage({ destination: "./files/car-green-cards", @@ -153,7 +154,7 @@ export class ClaimRequestManagementController { }) @UseInterceptors( FileInterceptor("file", { - limits: { fileSize: 10 * 1024 * 1024 }, + limits: { fileSize: DEFAULT_MEDIA_MAX_BYTES }, storage: diskStorage({ destination: "./files/claim-required-documents/", filename: (req, file, callback) => { @@ -206,7 +207,7 @@ export class ClaimRequestManagementController { }) @UseInterceptors( FileInterceptor("file", { - limits: { fileSize: 10 * 1024 * 1024 }, + limits: { fileSize: DEFAULT_MEDIA_MAX_BYTES }, storage: diskStorage({ destination: "./files/car-parts/", filename: (req, file, callback) => { @@ -257,7 +258,7 @@ export class ClaimRequestManagementController { }) @UseInterceptors( FileInterceptor("file", { - limits: { fileSize: 50 * 1024 * 1024 }, + limits: { fileSize: DEFAULT_MEDIA_MAX_BYTES }, storage: diskStorage({ destination: "./files/car-capture-videos/", filename: (req, file, callback) => { @@ -305,7 +306,7 @@ export class ClaimRequestManagementController { @UseInterceptors( FileInterceptor("file", { limits: { - fileSize: 10 * 1024 * 1024, + fileSize: DEFAULT_MEDIA_MAX_BYTES, }, storage: diskStorage({ destination: "./files/claim-sign", @@ -386,7 +387,7 @@ export class ClaimRequestManagementController { callback(null, filename); }, }), - limits: { fileSize: 10 * 1024 * 1024 }, + limits: { fileSize: DEFAULT_MEDIA_MAX_BYTES }, }), ) async uploadDocuments( @@ -449,7 +450,7 @@ export class ClaimRequestManagementController { callback(null, filename); }, }), - limits: { fileSize: 10 * 1024 * 1024 }, + limits: { fileSize: DEFAULT_MEDIA_MAX_BYTES }, }), ) async uploadFactorForPart( diff --git a/src/claim-request-management/claim-request-management.v2.controller.ts b/src/claim-request-management/claim-request-management.v2.controller.ts index 8a2fae7..fc470f7 100644 --- a/src/claim-request-management/claim-request-management.v2.controller.ts +++ b/src/claim-request-management/claim-request-management.v2.controller.ts @@ -25,6 +25,7 @@ import { RolesGuard } from "src/auth/guards/role.guard"; import { Roles } from "src/decorators/roles.decorator"; import { CurrentUser } from "src/decorators/user.decorator"; import { MediaPolicyService } from "src/media-policy/media-policy.service"; +import { DEFAULT_MEDIA_MAX_BYTES } from "src/client/client.service"; import { RoleEnum } from "src/Types&Enums/role.enum"; import { ClaimRequestManagementService } from "./claim-request-management.service"; import { @@ -289,7 +290,7 @@ export class ClaimRequestManagementV2Controller { @ApiResponse({ status: 409, description: "Already signed" }) @UseInterceptors( FileInterceptor("sign", { - limits: { fileSize: 10 * 1024 * 1024 }, + limits: { fileSize: DEFAULT_MEDIA_MAX_BYTES }, storage: diskStorage({ destination: "./files/claim-sign", filename: (req, file, callback) => { @@ -566,7 +567,7 @@ Optional: upload car green card file in the same step. @ApiConsumes("multipart/form-data") @UseInterceptors( FileInterceptor("file", { - limits: { fileSize: 10 * 1024 * 1024 }, + limits: { fileSize: DEFAULT_MEDIA_MAX_BYTES }, storage: diskStorage({ destination: "./files/claim-required-document", filename: (req, file, callback) => { @@ -706,7 +707,7 @@ Returns status of each item (uploaded/captured or not). @UseInterceptors( FileInterceptor("file", { limits: { - fileSize: 10 * 1024 * 1024, // 10MB + fileSize: DEFAULT_MEDIA_MAX_BYTES, }, storage: diskStorage({ destination: "./files/claim-documents", @@ -814,7 +815,7 @@ Returns status of each item (uploaded/captured or not). @UseInterceptors( FileInterceptor("file", { limits: { - fileSize: 10 * 1024 * 1024, // 10MB + fileSize: DEFAULT_MEDIA_MAX_BYTES, }, storage: diskStorage({ destination: "./files/claim-captures", @@ -934,7 +935,7 @@ Returns status of each item (uploaded/captured or not). callback(null, `-${unique}-${file.originalname}`); }, }), - limits: { fileSize: 10 * 1024 * 1024 }, + limits: { fileSize: DEFAULT_MEDIA_MAX_BYTES }, }), ) async uploadFactorForPartV2( @@ -973,7 +974,7 @@ Returns status of each item (uploaded/captured or not). }) @UseInterceptors( FileInterceptor("file", { - limits: { fileSize: 50 * 1024 * 1024 }, + limits: { fileSize: DEFAULT_MEDIA_MAX_BYTES }, storage: diskStorage({ destination: "./files/car-capture-videos/", filename: (req, file, callback) => { diff --git a/src/claim-request-management/registrar-claim.v1.controller.ts b/src/claim-request-management/registrar-claim.v1.controller.ts index b689bfa..0cedaab 100644 --- a/src/claim-request-management/registrar-claim.v1.controller.ts +++ b/src/claim-request-management/registrar-claim.v1.controller.ts @@ -8,6 +8,7 @@ import { RolesGuard } from "src/auth/guards/role.guard"; import { Roles } from "src/decorators/roles.decorator"; import { CurrentUser } from "src/decorators/user.decorator"; import { RoleEnum } from "src/Types&Enums/role.enum"; +import { DEFAULT_MEDIA_MAX_BYTES } from "src/client/client.service"; import { SelectOuterPartsV2Dto } from "./dto/select-outer-parts-v2.dto"; import { SelectOtherPartsV2Dto } from "./dto/select-other-parts-v2.dto"; import { UploadRequiredDocumentV2Dto } from "./dto/upload-document-v2.dto"; @@ -83,7 +84,7 @@ export class RegistrarClaimV1Controller { @ApiConsumes("multipart/form-data") @UseInterceptors( FileInterceptor("file", { - limits: { fileSize: 10 * 1024 * 1024 }, + limits: { fileSize: DEFAULT_MEDIA_MAX_BYTES }, storage: diskStorage({ destination: "./files/claim-documents", filename: (req, file, cb) => cb(null, `${Date.now()}${extname(file.originalname)}`), @@ -110,7 +111,7 @@ export class RegistrarClaimV1Controller { @ApiConsumes("multipart/form-data") @UseInterceptors( FileInterceptor("file", { - limits: { fileSize: 10 * 1024 * 1024 }, + limits: { fileSize: DEFAULT_MEDIA_MAX_BYTES }, storage: diskStorage({ destination: "./files/claim-captures", filename: (req, file, cb) => cb(null, `${Date.now()}${extname(file.originalname)}`), diff --git a/src/client/client.service.ts b/src/client/client.service.ts index 6401555..f8be153 100644 --- a/src/client/client.service.ts +++ b/src/client/client.service.ts @@ -47,17 +47,29 @@ export interface MediaLimits { * receive. Per-client `maxBytes` cannot legitimately go above its route's * multer ceiling, so the defaults below are kept at-or-below those. */ +export const DEFAULT_MEDIA_MIN_BYTES = 100 * 1024; // 100KB +export const DEFAULT_MEDIA_MAX_BYTES = 100 * 1024 * 1024; // 100MB + export const DEFAULT_MEDIA_LIMITS: Record = { - video: { minBytes: 256 * 1024, maxBytes: 20 * 1024 * 1024 }, - image: { minBytes: 5 * 1024, maxBytes: 8 * 1024 * 1024 }, - voice: { minBytes: 5 * 1024, maxBytes: 8 * 1024 * 1024 }, + video: { + minBytes: DEFAULT_MEDIA_MIN_BYTES, + maxBytes: DEFAULT_MEDIA_MAX_BYTES, + }, + image: { + minBytes: DEFAULT_MEDIA_MIN_BYTES, + maxBytes: DEFAULT_MEDIA_MAX_BYTES, + }, + voice: { + minBytes: DEFAULT_MEDIA_MIN_BYTES, + maxBytes: DEFAULT_MEDIA_MAX_BYTES, + }, }; /** Highest multer `fileSize` used on any route for each kind (policy cannot exceed this). */ export const MEDIA_ROUTE_MAX_BYTES: Record = { - video: 50 * 1024 * 1024, - image: 10 * 1024 * 1024, - voice: 10 * 1024 * 1024, + video: DEFAULT_MEDIA_MAX_BYTES, + image: DEFAULT_MEDIA_MAX_BYTES, + voice: DEFAULT_MEDIA_MAX_BYTES, }; export const CAR_BODY_ACCIDENT_MAX_AGE_DAYS_MIN = 1; diff --git a/src/main.ts b/src/main.ts index 6e47176..858591f 100644 --- a/src/main.ts +++ b/src/main.ts @@ -9,8 +9,6 @@ async function bootstrap() { cors: true, }); - app.enableCors(); - app.enableCors({ origin: "*", methods: "GET, PUT, POST, DELETE, PATCH, OPTIONS", @@ -18,7 +16,7 @@ async function bootstrap() { }); app.use( - ["/docs", "/docs-json", "/swagger"], + ["/docs"], basicAuth({ challenge: true, users: { @@ -56,4 +54,4 @@ async function bootstrap() { await app.listen(process.env.PORT); } -bootstrap(); +void bootstrap(); diff --git a/src/request-management/expert-initiated.controller.ts b/src/request-management/expert-initiated.controller.ts index eb2a38f..3c9155e 100644 --- a/src/request-management/expert-initiated.controller.ts +++ b/src/request-management/expert-initiated.controller.ts @@ -27,6 +27,7 @@ import { RolesGuard } from "src/auth/guards/role.guard"; import { CurrentUser } from "src/decorators/user.decorator"; import { Roles } from "src/decorators/roles.decorator"; import { RoleEnum } from "src/Types&Enums/role.enum"; +import { DEFAULT_MEDIA_MAX_BYTES } from "src/client/client.service"; import { RequestManagementService } from "./request-management.service"; import { CreateExpertInitiatedFileDto } from "./dto/expert-initiated.dto"; import { ExpertCompleteThirdPartyFormDto } from "./dto/expert-complete-third-party-form.dto"; @@ -228,7 +229,7 @@ export class ExpertInitiatedController { @UseInterceptors( FileInterceptor("file", { limits: { - fileSize: 20 * 1024 * 1024, // 20MB + fileSize: DEFAULT_MEDIA_MAX_BYTES, }, storage: diskStorage({ destination: "./files/video", @@ -285,7 +286,7 @@ export class ExpertInitiatedController { @UseInterceptors( FileInterceptor("voice", { limits: { - fileSize: 10 * 1024 * 1024, // 10MB + fileSize: DEFAULT_MEDIA_MAX_BYTES, }, storage: diskStorage({ destination: "./files/voice", diff --git a/src/request-management/expert-initiated.v2.controller.ts b/src/request-management/expert-initiated.v2.controller.ts index 9ac3438..238ea2e 100644 --- a/src/request-management/expert-initiated.v2.controller.ts +++ b/src/request-management/expert-initiated.v2.controller.ts @@ -25,6 +25,7 @@ import { RolesGuard } from "src/auth/guards/role.guard"; import { CurrentUser } from "src/decorators/user.decorator"; import { Roles } from "src/decorators/roles.decorator"; import { MediaPolicyService } from "src/media-policy/media-policy.service"; +import { DEFAULT_MEDIA_MAX_BYTES } from "src/client/client.service"; import { RoleEnum } from "src/Types&Enums/role.enum"; import { RequestManagementService } from "./request-management.service"; import { CreateExpertInitiatedFileDto } from "./dto/expert-initiated.dto"; @@ -378,7 +379,7 @@ export class ExpertInitiatedV2Controller { }) @UseInterceptors( FileInterceptor("file", { - limits: { fileSize: 20 * 1024 * 1024 }, + limits: { fileSize: DEFAULT_MEDIA_MAX_BYTES }, storage: diskStorage({ destination: "./files/video", filename: (req, file, callback) => { @@ -417,7 +418,7 @@ export class ExpertInitiatedV2Controller { }) @UseInterceptors( FileInterceptor("voice", { - limits: { fileSize: 10 * 1024 * 1024 }, + limits: { fileSize: DEFAULT_MEDIA_MAX_BYTES }, storage: diskStorage({ destination: "./files/voice", filename: (req, file, callback) => { @@ -483,7 +484,7 @@ export class ExpertInitiatedV2Controller { }) @UseInterceptors( FileInterceptor("sign", { - limits: { fileSize: 10 * 1024 * 1024 }, + limits: { fileSize: DEFAULT_MEDIA_MAX_BYTES }, storage: diskStorage({ destination: "./files/signs", filename: (req, file, callback) => { diff --git a/src/request-management/registrar-initiated.controller.ts b/src/request-management/registrar-initiated.controller.ts index 89acd03..1cf03ef 100644 --- a/src/request-management/registrar-initiated.controller.ts +++ b/src/request-management/registrar-initiated.controller.ts @@ -8,6 +8,7 @@ import { RolesGuard } from "src/auth/guards/role.guard"; import { CurrentUser } from "src/decorators/user.decorator"; import { Roles } from "src/decorators/roles.decorator"; import { RoleEnum } from "src/Types&Enums/role.enum"; +import { DEFAULT_MEDIA_MAX_BYTES } from "src/client/client.service"; import { RequestManagementService } from "./request-management.service"; import { CreateRegistrarInitiatedFileDto } from "./dto/registrar-initiated.dto"; import { SendPartyOtpsDto } from "./dto/send-party-otps.dto"; @@ -75,7 +76,7 @@ export class RegistrarInitiatedController { @ApiConsumes("multipart/form-data") @UseInterceptors( FileInterceptor("file", { - limits: { fileSize: 20 * 1024 * 1024 }, + limits: { fileSize: DEFAULT_MEDIA_MAX_BYTES }, storage: diskStorage({ destination: "./files/video", filename: (req, file, cb) => cb(null, `registrar-${Date.now()}${extname(file.originalname)}`), @@ -94,7 +95,7 @@ export class RegistrarInitiatedController { @ApiConsumes("multipart/form-data") @UseInterceptors( FileInterceptor("voice", { - limits: { fileSize: 10 * 1024 * 1024 }, + limits: { fileSize: DEFAULT_MEDIA_MAX_BYTES }, storage: diskStorage({ destination: "./files/voice", filename: (req, file, cb) => cb(null, `registrar-${Date.now()}${extname(file.originalname)}`), @@ -127,7 +128,7 @@ export class RegistrarInitiatedController { @ApiConsumes("multipart/form-data") @UseInterceptors( FileInterceptor("sign", { - limits: { fileSize: 10 * 1024 * 1024 }, + limits: { fileSize: DEFAULT_MEDIA_MAX_BYTES }, storage: diskStorage({ destination: "./files/signs", filename: (req, file, cb) => cb(null, `registrar-party-${Date.now()}${extname(file.originalname)}`), diff --git a/src/request-management/request-management.controller.ts b/src/request-management/request-management.controller.ts index 9255083..a662b2f 100644 --- a/src/request-management/request-management.controller.ts +++ b/src/request-management/request-management.controller.ts @@ -32,6 +32,7 @@ import { CurrentUser } from "src/decorators/user.decorator"; import { Roles } from "src/decorators/roles.decorator"; import { AddPlateDto } from "src/profile/dto/user/AddPlateDto"; import { RoleEnum } from "src/Types&Enums/role.enum"; +import { DEFAULT_MEDIA_MAX_BYTES } from "src/client/client.service"; import { BlameDocumentType } from "./entities/schema/blame-document.schema"; import { CarBodyFormDto, @@ -98,7 +99,7 @@ export class RequestManagementController { @UseInterceptors( FileInterceptor("file", { limits: { - fileSize: 20 * 1024 * 1024, + fileSize: DEFAULT_MEDIA_MAX_BYTES, }, storage: diskStorage({ destination: "./files/video", @@ -216,7 +217,7 @@ export class RequestManagementController { @UseInterceptors( FileInterceptor("file", { limits: { - fileSize: 10 * 1024 * 1024, + fileSize: DEFAULT_MEDIA_MAX_BYTES, }, storage: diskStorage({ destination: "./files/voice", @@ -325,7 +326,7 @@ export class RequestManagementController { @UseInterceptors( FileInterceptor("sign", { limits: { - fileSize: 10 * 1024 * 1024, + fileSize: DEFAULT_MEDIA_MAX_BYTES, }, storage: diskStorage({ destination: "./files/signs", @@ -380,7 +381,7 @@ export class RequestManagementController { { name: "voice", maxCount: 1 }, ], { - limits: { fileSize: 10 * 1024 * 1024 }, + limits: { fileSize: DEFAULT_MEDIA_MAX_BYTES }, storage: diskStorage({ destination: "./files/blame-resend-docs", filename: (req, file, callback) => { diff --git a/src/request-management/request-management.v2.controller.ts b/src/request-management/request-management.v2.controller.ts index 2e50478..ec34a59 100644 --- a/src/request-management/request-management.v2.controller.ts +++ b/src/request-management/request-management.v2.controller.ts @@ -30,6 +30,7 @@ import { RolesGuard } from "src/auth/guards/role.guard"; import { Roles } from "src/decorators/roles.decorator"; import { CurrentUser } from "src/decorators/user.decorator"; import { MediaPolicyService } from "src/media-policy/media-policy.service"; +import { DEFAULT_MEDIA_MAX_BYTES } from "src/client/client.service"; import { RoleEnum } from "src/Types&Enums/role.enum"; import { AddPlateDto } from "src/profile/dto/user/AddPlateDto"; import { @@ -144,7 +145,7 @@ export class RequestManagementV2Controller { @UseInterceptors( FileInterceptor("file", { limits: { - fileSize: 20 * 1024 * 1024, + fileSize: DEFAULT_MEDIA_MAX_BYTES, }, storage: diskStorage({ destination: "./files/video", @@ -212,7 +213,7 @@ export class RequestManagementV2Controller { @UseInterceptors( FileInterceptor("file", { limits: { - fileSize: 10 * 1024 * 1024, + fileSize: DEFAULT_MEDIA_MAX_BYTES, }, storage: diskStorage({ destination: "./files/voice", @@ -332,7 +333,7 @@ export class RequestManagementV2Controller { @UseInterceptors( FileInterceptor("sign", { limits: { - fileSize: 10 * 1024 * 1024, // 10MB + fileSize: DEFAULT_MEDIA_MAX_BYTES, }, storage: diskStorage({ destination: "./files/signs",