From 8b1934d49e1aa22e7d79c523838b995a0680299d Mon Sep 17 00:00:00 2001 From: OxSaitama Date: Mon, 14 Aug 2023 17:07:24 +0200 Subject: [PATCH 1/7] add role handler for namespaces --- src/app/api/admin/CustomersController.ts | 7 +++--- src/app/api/admin/DeedTypesController.ts | 9 ++++---- src/app/api/admin/DeedsController.ts | 7 +++--- src/app/api/admin/DocumentTypesController.ts | 7 +++--- src/app/api/admin/DocumentsController.ts | 11 +++++----- src/app/api/admin/FilesController.ts | 9 ++++---- src/app/api/admin/OfficeFoldersController.ts | 11 +++++----- src/app/api/admin/OfficeRolesController.ts | 9 ++++---- src/app/api/admin/OfficesController.ts | 5 +++-- src/app/api/admin/RolesController.ts | 5 +++-- src/app/api/admin/RulesController.ts | 5 +++-- src/app/api/admin/UsersController.ts | 7 +++--- .../api/super-admin/AppointmentsController.ts | 5 +++-- .../api/super-admin/CustomersController.ts | 9 ++++---- .../api/super-admin/DeedTypesController.ts | 9 ++++---- src/app/api/super-admin/DeedsController.ts | 7 +++--- .../super-admin/DocumentTypesController.ts | 9 ++++---- .../api/super-admin/DocumentsController.ts | 11 +++++----- src/app/api/super-admin/FilesController.ts | 9 ++++---- src/app/api/super-admin/LiveVoteController.ts | 3 ++- .../super-admin/OfficeFoldersController.ts | 11 +++++----- .../api/super-admin/OfficeRolesController.ts | 9 ++++---- src/app/api/super-admin/OfficesController.ts | 9 ++++---- src/app/api/super-admin/RolesController.ts | 9 ++++---- src/app/api/super-admin/RulesController.ts | 9 ++++---- src/app/api/super-admin/UsersController.ts | 9 ++++---- src/app/api/super-admin/VotesController.ts | 7 +++--- src/app/middlewares/RolesHandler.ts | 22 +++++++++++++++++++ src/app/middlewares/RulesHandler.ts | 14 +----------- 29 files changed, 145 insertions(+), 108 deletions(-) create mode 100644 src/app/middlewares/RolesHandler.ts diff --git a/src/app/api/admin/CustomersController.ts b/src/app/api/admin/CustomersController.ts index 3b7ea244..90e429cf 100644 --- a/src/app/api/admin/CustomersController.ts +++ b/src/app/api/admin/CustomersController.ts @@ -7,6 +7,7 @@ import { Customer } from "le-coffre-resources/dist/Admin"; import { validateOrReject } from "class-validator"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -18,7 +19,7 @@ export default class CustomersController extends ApiController { /** * @description Get all customers */ - @Get("/api/v1/admin/customers", [authHandler, ruleHandler]) + @Get("/api/v1/admin/customers", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -70,7 +71,7 @@ export default class CustomersController extends ApiController { /** * @description Modify a specific customer by uid */ - @Put("/api/v1/admin/customers/:uid", [authHandler, ruleHandler]) + @Put("/api/v1/admin/customers/:uid", [authHandler, roleHandler, ruleHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -111,7 +112,7 @@ export default class CustomersController extends ApiController { /** * @description Get a specific customer by uid */ - @Get("/api/v1/admin/customers/:uid", [authHandler, ruleHandler]) + @Get("/api/v1/admin/customers/:uid", [authHandler, roleHandler, ruleHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/admin/DeedTypesController.ts b/src/app/api/admin/DeedTypesController.ts index 852b11cf..d1273879 100644 --- a/src/app/api/admin/DeedTypesController.ts +++ b/src/app/api/admin/DeedTypesController.ts @@ -9,6 +9,7 @@ import { validateOrReject } from "class-validator"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; import deedTypeHandler from "@App/middlewares/OfficeMembershipHandlers/DeedTypeHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -21,7 +22,7 @@ export default class DeedTypesController extends ApiController { * @description Get all deedtypes * @returns Deedtype[] list of deedtypes */ - @Get("/api/v1/admin/deed-types", [authHandler, ruleHandler]) + @Get("/api/v1/admin/deed-types", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -65,7 +66,7 @@ export default class DeedTypesController extends ApiController { * @description Create a new deedtype * @returns Deedtype created */ - @Post("/api/v1/admin/deed-types", [authHandler, ruleHandler, deedTypeHandler]) + @Post("/api/v1/admin/deed-types", [authHandler, roleHandler, ruleHandler, deedTypeHandler]) protected async post(req: Request, response: Response) { try { //init DeedType resource with request body values @@ -99,7 +100,7 @@ export default class DeedTypesController extends ApiController { * @description Modify a specific deedtype by uid * @returns Deedtype modified */ - @Put("/api/v1/admin/deed-types/:uid", [authHandler, ruleHandler, deedTypeHandler]) + @Put("/api/v1/admin/deed-types/:uid", [authHandler, roleHandler, ruleHandler, deedTypeHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -141,7 +142,7 @@ export default class DeedTypesController extends ApiController { * @description Get a specific deedtype by uid * @returns IDeedtype */ - @Get("/api/v1/admin/deed-types/:uid", [authHandler, ruleHandler, deedTypeHandler]) + @Get("/api/v1/admin/deed-types/:uid", [authHandler, roleHandler, ruleHandler, deedTypeHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/admin/DeedsController.ts b/src/app/api/admin/DeedsController.ts index ae35aa4b..00a2fa20 100644 --- a/src/app/api/admin/DeedsController.ts +++ b/src/app/api/admin/DeedsController.ts @@ -9,6 +9,7 @@ import { validateOrReject } from "class-validator"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; import deedHandler from "@App/middlewares/OfficeMembershipHandlers/DeedHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -21,7 +22,7 @@ export default class DeedsController extends ApiController { * @description Get all deeds * @returns Deed[] list of deeds */ - @Get("/api/v1/admin/deeds", [authHandler, ruleHandler]) + @Get("/api/v1/admin/deeds", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -52,7 +53,7 @@ export default class DeedsController extends ApiController { * @description Get a specific deed by uid * @returns Deed */ - @Get("/api/v1/admin/deeds/:uid", [authHandler, ruleHandler, deedHandler]) + @Get("/api/v1/admin/deeds/:uid", [authHandler, roleHandler, ruleHandler, deedHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -87,7 +88,7 @@ export default class DeedsController extends ApiController { /** * @description Modify a specific deed by uid */ - @Put("/api/v1/admin/deeds/:uid", [authHandler, ruleHandler, deedHandler]) + @Put("/api/v1/admin/deeds/:uid", [authHandler, roleHandler, ruleHandler, deedHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/admin/DocumentTypesController.ts b/src/app/api/admin/DocumentTypesController.ts index 9089bd6a..582cd2f2 100644 --- a/src/app/api/admin/DocumentTypesController.ts +++ b/src/app/api/admin/DocumentTypesController.ts @@ -10,6 +10,7 @@ import { validateOrReject } from "class-validator"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; import documentTypeHandler from "@App/middlewares/OfficeMembershipHandlers/DocumentTypeHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -21,7 +22,7 @@ export default class DocumentTypesController extends ApiController { /** * @description Get all document-types */ - @Get("/api/v1/admin/document-types", [authHandler, ruleHandler]) + @Get("/api/v1/admin/document-types", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -53,7 +54,7 @@ export default class DocumentTypesController extends ApiController { /** * @description Create a new documentType */ - @Post("/api/v1/admin/document-types", [authHandler, ruleHandler, documentTypeHandler]) + @Post("/api/v1/admin/document-types", [authHandler, roleHandler, ruleHandler, documentTypeHandler]) protected async post(req: Request, response: Response) { try { //init DocumentType resource with request body values @@ -77,7 +78,7 @@ export default class DocumentTypesController extends ApiController { /** * @description Modify a specific documentType by uid */ - @Put("/api/v1/admin/document-types/:uid", [authHandler, ruleHandler, documentTypeHandler]) + @Put("/api/v1/admin/document-types/:uid", [authHandler, roleHandler, ruleHandler, documentTypeHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/admin/DocumentsController.ts b/src/app/api/admin/DocumentsController.ts index 5696450c..05a21c1e 100644 --- a/src/app/api/admin/DocumentsController.ts +++ b/src/app/api/admin/DocumentsController.ts @@ -9,6 +9,7 @@ import { validateOrReject } from "class-validator"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; import documentHandler from "@App/middlewares/OfficeMembershipHandlers/DocumentHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -21,7 +22,7 @@ export default class DocumentsController extends ApiController { * @description Get all documents * @returns IDocument[] list of documents */ - @Get("/api/v1/admin/documents", [authHandler, ruleHandler]) + @Get("/api/v1/admin/documents", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -52,7 +53,7 @@ export default class DocumentsController extends ApiController { * @description Create a new document * @returns IDocument created */ - @Post("/api/v1/admin/documents", [authHandler, ruleHandler, documentHandler]) + @Post("/api/v1/admin/documents", [authHandler, roleHandler, ruleHandler, documentHandler]) protected async post(req: Request, response: Response) { try { //init Document resource with request body values @@ -80,7 +81,7 @@ export default class DocumentsController extends ApiController { /** * @description Update a specific document */ - @Put("/api/v1/admin/documents/:uid", [authHandler, ruleHandler, documentHandler]) + @Put("/api/v1/admin/documents/:uid", [authHandler, roleHandler, ruleHandler, documentHandler]) protected async update(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -119,7 +120,7 @@ export default class DocumentsController extends ApiController { /** * @description Delete a specific document */ - @Delete("/api/v1/admin/documents/:uid", [authHandler, ruleHandler, documentHandler]) + @Delete("/api/v1/admin/documents/:uid", [authHandler, roleHandler, ruleHandler, documentHandler]) protected async delete(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -152,7 +153,7 @@ export default class DocumentsController extends ApiController { /** * @description Get a specific document by uid */ - @Get("/api/v1/admin/documents/:uid", [authHandler, ruleHandler, documentHandler]) + @Get("/api/v1/admin/documents/:uid", [authHandler, roleHandler, ruleHandler, documentHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/admin/FilesController.ts b/src/app/api/admin/FilesController.ts index 0317d12f..583d3ddc 100644 --- a/src/app/api/admin/FilesController.ts +++ b/src/app/api/admin/FilesController.ts @@ -8,6 +8,7 @@ import { File } from "le-coffre-resources/dist/Admin"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; import fileHandler from "@App/middlewares/OfficeMembershipHandlers/FileHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -20,7 +21,7 @@ export default class FilesController extends ApiController { * @description Get all Files * @returns File[] list of Files */ - @Get("/api/v1/admin/files", [authHandler, ruleHandler]) + @Get("/api/v1/admin/files", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -49,7 +50,7 @@ export default class FilesController extends ApiController { /** * @description Get a specific File by uid */ - @Get("/api/v1/admin/files/download/:uid", [authHandler, ruleHandler, fileHandler]) + @Get("/api/v1/admin/files/download/:uid", [authHandler, roleHandler, ruleHandler, fileHandler]) protected async download(req: Request, response: Response) { const uid = req.params["uid"]; if (!uid) { @@ -77,7 +78,7 @@ export default class FilesController extends ApiController { /** * @description Delete a specific File */ - @Delete("/api/v1/admin/files/:uid", [authHandler, ruleHandler, fileHandler]) + @Delete("/api/v1/admin/files/:uid", [authHandler, roleHandler, ruleHandler, fileHandler]) protected async delete(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -115,7 +116,7 @@ export default class FilesController extends ApiController { /** * @description Get a specific File by uid */ - @Get("/api/v1/admin/files/:uid", [authHandler, ruleHandler, fileHandler]) + @Get("/api/v1/admin/files/:uid", [authHandler, roleHandler, ruleHandler, fileHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/admin/OfficeFoldersController.ts b/src/app/api/admin/OfficeFoldersController.ts index b5906906..42fbdc58 100644 --- a/src/app/api/admin/OfficeFoldersController.ts +++ b/src/app/api/admin/OfficeFoldersController.ts @@ -9,6 +9,7 @@ import { validateOrReject } from "class-validator"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; import folderHandler from "@App/middlewares/OfficeMembershipHandlers/FolderHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -20,7 +21,7 @@ export default class OfficeFoldersController extends ApiController { /** * @description Get all folders */ - @Get("/api/v1/admin/folders", [authHandler, ruleHandler]) + @Get("/api/v1/admin/folders", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -80,7 +81,7 @@ export default class OfficeFoldersController extends ApiController { /** * @description Create a new folder */ - @Post("/api/v1/admin/folders", [authHandler, ruleHandler, folderHandler]) + @Post("/api/v1/admin/folders", [authHandler, roleHandler, ruleHandler, folderHandler]) protected async post(req: Request, response: Response) { try { //init OfficeFolder resource with request body values @@ -104,7 +105,7 @@ export default class OfficeFoldersController extends ApiController { /** * @description Modify a specific folder by uid */ - @Put("/api/v1/admin/folders/:uid", [authHandler, ruleHandler, folderHandler]) + @Put("/api/v1/admin/folders/:uid", [authHandler, roleHandler, ruleHandler, folderHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -146,7 +147,7 @@ export default class OfficeFoldersController extends ApiController { * @description Get a specific folder by uid * @returns IFolder */ - @Get("/api/v1/admin/folders/:uid", [authHandler, ruleHandler, folderHandler]) + @Get("/api/v1/admin/folders/:uid", [authHandler, roleHandler, ruleHandler, folderHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -182,7 +183,7 @@ export default class OfficeFoldersController extends ApiController { /** * @description Delete a specific folder */ - @Delete("/api/v1/admin/folders/:uid", [authHandler, ruleHandler, folderHandler]) + @Delete("/api/v1/admin/folders/:uid", [authHandler, roleHandler, ruleHandler, folderHandler]) protected async delete(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/admin/OfficeRolesController.ts b/src/app/api/admin/OfficeRolesController.ts index 9dfb2022..5c06e471 100644 --- a/src/app/api/admin/OfficeRolesController.ts +++ b/src/app/api/admin/OfficeRolesController.ts @@ -9,6 +9,7 @@ import { Prisma } from "@prisma/client"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; import officeRoleHandler from "@App/middlewares/OfficeMembershipHandlers/OfficeRoleHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -20,7 +21,7 @@ export default class OfficeRolesController extends ApiController { /** * @description Get all officeRoles */ - @Get("/api/v1/admin/office-roles", [authHandler, ruleHandler]) + @Get("/api/v1/admin/office-roles", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -63,7 +64,7 @@ export default class OfficeRolesController extends ApiController { /** * @description Create a new officeRole */ - @Post("/api/v1/admin/office-roles", [authHandler, ruleHandler, officeRoleHandler]) + @Post("/api/v1/admin/office-roles", [authHandler, roleHandler, ruleHandler, officeRoleHandler]) protected async getAddresses(req: Request, response: Response) { try { //init IOfficeRole resource with request body values @@ -91,7 +92,7 @@ export default class OfficeRolesController extends ApiController { /** * @description Modify a specific officeRole by uid */ - @Put("/api/v1/admin/office-roles/:uid", [authHandler, ruleHandler, officeRoleHandler]) + @Put("/api/v1/admin/office-roles/:uid", [authHandler, roleHandler, ruleHandler, officeRoleHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -132,7 +133,7 @@ export default class OfficeRolesController extends ApiController { /** * @description Get a specific officeRole by uid */ - @Get("/api/v1/admin/office-roles/:uid", [authHandler, ruleHandler, officeRoleHandler]) + @Get("/api/v1/admin/office-roles/:uid", [authHandler, roleHandler, ruleHandler, officeRoleHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/admin/OfficesController.ts b/src/app/api/admin/OfficesController.ts index 99433c13..546d240f 100644 --- a/src/app/api/admin/OfficesController.ts +++ b/src/app/api/admin/OfficesController.ts @@ -7,6 +7,7 @@ import { Offices } from "@prisma/client"; import { Office as OfficeResource } from "le-coffre-resources/dist/Admin"; import ruleHandler from "@App/middlewares/RulesHandler"; import authHandler from "@App/middlewares/AuthHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -17,7 +18,7 @@ export default class OfficesController extends ApiController { /** * @description Get all offices */ - @Get("/api/v1/admin/offices", [authHandler, ruleHandler]) + @Get("/api/v1/admin/offices", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -40,7 +41,7 @@ export default class OfficesController extends ApiController { /** * @description Get a specific office by uid */ - @Get("/api/v1/admin/offices/:uid", [authHandler, ruleHandler]) + @Get("/api/v1/admin/offices/:uid", [authHandler, roleHandler, ruleHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/admin/RolesController.ts b/src/app/api/admin/RolesController.ts index 32ab6440..634bd92e 100644 --- a/src/app/api/admin/RolesController.ts +++ b/src/app/api/admin/RolesController.ts @@ -6,6 +6,7 @@ import { Service } from "typedi"; import { Role } from "le-coffre-resources/dist/Admin"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -17,7 +18,7 @@ export default class RolesController extends ApiController { /** * @description Get all roles */ - @Get("/api/v1/admin/roles", [authHandler, ruleHandler]) + @Get("/api/v1/admin/roles", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -43,7 +44,7 @@ export default class RolesController extends ApiController { /** * @description Get a specific role by uid */ - @Get("/api/v1/admin/roles/:uid", [authHandler, ruleHandler]) + @Get("/api/v1/admin/roles/:uid", [authHandler, roleHandler, ruleHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/admin/RulesController.ts b/src/app/api/admin/RulesController.ts index de343769..55526601 100644 --- a/src/app/api/admin/RulesController.ts +++ b/src/app/api/admin/RulesController.ts @@ -6,6 +6,7 @@ import { Service } from "typedi"; import { Rule } from "le-coffre-resources/dist/Admin"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -17,7 +18,7 @@ export default class RulesController extends ApiController { /** * @description Get all rules */ - @Get("/api/v1/admin/rules", [authHandler, ruleHandler]) + @Get("/api/v1/admin/rules", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -43,7 +44,7 @@ export default class RulesController extends ApiController { /** * @description Get a specific rule by uid */ - @Get("/api/v1/admin/rules/:uid", [authHandler, ruleHandler]) + @Get("/api/v1/admin/rules/:uid", [authHandler, roleHandler, ruleHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/admin/UsersController.ts b/src/app/api/admin/UsersController.ts index 2d6d3465..ee208504 100644 --- a/src/app/api/admin/UsersController.ts +++ b/src/app/api/admin/UsersController.ts @@ -9,6 +9,7 @@ import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; import userHandler from "@App/middlewares/OfficeMembershipHandlers/UserHandler"; import { validateOrReject } from "class-validator"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -20,7 +21,7 @@ export default class UsersController extends ApiController { /** * @description Get all users */ - @Get("/api/v1/admin/users", [authHandler, ruleHandler]) + @Get("/api/v1/admin/users", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -65,7 +66,7 @@ export default class UsersController extends ApiController { /** * @description Modify a specific user by uid */ - @Put("/api/v1/admin/users/:uid", [authHandler, ruleHandler]) + @Put("/api/v1/admin/users/:uid", [authHandler, roleHandler, ruleHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -106,7 +107,7 @@ export default class UsersController extends ApiController { /** * @description Get a specific user by uid */ - @Get("/api/v1/admin/users/:uid", [authHandler, ruleHandler, userHandler]) + @Get("/api/v1/admin/users/:uid", [authHandler, roleHandler, ruleHandler, userHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/AppointmentsController.ts b/src/app/api/super-admin/AppointmentsController.ts index f2790755..1c3f7346 100644 --- a/src/app/api/super-admin/AppointmentsController.ts +++ b/src/app/api/super-admin/AppointmentsController.ts @@ -5,6 +5,7 @@ import AppointmentsService from "@Services/super-admin/AppointmentsService/Appoi import { Service } from "typedi"; import { Appointment } from "le-coffre-resources/dist/SuperAdmin"; import authHandler from "@App/middlewares/AuthHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -16,7 +17,7 @@ export default class AppointmentsController extends ApiController { /** * @description Get all appointments */ - @Get("/api/v1/super-admin/appointments", [authHandler]) + @Get("/api/v1/super-admin/appointments", [authHandler, roleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -42,7 +43,7 @@ export default class AppointmentsController extends ApiController { /** * @description Get a specific appointment by uid */ - @Get("/api/v1/super-admin/appointments/:uid", [authHandler]) + @Get("/api/v1/super-admin/appointments/:uid", [authHandler, roleHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/CustomersController.ts b/src/app/api/super-admin/CustomersController.ts index 56c718b0..d1a15fd2 100644 --- a/src/app/api/super-admin/CustomersController.ts +++ b/src/app/api/super-admin/CustomersController.ts @@ -7,6 +7,7 @@ import { Customer } from "le-coffre-resources/dist/SuperAdmin"; import { validateOrReject } from "class-validator"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -18,7 +19,7 @@ export default class CustomersController extends ApiController { /** * @description Get all customers */ - @Get("/api/v1/super-admin/customers", [authHandler, ruleHandler]) + @Get("/api/v1/super-admin/customers", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -44,7 +45,7 @@ export default class CustomersController extends ApiController { /** * @description Create a new customer */ - @Post("/api/v1/super-admin/customers", [authHandler, ruleHandler]) + @Post("/api/v1/super-admin/customers", [authHandler, roleHandler, ruleHandler]) protected async post(req: Request, response: Response) { try { //init IUser resource with request body values @@ -70,7 +71,7 @@ export default class CustomersController extends ApiController { /** * @description Modify a specific customer by uid */ - @Put("/api/v1/super-admin/customers/:uid", [authHandler, ruleHandler]) + @Put("/api/v1/super-admin/customers/:uid", [authHandler, roleHandler, ruleHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -111,7 +112,7 @@ export default class CustomersController extends ApiController { /** * @description Get a specific customer by uid */ - @Get("/api/v1/super-admin/customers/:uid", [authHandler, ruleHandler]) + @Get("/api/v1/super-admin/customers/:uid", [authHandler, roleHandler, ruleHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/DeedTypesController.ts b/src/app/api/super-admin/DeedTypesController.ts index 0a499a8f..5ab62ce1 100644 --- a/src/app/api/super-admin/DeedTypesController.ts +++ b/src/app/api/super-admin/DeedTypesController.ts @@ -9,6 +9,7 @@ import { validateOrReject } from "class-validator"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; import deedTypeHandler from "@App/middlewares/OfficeMembershipHandlers/DeedTypeHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -21,7 +22,7 @@ export default class DeedTypesController extends ApiController { * @description Get all deedtypes * @returns Deedtype[] list of deedtypes */ - @Get("/api/v1/super-admin/deed-types", [authHandler, ruleHandler]) + @Get("/api/v1/super-admin/deed-types", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -65,7 +66,7 @@ export default class DeedTypesController extends ApiController { * @description Create a new deedtype * @returns Deedtype created */ - @Post("/api/v1/super-admin/deed-types", [authHandler, ruleHandler, deedTypeHandler]) + @Post("/api/v1/super-admin/deed-types", [authHandler, roleHandler, ruleHandler, deedTypeHandler]) protected async post(req: Request, response: Response) { try { //init DeedType resource with request body values @@ -94,7 +95,7 @@ export default class DeedTypesController extends ApiController { * @description Modify a specific deedtype by uid * @returns Deedtype modified */ - @Put("/api/v1/super-admin/deed-types/:uid", [authHandler, ruleHandler, deedTypeHandler]) + @Put("/api/v1/super-admin/deed-types/:uid", [authHandler, roleHandler, ruleHandler, deedTypeHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -136,7 +137,7 @@ export default class DeedTypesController extends ApiController { * @description Get a specific deedtype by uid * @returns IDeedtype */ - @Get("/api/v1/super-admin/deed-types/:uid", [authHandler, ruleHandler, deedTypeHandler]) + @Get("/api/v1/super-admin/deed-types/:uid", [authHandler, roleHandler, ruleHandler, deedTypeHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/DeedsController.ts b/src/app/api/super-admin/DeedsController.ts index 06e20d9d..a06de5ad 100644 --- a/src/app/api/super-admin/DeedsController.ts +++ b/src/app/api/super-admin/DeedsController.ts @@ -9,6 +9,7 @@ import { validateOrReject } from "class-validator"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; import deedHandler from "@App/middlewares/OfficeMembershipHandlers/DeedHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -21,7 +22,7 @@ export default class DeedsController extends ApiController { * @description Get all deeds * @returns Deed[] list of deeds */ - @Get("/api/v1/super-admin/deeds", [authHandler, ruleHandler]) + @Get("/api/v1/super-admin/deeds", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -52,7 +53,7 @@ export default class DeedsController extends ApiController { * @description Get a specific deed by uid * @returns Deed */ - @Get("/api/v1/super-admin/deeds/:uid", [authHandler, ruleHandler, deedHandler]) + @Get("/api/v1/super-admin/deeds/:uid", [authHandler, roleHandler, ruleHandler, deedHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -87,7 +88,7 @@ export default class DeedsController extends ApiController { /** * @description Modify a specific deed by uid */ - @Put("/api/v1/super-admin/deeds/:uid", [authHandler, ruleHandler, deedHandler]) + @Put("/api/v1/super-admin/deeds/:uid", [authHandler, roleHandler, ruleHandler, deedHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/DocumentTypesController.ts b/src/app/api/super-admin/DocumentTypesController.ts index 577086d5..85dc6896 100644 --- a/src/app/api/super-admin/DocumentTypesController.ts +++ b/src/app/api/super-admin/DocumentTypesController.ts @@ -10,6 +10,7 @@ import { validateOrReject } from "class-validator"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; import documentTypeHandler from "@App/middlewares/OfficeMembershipHandlers/DocumentTypeHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -21,7 +22,7 @@ export default class DocumentTypesController extends ApiController { /** * @description Get all document-types */ - @Get("/api/v1/super-admin/document-types", [authHandler, ruleHandler]) + @Get("/api/v1/super-admin/document-types", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -53,7 +54,7 @@ export default class DocumentTypesController extends ApiController { /** * @description Create a new documentType */ - @Post("/api/v1/super-admin/document-types", [authHandler, ruleHandler, documentTypeHandler]) + @Post("/api/v1/super-admin/document-types", [authHandler, roleHandler, ruleHandler, documentTypeHandler]) protected async post(req: Request, response: Response) { try { //init DocumentType resource with request body values @@ -82,7 +83,7 @@ export default class DocumentTypesController extends ApiController { /** * @description Modify a specific documentType by uid */ - @Put("/api/v1/super-admin/document-types/:uid", [authHandler, ruleHandler, documentTypeHandler]) + @Put("/api/v1/super-admin/document-types/:uid", [authHandler, roleHandler, ruleHandler, documentTypeHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -122,7 +123,7 @@ export default class DocumentTypesController extends ApiController { /** * @description Get a specific documentType by uid */ - @Get("/api/v1/super-admin/document-types/:uid", [authHandler, ruleHandler, documentTypeHandler]) + @Get("/api/v1/super-admin/document-types/:uid", [authHandler, roleHandler, ruleHandler, documentTypeHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/DocumentsController.ts b/src/app/api/super-admin/DocumentsController.ts index 6d2e7400..f589ce4c 100644 --- a/src/app/api/super-admin/DocumentsController.ts +++ b/src/app/api/super-admin/DocumentsController.ts @@ -1,5 +1,6 @@ import authHandler from "@App/middlewares/AuthHandler"; import documentHandler from "@App/middlewares/OfficeMembershipHandlers/DocumentHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; import ApiController from "@Common/system/controller-pattern/ApiController"; import { Controller, Delete, Get, Post, Put } from "@ControllerPattern/index"; @@ -21,7 +22,7 @@ export default class DocumentsController extends ApiController { * @description Get all documents * @returns IDocument[] list of documents */ - @Get("/api/v1/super-admin/documents", [authHandler, ruleHandler]) + @Get("/api/v1/super-admin/documents", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -56,7 +57,7 @@ export default class DocumentsController extends ApiController { * @description Create a new document * @returns IDocument created */ - @Post("/api/v1/super-admin/documents", [authHandler, ruleHandler, documentHandler]) + @Post("/api/v1/super-admin/documents", [authHandler, roleHandler, ruleHandler, documentHandler]) protected async post(req: Request, response: Response) { try { //init Document resource with request body values @@ -84,7 +85,7 @@ export default class DocumentsController extends ApiController { /** * @description Update a specific document */ - @Put("/api/v1/super-admin/documents/:uid", [authHandler, ruleHandler, documentHandler]) + @Put("/api/v1/super-admin/documents/:uid", [authHandler, roleHandler, ruleHandler, documentHandler]) protected async update(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -123,7 +124,7 @@ export default class DocumentsController extends ApiController { /** * @description Delete a specific document */ - @Delete("/api/v1/super-admin/documents/:uid", [authHandler, ruleHandler, documentHandler]) + @Delete("/api/v1/super-admin/documents/:uid", [authHandler, roleHandler, ruleHandler, documentHandler]) protected async delete(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -156,7 +157,7 @@ export default class DocumentsController extends ApiController { /** * @description Get a specific document by uid */ - @Get("/api/v1/super-admin/documents/:uid", [authHandler, ruleHandler, documentHandler]) + @Get("/api/v1/super-admin/documents/:uid", [authHandler, roleHandler, ruleHandler, documentHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/FilesController.ts b/src/app/api/super-admin/FilesController.ts index cf085d5f..cb1b7f8d 100644 --- a/src/app/api/super-admin/FilesController.ts +++ b/src/app/api/super-admin/FilesController.ts @@ -8,6 +8,7 @@ import { File } from "le-coffre-resources/dist/SuperAdmin"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; import fileHandler from "@App/middlewares/OfficeMembershipHandlers/FileHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -20,7 +21,7 @@ export default class FilesController extends ApiController { * @description Get all Files * @returns File[] list of Files */ - @Get("/api/v1/super-admin/files", [authHandler, ruleHandler]) + @Get("/api/v1/super-admin/files", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -50,7 +51,7 @@ export default class FilesController extends ApiController { /** * @description Get a specific File by uid */ - @Get("/api/v1/super-admin/files/download/:uid", [authHandler, ruleHandler, fileHandler]) + @Get("/api/v1/super-admin/files/download/:uid", [authHandler, roleHandler, ruleHandler, fileHandler]) protected async download(req: Request, response: Response) { const uid = req.params["uid"]; if (!uid) { @@ -78,7 +79,7 @@ export default class FilesController extends ApiController { /** * @description Delete a specific File */ - @Delete("/api/v1/super-admin/files/:uid", [authHandler, ruleHandler, fileHandler]) + @Delete("/api/v1/super-admin/files/:uid", [authHandler, roleHandler, ruleHandler, fileHandler]) protected async delete(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -116,7 +117,7 @@ export default class FilesController extends ApiController { /** * @description Get a specific File by uid */ - @Get("/api/v1/super-admin/files/:uid", [authHandler, ruleHandler, fileHandler]) + @Get("/api/v1/super-admin/files/:uid", [authHandler, roleHandler, ruleHandler, fileHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/LiveVoteController.ts b/src/app/api/super-admin/LiveVoteController.ts index 0e3307f4..4a9104ca 100644 --- a/src/app/api/super-admin/LiveVoteController.ts +++ b/src/app/api/super-admin/LiveVoteController.ts @@ -1,4 +1,5 @@ import authHandler from "@App/middlewares/AuthHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; import ApiController from "@Common/system/controller-pattern/ApiController"; import { Controller, Post } from "@ControllerPattern/index"; import { EAppointmentStatus } from "@prisma/client"; @@ -26,7 +27,7 @@ export default class LiveVoteController extends ApiController { /** * @description Create a new vote */ - @Post("/api/v1/super-admin/live-votes", [authHandler]) + @Post("/api/v1/super-admin/live-votes", [authHandler, roleHandler]) protected async post(req: Request, response: Response) { try { const userId = req.body.user.userId; diff --git a/src/app/api/super-admin/OfficeFoldersController.ts b/src/app/api/super-admin/OfficeFoldersController.ts index de9d6586..e0b01345 100644 --- a/src/app/api/super-admin/OfficeFoldersController.ts +++ b/src/app/api/super-admin/OfficeFoldersController.ts @@ -9,6 +9,7 @@ import { validateOrReject } from "class-validator"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; import folderHandler from "@App/middlewares/OfficeMembershipHandlers/FolderHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -20,7 +21,7 @@ export default class OfficeFoldersController extends ApiController { /** * @description Get all folders */ - @Get("/api/v1/super-admin/folders", [authHandler, ruleHandler]) + @Get("/api/v1/super-admin/folders", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -79,7 +80,7 @@ export default class OfficeFoldersController extends ApiController { /** * @description Create a new folder */ - @Post("/api/v1/super-admin/folders", [authHandler, ruleHandler, folderHandler]) + @Post("/api/v1/super-admin/folders", [authHandler, roleHandler, ruleHandler, folderHandler]) protected async post(req: Request, response: Response) { try { //init OfficeFolder resource with request body values @@ -103,7 +104,7 @@ export default class OfficeFoldersController extends ApiController { /** * @description Modify a specific folder by uid */ - @Put("/api/v1/super-admin/folders/:uid", [authHandler, ruleHandler, folderHandler]) + @Put("/api/v1/super-admin/folders/:uid", [authHandler, roleHandler, ruleHandler, folderHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -145,7 +146,7 @@ export default class OfficeFoldersController extends ApiController { * @description Get a specific folder by uid * @returns IFolder */ - @Get("/api/v1/super-admin/folders/:uid", [authHandler, ruleHandler, folderHandler]) + @Get("/api/v1/super-admin/folders/:uid", [authHandler, roleHandler, ruleHandler, folderHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -180,7 +181,7 @@ export default class OfficeFoldersController extends ApiController { /** * @description Delete a specific folder */ - @Delete("/api/v1/super-admin/folders/:uid", [authHandler, ruleHandler, folderHandler]) + @Delete("/api/v1/super-admin/folders/:uid", [authHandler, roleHandler, ruleHandler, folderHandler]) protected async delete(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/OfficeRolesController.ts b/src/app/api/super-admin/OfficeRolesController.ts index 80d54d7e..802c223e 100644 --- a/src/app/api/super-admin/OfficeRolesController.ts +++ b/src/app/api/super-admin/OfficeRolesController.ts @@ -9,6 +9,7 @@ import { Prisma } from "@prisma/client"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; import officeRoleHandler from "@App/middlewares/OfficeMembershipHandlers/OfficeRoleHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -20,7 +21,7 @@ export default class OfficeRolesController extends ApiController { /** * @description Get all officeRoles */ - @Get("/api/v1/super-admin/office-roles", [authHandler, ruleHandler]) + @Get("/api/v1/super-admin/office-roles", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -62,7 +63,7 @@ export default class OfficeRolesController extends ApiController { /** * @description Create a new officeRole */ - @Post("/api/v1/super-admin/office-roles", [authHandler, ruleHandler, officeRoleHandler]) + @Post("/api/v1/super-admin/office-roles", [authHandler, roleHandler, ruleHandler, officeRoleHandler]) protected async getAddresses(req: Request, response: Response) { try { //init IOfficeRole resource with request body values @@ -90,7 +91,7 @@ export default class OfficeRolesController extends ApiController { /** * @description Modify a specific officeRole by uid */ - @Put("/api/v1/super-admin/office-roles/:uid", [authHandler, ruleHandler, officeRoleHandler]) + @Put("/api/v1/super-admin/office-roles/:uid", [authHandler, roleHandler, ruleHandler, officeRoleHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -131,7 +132,7 @@ export default class OfficeRolesController extends ApiController { /** * @description Get a specific officeRole by uid */ - @Get("/api/v1/super-admin/office-roles/:uid", [authHandler, ruleHandler, officeRoleHandler]) + @Get("/api/v1/super-admin/office-roles/:uid", [authHandler, roleHandler, ruleHandler, officeRoleHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/OfficesController.ts b/src/app/api/super-admin/OfficesController.ts index e6702675..3fb1bd00 100644 --- a/src/app/api/super-admin/OfficesController.ts +++ b/src/app/api/super-admin/OfficesController.ts @@ -8,6 +8,7 @@ import { Office as OfficeResource } from "le-coffre-resources/dist/SuperAdmin"; import { validateOrReject } from "class-validator"; import ruleHandler from "@App/middlewares/RulesHandler"; import authHandler from "@App/middlewares/AuthHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -18,7 +19,7 @@ export default class OfficesController extends ApiController { /** * @description Get all offices */ - @Get("/api/v1/super-admin/offices", [authHandler, ruleHandler]) + @Get("/api/v1/super-admin/offices", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -53,7 +54,7 @@ export default class OfficesController extends ApiController { /** * @description Create a new office */ - @Post("/api/v1/super-admin/offices", [authHandler, ruleHandler]) + @Post("/api/v1/super-admin/offices", [authHandler, roleHandler, ruleHandler]) protected async post(req: Request, response: Response) { try { //init IUser resource with request body values @@ -76,7 +77,7 @@ export default class OfficesController extends ApiController { /** * @description Modify a specific office by uid */ - @Put("/api/v1/super-admin/offices/:uid", [authHandler, ruleHandler]) + @Put("/api/v1/super-admin/offices/:uid", [authHandler, roleHandler, ruleHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -111,7 +112,7 @@ export default class OfficesController extends ApiController { /** * @description Get a specific office by uid */ - @Get("/api/v1/super-admin/offices/:uid", [authHandler, ruleHandler]) + @Get("/api/v1/super-admin/offices/:uid", [authHandler, roleHandler, ruleHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/RolesController.ts b/src/app/api/super-admin/RolesController.ts index ba0683ab..372c02c5 100644 --- a/src/app/api/super-admin/RolesController.ts +++ b/src/app/api/super-admin/RolesController.ts @@ -7,6 +7,7 @@ import { validateOrReject } from "class-validator"; import { Role } from "le-coffre-resources/dist/SuperAdmin"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -18,7 +19,7 @@ export default class RolesController extends ApiController { /** * @description Get all roles */ - @Get("/api/v1/super-admin/roles", [authHandler, ruleHandler]) + @Get("/api/v1/super-admin/roles", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -44,7 +45,7 @@ export default class RolesController extends ApiController { /** * @description Create a new role */ - @Post("/api/v1/super-admin/roles", [authHandler, ruleHandler]) + @Post("/api/v1/super-admin/roles", [authHandler, roleHandler, ruleHandler]) protected async getAddresses(req: Request, response: Response) { try { //init IRole resource with request body values @@ -72,7 +73,7 @@ export default class RolesController extends ApiController { /** * @description Modify a specific role by uid */ - @Put("/api/v1/super-admin/roles/:uid", [authHandler, ruleHandler]) + @Put("/api/v1/super-admin/roles/:uid", [authHandler, roleHandler, ruleHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -113,7 +114,7 @@ export default class RolesController extends ApiController { /** * @description Get a specific role by uid */ - @Get("/api/v1/super-admin/roles/:uid", [authHandler, ruleHandler]) + @Get("/api/v1/super-admin/roles/:uid", [authHandler, roleHandler, ruleHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/RulesController.ts b/src/app/api/super-admin/RulesController.ts index c0bc87c1..025ec5c0 100644 --- a/src/app/api/super-admin/RulesController.ts +++ b/src/app/api/super-admin/RulesController.ts @@ -7,6 +7,7 @@ import { validateOrReject } from "class-validator"; import { Rule } from "le-coffre-resources/dist/SuperAdmin"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -18,7 +19,7 @@ export default class RulesController extends ApiController { /** * @description Get all rules */ - @Get("/api/v1/super-admin/rules", [authHandler, ruleHandler]) + @Get("/api/v1/super-admin/rules", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -44,7 +45,7 @@ export default class RulesController extends ApiController { /** * @description Create a new rule */ - @Post("/api/v1/super-admin/rules", [authHandler, ruleHandler]) + @Post("/api/v1/super-admin/rules", [authHandler, roleHandler, ruleHandler]) protected async getAddresses(req: Request, response: Response) { try { //init IRule resource with request body values @@ -72,7 +73,7 @@ export default class RulesController extends ApiController { /** * @description Modify a specific rule by uid */ - @Put("/api/v1/super-admin/rules/:uid", [authHandler, ruleHandler]) + @Put("/api/v1/super-admin/rules/:uid", [authHandler, roleHandler, ruleHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -113,7 +114,7 @@ export default class RulesController extends ApiController { /** * @description Get a specific rule by uid */ - @Get("/api/v1/super-admin/rules/:uid", [authHandler, ruleHandler]) + @Get("/api/v1/super-admin/rules/:uid", [authHandler, roleHandler, ruleHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/UsersController.ts b/src/app/api/super-admin/UsersController.ts index a9815f14..f6e28794 100644 --- a/src/app/api/super-admin/UsersController.ts +++ b/src/app/api/super-admin/UsersController.ts @@ -7,6 +7,7 @@ import { validateOrReject } from "class-validator"; import User from "le-coffre-resources/dist/SuperAdmin"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -18,7 +19,7 @@ export default class UsersController extends ApiController { /** * @description Get all users */ - @Get("/api/v1/super-admin/users", [authHandler, ruleHandler]) + @Get("/api/v1/super-admin/users", [authHandler, roleHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -58,7 +59,7 @@ export default class UsersController extends ApiController { /** * @description Create a new user */ - @Post("/api/v1/super-admin/users", [authHandler, ruleHandler]) + @Post("/api/v1/super-admin/users", [authHandler, roleHandler, ruleHandler]) protected async create(req: Request, response: Response) { try { //init IUser resource with request body values @@ -86,7 +87,7 @@ export default class UsersController extends ApiController { /** * @description Modify a specific user by uid */ - @Put("/api/v1/super-admin/users/:uid", [authHandler, ruleHandler]) + @Put("/api/v1/super-admin/users/:uid", [authHandler, roleHandler, ruleHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -128,7 +129,7 @@ export default class UsersController extends ApiController { /** * @description Get a specific user by uid */ - @Get("/api/v1/super-admin/users/:uid", [authHandler, ruleHandler]) + @Get("/api/v1/super-admin/users/:uid", [authHandler, roleHandler, ruleHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/VotesController.ts b/src/app/api/super-admin/VotesController.ts index 4d25ef6d..308e46e3 100644 --- a/src/app/api/super-admin/VotesController.ts +++ b/src/app/api/super-admin/VotesController.ts @@ -6,6 +6,7 @@ import { Service } from "typedi"; import { Vote } from "le-coffre-resources/dist/SuperAdmin"; import authHandler from "@App/middlewares/AuthHandler"; import { Votes } from "@prisma/client"; +import roleHandler from "@App/middlewares/RolesHandler"; @Controller() @Service() @@ -17,7 +18,7 @@ export default class VotesController extends ApiController { /** * @description Get all votes */ - @Get("/api/v1/super-admin/votes", [authHandler]) + @Get("/api/v1/super-admin/votes", [authHandler, roleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -43,7 +44,7 @@ export default class VotesController extends ApiController { /** * @description Get a specific vote by uid */ - @Get("/api/v1/super-admin/votes/:uid", [authHandler]) + @Get("/api/v1/super-admin/votes/:uid", [authHandler, roleHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -78,7 +79,7 @@ export default class VotesController extends ApiController { /** * @description Delete a specific vote */ - @Delete("/api/v1/super-admin/votes/:uid", [authHandler]) + @Delete("/api/v1/super-admin/votes/:uid", [authHandler, roleHandler]) protected async delete(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/middlewares/RolesHandler.ts b/src/app/middlewares/RolesHandler.ts new file mode 100644 index 00000000..3a4a9c77 --- /dev/null +++ b/src/app/middlewares/RolesHandler.ts @@ -0,0 +1,22 @@ +import HttpCodes from "@Common/system/controller-pattern/HttpCodes"; +import { NextFunction, Request, Response } from "express"; + +export default async function roleHandler(req: Request, response: Response, next: NextFunction) { + try { + + const namespace = req.path && req.path.split("/")[3]; + const role = req.body.user.role; + + if (namespace != "notary" && role != namespace && role != "super-admin") { + response.status(HttpCodes.UNAUTHORIZED).send("Unauthorized with this role"); + return; + } + + next(); + + } catch (error) { + console.log(error); + response.status(HttpCodes.INTERNAL_ERROR).send("Internal server error"); + return; + } +} diff --git a/src/app/middlewares/RulesHandler.ts b/src/app/middlewares/RulesHandler.ts index 16040875..cd35dcfe 100644 --- a/src/app/middlewares/RulesHandler.ts +++ b/src/app/middlewares/RulesHandler.ts @@ -6,19 +6,7 @@ export default async function ruleHandler(req: Request, response: Response, next const rules = req.body.user.rules; const service = req.path && req.path.split("/")[4]; - // if (!rules) { - // response.status(HttpCodes.UNAUTHORIZED).send("Missing rules in JWT"); - // return; - // } - const namespace = req.path && req.path.split("/")[3]; - const role = req.body.user.role; - - if (namespace != "notary" && role != namespace && role != "super-admin") { - response.status(HttpCodes.UNAUTHORIZED).send("Unauthorized with this role"); - return; - } - - if (!rules.includes(req.method + " " + service) && role != "super-admin") { + if (!rules.includes(req.method + " " + service)) { response.status(HttpCodes.UNAUTHORIZED).send("Unauthorized with those rules"); return; } From 24327a99a3cd44616688b3f56d5c8abbe8458821 Mon Sep 17 00:00:00 2001 From: OxSaitama Date: Wed, 16 Aug 2023 11:09:48 +0200 Subject: [PATCH 2/7] add checks on user (office)role update --- src/app/api/admin/UsersController.ts | 31 +++++++++++++++++-- src/app/api/super-admin/UsersController.ts | 30 ++++++++++++++++-- .../admin/UsersService/UsersService.ts | 10 +++++- 3 files changed, 65 insertions(+), 6 deletions(-) diff --git a/src/app/api/admin/UsersController.ts b/src/app/api/admin/UsersController.ts index ee208504..1c7c3251 100644 --- a/src/app/api/admin/UsersController.ts +++ b/src/app/api/admin/UsersController.ts @@ -10,11 +10,13 @@ import ruleHandler from "@App/middlewares/RulesHandler"; import userHandler from "@App/middlewares/OfficeMembershipHandlers/UserHandler"; import { validateOrReject } from "class-validator"; import roleHandler from "@App/middlewares/RolesHandler"; +import RolesService from "@Services/admin/RolesService/RolesService"; +import OfficeRolesService from "@Services/admin/OfficeRolesService/OfficeRolesService"; @Controller() @Service() export default class UsersController extends ApiController { - constructor(private usersService: UsersService) { + constructor(private usersService: UsersService, private roleService: RolesService, private officeRoleService: OfficeRolesService) { super(); } @@ -75,7 +77,7 @@ export default class UsersController extends ApiController { return; } - const userFound = await this.usersService.getByUid(uid); + const userFound = await this.usersService.getByUidWithRole(uid); if (!userFound) { this.httpNotFoundRequest(response, "user not found"); @@ -87,7 +89,30 @@ export default class UsersController extends ApiController { //validate user await validateOrReject(userEntity, { groups: ["updateUser"] }); - + + if(userEntity.role) { + const role = await this.roleService.getByUid(userEntity.role.uid!); + if(!role) { + this.httpBadRequest(response, "Role not found"); + return; + } + if (role.name === "super-admin" || userFound.role.name === "super-admin" ) { + this.httpBadRequest(response, "Cannot assign or remove super-admin role"); + return; + } + } + + if(userEntity.office_role) { + const officeRole = await this.officeRoleService.getByUid(userEntity.office_role.uid!); + if(!officeRole) { + this.httpBadRequest(response, "Office role not found"); + return; + } + if (officeRole.office_uid != userFound.office_uid) { + this.httpBadRequest(response, "Cannot assign an office role from another office"); + return; + } + } //call service to get prisma entity const userEntityUpdated = await this.usersService.update(uid, userEntity); diff --git a/src/app/api/super-admin/UsersController.ts b/src/app/api/super-admin/UsersController.ts index f6e28794..618c4728 100644 --- a/src/app/api/super-admin/UsersController.ts +++ b/src/app/api/super-admin/UsersController.ts @@ -8,11 +8,13 @@ import User from "le-coffre-resources/dist/SuperAdmin"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; import roleHandler from "@App/middlewares/RolesHandler"; +import RolesService from "@Services/super-admin/RolesService/RolesService"; +import OfficeRolesService from "@Services/super-admin/OfficeRolesService/OfficeRolesService"; @Controller() @Service() export default class UsersController extends ApiController { - constructor(private usersService: UsersService) { + constructor(private usersService: UsersService, private roleService: RolesService, private officeRoleService: OfficeRolesService) { super(); } @@ -97,7 +99,7 @@ export default class UsersController extends ApiController { return; } - const userFound = await this.usersService.getByUid(uid, {role: true, votes: true}); + const userFound = await this.usersService.getByUidWithRole(uid); if (!userFound) { this.httpNotFoundRequest(response, "user not found"); @@ -109,6 +111,30 @@ export default class UsersController extends ApiController { //validate user await validateOrReject(userEntity, { groups: ["updateUser"] }); + + if(userEntity.role) { + const role = await this.roleService.getByUid(userEntity.role.uid!); + if(!role) { + this.httpBadRequest(response, "Role not found"); + return; + } + if (role.name === "super-admin" || userFound.role.name === "super-admin" ) { + this.httpBadRequest(response, "Cannot assign or remove super-admin role"); + return; + } + } + + if(userEntity.office_role) { + const officeRole = await this.officeRoleService.getByUid(userEntity.office_role.uid!); + if(!officeRole) { + this.httpBadRequest(response, "Office role not found"); + return; + } + if (officeRole.office_uid != userFound.office_uid) { + this.httpBadRequest(response, "Cannot assign an office role from another office"); + return; + } + } //call service to get prisma entity const userEntityUpdated = await this.usersService.update(uid, userEntity); diff --git a/src/services/admin/UsersService/UsersService.ts b/src/services/admin/UsersService/UsersService.ts index f23c09d7..6167352e 100644 --- a/src/services/admin/UsersService/UsersService.ts +++ b/src/services/admin/UsersService/UsersService.ts @@ -31,7 +31,7 @@ export default class UsersService extends BaseService { * @description : Modify a user * @throws {Error} If user modification failed */ - public update(uid: string, userEntity: User): Promise { + public async update(uid: string, userEntity: User): Promise { return this.userRepository.updateRole(uid, userEntity); } @@ -51,6 +51,14 @@ export default class UsersService extends BaseService { return this.userRepository.findOneByUidWithOffice(uid); } + /** + * @description : Get a user by uid with office + * @throws {Error} If user cannot be get by uid + */ + public getByUidWithRole(uid: string) { + return this.userRepository.findOneByUidWithRole(uid); + } + /** * @description : Get a user by uid * @throws {Error} If user cannot be get by uid From 1ce013b5f661c663cb9ea749421d960b3859404c Mon Sep 17 00:00:00 2001 From: OxSaitama Date: Wed, 16 Aug 2023 13:53:32 +0200 Subject: [PATCH 3/7] remove uid in req body for updates --- package-lock.json | 862 ++++++++++--------- package.json | 2 +- src/app/api/admin/UsersController.ts | 4 - src/app/api/customer/FilesController.ts | 3 - src/app/api/super-admin/OfficesController.ts | 3 +- src/app/api/super-admin/RulesController.ts | 3 - src/app/api/super-admin/UsersController.ts | 3 - 7 files changed, 460 insertions(+), 420 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0290f4ae..e6e9857e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "cron": "^2.3.1", "express": "^4.18.2", "jsonwebtoken": "^9.0.0", - "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.66", + "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.67", "module-alias": "^2.2.2", "multer": "^1.4.5-lts.1", "next": "^13.1.5", @@ -70,17 +70,89 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", + "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.22.5" + "@babel/highlight": "^7.22.10", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { "version": "7.22.9", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", @@ -91,21 +163,21 @@ } }, "node_modules/@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz", + "integrity": "sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.10", "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", + "@babel/helpers": "^7.22.10", + "@babel/parser": "^7.22.10", "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -150,12 +222,12 @@ "dev": true }, "node_modules/@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", + "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5", + "@babel/types": "^7.22.10", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -165,9 +237,9 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", - "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", + "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.9", @@ -178,9 +250,6 @@ }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-environment-visitor": { @@ -309,27 +378,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz", + "integrity": "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==", "dev": true, "dependencies": { "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", + "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -408,9 +477,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", + "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -611,19 +680,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz", + "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", + "@babel/parser": "^7.22.10", + "@babel/types": "^7.22.10", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -655,9 +724,9 @@ "dev": true }, "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", + "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", @@ -720,16 +789,16 @@ } }, "node_modules/@jest/console": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.1.tgz", - "integrity": "sha512-Aj772AYgwTSr5w8qnyoJ0eDYvN6bMsH3ORH1ivMotrInHLKdUz6BDlaEXHdM6kODaBIkNIyQGzsMvRdOv7VG7Q==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.2.tgz", + "integrity": "sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w==", "dev": true, "dependencies": { "@jest/types": "^29.6.1", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1", + "jest-message-util": "^29.6.2", + "jest-util": "^29.6.2", "slash": "^3.0.0" }, "engines": { @@ -737,15 +806,15 @@ } }, "node_modules/@jest/core": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.1.tgz", - "integrity": "sha512-CcowHypRSm5oYQ1obz1wfvkjZZ2qoQlrKKvlfPwh5jUXVU12TWr2qMeH8chLMuTFzHh5a1g2yaqlqDICbr+ukQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.2.tgz", + "integrity": "sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg==", "dev": true, "dependencies": { - "@jest/console": "^29.6.1", - "@jest/reporters": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", + "@jest/console": "^29.6.2", + "@jest/reporters": "^29.6.2", + "@jest/test-result": "^29.6.2", + "@jest/transform": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", "ansi-escapes": "^4.2.1", @@ -754,20 +823,20 @@ "exit": "^0.1.2", "graceful-fs": "^4.2.9", "jest-changed-files": "^29.5.0", - "jest-config": "^29.6.1", - "jest-haste-map": "^29.6.1", - "jest-message-util": "^29.6.1", + "jest-config": "^29.6.2", + "jest-haste-map": "^29.6.2", + "jest-message-util": "^29.6.2", "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.1", - "jest-resolve-dependencies": "^29.6.1", - "jest-runner": "^29.6.1", - "jest-runtime": "^29.6.1", - "jest-snapshot": "^29.6.1", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", - "jest-watcher": "^29.6.1", + "jest-resolve": "^29.6.2", + "jest-resolve-dependencies": "^29.6.2", + "jest-runner": "^29.6.2", + "jest-runtime": "^29.6.2", + "jest-snapshot": "^29.6.2", + "jest-util": "^29.6.2", + "jest-validate": "^29.6.2", + "jest-watcher": "^29.6.2", "micromatch": "^4.0.4", - "pretty-format": "^29.6.1", + "pretty-format": "^29.6.2", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, @@ -784,37 +853,37 @@ } }, "node_modules/@jest/environment": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.1.tgz", - "integrity": "sha512-RMMXx4ws+Gbvw3DfLSuo2cfQlK7IwGbpuEWXCqyYDcqYTI+9Ju3a5hDnXaxjNsa6uKh9PQF2v+qg+RLe63tz5A==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.2.tgz", + "integrity": "sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==", "dev": true, "dependencies": { - "@jest/fake-timers": "^29.6.1", + "@jest/fake-timers": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", - "jest-mock": "^29.6.1" + "jest-mock": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.1.tgz", - "integrity": "sha512-N5xlPrAYaRNyFgVf2s9Uyyvr795jnB6rObuPx4QFvNJz8aAjpZUDfO4bh5G/xuplMID8PrnuF1+SfSyDxhsgYg==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.2.tgz", + "integrity": "sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg==", "dev": true, "dependencies": { - "expect": "^29.6.1", - "jest-snapshot": "^29.6.1" + "expect": "^29.6.2", + "jest-snapshot": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.1.tgz", - "integrity": "sha512-o319vIf5pEMx0LmzSxxkYYxo4wrRLKHq9dP1yJU7FoPTB0LfAKSz8SWD6D/6U3v/O52t9cF5t+MeJiRsfk7zMw==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.2.tgz", + "integrity": "sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==", "dev": true, "dependencies": { "jest-get-type": "^29.4.3" @@ -824,47 +893,47 @@ } }, "node_modules/@jest/fake-timers": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.1.tgz", - "integrity": "sha512-RdgHgbXyosCDMVYmj7lLpUwXA4c69vcNzhrt69dJJdf8azUrpRh3ckFCaTPNjsEeRi27Cig0oKDGxy5j7hOgHg==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.2.tgz", + "integrity": "sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==", "dev": true, "dependencies": { "@jest/types": "^29.6.1", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.6.1", - "jest-mock": "^29.6.1", - "jest-util": "^29.6.1" + "jest-message-util": "^29.6.2", + "jest-mock": "^29.6.2", + "jest-util": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.1.tgz", - "integrity": "sha512-2VjpaGy78JY9n9370H8zGRCFbYVWwjY6RdDMhoJHa1sYfwe6XM/azGN0SjY8kk7BOZApIejQ1BFPyH7FPG0w3A==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.2.tgz", + "integrity": "sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw==", "dev": true, "dependencies": { - "@jest/environment": "^29.6.1", - "@jest/expect": "^29.6.1", + "@jest/environment": "^29.6.2", + "@jest/expect": "^29.6.2", "@jest/types": "^29.6.1", - "jest-mock": "^29.6.1" + "jest-mock": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.1.tgz", - "integrity": "sha512-9zuaI9QKr9JnoZtFQlw4GREQbxgmNYXU6QuWtmuODvk5nvPUeBYapVR/VYMyi2WSx3jXTLJTJji8rN6+Cm4+FA==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.2.tgz", + "integrity": "sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", + "@jest/console": "^29.6.2", + "@jest/test-result": "^29.6.2", + "@jest/transform": "^29.6.2", "@jest/types": "^29.6.1", "@jridgewell/trace-mapping": "^0.3.18", "@types/node": "*", @@ -878,9 +947,9 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1", - "jest-worker": "^29.6.1", + "jest-message-util": "^29.6.2", + "jest-util": "^29.6.2", + "jest-worker": "^29.6.2", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", @@ -925,12 +994,12 @@ } }, "node_modules/@jest/test-result": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.1.tgz", - "integrity": "sha512-Ynr13ZRcpX6INak0TPUukU8GWRfm/vAytE3JbJNGAvINySWYdfE7dGZMbk36oVuK4CigpbhMn8eg1dixZ7ZJOw==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.2.tgz", + "integrity": "sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw==", "dev": true, "dependencies": { - "@jest/console": "^29.6.1", + "@jest/console": "^29.6.2", "@jest/types": "^29.6.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" @@ -940,14 +1009,14 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.1.tgz", - "integrity": "sha512-oBkC36PCDf/wb6dWeQIhaviU0l5u6VCsXa119yqdUosYAt7/FbQU2M2UoziO3igj/HBDEgp57ONQ3fm0v9uyyg==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.2.tgz", + "integrity": "sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw==", "dev": true, "dependencies": { - "@jest/test-result": "^29.6.1", + "@jest/test-result": "^29.6.2", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", + "jest-haste-map": "^29.6.2", "slash": "^3.0.0" }, "engines": { @@ -955,9 +1024,9 @@ } }, "node_modules/@jest/transform": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.1.tgz", - "integrity": "sha512-URnTneIU3ZjRSaf906cvf6Hpox3hIeJXRnz3VDSw5/X93gR8ycdfSIEy19FlVx8NFmpN7fe3Gb1xF+NjXaQLWg==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.2.tgz", + "integrity": "sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", @@ -968,9 +1037,9 @@ "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", + "jest-haste-map": "^29.6.2", "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.1", + "jest-util": "^29.6.2", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -1012,9 +1081,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "engines": { "node": ">=6.0.0" } @@ -1034,21 +1103,15 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, "node_modules/@mailchimp/mailchimp_transactional": { "version": "1.0.50", "resolved": "https://registry.npmjs.org/@mailchimp/mailchimp_transactional/-/mailchimp_transactional-1.0.50.tgz", @@ -1061,14 +1124,14 @@ } }, "node_modules/@next/env": { - "version": "13.4.12", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.12.tgz", - "integrity": "sha512-RmHanbV21saP/6OEPBJ7yJMuys68cIf8OBBWd7+uj40LdpmswVAwe1uzeuFyUsd6SfeITWT3XnQfn6wULeKwDQ==" + "version": "13.4.16", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.16.tgz", + "integrity": "sha512-pCU0sJBqdfKP9mwDadxvZd+eLz3fZrTlmmDHY12Hdpl3DD0vy8ou5HWKVfG0zZS6tqhL4wnQqRbspdY5nqa7MA==" }, "node_modules/@next/swc-darwin-arm64": { - "version": "13.4.12", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.12.tgz", - "integrity": "sha512-deUrbCXTMZ6ZhbOoloqecnUeNpUOupi8SE2tx4jPfNS9uyUR9zK4iXBvH65opVcA/9F5I/p8vDXSYbUlbmBjZg==", + "version": "13.4.16", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.16.tgz", + "integrity": "sha512-Rl6i1uUq0ciRa3VfEpw6GnWAJTSKo9oM2OrkGXPsm7rMxdd2FR5NkKc0C9xzFCI4+QtmBviWBdF2m3ur3Nqstw==", "cpu": [ "arm64" ], @@ -1081,9 +1144,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "13.4.12", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.12.tgz", - "integrity": "sha512-WRvH7RxgRHlC1yb5oG0ZLx8F7uci9AivM5/HGGv9ZyG2Als8Ij64GC3d+mQ5sJhWjusyU6T6V1WKTUoTmOB0zQ==", + "version": "13.4.16", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.16.tgz", + "integrity": "sha512-o1vIKYbZORyDmTrPV1hApt9NLyWrS5vr2p5hhLGpOnkBY1cz6DAXjv8Lgan8t6X87+83F0EUDlu7klN8ieZ06A==", "cpu": [ "x64" ], @@ -1096,9 +1159,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.4.12", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.12.tgz", - "integrity": "sha512-YEKracAWuxp54tKiAvvq73PUs9lok57cc8meYRibTWe/VdPB2vLgkTVWFcw31YDuRXdEhdX0fWS6Q+ESBhnEig==", + "version": "13.4.16", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.16.tgz", + "integrity": "sha512-JRyAl8lCfyTng4zoOmE6hNI2f1MFUr7JyTYCHl1RxX42H4a5LMwJhDVQ7a9tmDZ/yj+0hpBn+Aan+d6lA3v0UQ==", "cpu": [ "arm64" ], @@ -1111,9 +1174,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.4.12", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.12.tgz", - "integrity": "sha512-LhJR7/RAjdHJ2Isl2pgc/JaoxNk0KtBgkVpiDJPVExVWA1c6gzY57+3zWuxuyWzTG+fhLZo2Y80pLXgIJv7g3g==", + "version": "13.4.16", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.16.tgz", + "integrity": "sha512-9gqVqNzUMWbUDgDiND18xoUqhwSm2gmksqXgCU0qaOKt6oAjWz8cWYjgpPVD0WICKFylEY/gvPEP1fMZDVFZ/g==", "cpu": [ "arm64" ], @@ -1126,9 +1189,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.4.12", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.12.tgz", - "integrity": "sha512-1DWLL/B9nBNiQRng+1aqs3OaZcxC16Nf+mOnpcrZZSdyKHek3WQh6j/fkbukObgNGwmCoVevLUa/p3UFTTqgqg==", + "version": "13.4.16", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.16.tgz", + "integrity": "sha512-KcQGwchAKmZVPa8i5PLTxvTs1/rcFnSltfpTm803Tr/BtBV3AxCkHLfhtoyVtVzx/kl/oue8oS+DSmbepQKwhw==", "cpu": [ "x64" ], @@ -1141,9 +1204,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "13.4.12", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.12.tgz", - "integrity": "sha512-kEAJmgYFhp0VL+eRWmUkVxLVunn7oL9Mdue/FS8yzRBVj7Z0AnIrHpTIeIUl1bbdQq1VaoOztnKicAjfkLTRCQ==", + "version": "13.4.16", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.16.tgz", + "integrity": "sha512-2RbMZNxYnJmW8EPHVBsGZPq5zqWAyBOc/YFxq/jIQ/Yn3RMFZ1dZVCjtIcsiaKmgh7mjA/W0ApbumutHNxRqqQ==", "cpu": [ "x64" ], @@ -1156,9 +1219,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.4.12", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.12.tgz", - "integrity": "sha512-GMLuL/loR6yIIRTnPRY6UGbLL9MBdw2anxkOnANxvLvsml4F0HNIgvnU3Ej4BjbqMTNjD4hcPFdlEow4XHPdZA==", + "version": "13.4.16", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.16.tgz", + "integrity": "sha512-thDcGonELN7edUKzjzlHrdoKkm7y8IAdItQpRvvMxNUXa4d9r0ElofhTZj5emR7AiXft17hpen+QAkcWpqG7Jg==", "cpu": [ "arm64" ], @@ -1171,9 +1234,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.4.12", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.12.tgz", - "integrity": "sha512-PhgNqN2Vnkm7XaMdRmmX0ZSwZXQAtamBVSa9A/V1dfKQCV1rjIZeiy/dbBnVYGdj63ANfsOR/30XpxP71W0eww==", + "version": "13.4.16", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.16.tgz", + "integrity": "sha512-f7SE1Mo4JAchUWl0LQsbtySR9xCa+x55C0taetjUApKtcLR3AgAjASrrP+oE1inmLmw573qRnE1eZN8YJfEBQw==", "cpu": [ "ia32" ], @@ -1186,9 +1249,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.4.12", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.12.tgz", - "integrity": "sha512-Z+56e/Ljt0bUs+T+jPjhFyxYBcdY2RIq9ELFU+qAMQMteHo7ymbV7CKmlcX59RI9C4YzN8PgMgLyAoi916b5HA==", + "version": "13.4.16", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.16.tgz", + "integrity": "sha512-WamDZm1M/OEM4QLce3lOmD1XdLEl37zYZwlmOLhmF7qYJ2G6oYm9+ejZVv+LakQIsIuXhSpVlOvrxIAHqwRkPQ==", "cpu": [ "x64" ], @@ -1365,13 +1428,13 @@ } }, "node_modules/@types/cron": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/cron/-/cron-2.0.1.tgz", - "integrity": "sha512-WHa/1rtNtD2Q/H0+YTTZoty+/5rcE66iAFX2IY+JuUoOACsevYyFkSYu/2vdw+G5LrmO7Lxowrqm0av4k3qWNQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/cron/-/cron-2.4.0.tgz", + "integrity": "sha512-5bBaAkqvSFBX8JMi/xCofNzG5E594TNsApMz68dLd/sQYz/HGQqgcxGHTRjOvD4G3Y+YF1Oo3S7QdCvKt1KAJQ==", + "deprecated": "This is a stub types definition. cron provides its own type definitions, so you do not need this installed.", "dev": true, "dependencies": { - "@types/luxon": "*", - "@types/node": "*" + "cron": "*" } }, "node_modules/@types/express": { @@ -1456,12 +1519,6 @@ "@types/node": "*" } }, - "node_modules/@types/luxon": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.3.1.tgz", - "integrity": "sha512-XOS5nBcgEeP2PpcqJHjCWhUCAzGfXIU8ILOSLpx2FhxqMW9KdxgCGXNOEKGVBfveKtIpztHzKK5vSRVLyW/NqA==", - "dev": true - }, "node_modules/@types/mailchimp__mailchimp_transactional": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/mailchimp__mailchimp_transactional/-/mailchimp__mailchimp_transactional-1.0.5.tgz", @@ -1478,9 +1535,9 @@ "dev": true }, "node_modules/@types/module-alias": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/module-alias/-/module-alias-2.0.1.tgz", - "integrity": "sha512-DN/CCT1HQG6HquBNJdLkvV+4v5l/oEuwOHUPLxI+Eub0NED+lk0YUfba04WGH90EINiUrNgClkNnwGmbICeWMQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/module-alias/-/module-alias-2.0.2.tgz", + "integrity": "sha512-Oeo5NEjAceFgN8OzGiLXPswgv2GBmrDGuTnLS0sQ8g4Mq5sB5c97Hu5B+n9Gu/j+5Y+oUb4TSawHXkZ8MENGyw==", "dev": true }, "node_modules/@types/multer": { @@ -1493,9 +1550,9 @@ } }, "node_modules/@types/node": { - "version": "18.17.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.1.tgz", - "integrity": "sha512-xlR1jahfizdplZYRU59JlUx9uzF1ARa8jbhM11ccpCJya8kvos5jwdm2ZAgxSCwOl0fq21svP18EVwPBXMQudw==" + "version": "18.17.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.5.tgz", + "integrity": "sha512-xNbS75FxH6P4UXTPUJp/zNPq6/xsfdJKussCWNOnz4aULWIRwMgP1LgaB5RiBnMX1DPCYenuqGZfnIAx5mbFLA==" }, "node_modules/@types/node-fetch": { "version": "2.6.4", @@ -1530,12 +1587,6 @@ "@types/node": "*" } }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true - }, "node_modules/@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", @@ -1582,9 +1633,9 @@ "dev": true }, "node_modules/@types/validator": { - "version": "13.7.17", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.17.tgz", - "integrity": "sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ==" + "version": "13.11.1", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.1.tgz", + "integrity": "sha512-d/MUkJYdOeKycmm75Arql4M5+UuXmf4cHdHKsyw1GcvnNgL6s77UkgSgJ8TE/rI5PYsnwYq5jkcWBLuN/MpQ1A==" }, "node_modules/@types/yargs": { "version": "17.0.24", @@ -1728,12 +1779,12 @@ } }, "node_modules/babel-jest": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.1.tgz", - "integrity": "sha512-qu+3bdPEQC6KZSPz+4Fyjbga5OODNcp49j6GKzG1EKbkfyJBxEYGVUmVGpwCSeGouG52R4EgYMLb6p9YeEEQ4A==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.2.tgz", + "integrity": "sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A==", "dev": true, "dependencies": { - "@jest/transform": "^29.6.1", + "@jest/transform": "^29.6.2", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", "babel-preset-jest": "^29.5.0", @@ -1906,9 +1957,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", "dev": true, "funding": [ { @@ -1925,9 +1976,9 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", "update-browserslist-db": "^1.0.11" }, "bin": { @@ -2049,9 +2100,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001517", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", - "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", + "version": "1.0.30001521", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001521.tgz", + "integrity": "sha512-fnx1grfpEOvDGH+V17eccmNjucGUnCbP6KL+l5KqBIerp26WK/+RQ7CIDE37KGJjaPyqWXXlFUyKiWmvdNNKmQ==", "funding": [ { "type": "opencollective", @@ -2335,17 +2386,17 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, "node_modules/cron": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/cron/-/cron-2.4.0.tgz", - "integrity": "sha512-Cx77ic1TyIAtUggr0oAhtS8MLzPBUqGNIvdDM7jE3oFIxfe8LXWI9q3iQN/H2CebAiMir53LQKWOhEKnzkJTAQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/cron/-/cron-2.4.1.tgz", + "integrity": "sha512-ty0hUSPuENwDtIShDFxUxWEIsqiu2vhoFtt6Vwrbg4lHGtJX2/cV2p0hH6/qaEM9Pj+i6mQoau48BO5wBpkP4w==", "dependencies": { "luxon": "^3.2.1" } }, "node_modules/cron-parser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.8.1.tgz", - "integrity": "sha512-jbokKWGcyU4gl6jAfX97E1gDpY12DJ1cLJZmoDzaAln/shZ+S3KBFBuA2Q6WeUN4gJf/8klnV1EfvhA2lK5IRQ==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", + "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", "dependencies": { "luxon": "^3.2.1" }, @@ -2376,10 +2427,18 @@ } }, "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } }, "node_modules/deepmerge": { "version": "4.3.1", @@ -2467,9 +2526,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.473", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.473.tgz", - "integrity": "sha512-aVfC8+440vGfl06l8HKKn8/PD5jRfSnLkTTD65EFvU46igbpQRri1gxSzW9/+TeUlwYzrXk1sw867T96zlyECA==", + "version": "1.4.492", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.492.tgz", + "integrity": "sha512-36K9b/6skMVwAIEsC7GiQ8I8N3soCALVSHqWHzNDtGemAcI9Xu8hP02cywWM0A794rTHm0b0zHPeLJHtgFVamQ==", "dev": true }, "node_modules/emittery": { @@ -2584,17 +2643,17 @@ } }, "node_modules/expect": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.1.tgz", - "integrity": "sha512-XEdDLonERCU1n9uR56/Stx9OqojaLAQtZf9PrCHH9Hl8YXiEIka3H4NXJ3NOIBmQJTg7+j7buh34PMHfJujc8g==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.2.tgz", + "integrity": "sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==", "dev": true, "dependencies": { - "@jest/expect-utils": "^29.6.1", + "@jest/expect-utils": "^29.6.2", "@types/node": "*", "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1" + "jest-matcher-utils": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-util": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -3061,9 +3120,9 @@ } }, "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -3257,15 +3316,15 @@ } }, "node_modules/jest": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.1.tgz", - "integrity": "sha512-Nirw5B4nn69rVUZtemCQhwxOBhm0nsp3hmtF4rzCeWD7BkjAXRIji7xWQfnTNbz9g0aVsBX6aZK3n+23LM6uDw==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.2.tgz", + "integrity": "sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg==", "dev": true, "dependencies": { - "@jest/core": "^29.6.1", + "@jest/core": "^29.6.2", "@jest/types": "^29.6.1", "import-local": "^3.0.2", - "jest-cli": "^29.6.1" + "jest-cli": "^29.6.2" }, "bin": { "jest": "bin/jest.js" @@ -3296,28 +3355,28 @@ } }, "node_modules/jest-circus": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.1.tgz", - "integrity": "sha512-tPbYLEiBU4MYAL2XoZme/bgfUeotpDBd81lgHLCbDZZFaGmECk0b+/xejPFtmiBP87GgP/y4jplcRpbH+fgCzQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.2.tgz", + "integrity": "sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw==", "dev": true, "dependencies": { - "@jest/environment": "^29.6.1", - "@jest/expect": "^29.6.1", - "@jest/test-result": "^29.6.1", + "@jest/environment": "^29.6.2", + "@jest/expect": "^29.6.2", + "@jest/test-result": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "dedent": "^0.7.0", + "dedent": "^1.0.0", "is-generator-fn": "^2.0.0", - "jest-each": "^29.6.1", - "jest-matcher-utils": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-runtime": "^29.6.1", - "jest-snapshot": "^29.6.1", - "jest-util": "^29.6.1", + "jest-each": "^29.6.2", + "jest-matcher-utils": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-runtime": "^29.6.2", + "jest-snapshot": "^29.6.2", + "jest-util": "^29.6.2", "p-limit": "^3.1.0", - "pretty-format": "^29.6.1", + "pretty-format": "^29.6.2", "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" @@ -3327,21 +3386,21 @@ } }, "node_modules/jest-cli": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.1.tgz", - "integrity": "sha512-607dSgTA4ODIN6go9w6xY3EYkyPFGicx51a69H7yfvt7lN53xNswEVLovq+E77VsTRi5fWprLH0yl4DJgE8Ing==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.2.tgz", + "integrity": "sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==", "dev": true, "dependencies": { - "@jest/core": "^29.6.1", - "@jest/test-result": "^29.6.1", + "@jest/core": "^29.6.2", + "@jest/test-result": "^29.6.2", "@jest/types": "^29.6.1", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^29.6.1", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", + "jest-config": "^29.6.2", + "jest-util": "^29.6.2", + "jest-validate": "^29.6.2", "prompts": "^2.0.1", "yargs": "^17.3.1" }, @@ -3361,31 +3420,31 @@ } }, "node_modules/jest-config": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.1.tgz", - "integrity": "sha512-XdjYV2fy2xYixUiV2Wc54t3Z4oxYPAELUzWnV6+mcbq0rh742X2p52pii5A3oeRzYjLnQxCsZmp0qpI6klE2cQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.2.tgz", + "integrity": "sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.6.1", + "@jest/test-sequencer": "^29.6.2", "@jest/types": "^29.6.1", - "babel-jest": "^29.6.1", + "babel-jest": "^29.6.2", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^29.6.1", - "jest-environment-node": "^29.6.1", + "jest-circus": "^29.6.2", + "jest-environment-node": "^29.6.2", "jest-get-type": "^29.4.3", "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.1", - "jest-runner": "^29.6.1", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", + "jest-resolve": "^29.6.2", + "jest-runner": "^29.6.2", + "jest-util": "^29.6.2", + "jest-validate": "^29.6.2", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^29.6.1", + "pretty-format": "^29.6.2", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -3406,15 +3465,15 @@ } }, "node_modules/jest-diff": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.1.tgz", - "integrity": "sha512-FsNCvinvl8oVxpNLttNQX7FAq7vR+gMDGj90tiP7siWw1UdakWUGqrylpsYrpvj908IYckm5Y0Q7azNAozU1Kg==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.2.tgz", + "integrity": "sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==", "dev": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.4.3", "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.1" + "pretty-format": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -3433,33 +3492,33 @@ } }, "node_modules/jest-each": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.1.tgz", - "integrity": "sha512-n5eoj5eiTHpKQCAVcNTT7DRqeUmJ01hsAL0Q1SMiBHcBcvTKDELixQOGMCpqhbIuTcfC4kMfSnpmDqRgRJcLNQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.2.tgz", + "integrity": "sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw==", "dev": true, "dependencies": { "@jest/types": "^29.6.1", "chalk": "^4.0.0", "jest-get-type": "^29.4.3", - "jest-util": "^29.6.1", - "pretty-format": "^29.6.1" + "jest-util": "^29.6.2", + "pretty-format": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-environment-node": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.1.tgz", - "integrity": "sha512-ZNIfAiE+foBog24W+2caIldl4Irh8Lx1PUhg/GZ0odM1d/h2qORAsejiFc7zb+SEmYPn1yDZzEDSU5PmDkmVLQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.2.tgz", + "integrity": "sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==", "dev": true, "dependencies": { - "@jest/environment": "^29.6.1", - "@jest/fake-timers": "^29.6.1", + "@jest/environment": "^29.6.2", + "@jest/fake-timers": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", - "jest-mock": "^29.6.1", - "jest-util": "^29.6.1" + "jest-mock": "^29.6.2", + "jest-util": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -3475,9 +3534,9 @@ } }, "node_modules/jest-haste-map": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.1.tgz", - "integrity": "sha512-0m7f9PZXxOCk1gRACiVgX85knUKPKLPg4oRCjLoqIm9brTHXaorMA0JpmtmVkQiT8nmXyIVoZd/nnH1cfC33ig==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.2.tgz", + "integrity": "sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==", "dev": true, "dependencies": { "@jest/types": "^29.6.1", @@ -3487,8 +3546,8 @@ "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.1", - "jest-worker": "^29.6.1", + "jest-util": "^29.6.2", + "jest-worker": "^29.6.2", "micromatch": "^4.0.4", "walker": "^1.0.8" }, @@ -3500,37 +3559,37 @@ } }, "node_modules/jest-leak-detector": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.1.tgz", - "integrity": "sha512-OrxMNyZirpOEwkF3UHnIkAiZbtkBWiye+hhBweCHkVbCgyEy71Mwbb5zgeTNYWJBi1qgDVfPC1IwO9dVEeTLwQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.2.tgz", + "integrity": "sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ==", "dev": true, "dependencies": { "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.1" + "pretty-format": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.1.tgz", - "integrity": "sha512-SLaztw9d2mfQQKHmJXKM0HCbl2PPVld/t9Xa6P9sgiExijviSp7TnZZpw2Fpt+OI3nwUO/slJbOfzfUMKKC5QA==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.2.tgz", + "integrity": "sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^29.6.1", + "jest-diff": "^29.6.2", "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.1" + "pretty-format": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-message-util": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.1.tgz", - "integrity": "sha512-KoAW2zAmNSd3Gk88uJ56qXUWbFk787QKmjjJVOjtGFmmGSZgDBrlIL4AfQw1xyMYPNVD7dNInfIbur9B2rd/wQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.2.tgz", + "integrity": "sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", @@ -3539,7 +3598,7 @@ "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.6.1", + "pretty-format": "^29.6.2", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -3548,14 +3607,14 @@ } }, "node_modules/jest-mock": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.1.tgz", - "integrity": "sha512-brovyV9HBkjXAEdRooaTQK42n8usKoSRR3gihzUpYeV/vwqgSoNfrksO7UfSACnPmxasO/8TmHM3w9Hp3G1dgw==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.2.tgz", + "integrity": "sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==", "dev": true, "dependencies": { "@jest/types": "^29.6.1", "@types/node": "*", - "jest-util": "^29.6.1" + "jest-util": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -3588,17 +3647,17 @@ } }, "node_modules/jest-resolve": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.1.tgz", - "integrity": "sha512-AeRkyS8g37UyJiP9w3mmI/VXU/q8l/IH52vj/cDAyScDcemRbSBhfX/NMYIGilQgSVwsjxrCHf3XJu4f+lxCMg==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.2.tgz", + "integrity": "sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw==", "dev": true, "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", + "jest-haste-map": "^29.6.2", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", + "jest-util": "^29.6.2", + "jest-validate": "^29.6.2", "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" @@ -3608,43 +3667,43 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.1.tgz", - "integrity": "sha512-BbFvxLXtcldaFOhNMXmHRWx1nXQO5LoXiKSGQcA1LxxirYceZT6ch8KTE1bK3X31TNG/JbkI7OkS/ABexVahiw==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.2.tgz", + "integrity": "sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w==", "dev": true, "dependencies": { "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.6.1" + "jest-snapshot": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runner": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.1.tgz", - "integrity": "sha512-tw0wb2Q9yhjAQ2w8rHRDxteryyIck7gIzQE4Reu3JuOBpGp96xWgF0nY8MDdejzrLCZKDcp8JlZrBN/EtkQvPQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.2.tgz", + "integrity": "sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w==", "dev": true, "dependencies": { - "@jest/console": "^29.6.1", - "@jest/environment": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", + "@jest/console": "^29.6.2", + "@jest/environment": "^29.6.2", + "@jest/test-result": "^29.6.2", + "@jest/transform": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.13.1", "graceful-fs": "^4.2.9", "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.6.1", - "jest-haste-map": "^29.6.1", - "jest-leak-detector": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-resolve": "^29.6.1", - "jest-runtime": "^29.6.1", - "jest-util": "^29.6.1", - "jest-watcher": "^29.6.1", - "jest-worker": "^29.6.1", + "jest-environment-node": "^29.6.2", + "jest-haste-map": "^29.6.2", + "jest-leak-detector": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-resolve": "^29.6.2", + "jest-runtime": "^29.6.2", + "jest-util": "^29.6.2", + "jest-watcher": "^29.6.2", + "jest-worker": "^29.6.2", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, @@ -3653,17 +3712,17 @@ } }, "node_modules/jest-runtime": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.1.tgz", - "integrity": "sha512-D6/AYOA+Lhs5e5il8+5pSLemjtJezUr+8zx+Sn8xlmOux3XOqx4d8l/2udBea8CRPqqrzhsKUsN/gBDE/IcaPQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.2.tgz", + "integrity": "sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg==", "dev": true, "dependencies": { - "@jest/environment": "^29.6.1", - "@jest/fake-timers": "^29.6.1", - "@jest/globals": "^29.6.1", + "@jest/environment": "^29.6.2", + "@jest/fake-timers": "^29.6.2", + "@jest/globals": "^29.6.2", "@jest/source-map": "^29.6.0", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", + "@jest/test-result": "^29.6.2", + "@jest/transform": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", "chalk": "^4.0.0", @@ -3671,13 +3730,13 @@ "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-mock": "^29.6.1", + "jest-haste-map": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-mock": "^29.6.2", "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.1", - "jest-snapshot": "^29.6.1", - "jest-util": "^29.6.1", + "jest-resolve": "^29.6.2", + "jest-snapshot": "^29.6.2", + "jest-util": "^29.6.2", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -3686,9 +3745,9 @@ } }, "node_modules/jest-snapshot": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.1.tgz", - "integrity": "sha512-G4UQE1QQ6OaCgfY+A0uR1W2AY0tGXUPQpoUClhWHq1Xdnx1H6JOrC2nH5lqnOEqaDgbHFgIwZ7bNq24HpB180A==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.2.tgz", + "integrity": "sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", @@ -3696,21 +3755,20 @@ "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.6.1", - "@jest/transform": "^29.6.1", + "@jest/expect-utils": "^29.6.2", + "@jest/transform": "^29.6.2", "@jest/types": "^29.6.1", - "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^29.6.1", + "expect": "^29.6.2", "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.1", + "jest-diff": "^29.6.2", "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1", + "jest-matcher-utils": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-util": "^29.6.2", "natural-compare": "^1.4.0", - "pretty-format": "^29.6.1", + "pretty-format": "^29.6.2", "semver": "^7.5.3" }, "engines": { @@ -3751,9 +3809,9 @@ "dev": true }, "node_modules/jest-util": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.1.tgz", - "integrity": "sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.2.tgz", + "integrity": "sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==", "dev": true, "dependencies": { "@jest/types": "^29.6.1", @@ -3768,9 +3826,9 @@ } }, "node_modules/jest-validate": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.1.tgz", - "integrity": "sha512-r3Ds69/0KCN4vx4sYAbGL1EVpZ7MSS0vLmd3gV78O+NAx3PDQQukRU5hNHPXlyqCgFY8XUk7EuTMLugh0KzahA==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.2.tgz", + "integrity": "sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==", "dev": true, "dependencies": { "@jest/types": "^29.6.1", @@ -3778,7 +3836,7 @@ "chalk": "^4.0.0", "jest-get-type": "^29.4.3", "leven": "^3.1.0", - "pretty-format": "^29.6.1" + "pretty-format": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -3797,18 +3855,18 @@ } }, "node_modules/jest-watcher": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.1.tgz", - "integrity": "sha512-d4wpjWTS7HEZPaaj8m36QiaP856JthRZkrgcIY/7ISoUWPIillrXM23WPboZVLbiwZBt4/qn2Jke84Sla6JhFA==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.2.tgz", + "integrity": "sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA==", "dev": true, "dependencies": { - "@jest/test-result": "^29.6.1", + "@jest/test-result": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.13.1", - "jest-util": "^29.6.1", + "jest-util": "^29.6.2", "string-length": "^4.0.1" }, "engines": { @@ -3816,13 +3874,13 @@ } }, "node_modules/jest-worker": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.1.tgz", - "integrity": "sha512-U+Wrbca7S8ZAxAe9L6nb6g8kPdia5hj32Puu5iOqBCMTMWFHXuK6dOV2IFrpedbTV8fjMFLdWNttQTBL6u2MRA==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.2.tgz", + "integrity": "sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==", "dev": true, "dependencies": { "@types/node": "*", - "jest-util": "^29.6.1", + "jest-util": "^29.6.2", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -3972,7 +4030,7 @@ } }, "node_modules/le-coffre-resources": { - "resolved": "git+ssh://git@github.com/smart-chain-fr/leCoffre-resources.git#e7916d516fe434c93ef13e765d8d63a7ce3c56b2", + "resolved": "git+ssh://git@github.com/smart-chain-fr/leCoffre-resources.git#e0b1ff55a860f624b7708d37f5bfe3072ef63e5f", "license": "MIT", "dependencies": { "class-transformer": "^0.5.1", @@ -3990,9 +4048,9 @@ } }, "node_modules/libphonenumber-js": { - "version": "1.10.38", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.38.tgz", - "integrity": "sha512-4NjVXVUmpZ9Zsqq6FXa2+MKI+KAI3tOqA0pxXgXGluhpj4ge5didmbWJpMBqGB3AVGv1SnEtKdGTbxjSEG1kCQ==" + "version": "1.10.41", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.41.tgz", + "integrity": "sha512-4rmmF4u4vD3eGNuuCGjCPwRwO+fIuu1WWcS7VwbPTiMFkJd8F02v8o5pY5tlYuMR+xOvJ88mtOHpkm0Tnu2LcQ==" }, "node_modules/lines-and-columns": { "version": "1.2.4", @@ -4050,9 +4108,9 @@ } }, "node_modules/luxon": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.3.0.tgz", - "integrity": "sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.0.tgz", + "integrity": "sha512-7eDo4Pt7aGhoCheGFIuq4Xa2fJm4ZpmldpGhjTYBNUYNCN6TIEP6v7chwwwt3KRp7YR+rghbfvjyo3V5y9hgBw==", "engines": { "node": ">=12" } @@ -4419,11 +4477,11 @@ } }, "node_modules/next": { - "version": "13.4.12", - "resolved": "https://registry.npmjs.org/next/-/next-13.4.12.tgz", - "integrity": "sha512-eHfnru9x6NRmTMcjQp6Nz0J4XH9OubmzOa7CkWL+AUrUxpibub3vWwttjduu9No16dug1kq04hiUUpo7J3m3Xw==", + "version": "13.4.16", + "resolved": "https://registry.npmjs.org/next/-/next-13.4.16.tgz", + "integrity": "sha512-1xaA/5DrfpPu0eV31Iro7JfPeqO8uxQWb1zYNTe+KDKdzqkAGapLcDYHMLNKXKB7lHjZ7LfKUOf9dyuzcibrhA==", "dependencies": { - "@next/env": "13.4.12", + "@next/env": "13.4.16", "@swc/helpers": "0.5.1", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001406", @@ -4439,19 +4497,18 @@ "node": ">=16.8.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "13.4.12", - "@next/swc-darwin-x64": "13.4.12", - "@next/swc-linux-arm64-gnu": "13.4.12", - "@next/swc-linux-arm64-musl": "13.4.12", - "@next/swc-linux-x64-gnu": "13.4.12", - "@next/swc-linux-x64-musl": "13.4.12", - "@next/swc-win32-arm64-msvc": "13.4.12", - "@next/swc-win32-ia32-msvc": "13.4.12", - "@next/swc-win32-x64-msvc": "13.4.12" + "@next/swc-darwin-arm64": "13.4.16", + "@next/swc-darwin-x64": "13.4.16", + "@next/swc-linux-arm64-gnu": "13.4.16", + "@next/swc-linux-arm64-musl": "13.4.16", + "@next/swc-linux-x64-gnu": "13.4.16", + "@next/swc-linux-x64-musl": "13.4.16", + "@next/swc-win32-arm64-msvc": "13.4.16", + "@next/swc-win32-ia32-msvc": "13.4.16", + "@next/swc-win32-x64-msvc": "13.4.16" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", - "fibers": ">= 3.1.0", "react": "^18.2.0", "react-dom": "^18.2.0", "sass": "^1.3.0" @@ -4460,9 +4517,6 @@ "@opentelemetry/api": { "optional": true }, - "fibers": { - "optional": true - }, "sass": { "optional": true } @@ -4884,9 +4938,9 @@ } }, "node_modules/pretty-format": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", - "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", + "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", "dev": true, "dependencies": { "@jest/schemas": "^29.6.0", @@ -5104,12 +5158,12 @@ } }, "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dev": true, "dependencies": { - "is-core-module": "^2.11.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -5879,9 +5933,9 @@ "dev": true }, "node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", "engines": { "node": ">= 0.10" } diff --git a/package.json b/package.json index fd68c5be..02c81b78 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "cron": "^2.3.1", "express": "^4.18.2", "jsonwebtoken": "^9.0.0", - "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.66", + "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.67", "module-alias": "^2.2.2", "multer": "^1.4.5-lts.1", "next": "^13.1.5", diff --git a/src/app/api/admin/UsersController.ts b/src/app/api/admin/UsersController.ts index 1c7c3251..cc4cde87 100644 --- a/src/app/api/admin/UsersController.ts +++ b/src/app/api/admin/UsersController.ts @@ -8,7 +8,6 @@ import { Prisma } from "@prisma/client"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; import userHandler from "@App/middlewares/OfficeMembershipHandlers/UserHandler"; -import { validateOrReject } from "class-validator"; import roleHandler from "@App/middlewares/RolesHandler"; import RolesService from "@Services/admin/RolesService/RolesService"; import OfficeRolesService from "@Services/admin/OfficeRolesService/OfficeRolesService"; @@ -87,9 +86,6 @@ export default class UsersController extends ApiController { //init IUser resource with request body values const userEntity = User.hydrate(req.body); - //validate user - await validateOrReject(userEntity, { groups: ["updateUser"] }); - if(userEntity.role) { const role = await this.roleService.getByUid(userEntity.role.uid!); if(!role) { diff --git a/src/app/api/customer/FilesController.ts b/src/app/api/customer/FilesController.ts index 76dd93ee..f58b3944 100644 --- a/src/app/api/customer/FilesController.ts +++ b/src/app/api/customer/FilesController.ts @@ -135,9 +135,6 @@ export default class FilesController extends ApiController { //init File resource with request body values const fileEntity = File.hydrate(req.body); - //validate file - await validateOrReject(fileEntity, { groups: ["updateFile"] }); - //call service to get prisma entity const fileEntityUpdated: Files = await this.filesService.update(uid, fileEntity); diff --git a/src/app/api/super-admin/OfficesController.ts b/src/app/api/super-admin/OfficesController.ts index 3fb1bd00..f4edab79 100644 --- a/src/app/api/super-admin/OfficesController.ts +++ b/src/app/api/super-admin/OfficesController.ts @@ -94,8 +94,7 @@ export default class OfficesController extends ApiController { } //init IUser resource with request body values const officeEntity = OfficeResource.hydrate(req.body); - //validate user - await validateOrReject(officeEntity, { groups: ["updateOffice"] }); + //call service to get prisma entity const officeEntityUpdated = await this.officesService.update(uid, officeEntity); //Hydrate ressource with prisma entity diff --git a/src/app/api/super-admin/RulesController.ts b/src/app/api/super-admin/RulesController.ts index 025ec5c0..6f2f21a4 100644 --- a/src/app/api/super-admin/RulesController.ts +++ b/src/app/api/super-admin/RulesController.ts @@ -92,9 +92,6 @@ export default class RulesController extends ApiController { //init IRule resource with request body values const ruleEntity = Rule.hydrate(req.body); - //validate rule - await validateOrReject(ruleEntity, { groups: ["updateRule"] }); - //call service to get prisma entity const ruleEntityUpdated = await this.rulesService.update(ruleEntity); diff --git a/src/app/api/super-admin/UsersController.ts b/src/app/api/super-admin/UsersController.ts index 618c4728..fd135312 100644 --- a/src/app/api/super-admin/UsersController.ts +++ b/src/app/api/super-admin/UsersController.ts @@ -109,9 +109,6 @@ export default class UsersController extends ApiController { //init IUser resource with request body values const userEntity = User.hydrate(req.body); - //validate user - await validateOrReject(userEntity, { groups: ["updateUser"] }); - if(userEntity.role) { const role = await this.roleService.getByUid(userEntity.role.uid!); if(!role) { From 232633fc937d4626498013a84a4e0b30aa93fcb0 Mon Sep 17 00:00:00 2001 From: OxSaitama Date: Wed, 16 Aug 2023 16:27:52 +0200 Subject: [PATCH 4/7] add role and rules label --- package-lock.json | 4 +- package.json | 2 +- .../20230816144031_v22/migration.sql | 12 ++ src/common/databases/schema.prisma | 2 + src/common/databases/seeders/seeder.ts | 114 +++++++++--------- src/common/repositories/UsersRepository.ts | 1 + .../notary/RolesService/RolesService.ts | 1 - .../notary/RulesService/RulesService.ts | 1 - .../notary/UsersService/UsersService.ts | 20 +-- 9 files changed, 73 insertions(+), 84 deletions(-) create mode 100644 src/common/databases/migrations/20230816144031_v22/migration.sql diff --git a/package-lock.json b/package-lock.json index e6e9857e..d147eb2c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "cron": "^2.3.1", "express": "^4.18.2", "jsonwebtoken": "^9.0.0", - "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.67", + "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.68", "module-alias": "^2.2.2", "multer": "^1.4.5-lts.1", "next": "^13.1.5", @@ -4030,7 +4030,7 @@ } }, "node_modules/le-coffre-resources": { - "resolved": "git+ssh://git@github.com/smart-chain-fr/leCoffre-resources.git#e0b1ff55a860f624b7708d37f5bfe3072ef63e5f", + "resolved": "git+ssh://git@github.com/smart-chain-fr/leCoffre-resources.git#ad0660abcb9de6ee7f396dce9b25fa7731a8e3b8", "license": "MIT", "dependencies": { "class-transformer": "^0.5.1", diff --git a/package.json b/package.json index 02c81b78..19fd003b 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "cron": "^2.3.1", "express": "^4.18.2", "jsonwebtoken": "^9.0.0", - "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.67", + "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.68", "module-alias": "^2.2.2", "multer": "^1.4.5-lts.1", "next": "^13.1.5", diff --git a/src/common/databases/migrations/20230816144031_v22/migration.sql b/src/common/databases/migrations/20230816144031_v22/migration.sql new file mode 100644 index 00000000..59a287ba --- /dev/null +++ b/src/common/databases/migrations/20230816144031_v22/migration.sql @@ -0,0 +1,12 @@ +/* + Warnings: + + - Added the required column `label` to the `roles` table without a default value. This is not possible if the table is not empty. + - Added the required column `label` to the `rules` table without a default value. This is not possible if the table is not empty. + +*/ +-- AlterTable +ALTER TABLE "roles" ADD COLUMN "label" VARCHAR(255) NOT NULL; + +-- AlterTable +ALTER TABLE "rules" ADD COLUMN "label" VARCHAR(255) NOT NULL; diff --git a/src/common/databases/schema.prisma b/src/common/databases/schema.prisma index 98ff92ea..858709ed 100644 --- a/src/common/databases/schema.prisma +++ b/src/common/databases/schema.prisma @@ -241,6 +241,7 @@ model DeedTypes { model Roles { uid String @id @unique @default(uuid()) name String @db.VarChar(255) + label String @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt rules Rules[] @relation("RolesHasRules") @@ -265,6 +266,7 @@ model OfficeRoles { model Rules { uid String @id @unique @default(uuid()) name String @db.VarChar(255) + label String @db.VarChar(255) created_at DateTime? @default(now()) updated_at DateTime? @updatedAt role Roles[] @relation("RolesHasRules") diff --git a/src/common/databases/seeders/seeder.ts b/src/common/databases/seeders/seeder.ts index 700442cf..cfc8ccda 100644 --- a/src/common/databases/seeders/seeder.ts +++ b/src/common/databases/seeders/seeder.ts @@ -515,301 +515,289 @@ export default async function main() { const rules: Rule[] = [ { name: "GET users", + label: "Lecture des utilisateurs", created_at: new Date(), updated_at: new Date(), }, { name: "GET offices", + label: "Lecture des offices", created_at: new Date(), updated_at: new Date(), }, { name: "GET customers", + label: "Lecture des clients", created_at: new Date(), updated_at: new Date(), }, { name: "GET deeds", + label: "Lecture des actes", created_at: new Date(), updated_at: new Date(), }, { name: "GET deed-types", + label: "Lecture des types d'actes", created_at: new Date(), updated_at: new Date(), }, { name: "GET documents", + label: "Lecture des documents", created_at: new Date(), updated_at: new Date(), }, { name: "GET document-types", + label: "Lecture des types de documents", created_at: new Date(), updated_at: new Date(), }, { name: "GET files", + label: "Lecture des fichiers", created_at: new Date(), updated_at: new Date(), }, { name: "GET folders", + label: "Lecture des dossiers", created_at: new Date(), updated_at: new Date(), }, { name: "GET roles", + label: "Lecture utilisateurs", created_at: new Date(), updated_at: new Date(), }, { name: "GET rules", + label: "Lecture des droits", created_at: new Date(), updated_at: new Date(), }, { name: "GET office-roles", + label: "Lecture des rôles d'office", created_at: new Date(), updated_at: new Date(), }, { name: "PUT users", + label: "Modification des utilisateurs", created_at: new Date(), updated_at: new Date(), }, { name: "PUT offices", + label: "Modification des offices", created_at: new Date(), updated_at: new Date(), }, { name: "PUT customers", + label: "Modification des clients", created_at: new Date(), updated_at: new Date(), }, { name: "PUT deeds", + label: "Modification des actes", created_at: new Date(), updated_at: new Date(), }, { name: "PUT deed-types", + label: "Modification des types d'actes", created_at: new Date(), updated_at: new Date(), }, { name: "PUT documents", + label: "Modification des documents", created_at: new Date(), updated_at: new Date(), }, { name: "PUT document-types", + label: "Modification des types de documents", created_at: new Date(), updated_at: new Date(), }, { name: "PUT files", + label: "Modification des fichiers", created_at: new Date(), updated_at: new Date(), }, { name: "PUT folders", + label: "Modification des dossiers", created_at: new Date(), updated_at: new Date(), }, { name: "PUT roles", + label: "Modification des rôles", created_at: new Date(), updated_at: new Date(), }, { name: "PUT rules", + label: "Modification des droits", created_at: new Date(), updated_at: new Date(), }, { name: "PUT office-roles", + label: "Modification des rôles d'office", created_at: new Date(), updated_at: new Date(), }, { name: "POST users", + label: "Création des utilisateurs", created_at: new Date(), updated_at: new Date(), }, { name: "POST offices", + label: "Création des offices", created_at: new Date(), updated_at: new Date(), }, { name: "POST customers", + label: "Création des clients", created_at: new Date(), updated_at: new Date(), }, { name: "POST deeds", + label: "Création des actes", created_at: new Date(), updated_at: new Date(), }, { name: "POST deed-types", + label: "Création des types d'actes", created_at: new Date(), updated_at: new Date(), }, { name: "POST documents", + label: "Création des documents", created_at: new Date(), updated_at: new Date(), }, { name: "POST document-types", + label: "Création des types de documents", created_at: new Date(), updated_at: new Date(), }, { name: "POST files", + label: "Création des fichiers", created_at: new Date(), updated_at: new Date(), }, { name: "POST folders", + label: "Création des dossiers", created_at: new Date(), updated_at: new Date(), }, { name: "POST roles", + label: "Création des rôles", created_at: new Date(), updated_at: new Date(), }, { name: "POST rules", + label: "Création des droits", created_at: new Date(), updated_at: new Date(), }, { name: "POST office-roles", - created_at: new Date(), - updated_at: new Date(), - }, - { - name: "POST users", - created_at: new Date(), - updated_at: new Date(), - }, - { - name: "POST offices", - created_at: new Date(), - updated_at: new Date(), - }, - { - name: "POST customers", - created_at: new Date(), - updated_at: new Date(), - }, - { - name: "POST deeds", - created_at: new Date(), - updated_at: new Date(), - }, - { - name: "POST deed-types", - created_at: new Date(), - updated_at: new Date(), - }, - { - name: "POST documents", - created_at: new Date(), - updated_at: new Date(), - }, - { - name: "POST document-types", - created_at: new Date(), - updated_at: new Date(), - }, - { - name: "POST files", - created_at: new Date(), - updated_at: new Date(), - }, - { - name: "POST folders", - created_at: new Date(), - updated_at: new Date(), - }, - { - name: "POST roles", - created_at: new Date(), - updated_at: new Date(), - }, - { - name: "POST rules", - created_at: new Date(), - updated_at: new Date(), - }, - { - name: "POST office-roles", + label: "Création des rôles d'office", created_at: new Date(), updated_at: new Date(), }, { name: "DELETE users", + label: "Suppression des utilisateurs", created_at: new Date(), updated_at: new Date(), }, { name: "DELETE offices", + label: "Suppression des offices", created_at: new Date(), updated_at: new Date(), }, { name: "DELETE customers", + label: "Suppression des clients", created_at: new Date(), updated_at: new Date(), }, { name: "DELETE deeds", + label: "Suppression des actes", created_at: new Date(), updated_at: new Date(), }, { name: "DELETE deed-types", + label: "Suppression des types d'actes", created_at: new Date(), updated_at: new Date(), }, { name: "DELETE documents", + label: "Suppression des documents", created_at: new Date(), updated_at: new Date(), }, { name: "DELETE document-types", + label: "Suppression des types de documents", created_at: new Date(), updated_at: new Date(), }, { name: "DELETE files", + label: "Suppression des fichiers", created_at: new Date(), updated_at: new Date(), }, { name: "DELETE folders", + label: "Suppression des dossiers", created_at: new Date(), updated_at: new Date(), }, { name: "DELETE roles", + label: "Suppression des rôles", created_at: new Date(), updated_at: new Date(), }, { name: "DELETE rules", + label: "Suppression des droits", created_at: new Date(), updated_at: new Date(), }, { name: "DELETE office-roles", + label: "Suppression des rôles d'office", created_at: new Date(), updated_at: new Date(), }, @@ -818,24 +806,28 @@ export default async function main() { const roles: Role[] = [ { name: "super-admin", + label: "Super administrateur", created_at: new Date(), updated_at: new Date(), rules: rules, }, { name: "admin", + label: "Administrateur", created_at: new Date(), updated_at: new Date(), rules: rules.slice(0, 33), }, { name: "notary", + label: "Notaire", created_at: new Date(), updated_at: new Date(), rules: rules.slice(0, 22), }, { name: "default", + label: "Utilisateur", created_at: new Date(), updated_at: new Date(), rules: rules.slice(0, 11), @@ -1381,6 +1373,7 @@ export default async function main() { const ruleCreated = await prisma.rules.create({ data: { name: rule.name, + label: rule.label, }, }); rule.uid = ruleCreated.uid; @@ -1390,6 +1383,7 @@ export default async function main() { const roleCreated = await prisma.roles.create({ data: { name: role.name, + label: role.label, rules: { connect: role.rules?.map((rule) => ({ uid: rule.uid!, diff --git a/src/common/repositories/UsersRepository.ts b/src/common/repositories/UsersRepository.ts index 49673146..739aea8f 100644 --- a/src/common/repositories/UsersRepository.ts +++ b/src/common/repositories/UsersRepository.ts @@ -87,6 +87,7 @@ export default class UsersRepository extends BaseRepository { /** * @description : Update data from a user */ + public async update(uid: string, user: User): Promise { const updateArgs: Prisma.UsersUpdateArgs = { where: { diff --git a/src/services/notary/RolesService/RolesService.ts b/src/services/notary/RolesService/RolesService.ts index f59c26b1..6e652687 100644 --- a/src/services/notary/RolesService/RolesService.ts +++ b/src/services/notary/RolesService/RolesService.ts @@ -1,5 +1,4 @@ import BaseService from "@Services/BaseService"; -import "reflect-metadata"; import { Service } from "typedi"; import RolesRepository from "@Repositories/RolesRepository"; import { Prisma } from "@prisma/client"; diff --git a/src/services/notary/RulesService/RulesService.ts b/src/services/notary/RulesService/RulesService.ts index e52ad9bf..c59c9133 100644 --- a/src/services/notary/RulesService/RulesService.ts +++ b/src/services/notary/RulesService/RulesService.ts @@ -1,5 +1,4 @@ import BaseService from "@Services/BaseService"; -import "reflect-metadata"; import { Service } from "typedi"; import RulesRepository from "@Repositories/RulesRepository"; import { Prisma } from "@prisma/client"; diff --git a/src/services/notary/UsersService/UsersService.ts b/src/services/notary/UsersService/UsersService.ts index f6927c87..5efbfff9 100644 --- a/src/services/notary/UsersService/UsersService.ts +++ b/src/services/notary/UsersService/UsersService.ts @@ -1,9 +1,7 @@ import BaseService from "@Services/BaseService"; -import "reflect-metadata"; import { Service } from "typedi"; import UsersRepository from "@Repositories/UsersRepository"; -import User from "le-coffre-resources/dist/Notary"; -import { Prisma, Users } from "@prisma/client"; +import { Prisma } from "@prisma/client"; @Service() export default class UsersService extends BaseService { @@ -19,22 +17,6 @@ export default class UsersService extends BaseService { return this.userRepository.findMany(query); } - /** - * @description : Create a user - * @throws {Error} If user couldn't be created - */ - public create(userEntity: User): Promise { - return this.userRepository.create(userEntity); - } - - /** - * @description : Modify a user - * @throws {Error} If user modification failed - */ - public update(uid: string, userEntity: User): Promise { - return this.userRepository.update(uid, userEntity); - } - /** * @description : Get a user by uid * @throws {Error} If user cannot be get by uid From 527a4fd837afba729a62fa54d780bc9821fe0481 Mon Sep 17 00:00:00 2001 From: OxSaitama Date: Thu, 17 Aug 2023 11:28:30 +0200 Subject: [PATCH 5/7] refacto rules assignment in jwt --- src/common/databases/seeders/seeder.ts | 7 ------ src/common/repositories/RolesRepository.ts | 2 ++ src/common/repositories/RulesRepository.ts | 2 ++ .../common/AuthService/AuthService.ts | 25 ++++++++----------- src/test/config/Init.ts | 3 +++ 5 files changed, 18 insertions(+), 21 deletions(-) diff --git a/src/common/databases/seeders/seeder.ts b/src/common/databases/seeders/seeder.ts index cfc8ccda..0e812e5c 100644 --- a/src/common/databases/seeders/seeder.ts +++ b/src/common/databases/seeders/seeder.ts @@ -835,13 +835,6 @@ export default async function main() { ]; const officeRoles: OfficeRole[] = [ - { - name: "admin", - created_at: new Date(), - updated_at: new Date(), - office: offices[0]!, - rules: rules.slice(0, 40), - }, { name: "Notaire", created_at: new Date(), diff --git a/src/common/repositories/RolesRepository.ts b/src/common/repositories/RolesRepository.ts index 20d203c7..5467f0a0 100644 --- a/src/common/repositories/RolesRepository.ts +++ b/src/common/repositories/RolesRepository.ts @@ -31,6 +31,7 @@ export default class RolesRepository extends BaseRepository { const createArgs: Prisma.RolesCreateArgs = { data: { name: role.name, + label: role.label, rules: { connect: role.rules?.map((rule) => ({ uid: rule.uid!, @@ -52,6 +53,7 @@ export default class RolesRepository extends BaseRepository { }, data: { name: role.name, + label: role.label, rules: { set: role.rules?.map((rule) => ({ uid: rule.uid!, diff --git a/src/common/repositories/RulesRepository.ts b/src/common/repositories/RulesRepository.ts index 7781290b..281e505b 100644 --- a/src/common/repositories/RulesRepository.ts +++ b/src/common/repositories/RulesRepository.ts @@ -31,6 +31,7 @@ export default class RulesRepository extends BaseRepository { const createArgs: Prisma.RulesCreateArgs = { data: { name: rule.name, + label: rule.label }, }; @@ -47,6 +48,7 @@ export default class RulesRepository extends BaseRepository { }, data: { name: rule.name, + label: rule.label }, }; diff --git a/src/services/common/AuthService/AuthService.ts b/src/services/common/AuthService/AuthService.ts index 0a751e21..4410cd35 100644 --- a/src/services/common/AuthService/AuthService.ts +++ b/src/services/common/AuthService/AuthService.ts @@ -12,7 +12,7 @@ enum PROVIDER_OPENID { } interface ICustomerJwtPayload { - userId: string; + customerId: string; email: string; } @@ -46,7 +46,7 @@ export default class AuthService extends BaseService { } return { - userId: customer.uid, + customerId: customer.uid, email: contact.email, }; } @@ -57,22 +57,19 @@ export default class AuthService extends BaseService { if (!user) return null; const rules: string[] = []; - if (user.office_role) { - user.office_role.rules.forEach((rule) => { - rules.push(rule.name); - }); - return { - userId: user.uid, - openId: { providerName: providerName, userId: user.idNot }, - office_Id: user.office_membership.uid, - role: user.role.name, - rules: rules, - }; - } user.role.rules.forEach((rule) => { rules.push(rule.name); }); + + if (user.office_role) { + user.office_role.rules.forEach((rule) => { + if(!rules.includes(rule.name)) { + rules.push(rule.name); + } + }); + } + return { userId: user.uid, openId: { providerName: providerName, userId: user.idNot }, diff --git a/src/test/config/Init.ts b/src/test/config/Init.ts index 74721622..c3921d70 100644 --- a/src/test/config/Init.ts +++ b/src/test/config/Init.ts @@ -95,6 +95,7 @@ export const initRules = (rule: Rule): Promise => { return prisma.rules.create({ data: { name: rule.name, + label: rule.label, }, }); }; @@ -103,6 +104,7 @@ export const initRoles = (role: Role): Promise => { return prisma.roles.create({ data: { name: role.name, + label: role.label, }, }); }; @@ -154,6 +156,7 @@ export const initUsers = (user: User): Promise => { }, create: { name: user.role!.name, + label: user.role!.label }, }, }, From f1fc9deae7f9c4a68256ae8415f9ba8387374767 Mon Sep 17 00:00:00 2001 From: OxSaitama Date: Thu, 17 Aug 2023 13:39:08 +0200 Subject: [PATCH 6/7] update resources version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 19fd003b..fd95302f 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "cron": "^2.3.1", "express": "^4.18.2", "jsonwebtoken": "^9.0.0", - "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.68", + "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.69", "module-alias": "^2.2.2", "multer": "^1.4.5-lts.1", "next": "^13.1.5", From 12ce8ddff4f66e47646d97a034a0fb783c5518f9 Mon Sep 17 00:00:00 2001 From: OxSaitama Date: Thu, 17 Aug 2023 13:44:50 +0200 Subject: [PATCH 7/7] fix where query for documents --- src/app/api/customer/DocumentsController.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/app/api/customer/DocumentsController.ts b/src/app/api/customer/DocumentsController.ts index fdfb16f2..a7f2b1a7 100644 --- a/src/app/api/customer/DocumentsController.ts +++ b/src/app/api/customer/DocumentsController.ts @@ -28,12 +28,9 @@ export default class DocumentsController extends ApiController { query = JSON.parse(req.query["q"] as string); } - - //This was useless and was causing a bug - - // const customerId: string = req.body.user.customerId; - // const customerWhereInput: Prisma.DocumentsWhereInput ={ depositor: { uid: customerId } }; - // query.where = customerWhereInput; + const customerId: string = req.body.user.customerId; + const customerWhereInput: Prisma.DocumentsWhereInput ={ depositor: { uid: customerId } }; + query.where = customerWhereInput; //call service to get prisma entity