@intlayer/backend 7.2.1-canary.1 → 7.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/utils/AI/aiSdk.mjs +7 -1
- package/dist/esm/utils/AI/aiSdk.mjs.map +1 -1
- package/dist/types/controllers/projectAccessKey.controller.d.ts.map +1 -1
- package/dist/types/controllers/tag.controller.d.ts.map +1 -1
- package/dist/types/emails/InviteUserEmail.d.ts +4 -4
- package/dist/types/emails/InviteUserEmail.d.ts.map +1 -1
- package/dist/types/emails/MagicLinkEmail.d.ts +4 -4
- package/dist/types/emails/OAuthTokenCreatedEmail.d.ts +4 -4
- package/dist/types/emails/OAuthTokenCreatedEmail.d.ts.map +1 -1
- package/dist/types/emails/PasswordChangeConfirmation.d.ts +4 -4
- package/dist/types/emails/ResetUserPassword.d.ts +4 -4
- package/dist/types/emails/SubscriptionPaymentCancellation.d.ts +4 -4
- package/dist/types/emails/SubscriptionPaymentError.d.ts +4 -4
- package/dist/types/emails/SubscriptionPaymentError.d.ts.map +1 -1
- package/dist/types/emails/SubscriptionPaymentSuccess.d.ts +4 -4
- package/dist/types/emails/ValidateUserEmail.d.ts +4 -4
- package/dist/types/emails/Welcome.d.ts +4 -4
- package/dist/types/emails/Welcome.d.ts.map +1 -1
- package/dist/types/models/dictionary.model.d.ts +4 -4
- package/dist/types/models/dictionary.model.d.ts.map +1 -1
- package/dist/types/models/discussion.model.d.ts +2 -2
- package/dist/types/models/oAuth2.model.d.ts +3 -3
- package/dist/types/models/oAuth2.model.d.ts.map +1 -1
- package/dist/types/routes/ai.routes.d.ts.map +1 -1
- package/dist/types/routes/eventListener.routes.d.ts.map +1 -1
- package/dist/types/routes/project.routes.d.ts.map +1 -1
- package/dist/types/schemas/dictionary.schema.d.ts +6 -6
- package/dist/types/schemas/dictionary.schema.d.ts.map +1 -1
- package/dist/types/schemas/discussion.schema.d.ts +6 -6
- package/dist/types/schemas/oAuth2.schema.d.ts +5 -5
- package/dist/types/schemas/organization.schema.d.ts +6 -6
- package/dist/types/schemas/plans.schema.d.ts +6 -6
- package/dist/types/schemas/project.schema.d.ts +6 -6
- package/dist/types/schemas/project.schema.d.ts.map +1 -1
- package/dist/types/schemas/session.schema.d.ts +6 -6
- package/dist/types/schemas/tag.schema.d.ts +6 -6
- package/dist/types/schemas/user.schema.d.ts +6 -6
- package/dist/types/utils/filtersAndPagination/getDictionaryFiltersAndPagination.d.ts +2 -2
- package/dist/types/utils/filtersAndPagination/getDiscussionFiltersAndPagination.d.ts +2 -2
- package/dist/types/utils/filtersAndPagination/getOrganizationFiltersAndPagination.d.ts +2 -2
- package/dist/types/utils/filtersAndPagination/getProjectFiltersAndPagination.d.ts +2 -2
- package/dist/types/utils/filtersAndPagination/getTagFiltersAndPagination.d.ts +2 -2
- package/package.json +17 -18
- package/dist/cjs/_virtual/_utils_asset.cjs +0 -98
- package/dist/cjs/_virtual/rolldown_runtime.cjs +0 -25
- package/dist/cjs/controllers/ai.controller.cjs +0 -381
- package/dist/cjs/controllers/ai.controller.cjs.map +0 -1
- package/dist/cjs/controllers/dictionary.controller.cjs +0 -463
- package/dist/cjs/controllers/dictionary.controller.cjs.map +0 -1
- package/dist/cjs/controllers/eventListener.controller.cjs +0 -53
- package/dist/cjs/controllers/eventListener.controller.cjs.map +0 -1
- package/dist/cjs/controllers/newsletter.controller.cjs +0 -164
- package/dist/cjs/controllers/newsletter.controller.cjs.map +0 -1
- package/dist/cjs/controllers/oAuth2.controller.cjs +0 -22
- package/dist/cjs/controllers/oAuth2.controller.cjs.map +0 -1
- package/dist/cjs/controllers/organization.controller.cjs +0 -492
- package/dist/cjs/controllers/organization.controller.cjs.map +0 -1
- package/dist/cjs/controllers/project.controller.cjs +0 -430
- package/dist/cjs/controllers/project.controller.cjs.map +0 -1
- package/dist/cjs/controllers/projectAccessKey.controller.cjs +0 -161
- package/dist/cjs/controllers/projectAccessKey.controller.cjs.map +0 -1
- package/dist/cjs/controllers/search.controller.cjs +0 -14
- package/dist/cjs/controllers/search.controller.cjs.map +0 -1
- package/dist/cjs/controllers/stripe.controller.cjs +0 -149
- package/dist/cjs/controllers/stripe.controller.cjs.map +0 -1
- package/dist/cjs/controllers/tag.controller.cjs +0 -226
- package/dist/cjs/controllers/tag.controller.cjs.map +0 -1
- package/dist/cjs/controllers/user.controller.cjs +0 -269
- package/dist/cjs/controllers/user.controller.cjs.map +0 -1
- package/dist/cjs/emails/InviteUserEmail.cjs +0 -325
- package/dist/cjs/emails/InviteUserEmail.cjs.map +0 -1
- package/dist/cjs/emails/MagicLinkEmail.cjs +0 -242
- package/dist/cjs/emails/MagicLinkEmail.cjs.map +0 -1
- package/dist/cjs/emails/OAuthTokenCreatedEmail.cjs +0 -301
- package/dist/cjs/emails/OAuthTokenCreatedEmail.cjs.map +0 -1
- package/dist/cjs/emails/PasswordChangeConfirmation.cjs +0 -177
- package/dist/cjs/emails/PasswordChangeConfirmation.cjs.map +0 -1
- package/dist/cjs/emails/ResetUserPassword.cjs +0 -240
- package/dist/cjs/emails/ResetUserPassword.cjs.map +0 -1
- package/dist/cjs/emails/SubscriptionPaymentCancellation.cjs +0 -202
- package/dist/cjs/emails/SubscriptionPaymentCancellation.cjs.map +0 -1
- package/dist/cjs/emails/SubscriptionPaymentError.cjs +0 -202
- package/dist/cjs/emails/SubscriptionPaymentError.cjs.map +0 -1
- package/dist/cjs/emails/SubscriptionPaymentSuccess.cjs +0 -208
- package/dist/cjs/emails/SubscriptionPaymentSuccess.cjs.map +0 -1
- package/dist/cjs/emails/ValidateUserEmail.cjs +0 -240
- package/dist/cjs/emails/ValidateUserEmail.cjs.map +0 -1
- package/dist/cjs/emails/Welcome.cjs +0 -216
- package/dist/cjs/emails/Welcome.cjs.map +0 -1
- package/dist/cjs/emails/index.cjs +0 -25
- package/dist/cjs/export.cjs +0 -24
- package/dist/cjs/index.cjs +0 -91
- package/dist/cjs/index.cjs.map +0 -1
- package/dist/cjs/logger/index.cjs +0 -13
- package/dist/cjs/logger/index.cjs.map +0 -1
- package/dist/cjs/middlewares/oAuth2.middleware.cjs +0 -42
- package/dist/cjs/middlewares/oAuth2.middleware.cjs.map +0 -1
- package/dist/cjs/middlewares/request.middleware.cjs +0 -17
- package/dist/cjs/middlewares/request.middleware.cjs.map +0 -1
- package/dist/cjs/middlewares/sessionAuth.middleware.cjs +0 -22
- package/dist/cjs/middlewares/sessionAuth.middleware.cjs.map +0 -1
- package/dist/cjs/models/dictionary.model.cjs +0 -10
- package/dist/cjs/models/dictionary.model.cjs.map +0 -1
- package/dist/cjs/models/discussion.model.cjs +0 -10
- package/dist/cjs/models/discussion.model.cjs.map +0 -1
- package/dist/cjs/models/oAuth2.model.cjs +0 -10
- package/dist/cjs/models/oAuth2.model.cjs.map +0 -1
- package/dist/cjs/models/organization.model.cjs +0 -10
- package/dist/cjs/models/organization.model.cjs.map +0 -1
- package/dist/cjs/models/project.model.cjs +0 -10
- package/dist/cjs/models/project.model.cjs.map +0 -1
- package/dist/cjs/models/session.model.cjs +0 -10
- package/dist/cjs/models/session.model.cjs.map +0 -1
- package/dist/cjs/models/tag.model.cjs +0 -10
- package/dist/cjs/models/tag.model.cjs.map +0 -1
- package/dist/cjs/models/user.model.cjs +0 -10
- package/dist/cjs/models/user.model.cjs.map +0 -1
- package/dist/cjs/routes/ai.routes.cjs +0 -75
- package/dist/cjs/routes/ai.routes.cjs.map +0 -1
- package/dist/cjs/routes/dictionary.routes.cjs +0 -64
- package/dist/cjs/routes/dictionary.routes.cjs.map +0 -1
- package/dist/cjs/routes/eventListener.routes.cjs +0 -20
- package/dist/cjs/routes/eventListener.routes.cjs.map +0 -1
- package/dist/cjs/routes/newsletter.routes.cjs +0 -34
- package/dist/cjs/routes/newsletter.routes.cjs.map +0 -1
- package/dist/cjs/routes/organization.routes.cjs +0 -70
- package/dist/cjs/routes/organization.routes.cjs.map +0 -1
- package/dist/cjs/routes/project.routes.cjs +0 -83
- package/dist/cjs/routes/project.routes.cjs.map +0 -1
- package/dist/cjs/routes/search.routes.cjs +0 -20
- package/dist/cjs/routes/search.routes.cjs.map +0 -1
- package/dist/cjs/routes/stripe.routes.cjs +0 -34
- package/dist/cjs/routes/stripe.routes.cjs.map +0 -1
- package/dist/cjs/routes/tags.routes.cjs +0 -40
- package/dist/cjs/routes/tags.routes.cjs.map +0 -1
- package/dist/cjs/routes/user.routes.cjs +0 -58
- package/dist/cjs/routes/user.routes.cjs.map +0 -1
- package/dist/cjs/schemas/dictionary.schema.cjs +0 -73
- package/dist/cjs/schemas/dictionary.schema.cjs.map +0 -1
- package/dist/cjs/schemas/discussion.schema.cjs +0 -81
- package/dist/cjs/schemas/discussion.schema.cjs.map +0 -1
- package/dist/cjs/schemas/oAuth2.schema.cjs +0 -49
- package/dist/cjs/schemas/oAuth2.schema.cjs.map +0 -1
- package/dist/cjs/schemas/organization.schema.cjs +0 -62
- package/dist/cjs/schemas/organization.schema.cjs.map +0 -1
- package/dist/cjs/schemas/plans.schema.cjs +0 -75
- package/dist/cjs/schemas/plans.schema.cjs.map +0 -1
- package/dist/cjs/schemas/project.schema.cjs +0 -112
- package/dist/cjs/schemas/project.schema.cjs.map +0 -1
- package/dist/cjs/schemas/session.schema.cjs +0 -43
- package/dist/cjs/schemas/session.schema.cjs.map +0 -1
- package/dist/cjs/schemas/tag.schema.cjs +0 -62
- package/dist/cjs/schemas/tag.schema.cjs.map +0 -1
- package/dist/cjs/schemas/user.schema.cjs +0 -87
- package/dist/cjs/schemas/user.schema.cjs.map +0 -1
- package/dist/cjs/services/dictionary.service.cjs +0 -176
- package/dist/cjs/services/dictionary.service.cjs.map +0 -1
- package/dist/cjs/services/email.service.cjs +0 -155
- package/dist/cjs/services/email.service.cjs.map +0 -1
- package/dist/cjs/services/oAuth2.service.cjs +0 -211
- package/dist/cjs/services/oAuth2.service.cjs.map +0 -1
- package/dist/cjs/services/organization.service.cjs +0 -106
- package/dist/cjs/services/organization.service.cjs.map +0 -1
- package/dist/cjs/services/project.service.cjs +0 -89
- package/dist/cjs/services/project.service.cjs.map +0 -1
- package/dist/cjs/services/projectAccessKey.service.cjs +0 -111
- package/dist/cjs/services/projectAccessKey.service.cjs.map +0 -1
- package/dist/cjs/services/subscription.service.cjs +0 -184
- package/dist/cjs/services/subscription.service.cjs.map +0 -1
- package/dist/cjs/services/tag.service.cjs +0 -88
- package/dist/cjs/services/tag.service.cjs.map +0 -1
- package/dist/cjs/services/user.service.cjs +0 -120
- package/dist/cjs/services/user.service.cjs.map +0 -1
- package/dist/cjs/types/Routes.cjs +0 -0
- package/dist/cjs/types/dictionary.types.cjs +0 -0
- package/dist/cjs/types/discussion.types.cjs +0 -0
- package/dist/cjs/types/oAuth2.types.cjs +0 -0
- package/dist/cjs/types/organization.types.cjs +0 -0
- package/dist/cjs/types/plan.types.cjs +0 -0
- package/dist/cjs/types/project.types.cjs +0 -0
- package/dist/cjs/types/session.types.cjs +0 -0
- package/dist/cjs/types/tag.types.cjs +0 -0
- package/dist/cjs/types/user.types.cjs +0 -10
- package/dist/cjs/types/user.types.cjs.map +0 -1
- package/dist/cjs/utils/AI/aiSdk.cjs +0 -94
- package/dist/cjs/utils/AI/aiSdk.cjs.map +0 -1
- package/dist/cjs/utils/AI/askDocQuestion/askDocQuestion.cjs +0 -201
- package/dist/cjs/utils/AI/askDocQuestion/askDocQuestion.cjs.map +0 -1
- package/dist/cjs/utils/AI/askDocQuestion/indexMarkdownFiles.cjs +0 -150
- package/dist/cjs/utils/AI/askDocQuestion/indexMarkdownFiles.cjs.map +0 -1
- package/dist/cjs/utils/AI/auditDictionary/index.cjs +0 -60
- package/dist/cjs/utils/AI/auditDictionary/index.cjs.map +0 -1
- package/dist/cjs/utils/AI/auditDictionaryField/index.cjs +0 -63
- package/dist/cjs/utils/AI/auditDictionaryField/index.cjs.map +0 -1
- package/dist/cjs/utils/AI/auditDictionaryMetadata/index.cjs +0 -45
- package/dist/cjs/utils/AI/auditDictionaryMetadata/index.cjs.map +0 -1
- package/dist/cjs/utils/AI/auditTag/index.cjs +0 -40
- package/dist/cjs/utils/AI/auditTag/index.cjs.map +0 -1
- package/dist/cjs/utils/AI/autocomplete/index.cjs +0 -41
- package/dist/cjs/utils/AI/autocomplete/index.cjs.map +0 -1
- package/dist/cjs/utils/AI/customQuery/index.cjs +0 -27
- package/dist/cjs/utils/AI/customQuery/index.cjs.map +0 -1
- package/dist/cjs/utils/AI/translateJSON/index.cjs +0 -71
- package/dist/cjs/utils/AI/translateJSON/index.cjs.map +0 -1
- package/dist/cjs/utils/access.cjs +0 -0
- package/dist/cjs/utils/accessControl.cjs +0 -133
- package/dist/cjs/utils/accessControl.cjs.map +0 -1
- package/dist/cjs/utils/auth/getAuth.cjs +0 -218
- package/dist/cjs/utils/auth/getAuth.cjs.map +0 -1
- package/dist/cjs/utils/cors.cjs +0 -33
- package/dist/cjs/utils/cors.cjs.map +0 -1
- package/dist/cjs/utils/ensureArrayQueryFilter.cjs +0 -13
- package/dist/cjs/utils/ensureArrayQueryFilter.cjs.map +0 -1
- package/dist/cjs/utils/ensureMongoDocumentToObject.cjs +0 -16
- package/dist/cjs/utils/ensureMongoDocumentToObject.cjs.map +0 -1
- package/dist/cjs/utils/errors/ErrorHandler.cjs +0 -76
- package/dist/cjs/utils/errors/ErrorHandler.cjs.map +0 -1
- package/dist/cjs/utils/errors/ErrorsClass.cjs +0 -54
- package/dist/cjs/utils/errors/ErrorsClass.cjs.map +0 -1
- package/dist/cjs/utils/errors/errorCodes.cjs +0 -1387
- package/dist/cjs/utils/errors/errorCodes.cjs.map +0 -1
- package/dist/cjs/utils/errors/index.cjs +0 -8
- package/dist/cjs/utils/extractJSON.cjs +0 -61
- package/dist/cjs/utils/extractJSON.cjs.map +0 -1
- package/dist/cjs/utils/filtersAndPagination/getDictionaryFiltersAndPagination.cjs +0 -94
- package/dist/cjs/utils/filtersAndPagination/getDictionaryFiltersAndPagination.cjs.map +0 -1
- package/dist/cjs/utils/filtersAndPagination/getDiscussionFiltersAndPagination.cjs +0 -65
- package/dist/cjs/utils/filtersAndPagination/getDiscussionFiltersAndPagination.cjs.map +0 -1
- package/dist/cjs/utils/filtersAndPagination/getFiltersAndPaginationFromBody.cjs +0 -36
- package/dist/cjs/utils/filtersAndPagination/getFiltersAndPaginationFromBody.cjs.map +0 -1
- package/dist/cjs/utils/filtersAndPagination/getOrganizationFiltersAndPagination.cjs +0 -49
- package/dist/cjs/utils/filtersAndPagination/getOrganizationFiltersAndPagination.cjs.map +0 -1
- package/dist/cjs/utils/filtersAndPagination/getProjectFiltersAndPagination.cjs +0 -53
- package/dist/cjs/utils/filtersAndPagination/getProjectFiltersAndPagination.cjs.map +0 -1
- package/dist/cjs/utils/filtersAndPagination/getTagFiltersAndPagination.cjs +0 -57
- package/dist/cjs/utils/filtersAndPagination/getTagFiltersAndPagination.cjs.map +0 -1
- package/dist/cjs/utils/filtersAndPagination/getUserFiltersAndPagination.cjs +0 -74
- package/dist/cjs/utils/filtersAndPagination/getUserFiltersAndPagination.cjs.map +0 -1
- package/dist/cjs/utils/httpStatusCodes.cjs +0 -401
- package/dist/cjs/utils/httpStatusCodes.cjs.map +0 -1
- package/dist/cjs/utils/mapper/dictionary.cjs +0 -29
- package/dist/cjs/utils/mapper/dictionary.cjs.map +0 -1
- package/dist/cjs/utils/mapper/organization.cjs +0 -19
- package/dist/cjs/utils/mapper/organization.cjs.map +0 -1
- package/dist/cjs/utils/mapper/project.cjs +0 -26
- package/dist/cjs/utils/mapper/project.cjs.map +0 -1
- package/dist/cjs/utils/mapper/session.cjs +0 -15
- package/dist/cjs/utils/mapper/session.cjs.map +0 -1
- package/dist/cjs/utils/mapper/tag.cjs +0 -25
- package/dist/cjs/utils/mapper/tag.cjs.map +0 -1
- package/dist/cjs/utils/mapper/user.cjs +0 -24
- package/dist/cjs/utils/mapper/user.cjs.map +0 -1
- package/dist/cjs/utils/mergeFunctionTypes.cjs +0 -0
- package/dist/cjs/utils/mongoDB/connectDB.cjs +0 -32
- package/dist/cjs/utils/mongoDB/connectDB.cjs.map +0 -1
- package/dist/cjs/utils/mongoDB/types.cjs +0 -0
- package/dist/cjs/utils/oAuth2.cjs +0 -25
- package/dist/cjs/utils/oAuth2.cjs.map +0 -1
- package/dist/cjs/utils/permissions.cjs +0 -103
- package/dist/cjs/utils/permissions.cjs.map +0 -1
- package/dist/cjs/utils/plan.cjs +0 -63
- package/dist/cjs/utils/plan.cjs.map +0 -1
- package/dist/cjs/utils/rateLimiter.cjs +0 -48
- package/dist/cjs/utils/rateLimiter.cjs.map +0 -1
- package/dist/cjs/utils/removeObjectKeys.cjs +0 -11
- package/dist/cjs/utils/removeObjectKeys.cjs.map +0 -1
- package/dist/cjs/utils/responseData.cjs +0 -33
- package/dist/cjs/utils/responseData.cjs.map +0 -1
- package/dist/cjs/utils/validation/validateArray.cjs +0 -31
- package/dist/cjs/utils/validation/validateArray.cjs.map +0 -1
- package/dist/cjs/utils/validation/validateDictionary.cjs +0 -35
- package/dist/cjs/utils/validation/validateDictionary.cjs.map +0 -1
- package/dist/cjs/utils/validation/validateEmail.cjs +0 -20
- package/dist/cjs/utils/validation/validateEmail.cjs.map +0 -1
- package/dist/cjs/utils/validation/validateOrganization.cjs +0 -43
- package/dist/cjs/utils/validation/validateOrganization.cjs.map +0 -1
- package/dist/cjs/utils/validation/validatePhone.cjs +0 -20
- package/dist/cjs/utils/validation/validatePhone.cjs.map +0 -1
- package/dist/cjs/utils/validation/validateProject.cjs +0 -55
- package/dist/cjs/utils/validation/validateProject.cjs.map +0 -1
- package/dist/cjs/utils/validation/validateString.cjs +0 -21
- package/dist/cjs/utils/validation/validateString.cjs.map +0 -1
- package/dist/cjs/utils/validation/validateTag.cjs +0 -47
- package/dist/cjs/utils/validation/validateTag.cjs.map +0 -1
- package/dist/cjs/utils/validation/validateUser.cjs +0 -47
- package/dist/cjs/utils/validation/validateUser.cjs.map +0 -1
- package/dist/cjs/webhooks/stripe.webhook.cjs +0 -116
- package/dist/cjs/webhooks/stripe.webhook.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errorCodes.cjs","names":["HttpStatusCodes"],"sources":["../../../../src/utils/errors/errorCodes.ts"],"sourcesContent":["import { HttpStatusCodes } from '@utils/httpStatusCodes';\n// @ts-ignore express-intlayer not build yet\nimport type { StrictModeLocaleMap } from 'express-intlayer';\n\ntype ErrorCode = {\n title: StrictModeLocaleMap<string>;\n message: StrictModeLocaleMap<string>;\n statusCode: HttpStatusCodes;\n};\n\nexport const errorData = {\n USER_NOT_DEFINED: {\n title: {\n en: 'User not defined',\n fr: 'Utilisateur non défini',\n es: 'Usuario no definido',\n },\n message: {\n en: 'User is required, but not defined.',\n fr: 'Utilisateur requis, mais non défini.',\n es: 'Usuario es requerido, pero no está definido.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n USER_NOT_FOUND: {\n title: {\n en: 'User not found',\n fr: 'Utilisateur non trouvé',\n es: 'Usuario no encontrado',\n },\n message: {\n en: 'The user is probably not authenticated. Please try again.',\n fr: \"L'utilisateur n'est probablement pas authentifié. Veuillez réessayer.\",\n es: 'El usuario probablemente no está autenticado. Por favor, inténtelo de nuevo.',\n },\n statusCode: HttpStatusCodes.FORBIDDEN_403,\n },\n USER_DATA_NOT_FOUND: {\n title: {\n en: 'User Data Not Found',\n fr: 'Données utilisateur non trouvées',\n es: 'Datos de usuario no encontrados',\n },\n message: {\n en: 'The user data was not found.',\n fr: \"Les données utilisateur n'ont pas été trouvées.\",\n es: 'Los datos del usuario no se han encontrado.',\n },\n statusCode: HttpStatusCodes.NOT_FOUND_404,\n },\n USER_ALREADY_LOGGED_IN: {\n title: {\n en: 'User Already Logged In',\n fr: 'Utilisateur déjà connecté',\n es: 'Usuario ya conectado',\n },\n message: {\n en: 'The user is already logged in.',\n fr: \"L'utilisateur est déjà connecté.\",\n es: 'El usuario ya está conectado.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n USER_ID_MISMATCH: {\n title: {\n en: 'User ID Mismatch',\n fr: 'Identifiant utilisateur ne correspond pas',\n es: 'Identificador de usuario no coincide',\n },\n message: {\n en: 'The provided user ID does not match the expected value. Please verify and try again.',\n fr: \"L'identifiant utilisateur fourni ne correspond pas à la valeur attendue. Veuillez vérifier et réessayer.\",\n es: 'El identificador de usuario proporcionado no coincide con el valor esperado. Verifique e intente nuevamente.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n USER_INVALID_FIELDS: {\n title: {\n en: 'User Invalid Fields',\n fr: \"Champs d'utilisateur invalides\",\n es: 'Campos de usuario no válidos',\n },\n message: {\n en: 'The provided user fields are invalid.',\n fr: \"Les champs fournis pour l'utilisateur sont invalides.\",\n es: 'Los campos proporcionados para el usuario no son válidos.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n USER_CREATION_FAILED: {\n title: {\n en: 'User Creation Failed',\n fr: \"Échec de la création de l'utilisateur\",\n es: 'Error al crear el usuario',\n },\n message: {\n en: 'Failed to create the specified user.',\n fr: \"La création de l'utilisateur a échoué.\",\n es: 'No se pudo crear el usuario especificado.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n USER_SESSION_EXPIRED: {\n title: {\n en: 'User Session Expired',\n fr: 'Session utilisateur expirée',\n es: 'Sesión de usuario caducada',\n },\n message: {\n en: 'The user session has expired.',\n fr: \"La session de l'utilisateur a expiré.\",\n es: 'La sesión de usuario ha caducado.',\n },\n statusCode: HttpStatusCodes.UNAUTHORIZED_401,\n },\n USER_UPDATE_FAILED: {\n title: {\n en: 'User Update Failed',\n fr: \"Échec de la mise à jour de l'utilisateur\",\n es: 'Error al actualizar el usuario',\n },\n message: {\n en: 'Failed to update the specified user.',\n fr: \"La mise à jour de l'utilisateur a échoué.\",\n es: 'No se pudo actualizar el usuario especificado.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n USER_UPDATED_USER_NOT_FOUND: {\n title: {\n en: 'User Updated User Not Found',\n fr: 'Utilisateur utilisateur non trouvé',\n es: 'Usuario actualizado no encontrado',\n },\n message: {\n en: 'The updated user was not found.',\n fr: \"L'utilisateur utilisateur n'a pas été trouvé.\",\n es: 'El usuario actualizado no se ha encontrado.',\n },\n statusCode: HttpStatusCodes.NOT_FOUND_404,\n },\n USER_COUNT_FAILED: {\n title: {\n en: 'User Count Failed',\n fr: 'Échec du comptage des utilisateurs',\n es: 'Error al contar los usuarios',\n },\n message: {\n en: 'Failed to count users.',\n fr: 'Le comptage des utilisateurs a échoué.',\n es: 'No se pudo contar los usuarios.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n USER_PROVIDER_NOT_FOUND: {\n title: {\n en: 'User Provider Not Found',\n fr: \"Fournisseur d'utilisateur non trouvé\",\n es: 'Proveedor de usuario no encontrado',\n },\n message: {\n en: 'The user provider was not found.',\n fr: \"Le fournisseur d'utilisateur n'a pas été trouvé.\",\n es: 'El proveedor de usuario no se ha encontrado.',\n },\n statusCode: HttpStatusCodes.NOT_FOUND_404,\n },\n USER_PROVIDER_ALREADY_EXISTS: {\n title: {\n en: 'User Provider Already Exists',\n fr: \"Fournisseur d'utilisateur existe déjà\",\n es: 'Proveedor de usuario ya existe',\n },\n message: {\n en: 'The user provider already exists.',\n fr: \"Le fournisseur d'utilisateur existe déjà.\",\n es: 'El proveedor de usuario ya existe.',\n },\n statusCode: HttpStatusCodes.CONFLICT_409,\n },\n USER_PROVIDER_EMAIL_ALREADY_VALIDATED: {\n title: {\n en: 'User provider email already validated',\n fr: \"Email du fournisseur d'utilisateur déjà validé\",\n es: 'Correo electrónico del proveedor de usuario ya validado',\n },\n message: {\n en: 'The user provider email is already validated.',\n fr: \"L'email du fournisseur d'utilisateur est déjà validé.\",\n es: 'El correo electrónico del proveedor de usuario ya está validado.',\n },\n statusCode: HttpStatusCodes.CONFLICT_409,\n },\n USER_PREVIOUS_PASSWORD_NOT_PROVIDED: {\n title: {\n en: 'User previous password not provided',\n fr: \"Mot de passe précédent de l'utilisateur non fourni\",\n es: 'Contraseña anterior de usuario no proporcionada',\n },\n message: {\n en: 'The user previous password was not provided.',\n fr: \"Le mot de passe précédent de l'utilisateur n'a pas été fourni.\",\n es: 'La contraseña anterior de usuario no fue proporcionada.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n USER_PASSWORD_NOT_DEFINED: {\n title: {\n en: 'User password not defined',\n fr: \"Mot de passe de l'utilisateur non défini\",\n es: 'Contraseña de usuario no definida',\n },\n message: {\n en: 'The user password was not defined.',\n fr: \"Le mot de passe de l'utilisateur n'a pas été défini.\",\n es: 'La contraseña de usuario no se ha definido.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n USER_PROVIDER_SECRET_NOT_DEFINED: {\n title: {\n en: 'User Provider Secret Not Defined',\n fr: \"Secret du fournisseur d'utilisateur non défini\",\n es: 'Secret del proveedor de usuario no definido',\n },\n message: {\n en: 'The user provider secret was not defined.',\n fr: \"Le secret du fournisseur d'utilisateur n'a pas été défini.\",\n es: 'El secret del proveedor de usuario no se ha definido.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n USER_PROVIDER_SECRET_NOT_VALID: {\n title: {\n en: 'User Provider Secret Not Valid',\n fr: \"Secret du fournisseur d'utilisateur non valide\",\n es: 'Secret del proveedor de usuario no válido',\n },\n message: {\n en: 'The user provider secret was not valid.',\n fr: \"Le secret du fournisseur d'utilisateur n'a pas été valide.\",\n es: 'El secret del proveedor de usuario no es válido.',\n },\n statusCode: HttpStatusCodes.NOT_FOUND_404,\n },\n USER_ORGANIZATION_MEMBER_MISSING: {\n title: {\n en: 'User Not Organization Member',\n fr: \"Utilisateur non membre de l'organisation\",\n es: 'Usuario no miembro de la organización',\n },\n message: {\n en: 'The user is not a member of the organization.',\n fr: \"L'utilisateur n'est pas membre de l'organisation.\",\n es: 'El usuario no es miembro de la organización.',\n },\n statusCode: HttpStatusCodes.FORBIDDEN_403,\n },\n USER_ORGANIZATION_ADMIN_MISSING: {\n title: {\n en: 'User Not Organization Admin',\n fr: \"Utilisateur non administrateur de l'organisation\",\n es: 'Usuario no administrador de la organización',\n },\n message: {\n en: 'The user is not an admin of the organization.',\n fr: \"L'utilisateur n'est pas administrateur de l'organisation.\",\n es: 'El usuario no es administrador de la organización.',\n },\n statusCode: HttpStatusCodes.FORBIDDEN_403,\n },\n JWT_TOKEN_CREATION_FAILED_USER: {\n title: {\n en: 'JWT Token Creation Failed',\n fr: 'Echec de la création du jeton JWT',\n es: 'Error al crear el token JWT',\n },\n message: {\n en: 'JWT token creation failed for user.',\n fr: \"Echec de la création du jeton JWT pour l'utilisateur.\",\n es: 'Error al crear el token JWT para el usuario.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n JWT_TOKEN_CREATION_FAILED_ORGANIZATION: {\n title: {\n en: 'JWT Token Creation Failed',\n fr: 'Echec de la création du jeton JWT',\n es: 'Error al crear el token JWT',\n },\n message: {\n en: 'JWT token creation failed for organization.',\n fr: \"Echec de la création du jeton JWT pour l'organisation.\",\n es: 'Error al crear el token JWT para la organización.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n JWT_TOKEN_CREATION_FAILED_PROJECT: {\n title: {\n en: 'JWT Token Creation Failed',\n fr: 'Echec de la création du jeton JWT',\n es: 'Error al crear el token JWT',\n },\n message: {\n en: 'JWT token creation failed for project.',\n fr: 'Echec de la création du jeton JWT pour le projet.',\n es: 'Error al crear el token JWT para el proyecto.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n JWT_TOKEN_ORGANIZATION_MISMATCH_PROJECT: {\n title: {\n en: 'Organization Mismatch',\n fr: 'Organisation non correspondante',\n es: 'Organización no coincidente',\n },\n message: {\n en: 'The specified organization does not match the organization of the project.',\n fr: \"L'organisation spécifiée ne correspond pas à l'organisation du projet.\",\n es: 'La organización especificada no coincide con la organización del proyecto.',\n },\n statusCode: HttpStatusCodes.UNAUTHORIZED_401,\n },\n ORGANIZATION_NOT_FOUND: {\n title: {\n en: 'Organization not Found',\n fr: 'Organisation non trouvée',\n es: 'Organización no encontrada',\n },\n message: {\n en: 'Organization not found.',\n fr: 'Organisation non trouvée.',\n es: 'Organización no encontrada.',\n },\n statusCode: HttpStatusCodes.NOT_FOUND_404,\n },\n ORGANIZATION_NOT_DEFINED: {\n title: {\n en: 'Organization not defined',\n fr: 'Organisation non définie',\n es: 'Organización no definida',\n },\n message: {\n en: 'Organization is required, but not defined.',\n fr: 'Organisation requise, mais non définie.',\n es: 'Organización es requerida, pero no está definida.',\n },\n statusCode: HttpStatusCodes.NOT_FOUND_404,\n },\n ORGANIZATION_ID_NOT_FOUND: {\n title: {\n en: 'Organization ID Not Found',\n fr: \"Identifiant de l'organisation non trouvé\",\n es: 'Identificador de la organización no encontrado',\n },\n message: {\n en: 'The organization ID was not found.',\n fr: \"L'identifiant de l'organisation n'a pas été trouvé.\",\n es: 'El identificador de la organización no se ha encontrado.',\n },\n statusCode: HttpStatusCodes.NOT_FOUND_404,\n },\n ORGANIZATION_CREATION_FAILED: {\n title: {\n en: 'Organization Creation Failed',\n fr: \"Échec de la création de l'organisation\",\n es: 'Error al crear la organización',\n },\n message: {\n en: 'Failed to create the specified organization.',\n fr: \"La création de l'organisation a échoué.\",\n es: 'No se pudo crear la organización especificada.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n ORGANIZATION_COUNT_FAILED: {\n title: {\n en: 'Organization Count Failed',\n fr: \"Échec du comptage de l'organisation\",\n es: 'Error al contar la organización',\n },\n message: {\n en: 'Failed to count organizations.',\n fr: 'Le comptage des organisations a échoué.',\n es: 'No se pudo contar las organizaciones.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n ORGANIZATION_INVALID_FIELDS: {\n title: {\n en: 'Organization Invalid Fields',\n fr: \"Champs de l'organisation invalides\",\n es: 'Campos de la organización no válidos',\n },\n message: {\n en: 'The provided organization fields are invalid.',\n fr: \"Les champs fournis pour l'organisation sont invalides.\",\n es: 'Los campos proporcionados para la organización no son válidos.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n ORGANIZATION_DATA_NOT_FOUND: {\n title: {\n en: 'Organization Data Not Found',\n fr: \"Données de l'organisation non trouvées\",\n es: 'Datos de la organización no encontrados',\n },\n message: {\n en: 'The organization data was not found.',\n fr: \"Les données de l'organisation n'ont pas été trouvées.\",\n es: 'Los datos de la organización no se han encontrado.',\n },\n statusCode: HttpStatusCodes.NOT_FOUND_404,\n },\n ORGANIZATION_UPDATE_FAILED: {\n title: {\n en: 'Organization Update Failed',\n fr: \"Échec de la mise à jour de l'organisation\",\n es: 'Error al actualizar la organización',\n },\n message: {\n en: 'Failed to update the specified organization.',\n fr: \"La mise à jour de l'organisation a échoué.\",\n es: 'No se pudo actualizar la organización especificada.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n ORGANIZATION_MUST_HAVE_MEMBER: {\n title: {\n en: 'Organization Must Have Member',\n fr: \"L'organisation doit avoir au moins un membre\",\n es: 'La organización debe tener al menos un miembro',\n },\n message: {\n en: 'The organization must have at least one member.',\n fr: \"L'organisation doit avoir au moins un membre.\",\n es: 'La organización debe tener al menos un miembro.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n ORGANIZATION_MUST_HAVE_ADMIN: {\n title: {\n en: 'Organization Must Have Admin',\n fr: \"L'organisation doit avoir au moins un administrateur\",\n es: 'La organización debe tener al menos un administrador',\n },\n message: {\n en: 'The organization must have at least one admin.',\n fr: \"L'organisation doit avoir au moins un administrateur.\",\n es: 'La organización debe tener al menos un administrador.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n ORGANIZATION_PROJECT_MISMATCH: {\n title: {\n en: 'Organization Project Mismatch',\n fr: \"Projet non trouvé dans l'organisation\",\n es: 'El proyecto no se encuentra en la organización',\n },\n message: {\n en: 'The specified organization does not have the requested project.',\n fr: \"L'organisation spécifiée n'a pas le projet demandé.\",\n es: 'La organización especificada no tiene el proyecto solicitado.',\n },\n statusCode: HttpStatusCodes.NOT_FOUND_404,\n },\n ORGANIZATION_PLAN_NOT_FOUND: {\n title: {\n en: 'Organization Plan Not Found',\n fr: \"Plan d'organisation non trouvé\",\n es: 'Plan de organización no encontrado',\n },\n message: {\n en: 'The specified organization does not have a plan.',\n fr: \"L'organisation spécifiée n'a pas de plan.\",\n es: 'La organización especificada no tiene un plan.',\n },\n statusCode: HttpStatusCodes.NOT_FOUND_404,\n },\n DICTIONARY_NOT_FOUND: {\n title: {\n en: 'Dictionary Not Found',\n fr: 'Dictionnaire non trouvé',\n es: 'Diccionario no encontrado',\n },\n message: {\n en: 'The specified dictionary could not be found.',\n fr: 'Le dictionnaire spécifié est introuvable.',\n es: 'El diccionario especificado no se pudo encontrar.',\n },\n statusCode: HttpStatusCodes.NOT_FOUND_404,\n },\n DICTIONARY_DATA_NOT_FOUND: {\n title: {\n en: 'Dictionary Data Not Found',\n fr: 'Données du dictionnaire non trouvées',\n es: 'Datos del diccionario no encontrados',\n },\n message: {\n en: 'The dictionary data was not found.',\n fr: \"Les données du dictionnaire n'ont pas été trouvées.\",\n es: 'Los datos del diccionario no se han encontrado.',\n },\n statusCode: HttpStatusCodes.NOT_FOUND_404,\n },\n DICTIONARY_ID_NOT_FOUND: {\n title: {\n en: 'Dictionary ID Not Found',\n fr: 'Identifiant de dictionnaire non trouvé',\n es: 'Identificador de diccionario no encontrado',\n },\n message: {\n en: 'The dictionary ID was not found.',\n fr: \"L'identifiant de dictionnaire n'a pas été trouvé.\",\n es: 'El identificador de diccionario no se ha encontrado.',\n },\n statusCode: HttpStatusCodes.NOT_FOUND_404,\n },\n DICTIONARY_COUNT_FAILED: {\n title: {\n en: 'Dictionary Count Failed',\n fr: 'Echec du comptage du dictionnaire',\n es: 'Error al contar el diccionario',\n },\n message: {\n en: 'Failed to count dictionaries.',\n fr: 'Le comptage des dictionnaires a échoué.',\n es: 'No se pudo contar los diccionarios.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n DICTIONARY_INVALID_FIELDS: {\n title: {\n en: 'Dictionary Invalid Fields',\n fr: 'Champs du dictionnaire invalides',\n es: 'Campos del diccionario no válidos',\n },\n message: {\n en: 'The provided dictionary fields are invalid.',\n fr: 'Les champs fournis pour le dictionnaire sont invalides.',\n es: 'Los campos proporcionados para el diccionario no son válidos.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n DICTIONARIES_NOT_PROVIDED: {\n title: {\n en: 'Dictionaries Not Provided',\n fr: 'Aucune dictionnaire fourni',\n es: 'No se proporcionaron diccionarios',\n },\n message: {\n en: 'No dictionaries were provided.',\n fr: 'Aucune dictionnaire fourni.',\n es: 'No se proporcionaron diccionarios.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n DICTIONARY_PROJECT_MISMATCH: {\n title: {\n en: 'Dictionary Project Mismatch',\n fr: \"Le dictionnaire n'est pas dans le projet\",\n es: 'El diccionario no está en el proyecto',\n },\n message: {\n en: 'The specified dictionary is not in the project.',\n fr: \"Le dictionnaire n'est pas dans le projet.\",\n es: 'El diccionario no está en el proyecto.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n DICTIONARY_UPDATE_FAILED: {\n title: {\n en: 'Dictionary Update Failed',\n fr: 'Echec de la mise à jour du dictionnaire',\n es: 'Error al actualizar el diccionario',\n },\n message: {\n en: 'Failed to update the specified dictionary.',\n fr: 'La mise à jour du dictionnaire a échoué.',\n es: 'No se pudo actualizar el diccionario especificado.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n DICTIONARY_ACCESS_DENIED: {\n title: {\n en: 'Access Denied to Dictionary',\n fr: 'Accès refusé au dictionnaire',\n es: 'Acceso denegado al diccionario',\n },\n message: {\n en: 'You do not have access to this dictionary.',\n fr: \"Vous n'avez pas accès à ce dictionnaire.\",\n es: 'No tienes acceso a este diccionario.',\n },\n statusCode: HttpStatusCodes.FORBIDDEN_403,\n },\n NO_DICTIONARIES_PROVIDED: {\n title: {\n en: 'No Dictionaries Provided',\n fr: 'Aucun dictionnaire fourni',\n es: 'No se proporcionaron diccionarios',\n },\n message: {\n en: 'No dictionaries were provided for the operation.',\n fr: 'Aucun dictionnaire n’a été fourni pour l’opération.',\n es: 'No se proporcionaron diccionarios para la operación.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n PROJECT_NOT_DEFINED: {\n title: {\n en: 'Project not defined',\n fr: 'Projet non défini',\n es: 'Proyecto no definido',\n },\n message: {\n en: 'Project is required, but not defined.',\n fr: 'Projet requis, mais non défini.',\n es: 'Proyecto es requerido, pero no está definido.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n PROJECT_NOT_FOUND: {\n title: {\n en: 'Project Not Found',\n fr: 'Projet non trouvé',\n es: 'Proyecto no encontrado',\n },\n message: {\n en: 'The specified project could not be found.',\n fr: 'Le projet spécifié est introuvable.',\n es: 'El proyecto especificado no se pudo encontrar.',\n },\n statusCode: HttpStatusCodes.NOT_FOUND_404,\n },\n PROJECT_ID_NOT_FOUND: {\n title: {\n en: 'Project ID Not Found',\n fr: 'Identifiant de projet non trouvé',\n es: 'Identificador de proyecto no encontrado',\n },\n message: {\n en: 'The project ID was not found.',\n fr: \"L'identifiant de projet n'a pas été trouvé.\",\n es: 'El identificador de proyecto no se ha encontrado.',\n },\n statusCode: HttpStatusCodes.NOT_FOUND_404,\n },\n PROJECT_ID_MISMATCH: {\n title: {\n en: 'Project ID Mismatch',\n fr: 'Identifiant de projet non correspondant',\n es: 'Identificador de proyecto no coincidente',\n },\n message: {\n en: 'The provided project ID does not match the expected value. Please verify and try again.',\n fr: \"L'identifiant de projet fourni ne correspond pas à la valeur attendue. Veuillez vérifier et réessayer.\",\n es: 'El identificador de proyecto proporcionado no coincide con el valor esperado. Verifique e intente nuevamente.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n PROJECT_COUNT_FAILED: {\n title: {\n en: 'Project Count Failed',\n fr: 'Échec du comptage du projet',\n es: 'Error al contar el proyecto',\n },\n message: {\n en: 'Failed to count projects.',\n fr: 'Le comptage des projets a échoué.',\n es: 'No se pudo contar los proyectos.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n PROJECT_INVALID_FIELDS: {\n title: {\n en: 'Project Invalid Fields',\n fr: 'Champs du projet invalides',\n es: 'Campos del proyecto no válidos',\n },\n message: {\n en: 'The provided project fields are invalid.',\n fr: 'Les champs fournis pour le projet sont invalides.',\n es: 'Los campos proporcionados para el proyecto no son válidos.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n PROJECT_UPDATE_FAILED: {\n title: {\n en: 'Project Update Failed',\n fr: 'Échec de la mise à jour du projet',\n es: 'Error al actualizar el proyecto',\n },\n message: {\n en: 'Failed to update the specified project.',\n fr: 'La mise à jour du projet a échoué.',\n es: 'No se pudo actualizar el proyecto especificado.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n PROJECT_MUST_HAVE_MEMBER: {\n title: {\n en: 'Project Must Have Member',\n fr: 'Le projet doit avoir au moins un membre',\n es: 'El proyecto debe tener al menos un miembro',\n },\n message: {\n en: 'The project must have at least one member.',\n fr: 'Le projet doit avoir au moins un membre.',\n es: 'El proyecto debe tener al menos un miembro.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n PROJECT_MUST_HAVE_ADMIN: {\n title: {\n en: 'Project Must Have Admin',\n fr: 'Le projet doit avoir au moins un administrateur',\n es: 'El proyecto debe tener al menos un administrador',\n },\n message: {\n en: 'The project must have at least one admin.',\n fr: 'Le projet doit avoir au moins un administrateur.',\n es: 'El proyecto debe tener al menos un administrador.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n ACCESS_KEY_NOT_FOUND: {\n title: {\n en: 'Access Key Not Found',\n fr: \"Clé d'accès non trouvée\",\n es: 'Clave de acceso no encontrada',\n },\n message: {\n en: 'The specified access key could not be found.',\n fr: \"La clé d'accès spécifiée est introuvable.\",\n es: 'La clave de acceso especificada no se pudo encontrar.',\n },\n statusCode: HttpStatusCodes.NOT_FOUND_404,\n },\n ACCESS_KEY_CREATION_FAILED: {\n title: {\n en: 'Access Key Creation Failed',\n fr: \"Échec de la création de la clé d'accès\",\n es: 'Error al crear la clave de acceso',\n },\n message: {\n en: 'Failed to create a new access key for the project.',\n fr: \"La création d'une nouvelle clé d'accès pour le projet a échoué.\",\n es: 'No se pudo crear una nueva clave de acceso para el proyecto.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n ACCESS_KEY_DELETION_FAILED: {\n title: {\n en: 'Access Key Deletion Failed',\n fr: \"Échec de la suppression de la clé d'accès\",\n es: 'Error al eliminar la clave de acceso',\n },\n message: {\n en: 'Failed to delete the specified access key.',\n fr: \"La suppression de la clé d'accès a échoué.\",\n es: 'No se pudo eliminar la clave de acceso especificada.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n ACCESS_KEY_UPDATE_FAILED: {\n title: {\n en: 'Access Key Update Failed',\n fr: \"Échec de la mise à jour de la clé d'accès\",\n es: 'Error al actualizar la clave de acceso',\n },\n message: {\n en: 'Failed to update the specified access key.',\n fr: \"La mise à jour de la clé d'accès a échoué.\",\n es: 'No se pudo actualizar la clave de acceso especificada.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n ACCESS_KEY_INVALID: {\n title: {\n en: 'Invalid Access Key',\n fr: \"Clé d'accès invalide\",\n es: 'Clave de acceso no válida',\n },\n message: {\n en: 'The provided access key is invalid or expired.',\n fr: \"La clé d'accès fournie est invalide ou expirée.\",\n es: 'La clave de acceso proporcionada no es válida o ha expirado.',\n },\n statusCode: HttpStatusCodes.UNAUTHORIZED_401,\n },\n GITHUB_FETCH_USER_DATA_FAILED: {\n title: {\n en: 'GitHub Fetch User Data Failed',\n fr: 'Échec de la récupération des données utilisateur de GitHub',\n es: 'Error al obtener datos del usuario de GitHub',\n },\n message: {\n en: 'Failed to fetch user data from GitHub.',\n fr: 'Échec de la récupération des données utilisateur de GitHub.',\n es: 'Error al obtener datos del usuario de GitHub.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n GIT_HUB_FETCH_USER_EMAIL_FAILED: {\n title: {\n en: 'GitHub Fetch User Email Failed',\n fr: \"Échec de la récupération de l'email utilisateur de GitHub\",\n es: 'Error al obtener el correo electrónico del usuario de GitHub',\n },\n message: {\n en: 'Failed to fetch user email from GitHub.',\n fr: \"Échec de la récupération de l'email utilisateur de GitHub.\",\n es: 'Error al obtener el correo electrónico del usuario de GitHub.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n LOGIN_FAILED: {\n title: {\n en: 'Login Failed',\n fr: 'Échec de la connexion',\n es: 'Error al iniciar sesión',\n },\n message: {\n en: 'The email or password provided is incorrect.',\n fr: \"L'email ou le mot de passe fourni est incorrect.\",\n es: 'El correo electrónico o la contraseña proporcionada es incorrecta.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n USER_NOT_AUTHENTICATED: {\n title: {\n en: 'User not authenticated',\n fr: 'Utilisateur non authentifié',\n es: 'Usuario no autenticado',\n },\n message: {\n en: 'The user is not authenticated.',\n fr: \"L'utilisateur n'est pas authentifié.\",\n es: 'El usuario no está autenticado.',\n },\n statusCode: HttpStatusCodes.UNAUTHORIZED_401,\n },\n AUTH_ERROR: {\n title: {\n en: 'Authentication Error',\n fr: \"Erreur d'authentification\",\n es: 'Error de autentication',\n },\n message: {\n en: 'Authentication fail because access token is invalid.',\n fr: \"L'authentification a échoué car le jeton d'accès est invalide.\",\n es: 'La autenticación falló porque el token de acceso es inválido.',\n },\n statusCode: HttpStatusCodes.UNAUTHORIZED_401,\n },\n TOO_MANY_CONNECTIONS: {\n title: {\n en: 'Too many connections',\n fr: 'Trop de connexions',\n es: 'Demasiadas conexiones',\n },\n message: {\n en: 'Too many connections. Please try again later.',\n fr: 'Trop de connexions. Veuillez réessayer plus tard.',\n es: 'Demasiadas conexiones. Por favor, inténtelo de nuevo más tarde.',\n },\n statusCode: HttpStatusCodes.CONFLICT_409,\n },\n INVALID_USER_ID: {\n title: {\n en: 'Invalid User ID',\n fr: 'Identifiant utilisateur non valide',\n es: 'Identificador de usuario no válido',\n },\n message: {\n en: 'The provided user ID is invalid.',\n fr: \"L'identifiant utilisateur fourni n'est pas valide.\",\n es: 'El identificador de usuario proporcionado no es válido.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n EMAIL_NOT_PROVIDED: {\n title: {\n en: 'Email Not Provided',\n fr: 'Email non fourni',\n es: 'Email no proporcionado',\n },\n message: {\n en: 'Email not provided.',\n fr: 'Email non fourni.',\n es: 'Email no proporcionado.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n USER_ALREADY_EXISTS: {\n title: {\n en: 'User Already Exists',\n fr: 'Utilisateur existe déjà',\n es: 'Usuario ya existe',\n },\n message: {\n en: 'A user with this email already exists in our system.',\n fr: 'Un utilisateur avec cet email existe déjà dans notre système.',\n es: 'Un usuario con este correo electrónico ya existe en nuestro sistema.',\n },\n statusCode: HttpStatusCodes.CONFLICT_409,\n },\n SECRET_NOT_PROVIDED: {\n title: {\n en: 'Secret Not Provided',\n fr: 'Secret non fourni',\n es: 'Secreto no proporcionado',\n },\n message: {\n en: 'Secret not provided.',\n fr: 'Secret non fourni.',\n es: 'Secreto no proporcionado.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n SESSION_NOT_FOUND: {\n title: {\n en: 'Session Not Found',\n fr: 'Session non trouvée',\n es: 'Sesión no encontrada',\n },\n message: {\n en: 'The session was not found.',\n fr: \"La session n'a pas été trouvée.\",\n es: 'La sesión no se ha encontrado.',\n },\n statusCode: HttpStatusCodes.NOT_FOUND_404,\n },\n CLIENT_ID_NOT_FOUND: {\n title: {\n en: 'Client ID Not Found',\n fr: 'Identifiant client non trouvé',\n es: 'Identificador de cliente no encontrado',\n },\n message: {\n en: 'The client ID was not found.',\n fr: \"L'identifiant client n'a pas été trouvé.\",\n es: 'El identificador de cliente no se ha encontrado.',\n },\n statusCode: HttpStatusCodes.NOT_FOUND_404,\n },\n PROJECT_DATA_NOT_FOUND: {\n title: {\n en: 'Project Data Not Found',\n fr: 'Données du projet non trouvées',\n es: 'Datos del proyecto no encontrados',\n },\n message: {\n en: 'The project data was not found.',\n fr: \"Les données du projet n'ont pas été trouvées.\",\n es: 'Los datos del proyecto no se han encontrado.',\n },\n statusCode: HttpStatusCodes.NOT_FOUND_404,\n },\n PROJECT_NOT_IN_ORGANIZATION: {\n title: {\n en: 'Project Not In Organization',\n fr: \"Projet non dans l'organisation\",\n es: 'Proyecto no en la organización',\n },\n message: {\n en: 'The project is not in the organization.',\n fr: \"Le projet n'est pas dans l'organisation.\",\n es: 'El proyecto no está en la organización.',\n },\n statusCode: HttpStatusCodes.FORBIDDEN_403,\n },\n PROJECTS_EXIST: {\n title: {\n en: 'Projects Exist',\n fr: 'Des projets existent',\n es: 'Existen proyectos',\n },\n message: {\n en: 'Projects exist in this organization. Please delete them before deleting the organization.',\n fr: \"Des projets existent dans cette organisation. Veuillez les supprimer avant de supprimer l'organisation.\",\n es: 'Existen proyectos en esta organización. Por favor, elimine los antes de eliminar la organización.',\n },\n statusCode: HttpStatusCodes.FORBIDDEN_403,\n },\n PLAN_NOT_FOUND: {\n title: {\n en: 'Plan Not Found',\n fr: 'Plan non trouvé',\n es: 'Plan no encontrado',\n },\n message: {\n en: 'Plan not found',\n fr: 'Plan non trouvé',\n es: 'Plan no encontrado',\n },\n statusCode: HttpStatusCodes.NOT_FOUND_404,\n },\n MULTIPLE_PLANS_FOUND: {\n title: {\n en: 'Multiple Plans Found',\n fr: 'Plusieurs plans trouvés',\n es: 'Múltiples planes encontrados',\n },\n message: {\n en: 'Multiple plans found for the provided information.',\n fr: \"Plusieurs plans trouvés pour l'information fournie.\",\n es: 'Múltiples planes encontrados para la información proporcionada.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n PLAN_USER_LIMIT_REACHED: {\n title: {\n en: 'Plan User Limit Reached',\n fr: 'Limite de participants atteint',\n es: 'Límite de participantes alcanzado',\n },\n message: {\n en: 'The plan has reached its user limit. Please upgrade to add more users.',\n fr: 'Le plan a atteint son limite de participants. Veuillez mettre à niveau pour ajouter plus de participants.',\n es: 'El plan ha alcanzado su límite de participantes. Actualice para agregar más usuarios.',\n },\n statusCode: HttpStatusCodes.UNAUTHORIZED_401,\n },\n PLAN_PROJECT_LIMIT_REACHED: {\n title: {\n en: 'Plan Project Limit Reached',\n fr: 'Limite de projets atteint',\n es: 'Límite de proyectos alcanzado',\n },\n message: {\n en: 'The plan has reached its project limit. Please upgrade to add more projects.',\n fr: 'Le plan a atteint son limite de projets. Veuillez mettre à niveau pour ajouter plus de projets.',\n es: 'El plan ha alcanzado su límite de proyectos. Actualice para agregar más proyectos.',\n },\n statusCode: HttpStatusCodes.UNAUTHORIZED_401,\n },\n\n SUBSCRIPTION_CREATION_FAILED: {\n title: {\n en: 'Subscription Creation Failed',\n fr: 'Échec de la création de la souscription',\n es: 'Error al crear la suscripción',\n },\n message: {\n en: 'Failed to create the specified subscription.',\n fr: 'La création de la souscription a échoué.',\n es: 'No se pudo crear la suscripción especificada.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n\n CALLBACK_URL_NOT_VALID: {\n title: {\n en: 'Callback URL not valid',\n fr: 'URL de rappel non valide',\n es: 'URL de devolución no válida',\n },\n message: {\n en: 'The callback URL is not valid.',\n fr: 'L’URL de rappel n’est pas valide.',\n es: 'La URL de devolución no es válida.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n STRIPE_SUBSCRIPTION_NO_CUSTOMER: {\n title: {\n en: 'No customer found',\n fr: 'Aucun client trouvé',\n es: 'No se encontró el cliente',\n },\n message: {\n en: 'No customer found for the provided subscription.',\n fr: \"Aucun client n'a été trouvé pour l'abonnement fourni.\",\n es: 'No se encontró ningún cliente para el suscripción proporcionada.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n NO_SUBSCRIPTION_ID_PROVIDED: {\n title: {\n en: 'No subscription ID provided',\n fr: \"Aucun ID d'abonnement fourni\",\n es: 'No se proporcionó ningún ID de suscripción',\n },\n message: {\n en: 'No subscription ID provided.',\n fr: \"Aucun ID d'abonnement n'a été fourni.\",\n es: 'No se proporcionó ningún ID de suscripción.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n CANNOT_CANCEL_SUBSCRIPTION: {\n title: {\n en: 'Cannot cancel subscription',\n fr: \"Impossible d'annuler l'abonnement\",\n es: 'No se puede cancelar la suscripción',\n },\n message: {\n en: 'Cannot cancel subscription.',\n fr: \"Impossible d'annuler l'abonnement.\",\n es: 'No se puede cancelar la suscripción.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n ALREADY_SUBSCRIBED: {\n title: {\n en: 'Already Subscribed',\n fr: 'Déjà abonné',\n es: 'Ya suscrito',\n },\n message: {\n en: 'You are already subscribed to this plan.',\n fr: 'Vous êtes déjà abonné à ce plan.',\n es: 'Ya estás suscrito a este plan.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n SESSION_CREATION_FAILED: {\n title: {\n en: 'Session Creation Failed',\n fr: 'Échec de la création de la session',\n es: 'Error al crear la sesión',\n },\n message: {\n en: 'Failed to create the specified session.',\n fr: 'La création de la session a échoué.',\n es: 'No se pudo crear la sesión especificada.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n SETUP_INTENT_CREATION_FAILED: {\n title: {\n en: 'Setup Intent Creation Failed',\n fr: \"Échec de la création de l'intention de configuration\",\n es: 'Error al crear la intención de configuración',\n },\n message: {\n en: 'Failed to create the setup intent.',\n fr: \"Échec de la création de l'intention de configuration.\",\n es: 'Error al crear la intención de configuración.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n QUERY_FAILED: {\n title: {\n en: 'Query failed',\n fr: 'Requête échouée',\n es: 'Consulta fallida',\n },\n message: {\n en: 'Query failed',\n fr: 'Requête échouée',\n es: 'Consulta fallida',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n AUDIT_FAILED: {\n title: {\n en: 'Audit failed',\n fr: 'Audit échoué',\n es: 'Audito fallido',\n },\n message: {\n en: 'Failed to audit the content declaration files.',\n fr: \"Échec de l'audit des fichiers de déclaration de contenu.\",\n es: 'Error al auditar los archivos de declaración de contenido.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n\n TAG_NOT_FOUND: {\n title: {\n en: 'Tag Not Found',\n fr: 'Tag non trouvé',\n es: 'Tag no encontrado',\n },\n message: {\n en: 'The specified tag could not be found.',\n fr: 'Le tag spécifié est introuvable.',\n es: 'El tag especificado no se pudo encontrar.',\n },\n statusCode: HttpStatusCodes.NOT_FOUND_404,\n },\n TAG_ID_NOT_FOUND: {\n title: {\n en: 'Tag ID Not Found',\n fr: 'Identifiant de tag non trouvé',\n es: 'Identificador de tag no encontrado',\n },\n message: {\n en: 'The tag ID was not found.',\n fr: \"L'identifiant de tag n'a pas été trouvé.\",\n es: 'El identificador de tag no se ha encontrado.',\n },\n statusCode: HttpStatusCodes.NOT_FOUND_404,\n },\n TAG_ID_MISMATCH: {\n title: {\n en: 'Tag ID Mismatch',\n fr: 'Identifiant de tag non correspondant',\n es: 'Identificador de tag no coincidente',\n },\n message: {\n en: 'The provided tag ID does not match the expected value. Please verify and try again.',\n fr: \"L'identifiant de tag fourni ne correspond pas à la valeur attendue. Veuillez vérifier et réessayer.\",\n es: 'El identificador de tag proporcionado no coincide con el valor esperado. Verifique e intente nuevamente.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n TAG_COUNT_FAILED: {\n title: {\n en: 'Tag Count Failed',\n fr: 'Échec du comptage du tag',\n es: 'Error al contar el tag',\n },\n message: {\n en: 'Failed to count tags.',\n fr: 'Le comptage des tags a échoué.',\n es: 'No se pudo contar los tags.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n TAG_INVALID_FIELDS: {\n title: {\n en: 'Tag Invalid Fields',\n fr: 'Champs du tag invalides',\n es: 'Campos del tag no válidos',\n },\n message: {\n en: 'The provided tag fields are invalid.',\n fr: 'Les champs fournis pour le tag sont invalides.',\n es: 'Los campos proporcionados para el tag no son válidos.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n TAG_UPDATE_FAILED: {\n title: {\n en: 'Tag Update Failed',\n fr: 'Échec de la mise à jour du tag',\n es: 'Error al actualizar el tag',\n },\n message: {\n en: 'Failed to update the specified tag.',\n fr: 'La mise à jour du tag a échoué.',\n es: 'No se pudo actualizar el tag especificado.',\n },\n statusCode: HttpStatusCodes.INTERNAL_SERVER_ERROR_500,\n },\n TAG_NOT_IN_ORGANIZATION: {\n title: {\n en: 'Tag Not In Organization',\n fr: \"Tag non dans l'organisation\",\n es: 'Etiqueta no en la organización',\n },\n message: {\n en: 'The specified tag is not in the organization.',\n fr: \"Le tag spécifié n'est pas dans l'organisation.\",\n es: 'La etiqueta especificada no está en la organización.',\n },\n statusCode: HttpStatusCodes.FORBIDDEN_403,\n },\n AI_ACCESS_DENIED: {\n title: {\n en: 'Access denied',\n fr: 'Accès refusé',\n es: 'Acceso denegado',\n },\n message: {\n en: 'Invalid Access keys. Access keys should be defined to use AI features. See https://intlayer.org/doc/concept/editor. Alternatively, you can add your own OpenAI API key in the settings.',\n fr: \"Clées d'accès invalides. Les clés d'accès doivent être définies pour utiliser les fonctionnalités AI. Voir https://intlayer.org/doc/concept/editor. Alternativement, vous pouvez ajouter votre propre clé API OpenAI dans les paramètres.\",\n es: 'Claves de acceso no válidas. Las claves de acceso deben definirse para usar funciones AI. Ver https://intlayer.org/doc/concept/editor. Alternativamente, puede agregar su propia clave API OpenAI en la configuración.',\n },\n statusCode: HttpStatusCodes.FORBIDDEN_403,\n },\n RATE_LIMIT_EXCEEDED: {\n title: {\n en: 'Rate Limit Exceeded',\n fr: 'Limite de taux dépassée',\n es: 'Límite de tasa excedido',\n },\n message: {\n en: 'Rate limit exceeded. Please try again later.',\n fr: 'Limite de taux dépassée. Veuillez réessayer plus tard.',\n es: 'Límite de tasa excedido. Por favor, inténtelo de nuevo más tarde.',\n },\n statusCode: HttpStatusCodes.TOO_MANY_REQUESTS_429,\n },\n RATE_LIMIT_EXCEEDED_UNAUTHENTICATED: {\n title: {\n en: 'Rate Limit Exceeded',\n fr: 'Limite de taux dépassée',\n es: 'Límite de tasa excedido',\n },\n message: {\n en: 'The number of requests is limited for unauthenticated users. Please try again later, or sign in at https://intlayer.org/login to increase your limit.',\n fr: 'Le nombre de requêtes est limité pour les utilisateurs non authentifiés. Veuillez réessayer plus tard, ou connectez-vous à https://intlayer.org/login pour augmenter votre limite.',\n es: 'El número de solicitudes está limitado para usuarios no autenticados. Por favor, inténtelo de nuevo más tarde, o inicie sesión en https://intlayer.org/login para aumentar su límite.',\n },\n statusCode: HttpStatusCodes.TOO_MANY_REQUESTS_429,\n },\n SESSION_NOT_DEFINED: {\n title: {\n en: 'Session not defined',\n fr: 'Session non définie',\n es: 'Sesión no definida',\n },\n message: {\n en: 'The session is not defined.',\n fr: \"La session n'est pas définie.\",\n es: 'La sesión no está definida.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n INVALID_OAUTH_GRANT_TYPE: {\n title: {\n en: 'Invalid OAuth grant type',\n fr: 'Type de grant OAuth invalide',\n es: 'Tipo de grant OAuth inválido',\n },\n message: {\n en: 'The grant type is invalid.',\n fr: 'Le type de grant est invalide.',\n es: 'El tipo de grant es inválido.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n INVALID_OAUTH_CLIENT: {\n title: {\n en: 'Invalid OAuth client',\n fr: 'Client OAuth invalide',\n es: 'Cliente OAuth inválido',\n },\n message: {\n en: 'The client is invalid.',\n fr: 'Le client est invalide.',\n es: 'El cliente es inválido.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n INVALID_ACCESS_TOKEN: {\n title: {\n en: 'Invalid access token',\n fr: \"Jeton d'accès invalide\",\n es: 'Token de acceso inválido',\n },\n message: {\n en: 'The access token is invalid.',\n fr: \"Le jeton d'accès est invalide.\",\n es: 'El token de acceso es inválido.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n EXPIRED_ACCESS_TOKEN: {\n title: {\n en: 'Expired access token',\n fr: \"Jeton d'accès expiré\",\n es: 'Token de acceso expirado',\n },\n message: {\n en: 'The access token has expired.',\n fr: \"Le jeton d'accès a expiré.\",\n es: 'El token de acceso ha expirado.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n PERMISSION_DENIED: {\n title: {\n en: 'Permission Denied',\n fr: 'Permission refusée',\n es: 'Permiso denegado',\n },\n message: {\n en: 'You do not have permission to access this resource.',\n fr: \"Vous n'avez pas les permissions nécessaires pour accéder à cette ressource.\",\n es: 'No tienes permisos para acceder a este recurso.',\n },\n statusCode: HttpStatusCodes.FORBIDDEN_403,\n },\n INVALID_REQUEST_BODY: {\n title: {\n en: 'Invalid Request Body',\n fr: 'Corps de requête invalide',\n es: 'Cuerpo de solicitud inválido',\n },\n message: {\n en: 'The request body is invalid.',\n fr: 'Le corps de la requête est invalide.',\n es: 'El cuerpo de la solicitud es inválido.',\n },\n statusCode: HttpStatusCodes.BAD_REQUEST_400,\n },\n} satisfies Record<string, ErrorCode>;\n\nexport type ErrorCodes = keyof typeof errorData;\n"],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
const require_utils_errors_errorCodes = require('./errorCodes.cjs');
|
|
2
|
-
const require_utils_errors_ErrorHandler = require('./ErrorHandler.cjs');
|
|
3
|
-
const require_utils_errors_ErrorsClass = require('./ErrorsClass.cjs');
|
|
4
|
-
|
|
5
|
-
exports.AppError = require_utils_errors_ErrorsClass.AppError;
|
|
6
|
-
exports.ErrorHandler = require_utils_errors_ErrorHandler.ErrorHandler;
|
|
7
|
-
exports.GenericError = require_utils_errors_ErrorsClass.GenericError;
|
|
8
|
-
exports.errorData = require_utils_errors_errorCodes.errorData;
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
//#region src/utils/extractJSON.ts
|
|
3
|
-
/**
|
|
4
|
-
* Extracts and parses the first valid JSON value (object or array) from a string containing arbitrary text.
|
|
5
|
-
* This is used to safely extract JSON from LLM responses that may contain additional text or markdown.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* // Extracts JSON object from markdown response:
|
|
9
|
-
* ```json
|
|
10
|
-
* {
|
|
11
|
-
* "title": "Test content declarations",
|
|
12
|
-
* "description": "A comprehensive test dictionary...",
|
|
13
|
-
* "tags": ["test tag"]
|
|
14
|
-
* }
|
|
15
|
-
* ```
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* // Extracts JSON array:
|
|
19
|
-
* ```json
|
|
20
|
-
* ["item1", "item2", "item3"]
|
|
21
|
-
* ```
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* // Extracts JSON from markdown:
|
|
25
|
-
* Here is the response:
|
|
26
|
-
* ```json
|
|
27
|
-
* {"key": "value"}
|
|
28
|
-
* ```
|
|
29
|
-
* End of response.
|
|
30
|
-
*
|
|
31
|
-
* @throws {Error} If no valid JSON object/array is found or if parsing fails
|
|
32
|
-
* @returns {T} The parsed JSON value cast to type T
|
|
33
|
-
*/
|
|
34
|
-
const extractJson = (input) => {
|
|
35
|
-
const opening = input.match(/[{[]/);
|
|
36
|
-
if (!opening) throw new Error("No JSON start character ({ or [) found.");
|
|
37
|
-
const startIdx = opening.index;
|
|
38
|
-
const openChar = input[startIdx];
|
|
39
|
-
const closeChar = openChar === "{" ? "}" : "]";
|
|
40
|
-
let depth = 0;
|
|
41
|
-
for (let i = startIdx; i < input.length; i++) {
|
|
42
|
-
const char = input[i];
|
|
43
|
-
if (char === openChar) depth++;
|
|
44
|
-
else if (char === closeChar) {
|
|
45
|
-
depth--;
|
|
46
|
-
if (depth === 0) {
|
|
47
|
-
const jsonSubstring = input.slice(startIdx, i + 1);
|
|
48
|
-
try {
|
|
49
|
-
return JSON.parse(jsonSubstring);
|
|
50
|
-
} catch (err) {
|
|
51
|
-
throw new Error(`Failed to parse JSON: ${err.message}`);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
throw new Error("Reached end of input without closing JSON bracket.");
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
//#endregion
|
|
60
|
-
exports.extractJson = extractJson;
|
|
61
|
-
//# sourceMappingURL=extractJSON.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"extractJSON.cjs","names":[],"sources":["../../../src/utils/extractJSON.ts"],"sourcesContent":["/**\n * Extracts and parses the first valid JSON value (object or array) from a string containing arbitrary text.\n * This is used to safely extract JSON from LLM responses that may contain additional text or markdown.\n *\n * @example\n * // Extracts JSON object from markdown response:\n * ```json\n * {\n * \"title\": \"Test content declarations\",\n * \"description\": \"A comprehensive test dictionary...\",\n * \"tags\": [\"test tag\"]\n * }\n * ```\n *\n * @example\n * // Extracts JSON array:\n * ```json\n * [\"item1\", \"item2\", \"item3\"]\n * ```\n *\n * @example\n * // Extracts JSON from markdown:\n * Here is the response:\n * ```json\n * {\"key\": \"value\"}\n * ```\n * End of response.\n *\n * @throws {Error} If no valid JSON object/array is found or if parsing fails\n * @returns {T} The parsed JSON value cast to type T\n */\nexport const extractJson = <T = any>(input: string): T => {\n const opening = input.match(/[{[]/);\n if (!opening) throw new Error('No JSON start character ({ or [) found.');\n\n const startIdx = opening.index!;\n const openChar = input[startIdx];\n const closeChar = openChar === '{' ? '}' : ']';\n let depth = 0;\n\n for (let i = startIdx; i < input.length; i++) {\n const char = input[i];\n if (char === openChar) depth++;\n else if (char === closeChar) {\n depth--;\n if (depth === 0) {\n const jsonSubstring = input.slice(startIdx, i + 1);\n try {\n return JSON.parse(jsonSubstring) as T;\n } catch (err) {\n throw new Error(`Failed to parse JSON: ${(err as Error).message}`);\n }\n }\n }\n }\n\n throw new Error('Reached end of input without closing JSON bracket.');\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,MAAa,eAAwB,UAAqB;CACxD,MAAM,UAAU,MAAM,MAAM,OAAO;AACnC,KAAI,CAAC,QAAS,OAAM,IAAI,MAAM,0CAA0C;CAExE,MAAM,WAAW,QAAQ;CACzB,MAAM,WAAW,MAAM;CACvB,MAAM,YAAY,aAAa,MAAM,MAAM;CAC3C,IAAI,QAAQ;AAEZ,MAAK,IAAI,IAAI,UAAU,IAAI,MAAM,QAAQ,KAAK;EAC5C,MAAM,OAAO,MAAM;AACnB,MAAI,SAAS,SAAU;WACd,SAAS,WAAW;AAC3B;AACA,OAAI,UAAU,GAAG;IACf,MAAM,gBAAgB,MAAM,MAAM,UAAU,IAAI,EAAE;AAClD,QAAI;AACF,YAAO,KAAK,MAAM,cAAc;aACzB,KAAK;AACZ,WAAM,IAAI,MAAM,yBAA0B,IAAc,UAAU;;;;;AAM1E,OAAM,IAAI,MAAM,qDAAqD"}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
const require_utils_ensureArrayQueryFilter = require('../ensureArrayQueryFilter.cjs');
|
|
2
|
-
const require_utils_filtersAndPagination_getFiltersAndPaginationFromBody = require('./getFiltersAndPaginationFromBody.cjs');
|
|
3
|
-
|
|
4
|
-
//#region src/utils/filtersAndPagination/getDictionaryFiltersAndPagination.ts
|
|
5
|
-
/**
|
|
6
|
-
* Extracts filters and pagination information from the request body.
|
|
7
|
-
* @param req - Express request object.
|
|
8
|
-
* @returns Object containing filters, page, pageSize, and getNumberOfPages functions.
|
|
9
|
-
*/
|
|
10
|
-
const getDictionaryFiltersAndPagination = (req, res) => {
|
|
11
|
-
const { filters: filtersRequest, ...pagination } = require_utils_filtersAndPagination_getFiltersAndPaginationFromBody.getFiltersAndPaginationFromBody(req);
|
|
12
|
-
const { roles, project } = res.locals;
|
|
13
|
-
let filters = {};
|
|
14
|
-
let sortOptions = { updatedAt: -1 };
|
|
15
|
-
const { key, search, keys, tags, ids, projectId, projectIds, userId, userIds, creatorId, creatorIds, title, description, version, sortBy, sortOrder, fetchAll } = filtersRequest ?? {};
|
|
16
|
-
if (ids) filters = {
|
|
17
|
-
...filters,
|
|
18
|
-
_id: { $in: require_utils_ensureArrayQueryFilter.ensureArrayQueryFilter(ids) }
|
|
19
|
-
};
|
|
20
|
-
if (projectId) filters = {
|
|
21
|
-
...filters,
|
|
22
|
-
projectIds: projectId
|
|
23
|
-
};
|
|
24
|
-
if (projectIds) filters = {
|
|
25
|
-
...filters,
|
|
26
|
-
projectIds: { $in: require_utils_ensureArrayQueryFilter.ensureArrayQueryFilter(projectIds) }
|
|
27
|
-
};
|
|
28
|
-
if (!(roles.includes("admin") && fetchAll === "true")) filters = {
|
|
29
|
-
...filters,
|
|
30
|
-
projectIds: { $in: project?.id }
|
|
31
|
-
};
|
|
32
|
-
if (userId) filters = {
|
|
33
|
-
...filters,
|
|
34
|
-
creatorId: userId
|
|
35
|
-
};
|
|
36
|
-
if (userIds) filters = {
|
|
37
|
-
...filters,
|
|
38
|
-
creatorId: { $in: require_utils_ensureArrayQueryFilter.ensureArrayQueryFilter(userIds) }
|
|
39
|
-
};
|
|
40
|
-
if (creatorId) filters = {
|
|
41
|
-
...filters,
|
|
42
|
-
creatorId
|
|
43
|
-
};
|
|
44
|
-
if (creatorIds) filters = {
|
|
45
|
-
...filters,
|
|
46
|
-
creatorId: { $in: require_utils_ensureArrayQueryFilter.ensureArrayQueryFilter(creatorIds) }
|
|
47
|
-
};
|
|
48
|
-
if (title) filters = {
|
|
49
|
-
...filters,
|
|
50
|
-
title: new RegExp(title, "i")
|
|
51
|
-
};
|
|
52
|
-
if (description) filters = {
|
|
53
|
-
...filters,
|
|
54
|
-
description: new RegExp(description, "i")
|
|
55
|
-
};
|
|
56
|
-
if (key) filters = {
|
|
57
|
-
...filters,
|
|
58
|
-
key: new RegExp(key, "i")
|
|
59
|
-
};
|
|
60
|
-
if (search) {
|
|
61
|
-
const searchRegex = new RegExp(search, "i");
|
|
62
|
-
filters = {
|
|
63
|
-
...filters,
|
|
64
|
-
$or: [
|
|
65
|
-
{ key: searchRegex },
|
|
66
|
-
{ title: searchRegex },
|
|
67
|
-
{ description: searchRegex },
|
|
68
|
-
{ tags: { $in: [searchRegex] } }
|
|
69
|
-
]
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
if (keys) filters = {
|
|
73
|
-
...filters,
|
|
74
|
-
key: { $in: require_utils_ensureArrayQueryFilter.ensureArrayQueryFilter(keys) }
|
|
75
|
-
};
|
|
76
|
-
if (tags) filters = {
|
|
77
|
-
...filters,
|
|
78
|
-
tags: { $in: require_utils_ensureArrayQueryFilter.ensureArrayQueryFilter(tags) }
|
|
79
|
-
};
|
|
80
|
-
if (version) filters = {
|
|
81
|
-
...filters,
|
|
82
|
-
content: { [version]: `$content.${version}` }
|
|
83
|
-
};
|
|
84
|
-
if (sortBy && sortOrder && (sortOrder === "asc" || sortOrder === "desc")) sortOptions = { [sortBy]: sortOrder === "asc" ? 1 : -1 };
|
|
85
|
-
return {
|
|
86
|
-
filters,
|
|
87
|
-
sortOptions,
|
|
88
|
-
...pagination
|
|
89
|
-
};
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
//#endregion
|
|
93
|
-
exports.getDictionaryFiltersAndPagination = getDictionaryFiltersAndPagination;
|
|
94
|
-
//# sourceMappingURL=getDictionaryFiltersAndPagination.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getDictionaryFiltersAndPagination.cjs","names":["getFiltersAndPaginationFromBody","filters: DictionaryFilters","sortOptions: Record<string, 1 | -1>","ensureArrayQueryFilter"],"sources":["../../../../src/utils/filtersAndPagination/getDictionaryFiltersAndPagination.ts"],"sourcesContent":["import type { ResponseWithSession } from '@middlewares/sessionAuth.middleware';\nimport { ensureArrayQueryFilter } from '@utils/ensureArrayQueryFilter';\nimport type { Request } from 'express';\nimport type { RootFilterQuery } from 'mongoose';\nimport type { Dictionary } from '@/types/dictionary.types';\nimport {\n type FiltersAndPagination,\n getFiltersAndPaginationFromBody,\n} from './getFiltersAndPaginationFromBody';\n\nexport type DictionaryFiltersParams = {\n ids?: string | string[];\n projectId?: string;\n projectIds?: string[];\n organizationId?: string;\n organizationIds?: string[];\n userId?: string;\n userIds?: string[];\n creatorId?: string;\n creatorIds?: string[];\n title?: string;\n description?: string;\n key?: string;\n keys?: string[];\n tags?: string | string[];\n version?: string;\n search?: string;\n sortBy?: string;\n sortOrder?: string;\n /**\n * For admin users, if true, will fetch all users without filtering by organization\n */\n fetchAll?: 'true' | 'false';\n};\nexport type DictionaryFilters = RootFilterQuery<Dictionary>;\n\n/**\n * Extracts filters and pagination information from the request body.\n * @param req - Express request object.\n * @returns Object containing filters, page, pageSize, and getNumberOfPages functions.\n */\nexport const getDictionaryFiltersAndPagination = (\n req: Request<FiltersAndPagination<DictionaryFiltersParams>>,\n res: ResponseWithSession\n) => {\n const { filters: filtersRequest, ...pagination } =\n getFiltersAndPaginationFromBody<DictionaryFiltersParams>(req);\n const { roles, project } = res.locals;\n\n let filters: DictionaryFilters = {};\n let sortOptions: Record<string, 1 | -1> = { updatedAt: -1 };\n\n const {\n key,\n search,\n keys,\n tags,\n ids,\n projectId,\n projectIds,\n userId,\n userIds,\n creatorId,\n creatorIds,\n title,\n description,\n version,\n sortBy,\n sortOrder,\n fetchAll,\n } = filtersRequest ?? {};\n\n if (ids) {\n filters = { ...filters, _id: { $in: ensureArrayQueryFilter(ids) } };\n }\n\n if (projectId) {\n filters = { ...filters, projectIds: projectId };\n }\n\n if (projectIds) {\n filters = {\n ...filters,\n projectIds: { $in: ensureArrayQueryFilter(projectIds) },\n };\n }\n\n if (!(roles.includes('admin') && fetchAll === 'true')) {\n filters = { ...filters, projectIds: { $in: project?.id } };\n }\n\n if (userId) {\n filters = { ...filters, creatorId: userId };\n }\n\n if (userIds) {\n filters = {\n ...filters,\n creatorId: { $in: ensureArrayQueryFilter(userIds) },\n };\n }\n\n if (creatorId) {\n filters = { ...filters, creatorId: creatorId };\n }\n\n if (creatorIds) {\n filters = {\n ...filters,\n creatorId: { $in: ensureArrayQueryFilter(creatorIds) },\n };\n }\n\n if (title) {\n filters = { ...filters, title: new RegExp(title, 'i') };\n }\n\n if (description) {\n filters = { ...filters, description: new RegExp(description, 'i') };\n }\n\n if (key) {\n filters = { ...filters, key: new RegExp(key, 'i') };\n }\n\n if (search) {\n const searchRegex = new RegExp(search, 'i');\n filters = {\n ...filters,\n $or: [\n { key: searchRegex },\n { title: searchRegex },\n { description: searchRegex },\n { tags: { $in: [searchRegex] } },\n ],\n };\n }\n\n if (keys) {\n filters = { ...filters, key: { $in: ensureArrayQueryFilter(keys) } };\n }\n\n if (tags) {\n filters = { ...filters, tags: { $in: ensureArrayQueryFilter(tags) } };\n }\n\n if (version) {\n filters = { ...filters, content: { [version]: `$content.${version}` } };\n }\n\n if (sortBy && sortOrder && (sortOrder === 'asc' || sortOrder === 'desc')) {\n sortOptions = { [sortBy]: sortOrder === 'asc' ? 1 : -1 };\n }\n\n return { filters, sortOptions, ...pagination };\n};\n"],"mappings":";;;;;;;;;AAyCA,MAAa,qCACX,KACA,QACG;CACH,MAAM,EAAE,SAAS,gBAAgB,GAAG,eAClCA,mGAAyD,IAAI;CAC/D,MAAM,EAAE,OAAO,YAAY,IAAI;CAE/B,IAAIC,UAA6B,EAAE;CACnC,IAAIC,cAAsC,EAAE,WAAW,IAAI;CAE3D,MAAM,EACJ,KACA,QACA,MACA,MACA,KACA,WACA,YACA,QACA,SACA,WACA,YACA,OACA,aACA,SACA,QACA,WACA,aACE,kBAAkB,EAAE;AAExB,KAAI,IACF,WAAU;EAAE,GAAG;EAAS,KAAK,EAAE,KAAKC,4DAAuB,IAAI,EAAE;EAAE;AAGrE,KAAI,UACF,WAAU;EAAE,GAAG;EAAS,YAAY;EAAW;AAGjD,KAAI,WACF,WAAU;EACR,GAAG;EACH,YAAY,EAAE,KAAKA,4DAAuB,WAAW,EAAE;EACxD;AAGH,KAAI,EAAE,MAAM,SAAS,QAAQ,IAAI,aAAa,QAC5C,WAAU;EAAE,GAAG;EAAS,YAAY,EAAE,KAAK,SAAS,IAAI;EAAE;AAG5D,KAAI,OACF,WAAU;EAAE,GAAG;EAAS,WAAW;EAAQ;AAG7C,KAAI,QACF,WAAU;EACR,GAAG;EACH,WAAW,EAAE,KAAKA,4DAAuB,QAAQ,EAAE;EACpD;AAGH,KAAI,UACF,WAAU;EAAE,GAAG;EAAoB;EAAW;AAGhD,KAAI,WACF,WAAU;EACR,GAAG;EACH,WAAW,EAAE,KAAKA,4DAAuB,WAAW,EAAE;EACvD;AAGH,KAAI,MACF,WAAU;EAAE,GAAG;EAAS,OAAO,IAAI,OAAO,OAAO,IAAI;EAAE;AAGzD,KAAI,YACF,WAAU;EAAE,GAAG;EAAS,aAAa,IAAI,OAAO,aAAa,IAAI;EAAE;AAGrE,KAAI,IACF,WAAU;EAAE,GAAG;EAAS,KAAK,IAAI,OAAO,KAAK,IAAI;EAAE;AAGrD,KAAI,QAAQ;EACV,MAAM,cAAc,IAAI,OAAO,QAAQ,IAAI;AAC3C,YAAU;GACR,GAAG;GACH,KAAK;IACH,EAAE,KAAK,aAAa;IACpB,EAAE,OAAO,aAAa;IACtB,EAAE,aAAa,aAAa;IAC5B,EAAE,MAAM,EAAE,KAAK,CAAC,YAAY,EAAE,EAAE;IACjC;GACF;;AAGH,KAAI,KACF,WAAU;EAAE,GAAG;EAAS,KAAK,EAAE,KAAKA,4DAAuB,KAAK,EAAE;EAAE;AAGtE,KAAI,KACF,WAAU;EAAE,GAAG;EAAS,MAAM,EAAE,KAAKA,4DAAuB,KAAK,EAAE;EAAE;AAGvE,KAAI,QACF,WAAU;EAAE,GAAG;EAAS,SAAS,GAAG,UAAU,YAAY,WAAW;EAAE;AAGzE,KAAI,UAAU,cAAc,cAAc,SAAS,cAAc,QAC/D,eAAc,GAAG,SAAS,cAAc,QAAQ,IAAI,IAAI;AAG1D,QAAO;EAAE;EAAS;EAAa,GAAG;EAAY"}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
const require_utils_ensureArrayQueryFilter = require('../ensureArrayQueryFilter.cjs');
|
|
2
|
-
const require_utils_filtersAndPagination_getFiltersAndPaginationFromBody = require('./getFiltersAndPaginationFromBody.cjs');
|
|
3
|
-
|
|
4
|
-
//#region src/utils/filtersAndPagination/getDiscussionFiltersAndPagination.ts
|
|
5
|
-
/**
|
|
6
|
-
* Extracts filters and pagination information for discussions.
|
|
7
|
-
* Enforces that non-admin users can only see their own discussions.
|
|
8
|
-
*/
|
|
9
|
-
const getDiscussionFiltersAndPagination = (req, res) => {
|
|
10
|
-
const { filters: filtersRequest, ...pagination } = require_utils_filtersAndPagination_getFiltersAndPaginationFromBody.getFiltersAndPaginationFromBody(req);
|
|
11
|
-
const { roles, user } = res.locals;
|
|
12
|
-
let filters = {};
|
|
13
|
-
let sortOptions = { updatedAt: -1 };
|
|
14
|
-
const { ids, userId, userIds, discussionId, search, isArchived, sortBy, sortOrder, fetchAll } = filtersRequest ?? {};
|
|
15
|
-
if (ids) filters = {
|
|
16
|
-
...filters,
|
|
17
|
-
_id: { $in: require_utils_ensureArrayQueryFilter.ensureArrayQueryFilter(ids) }
|
|
18
|
-
};
|
|
19
|
-
if (discussionId) filters = {
|
|
20
|
-
...filters,
|
|
21
|
-
discussionId
|
|
22
|
-
};
|
|
23
|
-
if (typeof isArchived !== "undefined") filters = {
|
|
24
|
-
...filters,
|
|
25
|
-
isArchived: isArchived === "true"
|
|
26
|
-
};
|
|
27
|
-
if (userId) filters = {
|
|
28
|
-
...filters,
|
|
29
|
-
userId
|
|
30
|
-
};
|
|
31
|
-
if (userIds) filters = {
|
|
32
|
-
...filters,
|
|
33
|
-
userId: { $in: require_utils_ensureArrayQueryFilter.ensureArrayQueryFilter(userIds) }
|
|
34
|
-
};
|
|
35
|
-
if (search) {
|
|
36
|
-
const searchRegex = new RegExp(search, "i");
|
|
37
|
-
filters = {
|
|
38
|
-
...filters,
|
|
39
|
-
$or: [
|
|
40
|
-
{ discussionId: searchRegex },
|
|
41
|
-
{ title: searchRegex },
|
|
42
|
-
{ "messages.content": searchRegex }
|
|
43
|
-
]
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
if (sortBy && sortOrder && (sortOrder === "asc" || sortOrder === "desc")) sortOptions = { [sortBy]: sortOrder === "asc" ? 1 : -1 };
|
|
47
|
-
const isAdmin = roles.includes("admin");
|
|
48
|
-
if (!isAdmin && user?.id) filters = {
|
|
49
|
-
...filters,
|
|
50
|
-
userId: user.id
|
|
51
|
-
};
|
|
52
|
-
else if (isAdmin && fetchAll !== "true" && user?.id) filters = {
|
|
53
|
-
...filters,
|
|
54
|
-
userId: user.id
|
|
55
|
-
};
|
|
56
|
-
return {
|
|
57
|
-
filters,
|
|
58
|
-
sortOptions,
|
|
59
|
-
...pagination
|
|
60
|
-
};
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
//#endregion
|
|
64
|
-
exports.getDiscussionFiltersAndPagination = getDiscussionFiltersAndPagination;
|
|
65
|
-
//# sourceMappingURL=getDiscussionFiltersAndPagination.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getDiscussionFiltersAndPagination.cjs","names":["getFiltersAndPaginationFromBody","filters: DiscussionFilters","sortOptions: Record<string, 1 | -1>","ensureArrayQueryFilter"],"sources":["../../../../src/utils/filtersAndPagination/getDiscussionFiltersAndPagination.ts"],"sourcesContent":["import type { ResponseWithSession } from '@middlewares/sessionAuth.middleware';\nimport { ensureArrayQueryFilter } from '@utils/ensureArrayQueryFilter';\nimport type { Request } from 'express';\nimport type { RootFilterQuery } from 'mongoose';\nimport type { Discussion } from '@/types/discussion.types';\nimport {\n type FiltersAndPagination,\n getFiltersAndPaginationFromBody,\n} from './getFiltersAndPaginationFromBody';\n\nexport type DiscussionFiltersParams = {\n ids?: string | string[];\n userId?: string;\n userIds?: string[];\n discussionId?: string;\n search?: string;\n isArchived?: 'true' | 'false';\n sortBy?: string;\n sortOrder?: string;\n /**\n * For admin users only: if true, will not restrict to current user\n */\n fetchAll?: 'true' | 'false';\n};\nexport type DiscussionFilters = RootFilterQuery<Discussion>;\n\n/**\n * Extracts filters and pagination information for discussions.\n * Enforces that non-admin users can only see their own discussions.\n */\nexport const getDiscussionFiltersAndPagination = (\n req: Request<FiltersAndPagination<DiscussionFiltersParams>>,\n res: ResponseWithSession\n) => {\n const { filters: filtersRequest, ...pagination } =\n getFiltersAndPaginationFromBody<DiscussionFiltersParams>(req);\n const { roles, user } = res.locals;\n\n let filters: DiscussionFilters = {};\n let sortOptions: Record<string, 1 | -1> = { updatedAt: -1 };\n\n const {\n ids,\n userId,\n userIds,\n discussionId,\n search,\n isArchived,\n sortBy,\n sortOrder,\n fetchAll,\n } = filtersRequest ?? {};\n\n if (ids) {\n filters = { ...filters, _id: { $in: ensureArrayQueryFilter(ids) } };\n }\n\n if (discussionId) {\n filters = { ...filters, discussionId };\n }\n\n if (typeof isArchived !== 'undefined') {\n filters = { ...filters, isArchived: isArchived === 'true' };\n }\n\n if (userId) {\n filters = { ...filters, userId: userId };\n }\n\n if (userIds) {\n filters = { ...filters, userId: { $in: ensureArrayQueryFilter(userIds) } };\n }\n\n if (search) {\n const searchRegex = new RegExp(search, 'i');\n filters = {\n ...filters,\n $or: [\n { discussionId: searchRegex },\n { title: searchRegex },\n // search within messages content\n { 'messages.content': searchRegex },\n ],\n } as DiscussionFilters;\n }\n\n if (sortBy && sortOrder && (sortOrder === 'asc' || sortOrder === 'desc')) {\n sortOptions = { [sortBy]: sortOrder === 'asc' ? 1 : -1 };\n }\n\n // Enforce user scope for non-admins\n const isAdmin = roles.includes('admin');\n if (!isAdmin && user?.id) {\n filters = { ...filters, userId: user.id };\n } else if (isAdmin && fetchAll !== 'true' && user?.id) {\n // by default, even admins see their own discussions unless fetchAll=true\n filters = { ...filters, userId: user.id };\n }\n\n return { filters, sortOptions, ...pagination };\n};\n"],"mappings":";;;;;;;;AA8BA,MAAa,qCACX,KACA,QACG;CACH,MAAM,EAAE,SAAS,gBAAgB,GAAG,eAClCA,mGAAyD,IAAI;CAC/D,MAAM,EAAE,OAAO,SAAS,IAAI;CAE5B,IAAIC,UAA6B,EAAE;CACnC,IAAIC,cAAsC,EAAE,WAAW,IAAI;CAE3D,MAAM,EACJ,KACA,QACA,SACA,cACA,QACA,YACA,QACA,WACA,aACE,kBAAkB,EAAE;AAExB,KAAI,IACF,WAAU;EAAE,GAAG;EAAS,KAAK,EAAE,KAAKC,4DAAuB,IAAI,EAAE;EAAE;AAGrE,KAAI,aACF,WAAU;EAAE,GAAG;EAAS;EAAc;AAGxC,KAAI,OAAO,eAAe,YACxB,WAAU;EAAE,GAAG;EAAS,YAAY,eAAe;EAAQ;AAG7D,KAAI,OACF,WAAU;EAAE,GAAG;EAAiB;EAAQ;AAG1C,KAAI,QACF,WAAU;EAAE,GAAG;EAAS,QAAQ,EAAE,KAAKA,4DAAuB,QAAQ,EAAE;EAAE;AAG5E,KAAI,QAAQ;EACV,MAAM,cAAc,IAAI,OAAO,QAAQ,IAAI;AAC3C,YAAU;GACR,GAAG;GACH,KAAK;IACH,EAAE,cAAc,aAAa;IAC7B,EAAE,OAAO,aAAa;IAEtB,EAAE,oBAAoB,aAAa;IACpC;GACF;;AAGH,KAAI,UAAU,cAAc,cAAc,SAAS,cAAc,QAC/D,eAAc,GAAG,SAAS,cAAc,QAAQ,IAAI,IAAI;CAI1D,MAAM,UAAU,MAAM,SAAS,QAAQ;AACvC,KAAI,CAAC,WAAW,MAAM,GACpB,WAAU;EAAE,GAAG;EAAS,QAAQ,KAAK;EAAI;UAChC,WAAW,aAAa,UAAU,MAAM,GAEjD,WAAU;EAAE,GAAG;EAAS,QAAQ,KAAK;EAAI;AAG3C,QAAO;EAAE;EAAS;EAAa,GAAG;EAAY"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
//#region src/utils/filtersAndPagination/getFiltersAndPaginationFromBody.ts
|
|
3
|
-
const DEFAULT_PAGE_SIZE = 1e3;
|
|
4
|
-
const DEFAULT_PAGE = 1;
|
|
5
|
-
/**
|
|
6
|
-
* Extracts filters and pagination information from the request body.
|
|
7
|
-
* @param req - Express request object.
|
|
8
|
-
* @returns Object containing filters, page, pageSize, and getNumberOfPages functions.
|
|
9
|
-
*/
|
|
10
|
-
const getFiltersAndPaginationFromBody = (req) => {
|
|
11
|
-
let filters = {};
|
|
12
|
-
let pageSize = DEFAULT_PAGE_SIZE;
|
|
13
|
-
let page = DEFAULT_PAGE;
|
|
14
|
-
const query = req.query;
|
|
15
|
-
if (typeof query === "object") {
|
|
16
|
-
const { pageSize: pageSizeRequest, page: pageRequest, ...filtersRequest } = query;
|
|
17
|
-
if (typeof pageSizeRequest === "string") pageSize = parseInt(pageSizeRequest, 10);
|
|
18
|
-
else if (typeof pageSizeRequest === "number") pageSize = pageSizeRequest;
|
|
19
|
-
if (typeof pageRequest === "string") page = parseInt(pageRequest, 10);
|
|
20
|
-
else if (typeof pageRequest === "number") page = pageRequest;
|
|
21
|
-
if (filtersRequest && Object.keys(filtersRequest).length > 0) filters = filtersRequest;
|
|
22
|
-
}
|
|
23
|
-
const skip = (page - 1) * pageSize;
|
|
24
|
-
const getNumberOfPages = (totalItems) => Math.ceil(totalItems / pageSize);
|
|
25
|
-
return {
|
|
26
|
-
filters,
|
|
27
|
-
skip,
|
|
28
|
-
page,
|
|
29
|
-
pageSize,
|
|
30
|
-
getNumberOfPages
|
|
31
|
-
};
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
//#endregion
|
|
35
|
-
exports.getFiltersAndPaginationFromBody = getFiltersAndPaginationFromBody;
|
|
36
|
-
//# sourceMappingURL=getFiltersAndPaginationFromBody.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getFiltersAndPaginationFromBody.cjs","names":[],"sources":["../../../../src/utils/filtersAndPagination/getFiltersAndPaginationFromBody.ts"],"sourcesContent":["import type { Request } from 'express';\nimport type { ObjectId } from 'mongoose';\n\nconst DEFAULT_PAGE_SIZE = 1000;\nconst DEFAULT_PAGE = 1;\n\ntype Filters = Record<string, string | string[] | ObjectId | ObjectId[]>;\n\nexport type FiltersAndPagination<T extends Filters> =\n | ({\n page?: string | number;\n pageSize?: string | number;\n } & T)\n | undefined;\n\nexport type FiltersAndPaginationResult<T extends Filters> = {\n filters: T;\n page: number;\n skip: number;\n pageSize: number;\n getNumberOfPages: (totalItems: number) => number;\n};\n\n/**\n * Extracts filters and pagination information from the request body.\n * @param req - Express request object.\n * @returns Object containing filters, page, pageSize, and getNumberOfPages functions.\n */\nexport const getFiltersAndPaginationFromBody = <T extends Filters>(\n req: Request<FiltersAndPagination<T>>\n): FiltersAndPaginationResult<T> => {\n let filters = {} as T;\n let pageSize = DEFAULT_PAGE_SIZE;\n let page = DEFAULT_PAGE;\n\n const query = req.query as unknown as FiltersAndPagination<T>;\n\n if (typeof query === 'object') {\n const {\n pageSize: pageSizeRequest,\n page: pageRequest,\n ...filtersRequest\n } = query;\n\n if (typeof pageSizeRequest === 'string') {\n pageSize = parseInt(pageSizeRequest, 10);\n } else if (typeof pageSizeRequest === 'number') {\n pageSize = pageSizeRequest;\n }\n\n if (typeof pageRequest === 'string') {\n page = parseInt(pageRequest, 10);\n } else if (typeof pageRequest === 'number') {\n page = pageRequest;\n }\n\n if (filtersRequest && Object.keys(filtersRequest).length > 0) {\n filters = filtersRequest as T;\n }\n }\n\n const skip = (page - 1) * pageSize;\n\n const getNumberOfPages = (totalItems: number) =>\n Math.ceil(totalItems / pageSize);\n\n return {\n filters,\n skip,\n page,\n pageSize,\n getNumberOfPages,\n };\n};\n"],"mappings":";;AAGA,MAAM,oBAAoB;AAC1B,MAAM,eAAe;;;;;;AAwBrB,MAAa,mCACX,QACkC;CAClC,IAAI,UAAU,EAAE;CAChB,IAAI,WAAW;CACf,IAAI,OAAO;CAEX,MAAM,QAAQ,IAAI;AAElB,KAAI,OAAO,UAAU,UAAU;EAC7B,MAAM,EACJ,UAAU,iBACV,MAAM,aACN,GAAG,mBACD;AAEJ,MAAI,OAAO,oBAAoB,SAC7B,YAAW,SAAS,iBAAiB,GAAG;WAC/B,OAAO,oBAAoB,SACpC,YAAW;AAGb,MAAI,OAAO,gBAAgB,SACzB,QAAO,SAAS,aAAa,GAAG;WACvB,OAAO,gBAAgB,SAChC,QAAO;AAGT,MAAI,kBAAkB,OAAO,KAAK,eAAe,CAAC,SAAS,EACzD,WAAU;;CAId,MAAM,QAAQ,OAAO,KAAK;CAE1B,MAAM,oBAAoB,eACxB,KAAK,KAAK,aAAa,SAAS;AAElC,QAAO;EACL;EACA;EACA;EACA;EACA;EACD"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
const require_utils_ensureArrayQueryFilter = require('../ensureArrayQueryFilter.cjs');
|
|
2
|
-
const require_utils_filtersAndPagination_getFiltersAndPaginationFromBody = require('./getFiltersAndPaginationFromBody.cjs');
|
|
3
|
-
|
|
4
|
-
//#region src/utils/filtersAndPagination/getOrganizationFiltersAndPagination.ts
|
|
5
|
-
/**
|
|
6
|
-
* Extracts filters and pagination information from the request body.
|
|
7
|
-
* @param req - Express request object.
|
|
8
|
-
* @returns Object containing filters, page, pageSize, and getNumberOfPages functions.
|
|
9
|
-
*/
|
|
10
|
-
const getOrganizationFiltersAndPagination = (req, res) => {
|
|
11
|
-
const { filters: filtersRequest, ...pagination } = require_utils_filtersAndPagination_getFiltersAndPaginationFromBody.getFiltersAndPaginationFromBody(req);
|
|
12
|
-
const { roles, user } = res.locals;
|
|
13
|
-
let filters = {};
|
|
14
|
-
let sortOptions = { updatedAt: -1 };
|
|
15
|
-
const { name, search, ids, membersIds, fetchAll, sortBy, sortOrder } = filtersRequest ?? {};
|
|
16
|
-
if (ids) filters = {
|
|
17
|
-
...filters,
|
|
18
|
-
_id: { $in: require_utils_ensureArrayQueryFilter.ensureArrayQueryFilter(ids) }
|
|
19
|
-
};
|
|
20
|
-
if (!(roles.includes("admin") && fetchAll === "true")) filters = {
|
|
21
|
-
...filters,
|
|
22
|
-
membersIds: { $in: [user?.id] }
|
|
23
|
-
};
|
|
24
|
-
if (name) filters = {
|
|
25
|
-
...filters,
|
|
26
|
-
name: new RegExp(name, "i")
|
|
27
|
-
};
|
|
28
|
-
if (search) {
|
|
29
|
-
const searchRegex = new RegExp(search, "i");
|
|
30
|
-
filters = {
|
|
31
|
-
...filters,
|
|
32
|
-
$or: [{ name: searchRegex }]
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
if (membersIds) filters = {
|
|
36
|
-
...filters,
|
|
37
|
-
membersIds: { $in: require_utils_ensureArrayQueryFilter.ensureArrayQueryFilter(membersIds) }
|
|
38
|
-
};
|
|
39
|
-
if (sortBy && sortOrder && (sortOrder === "asc" || sortOrder === "desc")) sortOptions = { [sortBy]: sortOrder === "asc" ? 1 : -1 };
|
|
40
|
-
return {
|
|
41
|
-
filters,
|
|
42
|
-
sortOptions,
|
|
43
|
-
...pagination
|
|
44
|
-
};
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
//#endregion
|
|
48
|
-
exports.getOrganizationFiltersAndPagination = getOrganizationFiltersAndPagination;
|
|
49
|
-
//# sourceMappingURL=getOrganizationFiltersAndPagination.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getOrganizationFiltersAndPagination.cjs","names":["getFiltersAndPaginationFromBody","filters: OrganizationFilters","sortOptions: Record<string, 1 | -1>","ensureArrayQueryFilter"],"sources":["../../../../src/utils/filtersAndPagination/getOrganizationFiltersAndPagination.ts"],"sourcesContent":["import type { ResponseWithSession } from '@middlewares/sessionAuth.middleware';\nimport { ensureArrayQueryFilter } from '@utils/ensureArrayQueryFilter';\nimport type { Request } from 'express';\nimport type { RootFilterQuery } from 'mongoose';\nimport type { Organization } from '@/types/organization.types';\nimport {\n type FiltersAndPagination,\n getFiltersAndPaginationFromBody,\n} from './getFiltersAndPaginationFromBody';\n\nexport type OrganizationFiltersParams = {\n /**\n * Comma separated list of ids\n *\n * ```\n * GET /organizations?ids=5f8d9f1d8a1e4f0e8c0c,5f8d9f1d8a1e4f0e8d1\n * -> ids: \"5f8d9f1d8a1e4f0e8c0c,5f8d9f1d8a1e4f0e8d1\"\n * ```\n */\n ids?: string | string[];\n name?: string;\n search?: string;\n membersIds?: string[];\n sortBy?: string;\n sortOrder?: string;\n /**\n * For admin users, if true, will fetch all organizations without filtering by members\n */\n fetchAll?: 'true' | 'false';\n};\nexport type OrganizationFilters = RootFilterQuery<Organization>;\n\n/**\n * Extracts filters and pagination information from the request body.\n * @param req - Express request object.\n * @returns Object containing filters, page, pageSize, and getNumberOfPages functions.\n */\nexport const getOrganizationFiltersAndPagination = (\n req: Request<FiltersAndPagination<OrganizationFiltersParams>>,\n res: ResponseWithSession\n) => {\n const { filters: filtersRequest, ...pagination } =\n getFiltersAndPaginationFromBody<OrganizationFiltersParams>(req);\n const { roles, user } = res.locals;\n\n let filters: OrganizationFilters = {};\n let sortOptions: Record<string, 1 | -1> = { updatedAt: -1 };\n\n const { name, search, ids, membersIds, fetchAll, sortBy, sortOrder } =\n filtersRequest ?? {};\n\n if (ids) {\n filters = { ...filters, _id: { $in: ensureArrayQueryFilter(ids) } };\n }\n\n // Non-admins can only see organizations they are members of\n if (!(roles.includes('admin') && fetchAll === 'true')) {\n filters = { ...filters, membersIds: { $in: [user?.id] } };\n }\n\n if (name) {\n filters = { ...filters, name: new RegExp(name, 'i') };\n }\n\n if (search) {\n const searchRegex = new RegExp(search, 'i');\n filters = { ...filters, $or: [{ name: searchRegex }] };\n }\n\n if (membersIds) {\n filters = {\n ...filters,\n membersIds: { $in: ensureArrayQueryFilter(membersIds) },\n };\n }\n\n if (sortBy && sortOrder && (sortOrder === 'asc' || sortOrder === 'desc')) {\n sortOptions = { [sortBy]: sortOrder === 'asc' ? 1 : -1 };\n }\n\n return { filters, sortOptions, ...pagination };\n};\n"],"mappings":";;;;;;;;;AAqCA,MAAa,uCACX,KACA,QACG;CACH,MAAM,EAAE,SAAS,gBAAgB,GAAG,eAClCA,mGAA2D,IAAI;CACjE,MAAM,EAAE,OAAO,SAAS,IAAI;CAE5B,IAAIC,UAA+B,EAAE;CACrC,IAAIC,cAAsC,EAAE,WAAW,IAAI;CAE3D,MAAM,EAAE,MAAM,QAAQ,KAAK,YAAY,UAAU,QAAQ,cACvD,kBAAkB,EAAE;AAEtB,KAAI,IACF,WAAU;EAAE,GAAG;EAAS,KAAK,EAAE,KAAKC,4DAAuB,IAAI,EAAE;EAAE;AAIrE,KAAI,EAAE,MAAM,SAAS,QAAQ,IAAI,aAAa,QAC5C,WAAU;EAAE,GAAG;EAAS,YAAY,EAAE,KAAK,CAAC,MAAM,GAAG,EAAE;EAAE;AAG3D,KAAI,KACF,WAAU;EAAE,GAAG;EAAS,MAAM,IAAI,OAAO,MAAM,IAAI;EAAE;AAGvD,KAAI,QAAQ;EACV,MAAM,cAAc,IAAI,OAAO,QAAQ,IAAI;AAC3C,YAAU;GAAE,GAAG;GAAS,KAAK,CAAC,EAAE,MAAM,aAAa,CAAC;GAAE;;AAGxD,KAAI,WACF,WAAU;EACR,GAAG;EACH,YAAY,EAAE,KAAKA,4DAAuB,WAAW,EAAE;EACxD;AAGH,KAAI,UAAU,cAAc,cAAc,SAAS,cAAc,QAC/D,eAAc,GAAG,SAAS,cAAc,QAAQ,IAAI,IAAI;AAG1D,QAAO;EAAE;EAAS;EAAa,GAAG;EAAY"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
const require_utils_ensureArrayQueryFilter = require('../ensureArrayQueryFilter.cjs');
|
|
2
|
-
const require_utils_filtersAndPagination_getFiltersAndPaginationFromBody = require('./getFiltersAndPaginationFromBody.cjs');
|
|
3
|
-
|
|
4
|
-
//#region src/utils/filtersAndPagination/getProjectFiltersAndPagination.ts
|
|
5
|
-
/**
|
|
6
|
-
* Extracts filters and pagination information from the request body.
|
|
7
|
-
* @param req - Express request object.
|
|
8
|
-
* @returns Object containing filters, page, pageSize, and getNumberOfPages functions.
|
|
9
|
-
*/
|
|
10
|
-
const getProjectFiltersAndPagination = (req, res) => {
|
|
11
|
-
const { filters: filtersRequest, ...pagination } = require_utils_filtersAndPagination_getFiltersAndPaginationFromBody.getFiltersAndPaginationFromBody(req);
|
|
12
|
-
const { roles, organization } = res.locals;
|
|
13
|
-
let filters = {};
|
|
14
|
-
let sortOptions = { updatedAt: -1 };
|
|
15
|
-
const { name, search, ids, organizationId, membersIds, sortBy, sortOrder, fetchAll } = filtersRequest ?? {};
|
|
16
|
-
if (ids) filters = {
|
|
17
|
-
...filters,
|
|
18
|
-
_id: { $in: require_utils_ensureArrayQueryFilter.ensureArrayQueryFilter(ids) }
|
|
19
|
-
};
|
|
20
|
-
if (name) filters = {
|
|
21
|
-
...filters,
|
|
22
|
-
name: new RegExp(name, "i")
|
|
23
|
-
};
|
|
24
|
-
if (search) {
|
|
25
|
-
const searchRegex = new RegExp(search, "i");
|
|
26
|
-
filters = {
|
|
27
|
-
...filters,
|
|
28
|
-
$or: [{ name: searchRegex }]
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
if (organizationId) filters = {
|
|
32
|
-
...filters,
|
|
33
|
-
organizationId
|
|
34
|
-
};
|
|
35
|
-
if (membersIds) filters = {
|
|
36
|
-
...filters,
|
|
37
|
-
membersIds: { $in: require_utils_ensureArrayQueryFilter.ensureArrayQueryFilter(membersIds) }
|
|
38
|
-
};
|
|
39
|
-
if (sortBy && sortOrder && (sortOrder === "asc" || sortOrder === "desc")) sortOptions = { [sortBy]: sortOrder === "asc" ? 1 : -1 };
|
|
40
|
-
if (!(roles.includes("admin") && fetchAll === "true")) filters = {
|
|
41
|
-
...filters,
|
|
42
|
-
organizationId: organization?.id
|
|
43
|
-
};
|
|
44
|
-
return {
|
|
45
|
-
filters,
|
|
46
|
-
sortOptions,
|
|
47
|
-
...pagination
|
|
48
|
-
};
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
//#endregion
|
|
52
|
-
exports.getProjectFiltersAndPagination = getProjectFiltersAndPagination;
|
|
53
|
-
//# sourceMappingURL=getProjectFiltersAndPagination.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getProjectFiltersAndPagination.cjs","names":["getFiltersAndPaginationFromBody","filters: ProjectFilters","sortOptions: Record<string, 1 | -1>","ensureArrayQueryFilter"],"sources":["../../../../src/utils/filtersAndPagination/getProjectFiltersAndPagination.ts"],"sourcesContent":["import type { ResponseWithSession } from '@middlewares/sessionAuth.middleware';\nimport { ensureArrayQueryFilter } from '@utils/ensureArrayQueryFilter';\nimport type { Request } from 'express';\nimport type { RootFilterQuery } from 'mongoose';\nimport type { Project } from '@/types/project.types';\nimport {\n type FiltersAndPagination,\n getFiltersAndPaginationFromBody,\n} from './getFiltersAndPaginationFromBody';\n\nexport type ProjectFiltersParams = {\n ids?: string | string[];\n name?: string;\n search?: string;\n organizationId?: string;\n membersIds?: string[];\n sortBy?: string;\n sortOrder?: string;\n /**\n * For admin users, if true, will fetch all projects without filtering by organization\n */\n fetchAll?: 'true' | 'false';\n};\nexport type ProjectFilters = RootFilterQuery<Project>;\n\n/**\n * Extracts filters and pagination information from the request body.\n * @param req - Express request object.\n * @returns Object containing filters, page, pageSize, and getNumberOfPages functions.\n */\nexport const getProjectFiltersAndPagination = (\n req: Request<FiltersAndPagination<ProjectFiltersParams>>,\n res: ResponseWithSession\n) => {\n const { filters: filtersRequest, ...pagination } =\n getFiltersAndPaginationFromBody<ProjectFiltersParams>(req);\n const { roles, organization } = res.locals;\n\n let filters: ProjectFilters = {};\n let sortOptions: Record<string, 1 | -1> = { updatedAt: -1 };\n\n const {\n name,\n search,\n ids,\n organizationId,\n membersIds,\n sortBy,\n sortOrder,\n fetchAll,\n } = filtersRequest ?? {};\n\n if (ids) {\n filters = { ...filters, _id: { $in: ensureArrayQueryFilter(ids) } };\n }\n\n if (name) {\n filters = { ...filters, name: new RegExp(name, 'i') };\n }\n\n if (search) {\n const searchRegex = new RegExp(search, 'i');\n filters = {\n ...filters,\n $or: [{ name: searchRegex }],\n };\n }\n\n if (organizationId) {\n filters = { ...filters, organizationId };\n }\n\n if (membersIds) {\n filters = {\n ...filters,\n membersIds: { $in: ensureArrayQueryFilter(membersIds) },\n };\n }\n\n if (sortBy && sortOrder && (sortOrder === 'asc' || sortOrder === 'desc')) {\n sortOptions = { [sortBy]: sortOrder === 'asc' ? 1 : -1 };\n }\n\n if (!(roles.includes('admin') && fetchAll === 'true')) {\n filters = { ...filters, organizationId: organization?.id };\n }\n\n return { filters, sortOptions, ...pagination };\n};\n"],"mappings":";;;;;;;;;AA8BA,MAAa,kCACX,KACA,QACG;CACH,MAAM,EAAE,SAAS,gBAAgB,GAAG,eAClCA,mGAAsD,IAAI;CAC5D,MAAM,EAAE,OAAO,iBAAiB,IAAI;CAEpC,IAAIC,UAA0B,EAAE;CAChC,IAAIC,cAAsC,EAAE,WAAW,IAAI;CAE3D,MAAM,EACJ,MACA,QACA,KACA,gBACA,YACA,QACA,WACA,aACE,kBAAkB,EAAE;AAExB,KAAI,IACF,WAAU;EAAE,GAAG;EAAS,KAAK,EAAE,KAAKC,4DAAuB,IAAI,EAAE;EAAE;AAGrE,KAAI,KACF,WAAU;EAAE,GAAG;EAAS,MAAM,IAAI,OAAO,MAAM,IAAI;EAAE;AAGvD,KAAI,QAAQ;EACV,MAAM,cAAc,IAAI,OAAO,QAAQ,IAAI;AAC3C,YAAU;GACR,GAAG;GACH,KAAK,CAAC,EAAE,MAAM,aAAa,CAAC;GAC7B;;AAGH,KAAI,eACF,WAAU;EAAE,GAAG;EAAS;EAAgB;AAG1C,KAAI,WACF,WAAU;EACR,GAAG;EACH,YAAY,EAAE,KAAKA,4DAAuB,WAAW,EAAE;EACxD;AAGH,KAAI,UAAU,cAAc,cAAc,SAAS,cAAc,QAC/D,eAAc,GAAG,SAAS,cAAc,QAAQ,IAAI,IAAI;AAG1D,KAAI,EAAE,MAAM,SAAS,QAAQ,IAAI,aAAa,QAC5C,WAAU;EAAE,GAAG;EAAS,gBAAgB,cAAc;EAAI;AAG5D,QAAO;EAAE;EAAS;EAAa,GAAG;EAAY"}
|