@rapidd/core 2.1.0

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.
Files changed (59) hide show
  1. package/.dockerignore +71 -0
  2. package/.env.example +70 -0
  3. package/.gitignore +11 -0
  4. package/LICENSE +15 -0
  5. package/README.md +231 -0
  6. package/bin/cli.js +145 -0
  7. package/config/app.json +166 -0
  8. package/config/rate-limit.json +12 -0
  9. package/dist/main.js +26 -0
  10. package/dockerfile +57 -0
  11. package/locales/ar_SA.json +179 -0
  12. package/locales/de_DE.json +179 -0
  13. package/locales/en_US.json +180 -0
  14. package/locales/es_ES.json +179 -0
  15. package/locales/fr_FR.json +179 -0
  16. package/locales/it_IT.json +179 -0
  17. package/locales/ja_JP.json +179 -0
  18. package/locales/pt_BR.json +179 -0
  19. package/locales/ru_RU.json +179 -0
  20. package/locales/tr_TR.json +179 -0
  21. package/main.ts +25 -0
  22. package/package.json +126 -0
  23. package/prisma/schema.prisma +9 -0
  24. package/prisma.config.ts +12 -0
  25. package/public/static/favicon.ico +0 -0
  26. package/public/static/image/logo.png +0 -0
  27. package/routes/api/v1/index.ts +113 -0
  28. package/src/app.ts +197 -0
  29. package/src/auth/Auth.ts +446 -0
  30. package/src/auth/stores/ISessionStore.ts +19 -0
  31. package/src/auth/stores/MemoryStore.ts +70 -0
  32. package/src/auth/stores/RedisStore.ts +92 -0
  33. package/src/auth/stores/index.ts +149 -0
  34. package/src/config/acl.ts +9 -0
  35. package/src/config/rls.ts +38 -0
  36. package/src/core/dmmf.ts +226 -0
  37. package/src/core/env.ts +183 -0
  38. package/src/core/errors.ts +87 -0
  39. package/src/core/i18n.ts +144 -0
  40. package/src/core/middleware.ts +123 -0
  41. package/src/core/prisma.ts +236 -0
  42. package/src/index.ts +112 -0
  43. package/src/middleware/model.ts +61 -0
  44. package/src/orm/Model.ts +881 -0
  45. package/src/orm/QueryBuilder.ts +2078 -0
  46. package/src/plugins/auth.ts +162 -0
  47. package/src/plugins/language.ts +79 -0
  48. package/src/plugins/rateLimit.ts +210 -0
  49. package/src/plugins/response.ts +80 -0
  50. package/src/plugins/rls.ts +51 -0
  51. package/src/plugins/security.ts +23 -0
  52. package/src/plugins/upload.ts +299 -0
  53. package/src/types.ts +308 -0
  54. package/src/utils/ApiClient.ts +526 -0
  55. package/src/utils/Mailer.ts +348 -0
  56. package/src/utils/index.ts +25 -0
  57. package/templates/email/example.ejs +17 -0
  58. package/templates/layouts/email.ejs +35 -0
  59. package/tsconfig.json +33 -0
@@ -0,0 +1,180 @@
1
+ {
2
+ "save": "Save",
3
+ "edit": "Edit",
4
+ "cancel": "Cancel",
5
+ "close": "Close",
6
+ "done": "Done",
7
+ "yes": "Yes",
8
+ "no": "No",
9
+ "next": "Next",
10
+ "error": "Error",
11
+ "download": "Download",
12
+ "submit": "Submit",
13
+ "clear": "Clear",
14
+ "searchClear": "Clear search",
15
+ "search": "Search",
16
+ "actions": "Actions",
17
+ "signIn": "Sign In",
18
+ "signUp": "Sign Up",
19
+ "logout": "Logout",
20
+ "removeUser": "Remove User",
21
+ "sortBy": "Sort by",
22
+ "name": "Name",
23
+ "firstName": "First Name",
24
+ "lastName": "Last Name",
25
+ "email": "Email",
26
+ "password": "Password",
27
+ "passwordRepeat": "Repeat Password",
28
+ "account": "Account",
29
+ "role": "Role",
30
+ "status": "Status",
31
+ "reason": "Reason",
32
+ "lastUpdateDate": "Last Update Date",
33
+ "sortByFieldAscending": "{field} Ascending",
34
+ "sortByFieldDescending": "{field} Descending",
35
+ "couldNotLoadDataMsg": "Could not load data: status {data}",
36
+ "FAQ": "FAQ",
37
+ "frequentlyAskedQuestions": "Frequently asked questions",
38
+ "settings": "Settings",
39
+ "eventsRewards": "Events & Rewards",
40
+ "hostname": "Hostname",
41
+ "MOTD": "MOTD",
42
+ "version": "Version",
43
+ "profile": "Profile",
44
+ "security": "Security",
45
+ "changePassword": "Change Password",
46
+ "securitySettings": "Security settings",
47
+ "requestData": "Request Data",
48
+ "deleteProfile": "Delete Profile",
49
+ "username": "Username",
50
+ "loginMethod": "Login Method",
51
+ "addEmailClarification": "By adding your email address you can prevent losing your account forever by e.g. loss of password!",
52
+ "loginMethodSuggestion": "Choosing email address as your preferred login method makes your account more secure",
53
+ "delete": "Delete",
54
+ "currentPassword": "Current Password",
55
+ "newPassword": "New Password",
56
+ "signUp_acceptingOnSignUp": "By clicking Sign Up you are accepting our terms of usage and privacy policy.",
57
+ "signUp_haveAnAccount": "Already have an account?",
58
+ "slots_not_available": "No slots data available",
59
+ "footer_contact_us": "Contact Us",
60
+ "privacy_policy": "Privacy Policy",
61
+ "footer_company_details": "Company details",
62
+ "under_construction_notice": "This website is currently under construction",
63
+ "signInFailStackLocked_message": "Your account has been locked because of 5 failed login attempts. Please reset your password!",
64
+ "signInFailedStore_message": "There was a problem signing into your account. Try a different browser and report to webmaster@lancom-systems.de",
65
+ "signOut_message": "You have successfully logged out",
66
+ "signOutForce_message": "You have been logged out",
67
+ "signOutNotLatest_message": "You were automatically singed out because there is a more recent session with your account.",
68
+ "code_of_conduct": "Code of conduct",
69
+ "student": "Student",
70
+ "teacher": "Coach",
71
+ "emailVerified": "Email has been verified",
72
+ "emailAlreadyVerified": "Email already verified",
73
+ "redirectNotice": "You will be redirected in 5 seconds or proceed now by clicking <a href=\"{uri}\">here</a>",
74
+ "mailNotShowingProperly": "Mail not showing properly?",
75
+ "viewInBrowser": "View in browser",
76
+ "welcomeMail": "Welcome to rapidd",
77
+ "resetPassordMail": "Reset your rapidd Password",
78
+ "appointmentScheduled": "Appointment Scheduled",
79
+ "appointmentChanged": "Appointment changed",
80
+ "appointmentCancelled": "Appointment cancelled",
81
+ "appointmentRejected": "Appointment rejected",
82
+ "salutationMail": "Hello {first_name},",
83
+ "briefWelcomeTextMail": "you've been granted access to rapidd. Please verify your Email Address by clicking <b>{{confirmMail}}</b> below.",
84
+ "yourUsername": "Your username: <b>{username}</b>",
85
+ "yourPassword": "Your initial password <span style=\"display: inline-block;margin: 0 .8em;padding: .4em .8em;border: 3px dashed #fecb5a;border-radius: .8em;\"><b>{password}</b></span>",
86
+ "changePasswordAfterLogin": "Please change your password immedietly after login",
87
+ "passwordResetTextMail": "you have requested to reset your rapidd password. Please click <b>{{confirmResetPassword}}</b> below to reset your password. If you have not requested a password reset you can ignore this email.",
88
+ "studentAppointmentTextMail": "an appointment for a coaching session for the subject <b>{subject}</b> has been scheduled for you.<br><br>{{studentAppointmentInfoMail}}<br><br>{{studentAppointmentRejectInfoMail}}<br><br>",
89
+ "studentAppointmentUpdateTextMail": "the appointment for the subject <b>{subject}</b> has been updated.<br><br>{{studentAppointmentInfoMail}}<br><br>{{studentAppointmentRejectInfoMail}}<br><br>",
90
+ "studentAppointmentInfoMail": "{{teacher}}: <b>{teacher}</b><br>Date: <b>{date}</b><br>Time: <b>{time}</b><br>Lesson duration: <b>{duration}</b><br>Location/Online link: <b>{location_url}</b>",
91
+ "studentAppointmentCancelledTextMail": "the appointment for the subject <b>{subject}</b> have been cancelled.<br><br>{{studentAppointmentInfoMail}}<br><br>",
92
+ "studentAppointmentRejectInfoMail": "<i>You can only reject this appointment up to 24 hours before the appointment take place.</i>",
93
+ "teacherAppointmentCancelledTextMail": "your appointment for the subject <b>{subject}</b> has been cancelled.<br><br>{{teacherAppointmentInfoMail}}<br><br>",
94
+ "teacherAppointmentRejectedTextMail": "your {{student}} have rejected the scheduled appointment.<br><br>{{teacherAppointmentInfoMail}}<br><br>",
95
+ "teacherAppointmentInfoMail": "{{student}}: <b>{student}</b><br>Date: <b>{date}</b><br>Time: <b>{time}</b><br>Lesson duration: <b>{duration}</b><br>Location/Online link: <b>{location_url}</b>",
96
+ "confirmMail": "Confirm Email",
97
+ "confirmResetPassword": "Reset Password",
98
+ "viewAppointment": "View Appointment",
99
+ "footerText": "Our goal is to give everyone the opportunity to develop their potential.",
100
+ "footerCopyright": "© {year}, rapidd All rights reserved.",
101
+ "insufficient_permissions": "Insufficient permissions",
102
+ "rate_limit_exceeded": "Rate limit exceeded",
103
+ "record_not_found": "Record not found",
104
+ "no_permission": "No permission",
105
+ "invalid_sort_field": "Parameter sortBy '{sortBy}' is not a valid field of {modelName}",
106
+ "invalid_filter_field": "Invalid filter field: {field}",
107
+ "relation_not_exist": "Relation '{relation}' does not exist in {modelName}",
108
+ "between_requires_two_values": "Between operator requires two values separated by semicolon",
109
+ "invalid_date_range": "Invalid date in between range: {start} or {end}",
110
+ "invalid_date_format": "Invalid date format in filter: {value}. Error: {error}",
111
+ "invalid_limit": "Invalid limit",
112
+ "sortby_must_be_string": "sortBy must be a string. '{type}' given",
113
+ "sortorder_invalid": "sortOrder can only be 'asc' or 'desc'. '{value}' given",
114
+ "unexpected_key": "Given key '{key}' is not expected",
115
+ "string_expected": "String expected, {type} given",
116
+ "auth_credentials_missing": "Authentication credentials missing",
117
+ "account_suspended": "Your account has been suspended",
118
+ "email_not_verified": "Email address hasn't been verified yet",
119
+ "auth_failed_invalid_credentials": "Authentication failed: invalid credentials",
120
+ "user_not_found": "User not found",
121
+ "no_active_session": "No active session",
122
+ "email_not_string": "'email' in body is not type of 'string'. '{type}' given",
123
+ "password_change_failed": "Password couldn't be changed",
124
+ "token_invalid": "Token is invalid",
125
+ "password_not_string": "password in body is not type of 'string'. '{type}' given",
126
+ "token_not_string": "token in body is not type of 'string'. '{type}' given",
127
+ "file_type_not_allowed": "File type {mimetype} not allowed",
128
+ "file_extension_not_allowed": "File extension {extension} not allowed for MIME type {mimetype}",
129
+ "invalid_file_name": "Invalid file name",
130
+ "file_size_exceeds_limit": "File size exceeds limit of {limit}MB",
131
+ "cors_blocked": "Blocked by CORS policy: {origin}",
132
+ "activation_link_expired": "Activation link expired",
133
+ "password_reset_email_sent": "Password reset email sent",
134
+ "password_changed_successfully": "Password has been changed successfully",
135
+ "username_password_invalid": "Username or password is not valid",
136
+ "activation_mail_sent": "Activation mail has been sent",
137
+ "session_terminated": "Session token has been terminated",
138
+ "no_valid_session": "No valid session",
139
+ "model_deleted_successfully": "{modelName} successfully deleted",
140
+ "auth_required": "Authentication required",
141
+ "auth_required_message": "You must be logged in to access this resource",
142
+ "forbidden": "Forbidden",
143
+ "forbidden_role_message": "This resource requires one of the following roles: {roles}",
144
+ "email_verification_required": "Email verification required",
145
+ "email_verification_required_message": "Please verify your email address before accessing this resource",
146
+ "company_account_required": "Company account required",
147
+ "company_verification_required": "Company verification required",
148
+ "company_verification_required_message": "Your company must be verified by an admin before accessing this resource",
149
+ "missing_required_fields": "Missing required fields",
150
+ "required_fields": "Required fields: {fields}",
151
+ "invalid_role": "Invalid role",
152
+ "invalid_role_message": "Role must be either STUDENT or COMPANY",
153
+ "email_already_registered": "Email already registered",
154
+ "email_already_registered_message": "A user with this email address already exists",
155
+ "registration_failed": "Registration failed",
156
+ "invalid_credentials": "Invalid credentials",
157
+ "invalid_credentials_message": "Email or password is incorrect",
158
+ "invalid_login_method": "Invalid login method",
159
+ "invalid_login_method_message": "Please login with {provider}",
160
+ "login_failed": "Login failed",
161
+ "refresh_token_required": "Refresh token required",
162
+ "invalid_refresh_token": "Invalid refresh token",
163
+ "session_expired_or_invalid": "Session expired or invalid",
164
+ "token_refresh_failed": "Token refresh failed",
165
+ "logged_out_successfully": "Logged out successfully",
166
+ "logout_failed": "Logout failed",
167
+ "not_authenticated": "Not authenticated",
168
+ "missing_required_field": "Missing required field",
169
+ "field_required": "{field} is required",
170
+ "invalid_token": "Invalid {provider} token",
171
+ "invalid_token_message": "{message}",
172
+ "role_required_for_new_users": "Role required for new users",
173
+ "role_required_for_new_users_message": "Please specify if you are a STUDENT or COMPANY",
174
+ "google_auth_failed": "Google authentication failed",
175
+ "facebook_auth_failed": "Facebook authentication failed",
176
+ "token_missing_email": "Token does not contain email information",
177
+ "oauth_config_missing": "{provider} App ID and Secret must be configured in environment variables",
178
+ "token_app_mismatch": "Token does not belong to this application",
179
+ "oauth_email_permission_missing": "{provider} user does not have email permission granted"
180
+ }
@@ -0,0 +1,179 @@
1
+ {
2
+ "save": "Guardar",
3
+ "edit": "Editar",
4
+ "cancel": "Cancelar",
5
+ "close": "Cerrar",
6
+ "done": "Hecho",
7
+ "yes": "Sí",
8
+ "no": "No",
9
+ "next": "Siguiente",
10
+ "error": "Error",
11
+ "download": "Descargar",
12
+ "submit": "Enviar",
13
+ "clear": "Borrar",
14
+ "searchClear": "Borrar búsqueda",
15
+ "search": "Buscar",
16
+ "actions": "Acciones",
17
+ "signIn": "Iniciar sesión",
18
+ "signUp": "Registrarse",
19
+ "signOut": "Cerrar sesión",
20
+ "Remove": "Eliminar",
21
+ "removeUser": "Eliminar usuario",
22
+ "sortBy": "Ordenar por",
23
+ "name": "Nombre",
24
+ "firstName": "Nombre",
25
+ "lastName": "Apellido",
26
+ "email": "Correo electrónico",
27
+ "password": "Contraseña",
28
+ "passwordRepeat": "Repetir contraseña",
29
+ "account": "Cuenta",
30
+ "role": "Rol",
31
+ "status": "Estado",
32
+ "reason": "Motivo",
33
+ "lastUpdateDate": "Última actualización",
34
+ "sortByFieldAscending": "{field} ascendente",
35
+ "sortByFieldDescending": "{field} descendente",
36
+ "couldNotLoadDataMsg": "No se pudieron cargar los datos: estado \"{data}\"",
37
+ "FAQ": "Preguntas frecuentes",
38
+ "frequentlyAskedQuestions": "Preguntas frecuentes",
39
+ "settings": "Configuración",
40
+ "eventsRewards": "Eventos y recompensas",
41
+ "hostname": "Nombre del host",
42
+ "version": "Versión",
43
+ "profile": "Perfil",
44
+ "security": "Seguridad y acceso",
45
+ "changePassword": "Cambiar contraseña",
46
+ "securitySettings": "Configuraciones de seguridad",
47
+ "requestData": "Solicitar datos",
48
+ "deleteProfile": "Eliminar cuenta",
49
+ "username": "Nombre de usuario",
50
+ "loginMethod": "Método de inicio de sesión",
51
+ "delete": "Eliminar",
52
+ "currentPassword": "Contraseña actual",
53
+ "newPassword": "Nueva contraseña",
54
+ "signUp_haveAnAccount": "¿Ya tienes una cuenta?",
55
+ "slots_not_available": "No hay horarios disponibles",
56
+ "footer_contact_us": "Contáctanos",
57
+ "footer_contact_us_url": "url",
58
+ "privacy_policy": "Política de privacidad",
59
+ "footer_legal_notice_url": "url",
60
+ "footer_company_details": "Información legal",
61
+ "footer_company_details_url": "url",
62
+ "under_construction_notice": "Este sitio está actualmente en construcción",
63
+ "signInFailStackLocked_message": "Tu cuenta ha sido bloqueada tras 5 intentos fallidos. ¡Restablece tu contraseña!",
64
+ "signOut_message": "Has cerrado sesión con éxito",
65
+ "signOutForce_message": "Tu sesión ha sido terminada",
66
+ "signOutNotLatest_message": "Has sido desconectado porque se ha detectado una sesión más reciente.",
67
+ "code_of_conduct": "Código de conducta",
68
+ "student": "Estudiante",
69
+ "teacher": "Profesor",
70
+ "emailVerified": "Correo electrónico verificado",
71
+ "emailAlreadyVerified": "El correo ya fue verificado",
72
+ "redirectNotice": "Serás redirigido en 5 segundos o <a href=\"{uri}\">haz clic aquí</a>",
73
+ "mailNotShowingProperly": "¿No se muestra correctamente este correo?",
74
+ "viewInBrowser": "Ver en el navegador",
75
+ "welcomeMail": "Bienvenido a rapidd",
76
+ "resetPassordMail": "Restablecer tu contraseña de rapidd",
77
+ "appointmentScheduled": "Cita programada",
78
+ "appointmentChanged": "Cita modificada",
79
+ "appointmentCancelled": "Cita cancelada",
80
+ "appointmentRejected": "Cita rechazada",
81
+ "salutationMail": "Hola {first_name},",
82
+ "briefWelcomeTextMail": "Se ha creado una cuenta para ti en la plataforma rapidd. Confirma tu correo haciendo clic en <b>{{confirmMail}}</b>.",
83
+ "yourUsername": "Tu nombre de usuario es <b>{username}</b>",
84
+ "yourPassword": "Tu contraseña inicial es<span style=\"display: inline-block;margin: 0 .8em;padding: .4em .8em;border: 3px dashed #fecb5a;border-radius: .8em;\"><b>{password}</b></span>",
85
+ "changePasswordAfterLogin": "Te pediremos que cambies tu contraseña tras el primer inicio de sesión.",
86
+ "passwordResetTextMail": "Has solicitado restablecer la contraseña de tu cuenta rapidd. Haz clic en <b>{{confirmResetPassword}}</b> para continuar. Ignora este correo si no hiciste la solicitud.",
87
+ "studentAppointmentTextMail": "Se ha programado una cita para la asignatura <b>{subject}</b>.<br><br>{{studentAppointmentInfoMail}}<br><br>{{studentAppointmentRejectInfoMail}}<br><br>",
88
+ "studentAppointmentUpdateTextMail": "Tu cita para la asignatura <b>{subject}</b> ha sido actualizada.<br><br>{{studentAppointmentInfoMail}}<br><br>{{studentAppointmentRejectInfoMail}}<br><br>",
89
+ "studentAppointmentCancelledTextMail": "Tu cita para la asignatura <b>{subject}</b> ha sido cancelada.<br><br>{{studentAppointmentInfoMail}}<br><br>",
90
+ "studentAppointmentInfoMail": "{{teacher}}: <b>{teacher}</b><br>Fecha: <b>{date}</b><br>Hora: <b>{time}</b><br>Duración: <b>{duration}</b><br>Ubicación / enlace online: <b>{location_url}</b>",
91
+ "studentAppointmentRejectInfoMail": "<i>Puedes cancelar la cita hasta 24 horas antes.</i>",
92
+ "teacherAppointmentCancelledTextMail": "Tu cita para la asignatura <b>{subject}</b> ha sido cancelada.<br><br>{{teacherAppointmentInfoMail}}<br><br>",
93
+ "teacherAppointmentRejectedTextMail": "Tu estudiante {{student}} ha rechazado la cita para la asignatura <b>{subject}</b>.<br><br>{{teacherAppointmentInfoMail}}<br><br>",
94
+ "teacherAppointmentInfoMail": "{{student}}: <b>{student}</b><br>Fecha: <b>{date}</b><br>Hora: <b>{time}</b><br>Duración: <b>{duration}</b><br>Ubicación / enlace online: <b>{location_url}</b>",
95
+ "confirmMail": "Confirmar correo electrónico",
96
+ "confirmResetPassword": "Restablecer contraseña",
97
+ "viewAppointment": "Ver cita",
98
+ "footerText": "Nuestro objetivo es ayudar a todos a alcanzar su potencial.",
99
+ "footerCopyright": "© {year}, rapidd GmbH. Todos los derechos reservados.",
100
+ "insufficient_permissions": "Permisos insuficientes",
101
+ "rate_limit_exceeded": "Límite de solicitudes excedido",
102
+ "record_not_found": "Registro no encontrado",
103
+ "no_permission": "Sin permiso",
104
+ "invalid_sort_field": "El parámetro sortBy '{sortBy}' no es un campo válido de {modelName}",
105
+ "invalid_filter_field": "Campo de filtro inválido: {field}",
106
+ "relation_not_exist": "La relación '{relation}' no existe en {modelName}",
107
+ "between_requires_two_values": "El operador between requiere dos valores separados por punto y coma",
108
+ "invalid_date_range": "Fecha inválida en el rango: {start} o {end}",
109
+ "invalid_date_format": "Formato de fecha inválido en el filtro: {value}. Error: {error}",
110
+ "invalid_limit": "Límite inválido",
111
+ "sortby_must_be_string": "sortBy debe ser una cadena. Se proporcionó '{type}'",
112
+ "sortorder_invalid": "sortOrder solo puede ser 'asc' o 'desc'. Se proporcionó '{value}'",
113
+ "unexpected_key": "La clave '{key}' no se esperaba",
114
+ "string_expected": "Se esperaba cadena, se proporcionó {type}",
115
+ "auth_credentials_missing": "Faltan credenciales de autenticación",
116
+ "account_suspended": "Su cuenta ha sido suspendida",
117
+ "email_not_verified": "La dirección de correo electrónico aún no ha sido verificada",
118
+ "auth_failed_invalid_credentials": "Autenticación fallida: credenciales inválidas",
119
+ "user_not_found": "Usuario no encontrado",
120
+ "no_active_session": "No hay sesión activa",
121
+ "email_not_string": "'email' en el cuerpo no es de tipo 'string'. Se proporcionó '{type}'",
122
+ "password_change_failed": "No se pudo cambiar la contraseña",
123
+ "token_invalid": "El token es inválido",
124
+ "password_not_string": "password en el cuerpo no es de tipo 'string'. Se proporcionó '{type}'",
125
+ "token_not_string": "token en el cuerpo no es de tipo 'string'. Se proporcionó '{type}'",
126
+ "file_type_not_allowed": "Tipo de archivo {mimetype} no permitido",
127
+ "file_extension_not_allowed": "Extensión de archivo {extension} no permitida para el tipo MIME {mimetype}",
128
+ "invalid_file_name": "Nombre de archivo inválido",
129
+ "file_size_exceeds_limit": "El tamaño del archivo excede el límite de {limit}MB",
130
+ "cors_blocked": "Bloqueado por política CORS: {origin}",
131
+ "activation_link_expired": "Enlace de activación expirado",
132
+ "password_reset_email_sent": "Correo de restablecimiento de contraseña enviado",
133
+ "password_changed_successfully": "La contraseña se ha cambiado correctamente",
134
+ "username_password_invalid": "El nombre de usuario o la contraseña no son válidos",
135
+ "activation_mail_sent": "Correo de activación enviado",
136
+ "session_terminated": "El token de sesión ha sido terminado",
137
+ "no_valid_session": "No hay sesión válida",
138
+ "object_deleted_successfully": "{modelName} eliminado correctamente",
139
+ "auth_required": "Autenticación requerida",
140
+ "auth_required_message": "Debe iniciar sesión para acceder a este recurso",
141
+ "forbidden": "Prohibido",
142
+ "forbidden_role_message": "Este recurso requiere uno de los siguientes roles: {roles}",
143
+ "email_verification_required": "Verificación de correo electrónico requerida",
144
+ "email_verification_required_message": "Por favor, verifique su dirección de correo electrónico antes de acceder a este recurso",
145
+ "company_account_required": "Cuenta de empresa requerida",
146
+ "company_verification_required": "Verificación de empresa requerida",
147
+ "company_verification_required_message": "Su empresa debe ser verificada por un administrador antes de acceder a este recurso",
148
+ "missing_required_fields": "Faltan campos requeridos",
149
+ "required_fields": "Campos requeridos: {fields}",
150
+ "invalid_role": "Rol inválido",
151
+ "invalid_role_message": "El rol debe ser STUDENT o COMPANY",
152
+ "email_already_registered": "Correo electrónico ya registrado",
153
+ "email_already_registered_message": "Ya existe un usuario con esta dirección de correo electrónico",
154
+ "registration_failed": "Registro fallido",
155
+ "invalid_credentials": "Credenciales inválidas",
156
+ "invalid_credentials_message": "El correo electrónico o la contraseña son incorrectos",
157
+ "invalid_login_method": "Método de inicio de sesión inválido",
158
+ "invalid_login_method_message": "Por favor, inicie sesión con {provider}",
159
+ "login_failed": "Inicio de sesión fallido",
160
+ "refresh_token_required": "Token de actualización requerido",
161
+ "invalid_refresh_token": "Token de actualización inválido",
162
+ "session_expired_or_invalid": "Sesión expirada o inválida",
163
+ "token_refresh_failed": "Actualización de token fallida",
164
+ "logged_out_successfully": "Sesión cerrada exitosamente",
165
+ "logout_failed": "Cierre de sesión fallido",
166
+ "not_authenticated": "No autenticado",
167
+ "missing_required_field": "Falta campo requerido",
168
+ "field_required": "{field} es requerido",
169
+ "invalid_token": "Token de {provider} inválido",
170
+ "invalid_token_message": "{message}",
171
+ "role_required_for_new_users": "Rol requerido para nuevos usuarios",
172
+ "role_required_for_new_users_message": "Por favor, especifique si es STUDENT o COMPANY",
173
+ "google_auth_failed": "Autenticación de Google fallida",
174
+ "facebook_auth_failed": "Autenticación de Facebook fallida",
175
+ "token_missing_email": "El token no contiene información de correo electrónico",
176
+ "oauth_config_missing": "El ID de aplicación y el secreto de {provider} deben configurarse en las variables de entorno",
177
+ "token_app_mismatch": "El token no pertenece a esta aplicación",
178
+ "oauth_email_permission_missing": "El usuario de {provider} no ha otorgado permiso de correo electrónico"
179
+ }
@@ -0,0 +1,179 @@
1
+ {
2
+ "save": "Enregistrer",
3
+ "edit": "Modifier",
4
+ "cancel": "Annuler",
5
+ "close": "Fermer",
6
+ "done": "Terminé",
7
+ "yes": "Oui",
8
+ "no": "Non",
9
+ "next": "Suivant",
10
+ "error": "Erreur",
11
+ "download": "Télécharger",
12
+ "submit": "Soumettre",
13
+ "clear": "Effacer",
14
+ "searchClear": "Effacer la recherche",
15
+ "search": "Rechercher",
16
+ "actions": "Actions",
17
+ "signIn": "Se connecter",
18
+ "signUp": "S'inscrire",
19
+ "signOut": "Se déconnecter",
20
+ "Remove": "Supprimer",
21
+ "removeUser": "Supprimer l'utilisateur",
22
+ "sortBy": "Trier par",
23
+ "name": "Nom",
24
+ "firstName": "Prénom",
25
+ "lastName": "Nom de famille",
26
+ "email": "Email",
27
+ "password": "Mot de passe",
28
+ "passwordRepeat": "Répéter le mot de passe",
29
+ "account": "Compte",
30
+ "role": "Rôle",
31
+ "status": "Statut",
32
+ "reason": "Raison",
33
+ "lastUpdateDate": "Dernière mise à jour le",
34
+ "sortByFieldAscending": "{field} croissant",
35
+ "sortByFieldDescending": "{field} décroissant",
36
+ "couldNotLoadDataMsg": "Les données n'ont pas pu être chargées : statut \"{data}\"",
37
+ "FAQ": "FAQ",
38
+ "frequentlyAskedQuestions": "Questions fréquemment posées",
39
+ "settings": "Paramètres",
40
+ "eventsRewards": "Événements & Récompenses",
41
+ "hostname": "Nom d'hôte",
42
+ "version": "Version",
43
+ "profile": "Profil",
44
+ "security": "Sécurité & accès",
45
+ "changePassword": "Changer le mot de passe",
46
+ "securitySettings": "Paramètres de sécurité",
47
+ "requestData": "Demander un extrait de données",
48
+ "deleteProfile": "Supprimer le compte",
49
+ "username": "Nom d'utilisateur",
50
+ "loginMethod": "Méthode de connexion",
51
+ "delete": "Supprimer",
52
+ "currentPassword": "Mot de passe actuel",
53
+ "newPassword": "Nouveau mot de passe",
54
+ "signUp_haveAnAccount": "Tu as déjà un compte ?",
55
+ "slots_not_available": "Aucune information de créneau disponible",
56
+ "footer_contact_us": "Contact",
57
+ "footer_contact_us_url": "url",
58
+ "privacy_policy": "Politique de confidentialité",
59
+ "footer_legal_notice_url": "url",
60
+ "footer_company_details": "Mentions légales",
61
+ "footer_company_details_url": "url",
62
+ "under_construction_notice": "Ce site est actuellement en construction",
63
+ "signInFailStackLocked_message": "Votre compte a été verrouillé après 5 tentatives infructueuses. Veuillez réinitialiser votre mot de passe !",
64
+ "signOut_message": "Vous êtes maintenant déconnecté",
65
+ "signOutForce_message": "Vous avez été déconnecté",
66
+ "signOutNotLatest_message": "Vous avez été automatiquement déconnecté car une session plus récente a été détectée.",
67
+ "code_of_conduct": "Code de conduite",
68
+ "student": "Élève",
69
+ "teacher": "Professeur",
70
+ "emailVerified": "Email confirmé",
71
+ "emailAlreadyVerified": "Email déjà confirmé",
72
+ "redirectNotice": "Tu seras redirigé dans 5 secondes ou clique <a href=\"{uri}\">ici</a>",
73
+ "mailNotShowingProperly": "L'email ne s'affiche pas correctement ?",
74
+ "viewInBrowser": "Voir dans le navigateur",
75
+ "welcomeMail": "Bienvenue chez rapidd",
76
+ "resetPassordMail": "Réinitialiser ton mot de passe rapidd",
77
+ "appointmentScheduled": "Rendez-vous programmé",
78
+ "appointmentChanged": "Le rendez-vous a été modifié",
79
+ "appointmentCancelled": "Le rendez-vous a été annulé",
80
+ "appointmentRejected": "Le rendez-vous a été refusé",
81
+ "salutationMail": "Bonjour {first_name},",
82
+ "briefWelcomeTextMail": "un compte t’a été créé chez rapidd. Merci de confirmer ton adresse email en cliquant sur <b>{{confirmMail}}</b>.",
83
+ "yourUsername": "Ton nom d'utilisateur est <b>{username}</b>",
84
+ "yourPassword": "Ton mot de passe initial<span style=\"display: inline-block;margin: 0 .8em;padding: .4em .8em;border: 3px dashed #fecb5a;border-radius: .8em;\"><b>{password}</b></span>",
85
+ "changePasswordAfterLogin": "Merci de changer ton mot de passe après ta première connexion.",
86
+ "passwordResetTextMail": "tu as demandé une réinitialisation de ton mot de passe rapidd. Clique sur <b>{{confirmResetPassword}}</b> pour le réinitialiser. Si tu n’as pas fait cette demande, ignore ce message.",
87
+ "studentAppointmentTextMail": "un rendez-vous t’a été attribué pour la matière <b>{subject}</b>.<br><br>{{studentAppointmentInfoMail}}<br><br>{{studentAppointmentRejectInfoMail}}<br><br>",
88
+ "studentAppointmentUpdateTextMail": "ton rendez-vous pour la matière <b>{subject}</b> a été modifié.<br><br>{{studentAppointmentInfoMail}}<br><br>{{studentAppointmentRejectInfoMail}}<br><br>",
89
+ "studentAppointmentCancelledTextMail": "ton rendez-vous pour la matière <b>{subject}</b> a été annulé.<br><br>{{studentAppointmentInfoMail}}<br><br>",
90
+ "studentAppointmentInfoMail": "{{teacher}} : <b>{teacher}</b><br>Date : <b>{date}</b><br>Heure : <b>{time}</b><br>Durée : <b>{duration}</b><br>Lieu/Lien en ligne : <b>{location_url}</b>",
91
+ "studentAppointmentRejectInfoMail": "<i>Tu peux refuser ce rendez-vous jusqu’à 24h avant le début du cours.</i>",
92
+ "teacherAppointmentCancelledTextMail": "Votre rendez-vous pour la matière <b>{subject}</b> a été annulé.<br><br>{{teacherAppointmentInfoMail}}<br><br>",
93
+ "teacherAppointmentRejectedTextMail": "Votre {{student}} a refusé le rendez-vous pour la matière <b>{subject}</b>.<br><br>{{teacherAppointmentInfoMail}}<br><br>",
94
+ "teacherAppointmentInfoMail": "{{student}} : <b>{student}</b><br>Date : <b>{date}</b><br>Heure : <b>{time}</b><br>Durée : <b>{duration}</b><br>Lieu/Lien en ligne : <b>{location_url}</b>",
95
+ "confirmMail": "Confirmer l'email",
96
+ "confirmResetPassword": "Réinitialiser le mot de passe",
97
+ "viewAppointment": "Voir le rendez-vous",
98
+ "footerText": "Notre objectif est de permettre à chacun de réaliser son potentiel.",
99
+ "footerCopyright": "© {year}, rapidd GmbH Tous droits réservés.",
100
+ "insufficient_permissions": "Permissions insuffisantes",
101
+ "rate_limit_exceeded": "Limite de débit dépassée",
102
+ "record_not_found": "Enregistrement non trouvé",
103
+ "no_permission": "Aucune permission",
104
+ "invalid_sort_field": "Le paramètre sortBy '{sortBy}' n'est pas un champ valide de {modelName}",
105
+ "invalid_filter_field": "Champ de filtre invalide : {field}",
106
+ "relation_not_exist": "La relation '{relation}' n'existe pas dans {modelName}",
107
+ "between_requires_two_values": "L'opérateur between nécessite deux valeurs séparées par un point-virgule",
108
+ "invalid_date_range": "Date invalide dans la plage : {start} ou {end}",
109
+ "invalid_date_format": "Format de date invalide dans le filtre : {value}. Erreur : {error}",
110
+ "invalid_limit": "Limite invalide",
111
+ "sortby_must_be_string": "sortBy doit être une chaîne. '{type}' fourni",
112
+ "sortorder_invalid": "sortOrder ne peut être que 'asc' ou 'desc'. '{value}' fourni",
113
+ "unexpected_key": "La clé '{key}' n'est pas attendue",
114
+ "string_expected": "Chaîne attendue, {type} fourni",
115
+ "auth_credentials_missing": "Informations d'authentification manquantes",
116
+ "account_suspended": "Votre compte a été suspendu",
117
+ "email_not_verified": "L'adresse e-mail n'a pas encore été vérifiée",
118
+ "auth_failed_invalid_credentials": "Échec de l'authentification : identifiants invalides",
119
+ "user_not_found": "Utilisateur non trouvé",
120
+ "no_active_session": "Aucune session active",
121
+ "email_not_string": "'email' dans le corps n'est pas de type 'string'. '{type}' fourni",
122
+ "password_change_failed": "Le mot de passe n'a pas pu être modifié",
123
+ "token_invalid": "Le jeton est invalide",
124
+ "password_not_string": "password dans le corps n'est pas de type 'string'. '{type}' fourni",
125
+ "token_not_string": "token dans le corps n'est pas de type 'string'. '{type}' fourni",
126
+ "file_type_not_allowed": "Type de fichier {mimetype} non autorisé",
127
+ "file_extension_not_allowed": "Extension de fichier {extension} non autorisée pour le type MIME {mimetype}",
128
+ "invalid_file_name": "Nom de fichier invalide",
129
+ "file_size_exceeds_limit": "La taille du fichier dépasse la limite de {limit}MB",
130
+ "cors_blocked": "Bloqué par la politique CORS : {origin}",
131
+ "activation_link_expired": "Lien d'activation expiré",
132
+ "password_reset_email_sent": "E-mail de réinitialisation du mot de passe envoyé",
133
+ "password_changed_successfully": "Le mot de passe a été changé avec succès",
134
+ "username_password_invalid": "Le nom d'utilisateur ou le mot de passe n'est pas valide",
135
+ "activation_mail_sent": "E-mail d'activation envoyé",
136
+ "session_terminated": "Le jeton de session a été terminé",
137
+ "no_valid_session": "Aucune session valide",
138
+ "object_deleted_successfully": "{modelName} supprimé avec succès",
139
+ "auth_required": "Authentification requise",
140
+ "auth_required_message": "Vous devez être connecté pour accéder à cette ressource",
141
+ "forbidden": "Interdit",
142
+ "forbidden_role_message": "Cette ressource nécessite l'un des rôles suivants : {roles}",
143
+ "email_verification_required": "Vérification de l'e-mail requise",
144
+ "email_verification_required_message": "Veuillez vérifier votre adresse e-mail avant d'accéder à cette ressource",
145
+ "company_account_required": "Compte entreprise requis",
146
+ "company_verification_required": "Vérification de l'entreprise requise",
147
+ "company_verification_required_message": "Votre entreprise doit être vérifiée par un administrateur avant d'accéder à cette ressource",
148
+ "missing_required_fields": "Champs requis manquants",
149
+ "required_fields": "Champs requis : {fields}",
150
+ "invalid_role": "Rôle invalide",
151
+ "invalid_role_message": "Le rôle doit être STUDENT ou COMPANY",
152
+ "email_already_registered": "E-mail déjà enregistré",
153
+ "email_already_registered_message": "Un utilisateur avec cette adresse e-mail existe déjà",
154
+ "registration_failed": "Échec de l'inscription",
155
+ "invalid_credentials": "Identifiants invalides",
156
+ "invalid_credentials_message": "L'e-mail ou le mot de passe est incorrect",
157
+ "invalid_login_method": "Méthode de connexion invalide",
158
+ "invalid_login_method_message": "Veuillez vous connecter avec {provider}",
159
+ "login_failed": "Échec de la connexion",
160
+ "refresh_token_required": "Jeton de rafraîchissement requis",
161
+ "invalid_refresh_token": "Jeton de rafraîchissement invalide",
162
+ "session_expired_or_invalid": "Session expirée ou invalide",
163
+ "token_refresh_failed": "Échec du rafraîchissement du jeton",
164
+ "logged_out_successfully": "Déconnexion réussie",
165
+ "logout_failed": "Échec de la déconnexion",
166
+ "not_authenticated": "Non authentifié",
167
+ "missing_required_field": "Champ requis manquant",
168
+ "field_required": "{field} est requis",
169
+ "invalid_token": "Jeton {provider} invalide",
170
+ "invalid_token_message": "{message}",
171
+ "role_required_for_new_users": "Rôle requis pour les nouveaux utilisateurs",
172
+ "role_required_for_new_users_message": "Veuillez spécifier si vous êtes STUDENT ou COMPANY",
173
+ "google_auth_failed": "Échec de l'authentification Google",
174
+ "facebook_auth_failed": "Échec de l'authentification Facebook",
175
+ "token_missing_email": "Le jeton ne contient pas d'informations d'e-mail",
176
+ "oauth_config_missing": "L'ID d'application et le secret de {provider} doivent être configurés dans les variables d'environnement",
177
+ "token_app_mismatch": "Le jeton n'appartient pas à cette application",
178
+ "oauth_email_permission_missing": "L'utilisateur {provider} n'a pas accordé la permission d'accès à l'e-mail"
179
+ }