@intlayer/backend 5.1.3 → 5.1.5
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/cjs/controllers/dictionary.controller.cjs +7 -11
- package/dist/cjs/controllers/dictionary.controller.cjs.map +1 -1
- package/dist/cjs/emails/InviteUserEmail.cjs +3 -3
- package/dist/cjs/emails/InviteUserEmail.cjs.map +1 -1
- package/dist/cjs/emails/PasswordChangeConfirmation.cjs +3 -3
- package/dist/cjs/emails/PasswordChangeConfirmation.cjs.map +1 -1
- package/dist/cjs/emails/ResetUserPassword.cjs +3 -3
- package/dist/cjs/emails/ResetUserPassword.cjs.map +1 -1
- package/dist/cjs/emails/SubscriptionPaymentCancellation.cjs +3 -3
- package/dist/cjs/emails/SubscriptionPaymentCancellation.cjs.map +1 -1
- package/dist/cjs/emails/SubscriptionPaymentError.cjs +3 -3
- package/dist/cjs/emails/SubscriptionPaymentError.cjs.map +1 -1
- package/dist/cjs/emails/SubscriptionPaymentSuccess.cjs +3 -3
- package/dist/cjs/emails/SubscriptionPaymentSuccess.cjs.map +1 -1
- package/dist/cjs/emails/ValidateUserEmail.cjs +3 -3
- package/dist/cjs/emails/ValidateUserEmail.cjs.map +1 -1
- package/dist/cjs/emails/Welcome.cjs +3 -3
- package/dist/cjs/emails/Welcome.cjs.map +1 -1
- package/dist/cjs/schemas/dictionary.schema.cjs +0 -4
- package/dist/cjs/schemas/dictionary.schema.cjs.map +1 -1
- package/dist/cjs/services/dictionary.service.cjs +6 -0
- package/dist/cjs/services/dictionary.service.cjs.map +1 -1
- package/dist/cjs/types/dictionary.types.cjs.map +1 -1
- package/dist/cjs/utils/auditDictionary/index.cjs +1 -1
- package/dist/cjs/utils/auditDictionary/index.cjs.map +1 -1
- package/dist/cjs/utils/auditDictionaryField/PROMPT.md +17 -7
- package/dist/cjs/utils/auditDictionaryField/index.cjs +1 -1
- package/dist/cjs/utils/auditDictionaryField/index.cjs.map +1 -1
- package/dist/cjs/utils/auditDictionaryMetadata/index.cjs +1 -1
- package/dist/cjs/utils/auditDictionaryMetadata/index.cjs.map +1 -1
- package/dist/cjs/utils/auditTag/index.cjs +1 -1
- package/dist/cjs/utils/auditTag/index.cjs.map +1 -1
- package/dist/esm/controllers/dictionary.controller.mjs +7 -11
- package/dist/esm/controllers/dictionary.controller.mjs.map +1 -1
- package/dist/esm/emails/InviteUserEmail.mjs +3 -3
- package/dist/esm/emails/InviteUserEmail.mjs.map +1 -1
- package/dist/esm/emails/PasswordChangeConfirmation.mjs +3 -3
- package/dist/esm/emails/PasswordChangeConfirmation.mjs.map +1 -1
- package/dist/esm/emails/ResetUserPassword.mjs +3 -3
- package/dist/esm/emails/ResetUserPassword.mjs.map +1 -1
- package/dist/esm/emails/SubscriptionPaymentCancellation.mjs +3 -3
- package/dist/esm/emails/SubscriptionPaymentCancellation.mjs.map +1 -1
- package/dist/esm/emails/SubscriptionPaymentError.mjs +3 -3
- package/dist/esm/emails/SubscriptionPaymentError.mjs.map +1 -1
- package/dist/esm/emails/SubscriptionPaymentSuccess.mjs +3 -3
- package/dist/esm/emails/SubscriptionPaymentSuccess.mjs.map +1 -1
- package/dist/esm/emails/ValidateUserEmail.mjs +3 -3
- package/dist/esm/emails/ValidateUserEmail.mjs.map +1 -1
- package/dist/esm/emails/Welcome.mjs +3 -3
- package/dist/esm/emails/Welcome.mjs.map +1 -1
- package/dist/esm/schemas/dictionary.schema.mjs +0 -4
- package/dist/esm/schemas/dictionary.schema.mjs.map +1 -1
- package/dist/esm/services/dictionary.service.mjs +6 -0
- package/dist/esm/services/dictionary.service.mjs.map +1 -1
- package/dist/esm/utils/auditDictionary/index.mjs +1 -1
- package/dist/esm/utils/auditDictionary/index.mjs.map +1 -1
- package/dist/esm/utils/auditDictionaryField/PROMPT.md +17 -7
- package/dist/esm/utils/auditDictionaryField/index.mjs +1 -1
- package/dist/esm/utils/auditDictionaryField/index.mjs.map +1 -1
- package/dist/esm/utils/auditDictionaryMetadata/index.mjs +1 -1
- package/dist/esm/utils/auditDictionaryMetadata/index.mjs.map +1 -1
- package/dist/esm/utils/auditTag/index.mjs +1 -1
- package/dist/esm/utils/auditTag/index.mjs.map +1 -1
- package/dist/types/controllers/dictionary.controller.d.ts.map +1 -1
- package/dist/types/schemas/dictionary.schema.d.ts.map +1 -1
- package/dist/types/services/dictionary.service.d.ts.map +1 -1
- package/dist/types/types/dictionary.types.d.ts +0 -1
- package/dist/types/types/dictionary.types.d.ts.map +1 -1
- package/package.json +9 -9
|
@@ -39,6 +39,7 @@ __export(dictionary_controller_exports, {
|
|
|
39
39
|
module.exports = __toCommonJS(dictionary_controller_exports);
|
|
40
40
|
var import_logger = require('./../logger/index.cjs');
|
|
41
41
|
var dictionaryService = __toESM(require('./../services/dictionary.service.cjs'), 1);
|
|
42
|
+
var import_ensureMongoDocumentToObject = require('./../utils/ensureMongoDocumentToObject.cjs');
|
|
42
43
|
var import_errors = require('./../utils/errors/index.cjs');
|
|
43
44
|
var import_getDictionaryFiltersAndPagination = require('./../utils/filtersAndPagination/getDictionaryFiltersAndPagination.cjs');
|
|
44
45
|
var import_dictionary = require('./../utils/mapper/dictionary.cjs');
|
|
@@ -68,7 +69,7 @@ const getDictionaries = async (req, res, _next) => {
|
|
|
68
69
|
);
|
|
69
70
|
const totalItems = await dictionaryService.countDictionaries(filters);
|
|
70
71
|
const dictionariesAPI = dictionaries.map(
|
|
71
|
-
(el) => (0, import_dictionary.mapDictionaryToAPI)(el, project._id
|
|
72
|
+
(el) => (0, import_dictionary.mapDictionaryToAPI)(el, project._id)
|
|
72
73
|
);
|
|
73
74
|
const responseData = (0, import_responseData.formatPaginatedResponse)({
|
|
74
75
|
data: dictionariesAPI,
|
|
@@ -254,7 +255,6 @@ const pushDictionaries = async (req, res, _next) => {
|
|
|
254
255
|
const updatedDictionariesResult = [];
|
|
255
256
|
const errorResult = [];
|
|
256
257
|
for (const dictionaryDataEl of newDictionaries) {
|
|
257
|
-
const publishedVersion = dictionaryDataEl.version ? dictionaryDataEl.version === "-1" ? null : dictionaryDataEl.version : null;
|
|
258
258
|
const dictionary = {
|
|
259
259
|
title: dictionaryDataEl.title,
|
|
260
260
|
description: dictionaryDataEl.description,
|
|
@@ -266,8 +266,7 @@ const pushDictionaries = async (req, res, _next) => {
|
|
|
266
266
|
filePath: {
|
|
267
267
|
[String(project._id)]: dictionaryDataEl.filePath ?? ""
|
|
268
268
|
},
|
|
269
|
-
key: dictionaryDataEl.key
|
|
270
|
-
publishedVersion
|
|
269
|
+
key: dictionaryDataEl.key
|
|
271
270
|
};
|
|
272
271
|
try {
|
|
273
272
|
const newDictionary = await dictionaryService.createDictionary(dictionary);
|
|
@@ -288,10 +287,9 @@ const pushDictionaries = async (req, res, _next) => {
|
|
|
288
287
|
const existingDictionaryDB = existingDictionariesDB.find(
|
|
289
288
|
(dictionaryDB) => dictionaryDB.key === dictionaryDataEl.key
|
|
290
289
|
);
|
|
291
|
-
const
|
|
292
|
-
|
|
293
|
-
);
|
|
294
|
-
const lastContent = existingContentArray[existingContentArray.length - 1].content;
|
|
290
|
+
const versionList = [...existingDictionaryDB.content.keys() ?? []];
|
|
291
|
+
const lastVersion = versionList[versionList.length - 1];
|
|
292
|
+
const lastContent = existingDictionaryDB.content.get(lastVersion)?.content ?? null;
|
|
295
293
|
const isSameContent = JSON.stringify(lastContent) === JSON.stringify(dictionaryDataEl.content);
|
|
296
294
|
let newContent = existingDictionaryDB.content;
|
|
297
295
|
if (!isSameContent) {
|
|
@@ -303,9 +301,8 @@ const pushDictionaries = async (req, res, _next) => {
|
|
|
303
301
|
}
|
|
304
302
|
};
|
|
305
303
|
}
|
|
306
|
-
const publishedVersion = dictionaryDataEl.version ? dictionaryDataEl.version === "-1" ? null : dictionaryDataEl.version : null;
|
|
307
304
|
const dictionary = {
|
|
308
|
-
...existingDictionaryDB,
|
|
305
|
+
...(0, import_ensureMongoDocumentToObject.ensureMongoDocumentToObject)(existingDictionaryDB),
|
|
309
306
|
...dictionaryDataEl,
|
|
310
307
|
content: newContent,
|
|
311
308
|
projectIds: [String(project._id)],
|
|
@@ -313,7 +310,6 @@ const pushDictionaries = async (req, res, _next) => {
|
|
|
313
310
|
filePath: {
|
|
314
311
|
[String(project._id)]: dictionaryDataEl.filePath ?? ""
|
|
315
312
|
},
|
|
316
|
-
publishedVersion,
|
|
317
313
|
key: dictionaryDataEl.key
|
|
318
314
|
};
|
|
319
315
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/controllers/dictionary.controller.ts"],"sourcesContent":["import type {\n ContentNode,\n Dictionary as LocalDictionary,\n} from '@intlayer/core';\nimport { logger } from '@logger';\nimport type { ResponseWithInformation } from '@middlewares/sessionAuth.middleware';\nimport * as dictionaryService from '@services/dictionary.service';\nimport { type AppError, ErrorHandler } from '@utils/errors';\nimport {\n type DictionaryFiltersParams,\n getDictionaryFiltersAndPagination,\n} from '@utils/filtersAndPagination/getDictionaryFiltersAndPagination';\nimport type { FiltersAndPagination } from '@utils/filtersAndPagination/getFiltersAndPaginationFromBody';\nimport { mapDictionaryToAPI } from '@utils/mapper/dictionary';\nimport {\n formatPaginatedResponse,\n type ResponseData,\n type PaginatedResponse,\n formatResponse,\n} from '@utils/responseData';\nimport type { NextFunction, Request } from 'express';\nimport { t } from 'express-intlayer';\nimport * as eventListener from '@/controllers/event-listener';\nimport type {\n Dictionary,\n DictionaryAPI,\n DictionaryCreationData,\n DictionaryData,\n VersionedContent,\n} from '@/types/dictionary.types';\n\nexport type GetDictionariesParams =\n FiltersAndPagination<DictionaryFiltersParams>;\nexport type GetDictionariesResult = PaginatedResponse<DictionaryAPI>;\n\n/**\n * Retrieves a list of dictionaries based on filters and pagination.\n */\nexport const getDictionaries = async (\n req: Request<GetDictionariesParams>,\n res: ResponseWithInformation<GetDictionariesResult>,\n _next: NextFunction\n): Promise<void> => {\n const { user, project, dictionaryRights } = res.locals;\n const { filters, pageSize, skip, page, getNumberOfPages } =\n getDictionaryFiltersAndPagination(req);\n\n if (!project) {\n ErrorHandler.handleGenericErrorResponse(res, 'PROJECT_NOT_DEFINED');\n return;\n }\n if (!user) {\n ErrorHandler.handleGenericErrorResponse(res, 'USER_NOT_DEFINED');\n return;\n }\n if (!dictionaryRights?.read) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_RIGHTS_NOT_READ');\n return;\n }\n\n try {\n const dictionaries = await dictionaryService.findDictionaries(\n filters,\n skip,\n pageSize\n );\n const totalItems = await dictionaryService.countDictionaries(filters);\n\n const dictionariesAPI = dictionaries.map((el) =>\n mapDictionaryToAPI(el, project._id, el.publishedVersion ?? undefined)\n );\n\n const responseData = formatPaginatedResponse<DictionaryAPI>({\n data: dictionariesAPI,\n page,\n pageSize,\n totalPages: getNumberOfPages(totalItems),\n totalItems,\n });\n\n res.json(responseData);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n\nexport type GetDictionariesKeysResult = ResponseData<string[]>;\n\n/**\n * Retrieves a list of dictionaries keys based on filters and pagination.\n */\nexport const getDictionariesKeys = async (\n _req: Request,\n res: ResponseWithInformation<GetDictionariesKeysResult>,\n _next: NextFunction\n) => {\n const { project, dictionaryRights } = res.locals;\n\n if (!project) {\n ErrorHandler.handleGenericErrorResponse(res, 'PROJECT_NOT_DEFINED');\n return;\n }\n if (!dictionaryRights?.read) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_RIGHTS_NOT_READ');\n return;\n }\n\n try {\n const dictionariesKeys = await dictionaryService.getDictionariesKeys(\n project._id\n );\n\n const responseData = formatResponse<string[]>({\n data: dictionariesKeys,\n });\n\n res.json(responseData);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n\nexport type GetDictionaryParams = { dictionaryKey: string };\nexport type GetDictionaryQuery = { version?: string };\nexport type GetDictionaryResult = ResponseData<DictionaryAPI>;\n\n/**\n * Retrieves a list of dictionaries based on filters and pagination.\n */\nexport const getDictionaryByKey = async (\n req: Request<GetDictionaryParams, any, any, GetDictionaryQuery>,\n res: ResponseWithInformation<GetDictionaryResult>,\n _next: NextFunction\n): Promise<void> => {\n const { project, user, dictionaryRights } = res.locals;\n const { dictionaryKey } = req.params;\n const version = req.query.version;\n\n if (!project) {\n ErrorHandler.handleGenericErrorResponse(res, 'PROJECT_NOT_DEFINED');\n return;\n }\n if (!user) {\n ErrorHandler.handleGenericErrorResponse(res, 'USER_NOT_DEFINED');\n return;\n }\n if (!dictionaryRights?.read) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_RIGHTS_NOT_READ');\n return;\n }\n\n try {\n const dictionary = await dictionaryService.getDictionaryByKey(\n dictionaryKey,\n project._id\n );\n\n if (!dictionary.projectIds.map(String).includes(String(project._id))) {\n ErrorHandler.handleGenericErrorResponse(\n res,\n 'DICTIONARY_PROJECT_MISMATCH'\n );\n return;\n }\n\n const apiResult = mapDictionaryToAPI(dictionary, project._id, version);\n\n const responseData = formatResponse<DictionaryAPI>({\n data: apiResult,\n });\n\n res.json(responseData);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n\nexport type AddDictionaryBody = { dictionary: DictionaryCreationData };\nexport type AddDictionaryResult = ResponseData<DictionaryAPI>;\n\n/**\n * Adds a new dictionary to the database.\n */\nexport const addDictionary = async (\n req: Request<any, any, AddDictionaryBody>,\n res: ResponseWithInformation<AddDictionaryResult>,\n _next: NextFunction\n): Promise<void> => {\n const { project, user, dictionaryRights } = res.locals;\n const dictionaryData = req.body.dictionary;\n\n if (!dictionaryData) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_DATA_NOT_FOUND');\n return;\n }\n\n if (!project) {\n ErrorHandler.handleGenericErrorResponse(res, 'PROJECT_NOT_DEFINED');\n return;\n }\n\n if (!user) {\n ErrorHandler.handleGenericErrorResponse(res, 'USER_NOT_DEFINED');\n return;\n }\n\n if (!dictionaryData.projectIds.includes(String(project._id))) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_PROJECT_MISMATCH');\n return;\n }\n\n if (!dictionaryRights?.admin) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_RIGHTS_NOT_ADMIN');\n return;\n }\n\n const dictionary: DictionaryData = {\n key: dictionaryData.key,\n title: dictionaryData.title,\n description: dictionaryData.description,\n content: new Map([\n ['v1', { content: dictionaryData.content ?? ({} as ContentNode) }],\n ]),\n creatorId: user._id,\n filePath: {\n [String(project._id)]: dictionaryData.filePath ?? '',\n },\n projectIds: dictionaryData.projectIds ?? [String(project._id)],\n };\n\n try {\n const newDictionary = await dictionaryService.createDictionary(dictionary);\n\n const apiResult = mapDictionaryToAPI(newDictionary, project._id);\n\n const responseData = formatResponse<DictionaryAPI>({\n message: t({\n en: 'Dictionary created successfully',\n fr: 'Dictionnaire créé avec succès',\n es: 'Diccionario creado con éxito',\n }),\n description: t({\n en: 'Your dictionary has been created successfully',\n fr: 'Votre dictionnaire a été créé avec succès',\n es: 'Su diccionario ha sido creado con éxito',\n }),\n data: apiResult,\n });\n\n res.json(responseData);\n\n eventListener.sendDictionaryUpdate([\n {\n dictionary: mapDictionaryToAPI(newDictionary, project._id),\n status: 'ADDED',\n },\n ]);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n\nexport type PushDictionariesBody = {\n dictionaries: LocalDictionary[];\n};\ntype PushDictionariesResultData = {\n newDictionaries: string[];\n updatedDictionaries: string[];\n error: { dictionaryId: string; message: string }[];\n};\nexport type PushDictionariesResult = ResponseData<PushDictionariesResultData>;\n\n/**\n * Check each dictionaries, add the new ones and update the existing ones.\n * @param req - Express request object.\n * @param res - Express response object.\n * @returns Response containing the created dictionary.\n */\nexport const pushDictionaries = async (\n req: Request<any, any, PushDictionariesBody>,\n res: ResponseWithInformation<PushDictionariesResult>,\n _next: NextFunction\n): Promise<void> => {\n const { project, user, dictionaryRights } = res.locals;\n const dictionaryData = req.body.dictionaries;\n const dictionariesKeys = dictionaryData.map((dictionary) => dictionary.key);\n\n if (\n typeof dictionaryData === 'object' &&\n Array.isArray(dictionaryData) &&\n dictionaryData.length === 0\n ) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARIES_NOT_PROVIDED');\n return;\n } else if (!dictionaryData) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_DATA_NOT_FOUND');\n return;\n }\n\n if (!project) {\n ErrorHandler.handleGenericErrorResponse(res, 'PROJECT_NOT_DEFINED');\n return;\n }\n\n if (!user) {\n ErrorHandler.handleGenericErrorResponse(res, 'USER_NOT_DEFINED');\n return;\n }\n\n if (!dictionaryRights?.write) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_RIGHTS_NOT_WRITE');\n return;\n }\n\n if (!dictionaryRights?.admin) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_RIGHTS_NOT_ADMIN');\n return;\n }\n\n try {\n const { existingDictionariesKey, newDictionariesKey } =\n await dictionaryService.getExistingDictionaryKey(\n dictionariesKeys,\n project._id\n );\n\n const existingDictionaries = dictionaryData.filter((dictionary) =>\n existingDictionariesKey.includes(dictionary.key)\n );\n const newDictionaries = dictionaryData.filter((dictionary) =>\n newDictionariesKey.includes(dictionary.key)\n );\n\n const newDictionariesResult: DictionaryAPI[] = [];\n const updatedDictionariesResult: DictionaryAPI[] = [];\n const errorResult: PushDictionariesResultData['error'] = [];\n\n for (const dictionaryDataEl of newDictionaries) {\n const publishedVersion = dictionaryDataEl.version\n ? dictionaryDataEl.version === '-1'\n ? null\n : dictionaryDataEl.version\n : null;\n\n const dictionary: DictionaryData = {\n title: dictionaryDataEl.title,\n description: dictionaryDataEl.description,\n projectIds: [String(project._id)],\n creatorId: user._id,\n content: new Map([\n ['v1', { content: dictionaryDataEl.content ?? ({} as ContentNode) }],\n ]),\n filePath: {\n [String(project._id)]: dictionaryDataEl.filePath ?? '',\n },\n key: dictionaryDataEl.key,\n publishedVersion,\n };\n\n try {\n const newDictionary =\n await dictionaryService.createDictionary(dictionary);\n newDictionariesResult.push(\n mapDictionaryToAPI(newDictionary, project._id)\n );\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n }\n\n if (existingDictionariesKey.length >= 0) {\n const existingDictionariesDB =\n await dictionaryService.getDictionariesByKeys(\n existingDictionariesKey,\n project._id\n );\n\n for (const dictionaryDataEl of existingDictionaries) {\n const existingDictionaryDB = existingDictionariesDB.find(\n (dictionaryDB) => dictionaryDB.key === dictionaryDataEl.key\n )!;\n\n const existingContentArray = Object.values(\n existingDictionaryDB.content\n );\n\n const lastContent =\n existingContentArray[existingContentArray.length - 1].content;\n\n const isSameContent =\n JSON.stringify(lastContent) ===\n JSON.stringify(dictionaryDataEl.content);\n\n let newContent: VersionedContent = existingDictionaryDB.content;\n\n if (!isSameContent) {\n const newContentVersion =\n dictionaryService.incrementVersion(existingDictionaryDB);\n\n newContent = {\n ...newContent,\n [newContentVersion]: {\n content: dictionaryDataEl.content,\n },\n };\n }\n\n const publishedVersion = dictionaryDataEl.version\n ? dictionaryDataEl.version === '-1'\n ? null\n : dictionaryDataEl.version\n : null;\n\n const dictionary: DictionaryData = {\n ...existingDictionaryDB,\n ...dictionaryDataEl,\n content: newContent,\n projectIds: [String(project._id)],\n creatorId: user._id,\n filePath: {\n [String(project._id)]: dictionaryDataEl.filePath ?? '',\n },\n publishedVersion,\n key: dictionaryDataEl.key,\n };\n\n try {\n const updatedDictionary =\n await dictionaryService.updateDictionaryByKey(\n dictionaryDataEl.key,\n dictionary,\n project._id\n );\n updatedDictionariesResult.push(\n mapDictionaryToAPI(updatedDictionary, project._id)\n );\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n }\n }\n\n const result: PushDictionariesResultData = {\n newDictionaries: newDictionariesResult.map(\n (dictionary) => dictionary.key\n ),\n updatedDictionaries: updatedDictionariesResult.map(\n (dictionary) => dictionary.key\n ),\n error: errorResult,\n };\n\n const responseData = formatResponse<PushDictionariesResultData>({\n message: t({\n en: 'Dictionaries updated successfully',\n fr: 'Dictionnaires mis à jour avec succès',\n es: 'Diccionarios actualizados con éxito',\n }),\n description: t({\n en: 'Your dictionaries have been updated successfully',\n fr: 'Vos dictionnaires ont été mis à jour avec succès',\n es: 'Sus diccionarios han sido actualizados con éxito',\n }),\n data: result,\n });\n\n eventListener.sendDictionaryUpdate([\n ...newDictionariesResult.map(\n (dictionary) =>\n ({\n dictionary,\n status: 'ADDED',\n }) as eventListener.SendDictionaryUpdateArg\n ),\n ...updatedDictionariesResult.map(\n (dictionary) =>\n ({\n dictionary,\n status: 'UPDATED',\n }) as eventListener.SendDictionaryUpdateArg\n ),\n ]);\n\n res.json(responseData);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n\nexport type UpdateDictionaryParam = { dictionaryId: string };\nexport type UpdateDictionaryBody = Partial<Dictionary>;\nexport type UpdateDictionaryResult = ResponseData<DictionaryAPI>;\n\n/**\n * Updates an existing dictionary in the database.\n */\nexport const updateDictionary = async (\n req: Request<UpdateDictionaryParam, any, UpdateDictionaryBody>,\n res: ResponseWithInformation<UpdateDictionaryResult>,\n _next: NextFunction\n): Promise<void> => {\n const { dictionaryId } = req.params;\n const { project, dictionaryRights } = res.locals;\n const dictionaryData = req.body;\n\n if (!dictionaryData) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_DATA_NOT_FOUND');\n return;\n }\n\n if (!project) {\n ErrorHandler.handleGenericErrorResponse(res, 'PROJECT_NOT_DEFINED');\n return;\n }\n\n if (!dictionaryData.projectIds?.includes(String(project._id))) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_PROJECT_MISMATCH');\n return;\n }\n\n if (typeof dictionaryId === 'undefined') {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_ID_NOT_FOUND');\n return;\n }\n\n if (!dictionaryRights?.write) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_RIGHTS_NOT_WRITE');\n return;\n }\n\n try {\n const updatedDictionary = await dictionaryService.updateDictionaryById(\n dictionaryId,\n dictionaryData\n );\n\n const apiResult = mapDictionaryToAPI(updatedDictionary, project._id);\n\n const responseData = formatResponse<DictionaryAPI>({\n message: t({\n en: 'Dictionary updated successfully',\n fr: 'Dictionnaire mis à jour avec succès',\n es: 'Diccionario actualizado con éxito',\n }),\n description: t({\n en: 'Your dictionary has been updated successfully',\n fr: 'Votre dictionnaire a été mis à jour avec succès',\n es: 'Su diccionario ha sido actualizado con éxito',\n }),\n data: apiResult,\n });\n\n eventListener.sendDictionaryUpdate([\n {\n dictionary: apiResult,\n status: 'UPDATED',\n },\n ]);\n\n res.json(responseData);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n\nexport type DeleteDictionaryParam = { dictionaryId: string };\nexport type DeleteDictionaryResult = ResponseData<DictionaryAPI>;\n\n/**\n * Deletes a dictionary from the database by its ID.\n */\nexport const deleteDictionary = async (\n req: Request<DeleteDictionaryParam>,\n res: ResponseWithInformation<DeleteDictionaryResult>,\n _next: NextFunction\n): Promise<void> => {\n const { project, dictionaryRights } = res.locals;\n const { dictionaryId } = req.params as Partial<DeleteDictionaryParam>;\n\n if (!dictionaryId) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_ID_NOT_FOUND');\n return;\n }\n\n if (!project) {\n ErrorHandler.handleGenericErrorResponse(res, 'PROJECT_NOT_DEFINED');\n return;\n }\n\n if (!dictionaryRights?.admin) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_RIGHTS_NOT_ADMIN');\n return;\n }\n\n try {\n const dictionaryToDelete =\n await dictionaryService.getDictionaryById(dictionaryId);\n\n if (!dictionaryToDelete.projectIds.includes(project._id)) {\n ErrorHandler.handleGenericErrorResponse(\n res,\n 'DICTIONARY_PROJECT_MISMATCH'\n );\n return;\n }\n\n const deletedDictionary =\n await dictionaryService.deleteDictionaryById(dictionaryId);\n\n if (!deletedDictionary) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_NOT_FOUND', {\n dictionaryId,\n });\n return;\n }\n\n logger.info(`Dictionary deleted: ${String(deletedDictionary._id)}`);\n\n const apiResult = mapDictionaryToAPI(deletedDictionary, project._id);\n\n const responseData = formatResponse<DictionaryAPI>({\n message: t({\n en: 'Dictionary deleted successfully',\n fr: 'Dictionnaire supprimé avec succès',\n es: 'Diccionario eliminado con éxito',\n }),\n description: t({\n en: 'Your dictionary has been deleted successfully',\n fr: 'Votre dictionnaire a été supprimé avec succès',\n es: 'Su diccionario ha sido eliminado con éxito',\n }),\n data: apiResult,\n });\n\n res.json(responseData);\n\n eventListener.sendDictionaryUpdate([\n {\n dictionary: apiResult,\n status: 'DELETED',\n },\n ]);\n\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/controllers/dictionary.controller.ts"],"sourcesContent":["import type {\n ContentNode,\n Dictionary as LocalDictionary,\n} from '@intlayer/core';\nimport { logger } from '@logger';\nimport type { ResponseWithInformation } from '@middlewares/sessionAuth.middleware';\nimport * as dictionaryService from '@services/dictionary.service';\nimport { ensureMongoDocumentToObject } from '@utils/ensureMongoDocumentToObject';\nimport { type AppError, ErrorHandler } from '@utils/errors';\nimport {\n type DictionaryFiltersParams,\n getDictionaryFiltersAndPagination,\n} from '@utils/filtersAndPagination/getDictionaryFiltersAndPagination';\nimport type { FiltersAndPagination } from '@utils/filtersAndPagination/getFiltersAndPaginationFromBody';\nimport { mapDictionaryToAPI } from '@utils/mapper/dictionary';\nimport {\n formatPaginatedResponse,\n type ResponseData,\n type PaginatedResponse,\n formatResponse,\n} from '@utils/responseData';\nimport type { NextFunction, Request } from 'express';\nimport { t } from 'express-intlayer';\nimport * as eventListener from '@/controllers/event-listener';\nimport type {\n Dictionary,\n DictionaryAPI,\n DictionaryCreationData,\n DictionaryData,\n VersionedContent,\n} from '@/types/dictionary.types';\n\nexport type GetDictionariesParams =\n FiltersAndPagination<DictionaryFiltersParams>;\nexport type GetDictionariesResult = PaginatedResponse<DictionaryAPI>;\n\n/**\n * Retrieves a list of dictionaries based on filters and pagination.\n */\nexport const getDictionaries = async (\n req: Request<GetDictionariesParams>,\n res: ResponseWithInformation<GetDictionariesResult>,\n _next: NextFunction\n): Promise<void> => {\n const { user, project, dictionaryRights } = res.locals;\n const { filters, pageSize, skip, page, getNumberOfPages } =\n getDictionaryFiltersAndPagination(req);\n\n if (!project) {\n ErrorHandler.handleGenericErrorResponse(res, 'PROJECT_NOT_DEFINED');\n return;\n }\n if (!user) {\n ErrorHandler.handleGenericErrorResponse(res, 'USER_NOT_DEFINED');\n return;\n }\n if (!dictionaryRights?.read) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_RIGHTS_NOT_READ');\n return;\n }\n\n try {\n const dictionaries = await dictionaryService.findDictionaries(\n filters,\n skip,\n pageSize\n );\n const totalItems = await dictionaryService.countDictionaries(filters);\n\n const dictionariesAPI = dictionaries.map((el) =>\n mapDictionaryToAPI(el, project._id)\n );\n\n const responseData = formatPaginatedResponse<DictionaryAPI>({\n data: dictionariesAPI,\n page,\n pageSize,\n totalPages: getNumberOfPages(totalItems),\n totalItems,\n });\n\n res.json(responseData);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n\nexport type GetDictionariesKeysResult = ResponseData<string[]>;\n\n/**\n * Retrieves a list of dictionaries keys based on filters and pagination.\n */\nexport const getDictionariesKeys = async (\n _req: Request,\n res: ResponseWithInformation<GetDictionariesKeysResult>,\n _next: NextFunction\n) => {\n const { project, dictionaryRights } = res.locals;\n\n if (!project) {\n ErrorHandler.handleGenericErrorResponse(res, 'PROJECT_NOT_DEFINED');\n return;\n }\n if (!dictionaryRights?.read) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_RIGHTS_NOT_READ');\n return;\n }\n\n try {\n const dictionariesKeys = await dictionaryService.getDictionariesKeys(\n project._id\n );\n\n const responseData = formatResponse<string[]>({\n data: dictionariesKeys,\n });\n\n res.json(responseData);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n\nexport type GetDictionaryParams = { dictionaryKey: string };\nexport type GetDictionaryQuery = { version?: string };\nexport type GetDictionaryResult = ResponseData<DictionaryAPI>;\n\n/**\n * Retrieves a list of dictionaries based on filters and pagination.\n */\nexport const getDictionaryByKey = async (\n req: Request<GetDictionaryParams, any, any, GetDictionaryQuery>,\n res: ResponseWithInformation<GetDictionaryResult>,\n _next: NextFunction\n): Promise<void> => {\n const { project, user, dictionaryRights } = res.locals;\n const { dictionaryKey } = req.params;\n const version = req.query.version;\n\n if (!project) {\n ErrorHandler.handleGenericErrorResponse(res, 'PROJECT_NOT_DEFINED');\n return;\n }\n if (!user) {\n ErrorHandler.handleGenericErrorResponse(res, 'USER_NOT_DEFINED');\n return;\n }\n if (!dictionaryRights?.read) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_RIGHTS_NOT_READ');\n return;\n }\n\n try {\n const dictionary = await dictionaryService.getDictionaryByKey(\n dictionaryKey,\n project._id\n );\n\n if (!dictionary.projectIds.map(String).includes(String(project._id))) {\n ErrorHandler.handleGenericErrorResponse(\n res,\n 'DICTIONARY_PROJECT_MISMATCH'\n );\n return;\n }\n\n const apiResult = mapDictionaryToAPI(dictionary, project._id, version);\n\n const responseData = formatResponse<DictionaryAPI>({\n data: apiResult,\n });\n\n res.json(responseData);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n\nexport type AddDictionaryBody = { dictionary: DictionaryCreationData };\nexport type AddDictionaryResult = ResponseData<DictionaryAPI>;\n\n/**\n * Adds a new dictionary to the database.\n */\nexport const addDictionary = async (\n req: Request<any, any, AddDictionaryBody>,\n res: ResponseWithInformation<AddDictionaryResult>,\n _next: NextFunction\n): Promise<void> => {\n const { project, user, dictionaryRights } = res.locals;\n const dictionaryData = req.body.dictionary;\n\n if (!dictionaryData) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_DATA_NOT_FOUND');\n return;\n }\n\n if (!project) {\n ErrorHandler.handleGenericErrorResponse(res, 'PROJECT_NOT_DEFINED');\n return;\n }\n\n if (!user) {\n ErrorHandler.handleGenericErrorResponse(res, 'USER_NOT_DEFINED');\n return;\n }\n\n if (!dictionaryData.projectIds.includes(String(project._id))) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_PROJECT_MISMATCH');\n return;\n }\n\n if (!dictionaryRights?.admin) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_RIGHTS_NOT_ADMIN');\n return;\n }\n\n const dictionary: DictionaryData = {\n key: dictionaryData.key,\n title: dictionaryData.title,\n description: dictionaryData.description,\n content: new Map([\n ['v1', { content: dictionaryData.content ?? ({} as ContentNode) }],\n ]),\n creatorId: user._id,\n filePath: {\n [String(project._id)]: dictionaryData.filePath ?? '',\n },\n projectIds: dictionaryData.projectIds ?? [String(project._id)],\n };\n\n try {\n const newDictionary = await dictionaryService.createDictionary(dictionary);\n\n const apiResult = mapDictionaryToAPI(newDictionary, project._id);\n\n const responseData = formatResponse<DictionaryAPI>({\n message: t({\n en: 'Dictionary created successfully',\n fr: 'Dictionnaire créé avec succès',\n es: 'Diccionario creado con éxito',\n }),\n description: t({\n en: 'Your dictionary has been created successfully',\n fr: 'Votre dictionnaire a été créé avec succès',\n es: 'Su diccionario ha sido creado con éxito',\n }),\n data: apiResult,\n });\n\n res.json(responseData);\n\n eventListener.sendDictionaryUpdate([\n {\n dictionary: mapDictionaryToAPI(newDictionary, project._id),\n status: 'ADDED',\n },\n ]);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n\nexport type PushDictionariesBody = {\n dictionaries: LocalDictionary[];\n};\ntype PushDictionariesResultData = {\n newDictionaries: string[];\n updatedDictionaries: string[];\n error: { dictionaryId: string; message: string }[];\n};\nexport type PushDictionariesResult = ResponseData<PushDictionariesResultData>;\n\n/**\n * Check each dictionaries, add the new ones and update the existing ones.\n * @param req - Express request object.\n * @param res - Express response object.\n * @returns Response containing the created dictionary.\n */\nexport const pushDictionaries = async (\n req: Request<any, any, PushDictionariesBody>,\n res: ResponseWithInformation<PushDictionariesResult>,\n _next: NextFunction\n): Promise<void> => {\n const { project, user, dictionaryRights } = res.locals;\n const dictionaryData = req.body.dictionaries;\n const dictionariesKeys = dictionaryData.map((dictionary) => dictionary.key);\n\n if (\n typeof dictionaryData === 'object' &&\n Array.isArray(dictionaryData) &&\n dictionaryData.length === 0\n ) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARIES_NOT_PROVIDED');\n return;\n } else if (!dictionaryData) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_DATA_NOT_FOUND');\n return;\n }\n\n if (!project) {\n ErrorHandler.handleGenericErrorResponse(res, 'PROJECT_NOT_DEFINED');\n return;\n }\n\n if (!user) {\n ErrorHandler.handleGenericErrorResponse(res, 'USER_NOT_DEFINED');\n return;\n }\n\n if (!dictionaryRights?.write) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_RIGHTS_NOT_WRITE');\n return;\n }\n\n if (!dictionaryRights?.admin) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_RIGHTS_NOT_ADMIN');\n return;\n }\n\n try {\n const { existingDictionariesKey, newDictionariesKey } =\n await dictionaryService.getExistingDictionaryKey(\n dictionariesKeys,\n project._id\n );\n\n const existingDictionaries = dictionaryData.filter((dictionary) =>\n existingDictionariesKey.includes(dictionary.key)\n );\n const newDictionaries = dictionaryData.filter((dictionary) =>\n newDictionariesKey.includes(dictionary.key)\n );\n\n const newDictionariesResult: DictionaryAPI[] = [];\n const updatedDictionariesResult: DictionaryAPI[] = [];\n const errorResult: PushDictionariesResultData['error'] = [];\n\n for (const dictionaryDataEl of newDictionaries) {\n const dictionary: DictionaryData = {\n title: dictionaryDataEl.title,\n description: dictionaryDataEl.description,\n projectIds: [String(project._id)],\n creatorId: user._id,\n content: new Map([\n ['v1', { content: dictionaryDataEl.content ?? ({} as ContentNode) }],\n ]),\n filePath: {\n [String(project._id)]: dictionaryDataEl.filePath ?? '',\n },\n key: dictionaryDataEl.key,\n };\n\n try {\n const newDictionary =\n await dictionaryService.createDictionary(dictionary);\n newDictionariesResult.push(\n mapDictionaryToAPI(newDictionary, project._id)\n );\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n }\n\n if (existingDictionariesKey.length >= 0) {\n const existingDictionariesDB =\n await dictionaryService.getDictionariesByKeys(\n existingDictionariesKey,\n project._id\n );\n\n for (const dictionaryDataEl of existingDictionaries) {\n const existingDictionaryDB = existingDictionariesDB.find(\n (dictionaryDB) => dictionaryDB.key === dictionaryDataEl.key\n )!;\n\n const versionList = [...(existingDictionaryDB.content.keys() ?? [])];\n const lastVersion = versionList[versionList.length - 1];\n\n const lastContent =\n (existingDictionaryDB.content.get(lastVersion)\n ?.content as DictionaryAPI['content']) ?? null;\n\n const isSameContent =\n JSON.stringify(lastContent) ===\n JSON.stringify(dictionaryDataEl.content);\n\n let newContent: VersionedContent = existingDictionaryDB.content;\n\n if (!isSameContent) {\n const newContentVersion =\n dictionaryService.incrementVersion(existingDictionaryDB);\n\n newContent = {\n ...newContent,\n [newContentVersion]: {\n content: dictionaryDataEl.content,\n },\n };\n }\n\n const dictionary: DictionaryData = {\n ...ensureMongoDocumentToObject(existingDictionaryDB),\n ...dictionaryDataEl,\n content: newContent,\n projectIds: [String(project._id)],\n creatorId: user._id,\n filePath: {\n [String(project._id)]: dictionaryDataEl.filePath ?? '',\n },\n key: dictionaryDataEl.key,\n };\n\n try {\n const updatedDictionary =\n await dictionaryService.updateDictionaryByKey(\n dictionaryDataEl.key,\n dictionary,\n project._id\n );\n updatedDictionariesResult.push(\n mapDictionaryToAPI(updatedDictionary, project._id)\n );\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n }\n }\n\n const result: PushDictionariesResultData = {\n newDictionaries: newDictionariesResult.map(\n (dictionary) => dictionary.key\n ),\n updatedDictionaries: updatedDictionariesResult.map(\n (dictionary) => dictionary.key\n ),\n error: errorResult,\n };\n\n const responseData = formatResponse<PushDictionariesResultData>({\n message: t({\n en: 'Dictionaries updated successfully',\n fr: 'Dictionnaires mis à jour avec succès',\n es: 'Diccionarios actualizados con éxito',\n }),\n description: t({\n en: 'Your dictionaries have been updated successfully',\n fr: 'Vos dictionnaires ont été mis à jour avec succès',\n es: 'Sus diccionarios han sido actualizados con éxito',\n }),\n data: result,\n });\n\n eventListener.sendDictionaryUpdate([\n ...newDictionariesResult.map(\n (dictionary) =>\n ({\n dictionary,\n status: 'ADDED',\n }) as eventListener.SendDictionaryUpdateArg\n ),\n ...updatedDictionariesResult.map(\n (dictionary) =>\n ({\n dictionary,\n status: 'UPDATED',\n }) as eventListener.SendDictionaryUpdateArg\n ),\n ]);\n\n res.json(responseData);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n\nexport type UpdateDictionaryParam = { dictionaryId: string };\nexport type UpdateDictionaryBody = Partial<Dictionary>;\nexport type UpdateDictionaryResult = ResponseData<DictionaryAPI>;\n\n/**\n * Updates an existing dictionary in the database.\n */\nexport const updateDictionary = async (\n req: Request<UpdateDictionaryParam, any, UpdateDictionaryBody>,\n res: ResponseWithInformation<UpdateDictionaryResult>,\n _next: NextFunction\n): Promise<void> => {\n const { dictionaryId } = req.params;\n const { project, dictionaryRights } = res.locals;\n const dictionaryData = req.body;\n\n if (!dictionaryData) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_DATA_NOT_FOUND');\n return;\n }\n\n if (!project) {\n ErrorHandler.handleGenericErrorResponse(res, 'PROJECT_NOT_DEFINED');\n return;\n }\n\n if (!dictionaryData.projectIds?.includes(String(project._id))) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_PROJECT_MISMATCH');\n return;\n }\n\n if (typeof dictionaryId === 'undefined') {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_ID_NOT_FOUND');\n return;\n }\n\n if (!dictionaryRights?.write) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_RIGHTS_NOT_WRITE');\n return;\n }\n\n try {\n const updatedDictionary = await dictionaryService.updateDictionaryById(\n dictionaryId,\n dictionaryData\n );\n\n const apiResult = mapDictionaryToAPI(updatedDictionary, project._id);\n\n const responseData = formatResponse<DictionaryAPI>({\n message: t({\n en: 'Dictionary updated successfully',\n fr: 'Dictionnaire mis à jour avec succès',\n es: 'Diccionario actualizado con éxito',\n }),\n description: t({\n en: 'Your dictionary has been updated successfully',\n fr: 'Votre dictionnaire a été mis à jour avec succès',\n es: 'Su diccionario ha sido actualizado con éxito',\n }),\n data: apiResult,\n });\n\n eventListener.sendDictionaryUpdate([\n {\n dictionary: apiResult,\n status: 'UPDATED',\n },\n ]);\n\n res.json(responseData);\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n\nexport type DeleteDictionaryParam = { dictionaryId: string };\nexport type DeleteDictionaryResult = ResponseData<DictionaryAPI>;\n\n/**\n * Deletes a dictionary from the database by its ID.\n */\nexport const deleteDictionary = async (\n req: Request<DeleteDictionaryParam>,\n res: ResponseWithInformation<DeleteDictionaryResult>,\n _next: NextFunction\n): Promise<void> => {\n const { project, dictionaryRights } = res.locals;\n const { dictionaryId } = req.params as Partial<DeleteDictionaryParam>;\n\n if (!dictionaryId) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_ID_NOT_FOUND');\n return;\n }\n\n if (!project) {\n ErrorHandler.handleGenericErrorResponse(res, 'PROJECT_NOT_DEFINED');\n return;\n }\n\n if (!dictionaryRights?.admin) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_RIGHTS_NOT_ADMIN');\n return;\n }\n\n try {\n const dictionaryToDelete =\n await dictionaryService.getDictionaryById(dictionaryId);\n\n if (!dictionaryToDelete.projectIds.includes(project._id)) {\n ErrorHandler.handleGenericErrorResponse(\n res,\n 'DICTIONARY_PROJECT_MISMATCH'\n );\n return;\n }\n\n const deletedDictionary =\n await dictionaryService.deleteDictionaryById(dictionaryId);\n\n if (!deletedDictionary) {\n ErrorHandler.handleGenericErrorResponse(res, 'DICTIONARY_NOT_FOUND', {\n dictionaryId,\n });\n return;\n }\n\n logger.info(`Dictionary deleted: ${String(deletedDictionary._id)}`);\n\n const apiResult = mapDictionaryToAPI(deletedDictionary, project._id);\n\n const responseData = formatResponse<DictionaryAPI>({\n message: t({\n en: 'Dictionary deleted successfully',\n fr: 'Dictionnaire supprimé avec succès',\n es: 'Diccionario eliminado con éxito',\n }),\n description: t({\n en: 'Your dictionary has been deleted successfully',\n fr: 'Votre dictionnaire a été supprimé avec succès',\n es: 'Su diccionario ha sido eliminado con éxito',\n }),\n data: apiResult,\n });\n\n res.json(responseData);\n\n eventListener.sendDictionaryUpdate([\n {\n dictionary: apiResult,\n status: 'DELETED',\n },\n ]);\n\n return;\n } catch (error) {\n ErrorHandler.handleAppErrorResponse(res, error as AppError);\n return;\n }\n};\n"],"mappings":"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","names":[]}
|
|
@@ -42,7 +42,7 @@ const InviteUserEmailEN = ({
|
|
|
42
42
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Section, { className: "mt-[32px]", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
43
43
|
import_components.Img,
|
|
44
44
|
{
|
|
45
|
-
src: `https://intlayer.org/
|
|
45
|
+
src: `https://intlayer.org/favicon-32x32.png`,
|
|
46
46
|
width: "40",
|
|
47
47
|
height: "37",
|
|
48
48
|
alt: "Intlayer",
|
|
@@ -125,7 +125,7 @@ const InviteUserEmailFR = ({
|
|
|
125
125
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Section, { className: "mt-[32px]", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
126
126
|
import_components.Img,
|
|
127
127
|
{
|
|
128
|
-
src: `https://intlayer.org/
|
|
128
|
+
src: `https://intlayer.org/favicon-32x32.png`,
|
|
129
129
|
width: "40",
|
|
130
130
|
height: "37",
|
|
131
131
|
alt: "Intlayer",
|
|
@@ -209,7 +209,7 @@ const InviteUserEmailES = ({
|
|
|
209
209
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Section, { className: "mt-[32px]", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
210
210
|
import_components.Img,
|
|
211
211
|
{
|
|
212
|
-
src: `https://intlayer.org/
|
|
212
|
+
src: `https://intlayer.org/favicon-32x32.png`,
|
|
213
213
|
width: "40",
|
|
214
214
|
height: "37",
|
|
215
215
|
alt: "Intlayer",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/emails/InviteUserEmail.tsx"],"sourcesContent":["import {\n Body,\n Button,\n Container,\n Head,\n Heading,\n Hr,\n Html,\n Img,\n Link,\n Preview,\n Section,\n Text,\n Tailwind,\n} from '@react-email/components';\n\nexport type InviteUserEmailProps = {\n username: string;\n invitedByUsername: string;\n invitedByEmail: string;\n organizationName: string;\n inviteLink: string;\n inviteFromIp: string;\n inviteFromLocation: string;\n};\n\nexport const InviteUserEmailEN = ({\n username,\n invitedByUsername,\n invitedByEmail,\n organizationName,\n inviteLink,\n inviteFromIp,\n inviteFromLocation,\n}: InviteUserEmailProps) => {\n const previewText = `Join ${invitedByUsername} on Intlayer`;\n\n return (\n <Html>\n <Head />\n <Preview>{previewText}</Preview>\n <Tailwind>\n <Body className=\"m-auto px-2 font-sans\">\n <Container className=\"mx-auto my-[40px] max-w-[465px] rounded-xl border border-solid border-[#eaeaea] bg-white p-[20px]\">\n <Section className=\"mt-[32px]\">\n <Img\n src={`https://intlayer.org/assets/favicon-32x32.png`}\n width=\"40\"\n height=\"37\"\n alt=\"Intlayer\"\n className=\"mx-auto my-0\"\n />\n </Section>\n <Heading className=\"mx-0 my-[30px] p-0 text-center text-[24px] font-normal text-black\">\n Join <strong>{organizationName}</strong> on{' '}\n <strong>Intlayer</strong>\n </Heading>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Hello {username},\n </Text>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n <strong>{invitedByUsername}</strong> (\n <Link\n href={`mailto:${invitedByEmail}`}\n className=\"text-[#E879BA] no-underline\"\n >\n {invitedByEmail}\n </Link>\n ) has invited you to the <strong>{organizationName}</strong> team\n on <strong>Intlayer</strong>.\n </Text>\n\n <Section className=\"my-[32px] text-center\">\n <Button\n className=\"rounded-md bg-[#000000] px-5 py-3 text-center text-[12px] font-semibold text-white no-underline\"\n href={inviteLink}\n >\n Join the team\n </Button>\n </Section>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n or copy and paste this URL into your browser:{' '}\n <Link href={inviteLink} className=\"text-[#E879BA] no-underline\">\n {inviteLink}\n </Link>\n </Text>\n <Hr className=\"mx-0 my-[26px] w-full border border-solid border-[#eaeaea]\" />\n <Text className=\"text-[12px] leading-[24px] text-[#666666]\">\n This invitation was intended for{' '}\n <span className=\"text-black\">{username}</span>. This invite was\n sent from <span className=\"text-black\">{inviteFromIp}</span>{' '}\n {inviteFromLocation && (\n <>\n {' located in '}\n <span className=\"text-black\">{inviteFromLocation}</span>\n </>\n )}\n . If you were not expecting this invitation, you can ignore this\n email. If you are concerned about your account's safety, please\n reply to this email to get in touch with us.\n </Text>\n </Container>\n </Body>\n </Tailwind>\n </Html>\n );\n};\n\nexport const InviteUserEmailFR = ({\n username,\n invitedByUsername,\n invitedByEmail,\n organizationName,\n inviteLink,\n inviteFromIp,\n inviteFromLocation,\n}: InviteUserEmailProps) => {\n const previewText = `Rejoignez ${invitedByUsername} sur Intlayer`;\n\n return (\n <Html>\n <Head />\n <Preview>{previewText}</Preview>\n <Tailwind>\n <Body className=\"m-auto px-2 font-sans\">\n <Container className=\"mx-auto my-[40px] max-w-[465px] rounded-xl border border-solid border-[#eaeaea] bg-white p-[20px]\">\n <Section className=\"mt-[32px]\">\n <Img\n src={`https://intlayer.org/assets/favicon-32x32.png`}\n width=\"40\"\n height=\"37\"\n alt=\"Intlayer\"\n className=\"mx-auto my-0\"\n />\n </Section>\n <Heading className=\"mx-0 my-[30px] p-0 text-center text-[24px] font-normal text-black\">\n Rejoignez <strong>{organizationName}</strong> sur{' '}\n <strong>Intlayer</strong>\n </Heading>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Bonjour {username},\n </Text>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n <strong>{invitedByUsername}</strong> (\n <Link\n href={`mailto:${invitedByEmail}`}\n className=\"text-[#E879BA] no-underline\"\n >\n {invitedByEmail}\n </Link>\n ) vous a invité à rejoindre l'équipe de{' '}\n <strong>{organizationName}</strong> sur <strong>Intlayer</strong>.\n </Text>\n <Section className=\"my-[32px] text-center\">\n <Button\n className=\"rounded-md bg-[#000000] px-5 py-3 text-center text-[12px] font-semibold text-white no-underline\"\n href={inviteLink}\n >\n Rejoindre l'équipe\n </Button>\n </Section>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n ou copiez et collez cette URL dans votre navigateur :{' '}\n <Link href={inviteLink} className=\"text-[#E879BA] no-underline\">\n {inviteLink}\n </Link>\n </Text>\n <Hr className=\"mx-0 my-[26px] w-full border border-solid border-[#eaeaea]\" />\n <Text className=\"text-[12px] leading-[24px] text-[#666666]\">\n Cette invitation était destinée à{' '}\n <span className=\"text-black\">{username}</span>. Cette invitation a\n été envoyée depuis{' '}\n <span className=\"text-black\">{inviteFromIp}</span>\n {inviteFromLocation && (\n <>\n {', située à '}\n <span className=\"text-black\">{inviteFromLocation}</span>\n </>\n )}\n . Si vous n'attendiez pas cette invitation, vous pouvez ignorer\n cet email. Si vous êtes préoccupé par la sécurité de votre compte,\n veuillez répondre à cet email pour nous contacter.\n </Text>\n </Container>\n </Body>\n </Tailwind>\n </Html>\n );\n};\n\nexport const InviteUserEmailES = ({\n username,\n invitedByUsername,\n invitedByEmail,\n organizationName,\n inviteLink,\n inviteFromIp,\n inviteFromLocation,\n}: InviteUserEmailProps) => {\n const previewText = `Únete a ${invitedByUsername} en Intlayer`;\n\n return (\n <Html>\n <Head />\n <Preview>{previewText}</Preview>\n <Tailwind>\n <Body className=\"m-auto px-2 font-sans\">\n <Container className=\"mx-auto my-[40px] max-w-[465px] rounded-xl border border-solid border-[#eaeaea] bg-white p-[20px]\">\n <Section className=\"mt-[32px]\">\n <Img\n src={`https://intlayer.org/assets/favicon-32x32.png`}\n width=\"40\"\n height=\"37\"\n alt=\"Intlayer\"\n className=\"mx-auto my-0\"\n />\n </Section>\n <Heading className=\"mx-0 my-[30px] p-0 text-center text-[24px] font-normal text-black\">\n Únete a <strong>{organizationName}</strong> en{' '}\n <strong>Intlayer</strong>\n </Heading>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Hola {username},\n </Text>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n <strong>{invitedByUsername}</strong> (\n <Link\n href={`mailto:${invitedByEmail}`}\n className=\"text-[#E879BA] no-underline\"\n >\n {invitedByEmail}\n </Link>\n ) te ha invitado a unirte al equipo de{' '}\n <strong>{organizationName}</strong> en <strong>Intlayer</strong>.\n </Text>\n <Section className=\"my-[32px] text-center\">\n <Button\n className=\"rounded-md bg-[#000000] px-5 py-3 text-center text-[12px] font-semibold text-white no-underline\"\n href={inviteLink}\n >\n Unirse al equipo\n </Button>\n </Section>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n o copia y pega esta URL en tu navegador:{' '}\n <Link href={inviteLink} className=\"text-[#E879BA] no-underline\">\n {inviteLink}\n </Link>\n </Text>\n <Hr className=\"mx-0 my-[26px] w-full border border-solid border-[#eaeaea]\" />\n <Text className=\"text-[12px] leading-[24px] text-[#666666]\">\n Esta invitación estaba destinada para{' '}\n <span className=\"text-black\">{username}</span>. Esta invitación\n fue enviada desde{' '}\n <span className=\"text-black\">{inviteFromIp}</span>\n {inviteFromLocation && (\n <>\n {', ubicada en '}\n <span className=\"text-black\">{inviteFromLocation}</span>\n </>\n )}\n . Si no esperabas esta invitación, puedes ignorar este correo. Si\n estás preocupado por la seguridad de tu cuenta, por favor responde\n a este correo para contactarte con nosotros.\n </Text>\n </Container>\n </Body>\n </Tailwind>\n </Html>\n );\n};\n\nconst PreviewProps: InviteUserEmailProps = {\n username: 'alanturing',\n invitedByUsername: 'Alan',\n invitedByEmail: 'alan.turing@example.com',\n organizationName: 'Enigma',\n inviteLink: 'https://intlayer.org/teams/invite/foo',\n inviteFromIp: '204.13.x.x',\n inviteFromLocation: 'São Paulo, Brazil',\n};\n\nInviteUserEmailEN.PreviewProps = PreviewProps;\nInviteUserEmailFR.PreviewProps = PreviewProps;\nInviteUserEmailES.PreviewProps = PreviewProps;\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/emails/InviteUserEmail.tsx"],"sourcesContent":["import {\n Body,\n Button,\n Container,\n Head,\n Heading,\n Hr,\n Html,\n Img,\n Link,\n Preview,\n Section,\n Text,\n Tailwind,\n} from '@react-email/components';\n\nexport type InviteUserEmailProps = {\n username: string;\n invitedByUsername: string;\n invitedByEmail: string;\n organizationName: string;\n inviteLink: string;\n inviteFromIp: string;\n inviteFromLocation: string;\n};\n\nexport const InviteUserEmailEN = ({\n username,\n invitedByUsername,\n invitedByEmail,\n organizationName,\n inviteLink,\n inviteFromIp,\n inviteFromLocation,\n}: InviteUserEmailProps) => {\n const previewText = `Join ${invitedByUsername} on Intlayer`;\n\n return (\n <Html>\n <Head />\n <Preview>{previewText}</Preview>\n <Tailwind>\n <Body className=\"m-auto px-2 font-sans\">\n <Container className=\"mx-auto my-[40px] max-w-[465px] rounded-xl border border-solid border-[#eaeaea] bg-white p-[20px]\">\n <Section className=\"mt-[32px]\">\n <Img\n src={`https://intlayer.org/favicon-32x32.png`}\n width=\"40\"\n height=\"37\"\n alt=\"Intlayer\"\n className=\"mx-auto my-0\"\n />\n </Section>\n <Heading className=\"mx-0 my-[30px] p-0 text-center text-[24px] font-normal text-black\">\n Join <strong>{organizationName}</strong> on{' '}\n <strong>Intlayer</strong>\n </Heading>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Hello {username},\n </Text>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n <strong>{invitedByUsername}</strong> (\n <Link\n href={`mailto:${invitedByEmail}`}\n className=\"text-[#E879BA] no-underline\"\n >\n {invitedByEmail}\n </Link>\n ) has invited you to the <strong>{organizationName}</strong> team\n on <strong>Intlayer</strong>.\n </Text>\n\n <Section className=\"my-[32px] text-center\">\n <Button\n className=\"rounded-md bg-[#000000] px-5 py-3 text-center text-[12px] font-semibold text-white no-underline\"\n href={inviteLink}\n >\n Join the team\n </Button>\n </Section>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n or copy and paste this URL into your browser:{' '}\n <Link href={inviteLink} className=\"text-[#E879BA] no-underline\">\n {inviteLink}\n </Link>\n </Text>\n <Hr className=\"mx-0 my-[26px] w-full border border-solid border-[#eaeaea]\" />\n <Text className=\"text-[12px] leading-[24px] text-[#666666]\">\n This invitation was intended for{' '}\n <span className=\"text-black\">{username}</span>. This invite was\n sent from <span className=\"text-black\">{inviteFromIp}</span>{' '}\n {inviteFromLocation && (\n <>\n {' located in '}\n <span className=\"text-black\">{inviteFromLocation}</span>\n </>\n )}\n . If you were not expecting this invitation, you can ignore this\n email. If you are concerned about your account's safety, please\n reply to this email to get in touch with us.\n </Text>\n </Container>\n </Body>\n </Tailwind>\n </Html>\n );\n};\n\nexport const InviteUserEmailFR = ({\n username,\n invitedByUsername,\n invitedByEmail,\n organizationName,\n inviteLink,\n inviteFromIp,\n inviteFromLocation,\n}: InviteUserEmailProps) => {\n const previewText = `Rejoignez ${invitedByUsername} sur Intlayer`;\n\n return (\n <Html>\n <Head />\n <Preview>{previewText}</Preview>\n <Tailwind>\n <Body className=\"m-auto px-2 font-sans\">\n <Container className=\"mx-auto my-[40px] max-w-[465px] rounded-xl border border-solid border-[#eaeaea] bg-white p-[20px]\">\n <Section className=\"mt-[32px]\">\n <Img\n src={`https://intlayer.org/favicon-32x32.png`}\n width=\"40\"\n height=\"37\"\n alt=\"Intlayer\"\n className=\"mx-auto my-0\"\n />\n </Section>\n <Heading className=\"mx-0 my-[30px] p-0 text-center text-[24px] font-normal text-black\">\n Rejoignez <strong>{organizationName}</strong> sur{' '}\n <strong>Intlayer</strong>\n </Heading>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Bonjour {username},\n </Text>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n <strong>{invitedByUsername}</strong> (\n <Link\n href={`mailto:${invitedByEmail}`}\n className=\"text-[#E879BA] no-underline\"\n >\n {invitedByEmail}\n </Link>\n ) vous a invité à rejoindre l'équipe de{' '}\n <strong>{organizationName}</strong> sur <strong>Intlayer</strong>.\n </Text>\n <Section className=\"my-[32px] text-center\">\n <Button\n className=\"rounded-md bg-[#000000] px-5 py-3 text-center text-[12px] font-semibold text-white no-underline\"\n href={inviteLink}\n >\n Rejoindre l'équipe\n </Button>\n </Section>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n ou copiez et collez cette URL dans votre navigateur :{' '}\n <Link href={inviteLink} className=\"text-[#E879BA] no-underline\">\n {inviteLink}\n </Link>\n </Text>\n <Hr className=\"mx-0 my-[26px] w-full border border-solid border-[#eaeaea]\" />\n <Text className=\"text-[12px] leading-[24px] text-[#666666]\">\n Cette invitation était destinée à{' '}\n <span className=\"text-black\">{username}</span>. Cette invitation a\n été envoyée depuis{' '}\n <span className=\"text-black\">{inviteFromIp}</span>\n {inviteFromLocation && (\n <>\n {', située à '}\n <span className=\"text-black\">{inviteFromLocation}</span>\n </>\n )}\n . Si vous n'attendiez pas cette invitation, vous pouvez ignorer\n cet email. Si vous êtes préoccupé par la sécurité de votre compte,\n veuillez répondre à cet email pour nous contacter.\n </Text>\n </Container>\n </Body>\n </Tailwind>\n </Html>\n );\n};\n\nexport const InviteUserEmailES = ({\n username,\n invitedByUsername,\n invitedByEmail,\n organizationName,\n inviteLink,\n inviteFromIp,\n inviteFromLocation,\n}: InviteUserEmailProps) => {\n const previewText = `Únete a ${invitedByUsername} en Intlayer`;\n\n return (\n <Html>\n <Head />\n <Preview>{previewText}</Preview>\n <Tailwind>\n <Body className=\"m-auto px-2 font-sans\">\n <Container className=\"mx-auto my-[40px] max-w-[465px] rounded-xl border border-solid border-[#eaeaea] bg-white p-[20px]\">\n <Section className=\"mt-[32px]\">\n <Img\n src={`https://intlayer.org/favicon-32x32.png`}\n width=\"40\"\n height=\"37\"\n alt=\"Intlayer\"\n className=\"mx-auto my-0\"\n />\n </Section>\n <Heading className=\"mx-0 my-[30px] p-0 text-center text-[24px] font-normal text-black\">\n Únete a <strong>{organizationName}</strong> en{' '}\n <strong>Intlayer</strong>\n </Heading>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Hola {username},\n </Text>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n <strong>{invitedByUsername}</strong> (\n <Link\n href={`mailto:${invitedByEmail}`}\n className=\"text-[#E879BA] no-underline\"\n >\n {invitedByEmail}\n </Link>\n ) te ha invitado a unirte al equipo de{' '}\n <strong>{organizationName}</strong> en <strong>Intlayer</strong>.\n </Text>\n <Section className=\"my-[32px] text-center\">\n <Button\n className=\"rounded-md bg-[#000000] px-5 py-3 text-center text-[12px] font-semibold text-white no-underline\"\n href={inviteLink}\n >\n Unirse al equipo\n </Button>\n </Section>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n o copia y pega esta URL en tu navegador:{' '}\n <Link href={inviteLink} className=\"text-[#E879BA] no-underline\">\n {inviteLink}\n </Link>\n </Text>\n <Hr className=\"mx-0 my-[26px] w-full border border-solid border-[#eaeaea]\" />\n <Text className=\"text-[12px] leading-[24px] text-[#666666]\">\n Esta invitación estaba destinada para{' '}\n <span className=\"text-black\">{username}</span>. Esta invitación\n fue enviada desde{' '}\n <span className=\"text-black\">{inviteFromIp}</span>\n {inviteFromLocation && (\n <>\n {', ubicada en '}\n <span className=\"text-black\">{inviteFromLocation}</span>\n </>\n )}\n . Si no esperabas esta invitación, puedes ignorar este correo. Si\n estás preocupado por la seguridad de tu cuenta, por favor responde\n a este correo para contactarte con nosotros.\n </Text>\n </Container>\n </Body>\n </Tailwind>\n </Html>\n );\n};\n\nconst PreviewProps: InviteUserEmailProps = {\n username: 'alanturing',\n invitedByUsername: 'Alan',\n invitedByEmail: 'alan.turing@example.com',\n organizationName: 'Enigma',\n inviteLink: 'https://intlayer.org/teams/invite/foo',\n inviteFromIp: '204.13.x.x',\n inviteFromLocation: 'São Paulo, Brazil',\n};\n\nInviteUserEmailEN.PreviewProps = PreviewProps;\nInviteUserEmailFR.PreviewProps = PreviewProps;\nInviteUserEmailES.PreviewProps = PreviewProps;\n"],"mappings":"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","names":[]}
|
|
@@ -36,7 +36,7 @@ const PasswordChangeConfirmationEmailEN = ({
|
|
|
36
36
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Section, { className: "mt-[32px]", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
37
37
|
import_components.Img,
|
|
38
38
|
{
|
|
39
|
-
src: `https://intlayer.org/
|
|
39
|
+
src: `https://intlayer.org/favicon-32x32.png`,
|
|
40
40
|
width: "40",
|
|
41
41
|
height: "37",
|
|
42
42
|
alt: "Intlayer",
|
|
@@ -72,7 +72,7 @@ const PasswordChangeConfirmationEmailFR = ({
|
|
|
72
72
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Section, { className: "mt-[32px]", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
73
73
|
import_components.Img,
|
|
74
74
|
{
|
|
75
|
-
src: `https://intlayer.org/
|
|
75
|
+
src: `https://intlayer.org/favicon-32x32.png`,
|
|
76
76
|
width: "40",
|
|
77
77
|
height: "37",
|
|
78
78
|
alt: "Intlayer",
|
|
@@ -108,7 +108,7 @@ const PasswordChangeConfirmationEmailES = ({
|
|
|
108
108
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Section, { className: "mt-[32px]", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
109
109
|
import_components.Img,
|
|
110
110
|
{
|
|
111
|
-
src: `https://intlayer.org/
|
|
111
|
+
src: `https://intlayer.org/favicon-32x32.png`,
|
|
112
112
|
width: "40",
|
|
113
113
|
height: "37",
|
|
114
114
|
alt: "Intlayer",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/emails/PasswordChangeConfirmation.tsx"],"sourcesContent":["import {\n Body,\n Container,\n Head,\n Heading,\n Hr,\n Html,\n Img,\n Preview,\n Section,\n Text,\n Tailwind,\n} from '@react-email/components';\n\nexport type PasswordChangeConfirmationEmailProps = {\n username: string;\n};\n\nexport const PasswordChangeConfirmationEmailEN = ({\n username,\n}: PasswordChangeConfirmationEmailProps) => {\n const previewText = `Your Intlayer password has been changed`;\n\n return (\n <Html>\n <Head />\n <Preview>{previewText}</Preview>\n <Tailwind>\n <Body className=\"m-auto px-2 font-sans\">\n <Container className=\"mx-auto my-[40px] max-w-[465px] rounded-xl border border-solid border-[#eaeaea] bg-white p-[20px]\">\n <Section className=\"mt-[32px]\">\n <Img\n src={`https://intlayer.org/
|
|
1
|
+
{"version":3,"sources":["../../../src/emails/PasswordChangeConfirmation.tsx"],"sourcesContent":["import {\n Body,\n Container,\n Head,\n Heading,\n Hr,\n Html,\n Img,\n Preview,\n Section,\n Text,\n Tailwind,\n} from '@react-email/components';\n\nexport type PasswordChangeConfirmationEmailProps = {\n username: string;\n};\n\nexport const PasswordChangeConfirmationEmailEN = ({\n username,\n}: PasswordChangeConfirmationEmailProps) => {\n const previewText = `Your Intlayer password has been changed`;\n\n return (\n <Html>\n <Head />\n <Preview>{previewText}</Preview>\n <Tailwind>\n <Body className=\"m-auto px-2 font-sans\">\n <Container className=\"mx-auto my-[40px] max-w-[465px] rounded-xl border border-solid border-[#eaeaea] bg-white p-[20px]\">\n <Section className=\"mt-[32px]\">\n <Img\n src={`https://intlayer.org/favicon-32x32.png`}\n width=\"40\"\n height=\"37\"\n alt=\"Intlayer\"\n className=\"mx-auto my-0\"\n />\n </Section>\n <Heading className=\"mx-0 my-[30px] p-0 text-center text-[24px] font-normal text-black\">\n Your password has been changed\n </Heading>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Hello {username},\n </Text>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n This email is to confirm that your password for your{' '}\n <strong>Intlayer</strong> account has been successfully changed.\n </Text>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n If you did not make this change or believe an unauthorized person\n has accessed your account, please contact us immediately by\n replying to this email.\n </Text>\n <Hr className=\"mx-0 my-[26px] w-full border border-solid border-[#eaeaea]\" />\n <Text className=\"text-[12px] leading-[24px] text-[#666666]\">\n If you have any questions or need further assistance, feel free to\n reach out to us. We're here to help!\n </Text>\n </Container>\n </Body>\n </Tailwind>\n </Html>\n );\n};\n\nexport const PasswordChangeConfirmationEmailFR = ({\n username,\n}: PasswordChangeConfirmationEmailProps) => {\n const previewText = `Votre mot de passe Intlayer a été modifié`;\n\n return (\n <Html>\n <Head />\n <Preview>{previewText}</Preview>\n <Tailwind>\n <Body className=\"m-auto px-2 font-sans\">\n <Container className=\"mx-auto my-[40px] max-w-[465px] rounded-xl border border-solid border-[#eaeaea] bg-white p-[20px]\">\n <Section className=\"mt-[32px]\">\n <Img\n src={`https://intlayer.org/favicon-32x32.png`}\n width=\"40\"\n height=\"37\"\n alt=\"Intlayer\"\n className=\"mx-auto my-0\"\n />\n </Section>\n <Heading className=\"mx-0 my-[30px] p-0 text-center text-[24px] font-normal text-black\">\n Votre mot de passe a été modifié\n </Heading>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Bonjour {username},\n </Text>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Cet email confirme que votre mot de passe pour votre compte{' '}\n <strong>Intlayer</strong> a été changé avec succès.\n </Text>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Si vous n'avez pas effectué ce changement ou si vous pensez qu'une\n personne non autorisée a accédé à votre compte, veuillez nous\n contacter immédiatement en répondant à cet email.\n </Text>\n <Hr className=\"mx-0 my-[26px] w-full border border-solid border-[#eaeaea]\" />\n <Text className=\"text-[12px] leading-[24px] text-[#666666]\">\n Si vous avez des questions ou avez besoin d'assistance\n supplémentaire, n'hésitez pas à nous contacter. Nous sommes là\n pour vous aider !\n </Text>\n </Container>\n </Body>\n </Tailwind>\n </Html>\n );\n};\n\nexport const PasswordChangeConfirmationEmailES = ({\n username,\n}: PasswordChangeConfirmationEmailProps) => {\n const previewText = `Tu contraseña de Intlayer ha sido cambiada`;\n\n return (\n <Html>\n <Head />\n <Preview>{previewText}</Preview>\n <Tailwind>\n <Body className=\"m-auto px-2 font-sans\">\n <Container className=\"mx-auto my-[40px] max-w-[465px] rounded-xl border border-solid border-[#eaeaea] bg-white p-[20px]\">\n <Section className=\"mt-[32px]\">\n <Img\n src={`https://intlayer.org/favicon-32x32.png`}\n width=\"40\"\n height=\"37\"\n alt=\"Intlayer\"\n className=\"mx-auto my-0\"\n />\n </Section>\n <Heading className=\"mx-0 my-[30px] p-0 text-center text-[24px] font-normal text-black\">\n Tu contraseña ha sido cambiada\n </Heading>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Hola {username},\n </Text>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Este correo es para confirmar que la contraseña de tu cuenta en{' '}\n <strong>Intlayer</strong> ha sido cambiada exitosamente.\n </Text>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Si no realizaste este cambio o crees que una persona no autorizada\n ha accedido a tu cuenta, por favor contáctanos inmediatamente\n respondiendo a este correo electrónico.\n </Text>\n <Hr className=\"mx-0 my-[26px] w-full border border-solid border-[#eaeaea]\" />\n <Text className=\"text-[12px] leading-[24px] text-[#666666]\">\n Si tienes alguna pregunta o necesitas asistencia adicional, no\n dudes en ponerte en contacto con nosotros. ¡Estamos aquí para\n ayudarte!\n </Text>\n </Container>\n </Body>\n </Tailwind>\n </Html>\n );\n};\n\nconst PreviewProps: PasswordChangeConfirmationEmailProps = {\n username: 'alanturing',\n};\n\nPasswordChangeConfirmationEmailEN.PreviewProps = PreviewProps;\nPasswordChangeConfirmationEmailFR.PreviewProps = PreviewProps;\nPasswordChangeConfirmationEmailES.PreviewProps = PreviewProps;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBM;AAzBN,wBAYO;AAMA,MAAM,oCAAoC,CAAC;AAAA,EAChD;AACF,MAA4C;AAC1C,QAAM,cAAc;AAEpB,SACE,6CAAC,0BACC;AAAA,gDAAC,0BAAK;AAAA,IACN,4CAAC,6BAAS,uBAAY;AAAA,IACtB,4CAAC,8BACC,sDAAC,0BAAK,WAAU,yBACd,uDAAC,+BAAU,WAAU,qGACnB;AAAA,kDAAC,6BAAQ,WAAU,aACjB;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UACL,OAAM;AAAA,UACN,QAAO;AAAA,UACP,KAAI;AAAA,UACJ,WAAU;AAAA;AAAA,MACZ,GACF;AAAA,MACA,4CAAC,6BAAQ,WAAU,qEAAoE,4CAEvF;AAAA,MACA,6CAAC,0BAAK,WAAU,yCAAwC;AAAA;AAAA,QAC/C;AAAA,QAAS;AAAA,SAClB;AAAA,MACA,6CAAC,0BAAK,WAAU,yCAAwC;AAAA;AAAA,QACD;AAAA,QACrD,4CAAC,YAAO,sBAAQ;AAAA,QAAS;AAAA,SAC3B;AAAA,MACA,4CAAC,0BAAK,WAAU,yCAAwC,mKAIxD;AAAA,MACA,4CAAC,wBAAG,WAAU,8DAA6D;AAAA,MAC3E,4CAAC,0BAAK,WAAU,6CAA4C,qHAG5D;AAAA,OACF,GACF,GACF;AAAA,KACF;AAEJ;AAEO,MAAM,oCAAoC,CAAC;AAAA,EAChD;AACF,MAA4C;AAC1C,QAAM,cAAc;AAEpB,SACE,6CAAC,0BACC;AAAA,gDAAC,0BAAK;AAAA,IACN,4CAAC,6BAAS,uBAAY;AAAA,IACtB,4CAAC,8BACC,sDAAC,0BAAK,WAAU,yBACd,uDAAC,+BAAU,WAAU,qGACnB;AAAA,kDAAC,6BAAQ,WAAU,aACjB;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UACL,OAAM;AAAA,UACN,QAAO;AAAA,UACP,KAAI;AAAA,UACJ,WAAU;AAAA;AAAA,MACZ,GACF;AAAA,MACA,4CAAC,6BAAQ,WAAU,qEAAoE,uDAEvF;AAAA,MACA,6CAAC,0BAAK,WAAU,yCAAwC;AAAA;AAAA,QAC7C;AAAA,QAAS;AAAA,SACpB;AAAA,MACA,6CAAC,0BAAK,WAAU,yCAAwC;AAAA;AAAA,QACM;AAAA,QAC5D,4CAAC,YAAO,sBAAQ;AAAA,QAAS;AAAA,SAC3B;AAAA,MACA,4CAAC,0BAAK,WAAU,yCAAwC,wNAIxD;AAAA,MACA,4CAAC,wBAAG,WAAU,8DAA6D;AAAA,MAC3E,4CAAC,0BAAK,WAAU,6CAA4C,iKAI5D;AAAA,OACF,GACF,GACF;AAAA,KACF;AAEJ;AAEO,MAAM,oCAAoC,CAAC;AAAA,EAChD;AACF,MAA4C;AAC1C,QAAM,cAAc;AAEpB,SACE,6CAAC,0BACC;AAAA,gDAAC,0BAAK;AAAA,IACN,4CAAC,6BAAS,uBAAY;AAAA,IACtB,4CAAC,8BACC,sDAAC,0BAAK,WAAU,yBACd,uDAAC,+BAAU,WAAU,qGACnB;AAAA,kDAAC,6BAAQ,WAAU,aACjB;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UACL,OAAM;AAAA,UACN,QAAO;AAAA,UACP,KAAI;AAAA,UACJ,WAAU;AAAA;AAAA,MACZ,GACF;AAAA,MACA,4CAAC,6BAAQ,WAAU,qEAAoE,+CAEvF;AAAA,MACA,6CAAC,0BAAK,WAAU,yCAAwC;AAAA;AAAA,QAChD;AAAA,QAAS;AAAA,SACjB;AAAA,MACA,6CAAC,0BAAK,WAAU,yCAAwC;AAAA;AAAA,QACU;AAAA,QAChE,4CAAC,YAAO,sBAAQ;AAAA,QAAS;AAAA,SAC3B;AAAA,MACA,4CAAC,0BAAK,WAAU,yCAAwC,4LAIxD;AAAA,MACA,4CAAC,wBAAG,WAAU,8DAA6D;AAAA,MAC3E,4CAAC,0BAAK,WAAU,6CAA4C,0JAI5D;AAAA,OACF,GACF,GACF;AAAA,KACF;AAEJ;AAEA,MAAM,eAAqD;AAAA,EACzD,UAAU;AACZ;AAEA,kCAAkC,eAAe;AACjD,kCAAkC,eAAe;AACjD,kCAAkC,eAAe;","names":[]}
|
|
@@ -37,7 +37,7 @@ const ResetPasswordEmailEN = ({
|
|
|
37
37
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Section, { className: "mt-[32px]", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
38
38
|
import_components.Img,
|
|
39
39
|
{
|
|
40
|
-
src: `https://intlayer.org/
|
|
40
|
+
src: `https://intlayer.org/favicon-32x32.png`,
|
|
41
41
|
width: "40",
|
|
42
42
|
height: "37",
|
|
43
43
|
alt: "Intlayer",
|
|
@@ -94,7 +94,7 @@ const ResetPasswordEmailFR = ({
|
|
|
94
94
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Section, { className: "mt-[32px]", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
95
95
|
import_components.Img,
|
|
96
96
|
{
|
|
97
|
-
src: `https://intlayer.org/
|
|
97
|
+
src: `https://intlayer.org/favicon-32x32.png`,
|
|
98
98
|
width: "40",
|
|
99
99
|
height: "37",
|
|
100
100
|
alt: "Intlayer",
|
|
@@ -150,7 +150,7 @@ const ResetPasswordEmailES = ({
|
|
|
150
150
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Section, { className: "mt-[32px]", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
151
151
|
import_components.Img,
|
|
152
152
|
{
|
|
153
|
-
src: `https://intlayer.org/
|
|
153
|
+
src: `https://intlayer.org/favicon-32x32.png`,
|
|
154
154
|
width: "40",
|
|
155
155
|
height: "37",
|
|
156
156
|
alt: "Intlayer",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/emails/ResetUserPassword.tsx"],"sourcesContent":["import {\n Body,\n Button,\n Container,\n Head,\n Heading,\n Hr,\n Html,\n Img,\n Link,\n Preview,\n Section,\n Text,\n Tailwind,\n} from '@react-email/components';\n\nexport type ResetPasswordEmailProps = {\n username: string;\n resetLink: string;\n};\n\nexport const ResetPasswordEmailEN = ({\n username,\n resetLink,\n}: ResetPasswordEmailProps) => {\n const previewText = `Reset your password for Intlayer`;\n\n return (\n <Html>\n <Head />\n <Preview>{previewText}</Preview>\n <Tailwind>\n <Body className=\"m-auto px-2 font-sans\">\n <Container className=\"mx-auto my-[40px] max-w-[465px] rounded-xl border border-solid border-[#eaeaea] bg-white p-[20px]\">\n <Section className=\"mt-[32px]\">\n <Img\n src={`https://intlayer.org/assets/favicon-32x32.png`}\n width=\"40\"\n height=\"37\"\n alt=\"Intlayer\"\n className=\"mx-auto my-0\"\n />\n </Section>\n <Heading className=\"mx-0 my-[30px] p-0 text-center text-[24px] font-normal text-black\">\n Reset your password for <strong>Intlayer</strong>\n </Heading>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Hello {username},\n </Text>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n We received a request to reset your password for your{' '}\n <strong>Intlayer</strong> account.\n </Text>\n\n <Section className=\"my-[32px] text-center\">\n <Button\n className=\"rounded-md bg-[#000000] px-5 py-3 text-center text-[12px] font-semibold text-white no-underline\"\n href={resetLink}\n >\n Reset Password\n </Button>\n </Section>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n or copy and paste this URL into your browser:{' '}\n <Link href={resetLink} className=\"text-[#E879BA] no-underline\">\n {resetLink}\n </Link>\n </Text>\n <Hr className=\"mx-0 my-[26px] w-full border border-solid border-[#eaeaea]\" />\n <Text className=\"text-[12px] leading-[24px] text-[#666666]\">\n This password reset request was intended for{' '}\n <span className=\"text-black\">{username}</span>. If you did not\n request a password reset, you can ignore this email. If you are\n concerned about your account's safety, please reply to this email\n to get in touch with us.\n </Text>\n </Container>\n </Body>\n </Tailwind>\n </Html>\n );\n};\n\nexport const ResetPasswordEmailFR = ({\n username,\n resetLink,\n}: ResetPasswordEmailProps) => {\n const previewText = `Réinitialisez votre mot de passe pour Intlayer`;\n\n return (\n <Html>\n <Head />\n <Preview>{previewText}</Preview>\n <Tailwind>\n <Body className=\"m-auto px-2 font-sans\">\n <Container className=\"mx-auto my-[40px] max-w-[465px] rounded-xl border border-solid border-[#eaeaea] bg-white p-[20px]\">\n <Section className=\"mt-[32px]\">\n <Img\n src={`https://intlayer.org/assets/favicon-32x32.png`}\n width=\"40\"\n height=\"37\"\n alt=\"Intlayer\"\n className=\"mx-auto my-0\"\n />\n </Section>\n <Heading className=\"mx-0 my-[30px] p-0 text-center text-[24px] font-normal text-black\">\n Réinitialisez votre mot de passe pour <strong>Intlayer</strong>\n </Heading>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Bonjour {username},\n </Text>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Nous avons reçu une demande de réinitialisation de votre mot de\n passe pour votre compte <strong>Intlayer</strong>.\n </Text>\n <Section className=\"my-[32px] text-center\">\n <Button\n className=\"rounded-md bg-[#000000] px-5 py-3 text-center text-[12px] font-semibold text-white no-underline\"\n href={resetLink}\n >\n Réinitialiser le mot de passe\n </Button>\n </Section>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n ou copiez et collez cette URL dans votre navigateur :{' '}\n <Link href={resetLink} className=\"text-[#E879BA] no-underline\">\n {resetLink}\n </Link>\n </Text>\n <Hr className=\"mx-0 my-[26px] w-full border border-solid border-[#eaeaea]\" />\n <Text className=\"text-[12px] leading-[24px] text-[#666666]\">\n Cette demande de réinitialisation de mot de passe était destinée à{' '}\n <span className=\"text-black\">{username}</span>. Si vous n'avez pas\n demandé une réinitialisation de mot de passe, vous pouvez ignorer\n cet email. Si vous êtes préoccupé par la sécurité de votre compte,\n veuillez répondre à cet email pour nous contacter.\n </Text>\n </Container>\n </Body>\n </Tailwind>\n </Html>\n );\n};\n\nexport const ResetPasswordEmailES = ({\n username,\n resetLink,\n}: ResetPasswordEmailProps) => {\n const previewText = `Restablece tu contraseña para Intlayer`;\n\n return (\n <Html>\n <Head />\n <Preview>{previewText}</Preview>\n <Tailwind>\n <Body className=\"m-auto px-2 font-sans\">\n <Container className=\"mx-auto my-[40px] max-w-[465px] rounded-xl border border-solid border-[#eaeaea] bg-white p-[20px]\">\n <Section className=\"mt-[32px]\">\n <Img\n src={`https://intlayer.org/assets/favicon-32x32.png`}\n width=\"40\"\n height=\"37\"\n alt=\"Intlayer\"\n className=\"mx-auto my-0\"\n />\n </Section>\n <Heading className=\"mx-0 my-[30px] p-0 text-center text-[24px] font-normal text-black\">\n Restablece tu contraseña para <strong>Intlayer</strong>\n </Heading>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Hola {username},\n </Text>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Hemos recibido una solicitud para restablecer tu contraseña de tu\n cuenta en <strong>Intlayer</strong>.\n </Text>\n <Section className=\"my-[32px] text-center\">\n <Button\n className=\"rounded-md bg-[#000000] px-5 py-3 text-center text-[12px] font-semibold text-white no-underline\"\n href={resetLink}\n >\n Restablecer Contraseña\n </Button>\n </Section>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n o copia y pega esta URL en tu navegador:{' '}\n <Link href={resetLink} className=\"text-[#E879BA] no-underline\">\n {resetLink}\n </Link>\n </Text>\n <Hr className=\"mx-0 my-[26px] w-full border border-solid border-[#eaeaea]\" />\n <Text className=\"text-[12px] leading-[24px] text-[#666666]\">\n Esta solicitud de restablecimiento de contraseña estaba destinada\n a <span className=\"text-black\">{username}</span>. Si no\n solicitaste un restablecimiento de contraseña, puedes ignorar este\n correo. Si estás preocupado por la seguridad de tu cuenta, por\n favor responde a este correo para ponerte en contacto con\n nosotros.\n </Text>\n </Container>\n </Body>\n </Tailwind>\n </Html>\n );\n};\n\nconst PreviewProps: ResetPasswordEmailProps = {\n username: 'alanturing',\n resetLink: 'https://intlayer.org/reset/foo',\n};\n\nResetPasswordEmailEN.PreviewProps = PreviewProps;\nResetPasswordEmailFR.PreviewProps = PreviewProps;\nResetPasswordEmailES.PreviewProps = PreviewProps;\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/emails/ResetUserPassword.tsx"],"sourcesContent":["import {\n Body,\n Button,\n Container,\n Head,\n Heading,\n Hr,\n Html,\n Img,\n Link,\n Preview,\n Section,\n Text,\n Tailwind,\n} from '@react-email/components';\n\nexport type ResetPasswordEmailProps = {\n username: string;\n resetLink: string;\n};\n\nexport const ResetPasswordEmailEN = ({\n username,\n resetLink,\n}: ResetPasswordEmailProps) => {\n const previewText = `Reset your password for Intlayer`;\n\n return (\n <Html>\n <Head />\n <Preview>{previewText}</Preview>\n <Tailwind>\n <Body className=\"m-auto px-2 font-sans\">\n <Container className=\"mx-auto my-[40px] max-w-[465px] rounded-xl border border-solid border-[#eaeaea] bg-white p-[20px]\">\n <Section className=\"mt-[32px]\">\n <Img\n src={`https://intlayer.org/favicon-32x32.png`}\n width=\"40\"\n height=\"37\"\n alt=\"Intlayer\"\n className=\"mx-auto my-0\"\n />\n </Section>\n <Heading className=\"mx-0 my-[30px] p-0 text-center text-[24px] font-normal text-black\">\n Reset your password for <strong>Intlayer</strong>\n </Heading>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Hello {username},\n </Text>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n We received a request to reset your password for your{' '}\n <strong>Intlayer</strong> account.\n </Text>\n\n <Section className=\"my-[32px] text-center\">\n <Button\n className=\"rounded-md bg-[#000000] px-5 py-3 text-center text-[12px] font-semibold text-white no-underline\"\n href={resetLink}\n >\n Reset Password\n </Button>\n </Section>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n or copy and paste this URL into your browser:{' '}\n <Link href={resetLink} className=\"text-[#E879BA] no-underline\">\n {resetLink}\n </Link>\n </Text>\n <Hr className=\"mx-0 my-[26px] w-full border border-solid border-[#eaeaea]\" />\n <Text className=\"text-[12px] leading-[24px] text-[#666666]\">\n This password reset request was intended for{' '}\n <span className=\"text-black\">{username}</span>. If you did not\n request a password reset, you can ignore this email. If you are\n concerned about your account's safety, please reply to this email\n to get in touch with us.\n </Text>\n </Container>\n </Body>\n </Tailwind>\n </Html>\n );\n};\n\nexport const ResetPasswordEmailFR = ({\n username,\n resetLink,\n}: ResetPasswordEmailProps) => {\n const previewText = `Réinitialisez votre mot de passe pour Intlayer`;\n\n return (\n <Html>\n <Head />\n <Preview>{previewText}</Preview>\n <Tailwind>\n <Body className=\"m-auto px-2 font-sans\">\n <Container className=\"mx-auto my-[40px] max-w-[465px] rounded-xl border border-solid border-[#eaeaea] bg-white p-[20px]\">\n <Section className=\"mt-[32px]\">\n <Img\n src={`https://intlayer.org/favicon-32x32.png`}\n width=\"40\"\n height=\"37\"\n alt=\"Intlayer\"\n className=\"mx-auto my-0\"\n />\n </Section>\n <Heading className=\"mx-0 my-[30px] p-0 text-center text-[24px] font-normal text-black\">\n Réinitialisez votre mot de passe pour <strong>Intlayer</strong>\n </Heading>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Bonjour {username},\n </Text>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Nous avons reçu une demande de réinitialisation de votre mot de\n passe pour votre compte <strong>Intlayer</strong>.\n </Text>\n <Section className=\"my-[32px] text-center\">\n <Button\n className=\"rounded-md bg-[#000000] px-5 py-3 text-center text-[12px] font-semibold text-white no-underline\"\n href={resetLink}\n >\n Réinitialiser le mot de passe\n </Button>\n </Section>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n ou copiez et collez cette URL dans votre navigateur :{' '}\n <Link href={resetLink} className=\"text-[#E879BA] no-underline\">\n {resetLink}\n </Link>\n </Text>\n <Hr className=\"mx-0 my-[26px] w-full border border-solid border-[#eaeaea]\" />\n <Text className=\"text-[12px] leading-[24px] text-[#666666]\">\n Cette demande de réinitialisation de mot de passe était destinée à{' '}\n <span className=\"text-black\">{username}</span>. Si vous n'avez pas\n demandé une réinitialisation de mot de passe, vous pouvez ignorer\n cet email. Si vous êtes préoccupé par la sécurité de votre compte,\n veuillez répondre à cet email pour nous contacter.\n </Text>\n </Container>\n </Body>\n </Tailwind>\n </Html>\n );\n};\n\nexport const ResetPasswordEmailES = ({\n username,\n resetLink,\n}: ResetPasswordEmailProps) => {\n const previewText = `Restablece tu contraseña para Intlayer`;\n\n return (\n <Html>\n <Head />\n <Preview>{previewText}</Preview>\n <Tailwind>\n <Body className=\"m-auto px-2 font-sans\">\n <Container className=\"mx-auto my-[40px] max-w-[465px] rounded-xl border border-solid border-[#eaeaea] bg-white p-[20px]\">\n <Section className=\"mt-[32px]\">\n <Img\n src={`https://intlayer.org/favicon-32x32.png`}\n width=\"40\"\n height=\"37\"\n alt=\"Intlayer\"\n className=\"mx-auto my-0\"\n />\n </Section>\n <Heading className=\"mx-0 my-[30px] p-0 text-center text-[24px] font-normal text-black\">\n Restablece tu contraseña para <strong>Intlayer</strong>\n </Heading>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Hola {username},\n </Text>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Hemos recibido una solicitud para restablecer tu contraseña de tu\n cuenta en <strong>Intlayer</strong>.\n </Text>\n <Section className=\"my-[32px] text-center\">\n <Button\n className=\"rounded-md bg-[#000000] px-5 py-3 text-center text-[12px] font-semibold text-white no-underline\"\n href={resetLink}\n >\n Restablecer Contraseña\n </Button>\n </Section>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n o copia y pega esta URL en tu navegador:{' '}\n <Link href={resetLink} className=\"text-[#E879BA] no-underline\">\n {resetLink}\n </Link>\n </Text>\n <Hr className=\"mx-0 my-[26px] w-full border border-solid border-[#eaeaea]\" />\n <Text className=\"text-[12px] leading-[24px] text-[#666666]\">\n Esta solicitud de restablecimiento de contraseña estaba destinada\n a <span className=\"text-black\">{username}</span>. Si no\n solicitaste un restablecimiento de contraseña, puedes ignorar este\n correo. Si estás preocupado por la seguridad de tu cuenta, por\n favor responde a este correo para ponerte en contacto con\n nosotros.\n </Text>\n </Container>\n </Body>\n </Tailwind>\n </Html>\n );\n};\n\nconst PreviewProps: ResetPasswordEmailProps = {\n username: 'alanturing',\n resetLink: 'https://intlayer.org/reset/foo',\n};\n\nResetPasswordEmailEN.PreviewProps = PreviewProps;\nResetPasswordEmailFR.PreviewProps = PreviewProps;\nResetPasswordEmailES.PreviewProps = PreviewProps;\n"],"mappings":"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","names":[]}
|
|
@@ -39,7 +39,7 @@ const SubscriptionPaymentCancellationEN = ({
|
|
|
39
39
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Section, { className: "mt-[32px]", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
40
40
|
import_components.Img,
|
|
41
41
|
{
|
|
42
|
-
src: `https://intlayer.org/
|
|
42
|
+
src: `https://intlayer.org/favicon-32x32.png`,
|
|
43
43
|
width: "40",
|
|
44
44
|
height: "37",
|
|
45
45
|
alt: "Intlayer",
|
|
@@ -85,7 +85,7 @@ const SubscriptionPaymentCancellationFR = ({
|
|
|
85
85
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Section, { className: "mt-[32px]", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
86
86
|
import_components.Img,
|
|
87
87
|
{
|
|
88
|
-
src: `https://intlayer.org/
|
|
88
|
+
src: `https://intlayer.org/favicon-32x32.png`,
|
|
89
89
|
width: "40",
|
|
90
90
|
height: "37",
|
|
91
91
|
alt: "Intlayer",
|
|
@@ -131,7 +131,7 @@ const SubscriptionPaymentCancellationES = ({
|
|
|
131
131
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Section, { className: "mt-[32px]", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
132
132
|
import_components.Img,
|
|
133
133
|
{
|
|
134
|
-
src: `https://intlayer.org/
|
|
134
|
+
src: `https://intlayer.org/favicon-32x32.png`,
|
|
135
135
|
width: "40",
|
|
136
136
|
height: "37",
|
|
137
137
|
alt: "Intlayer",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/emails/SubscriptionPaymentCancellation.tsx"],"sourcesContent":["import {\n Html,\n Head,\n Preview,\n Tailwind,\n Body,\n Section,\n Img,\n Heading,\n Container,\n Button,\n Text,\n} from '@react-email/components';\n\nexport type SubscriptionPaymentCancellationProps = {\n username: string; // The name of the user receiving the email\n email: string; // The email address of the user\n planName: string; // The name of the subscription plan\n cancellationDate: string; // The date when the subscription will end\n reactivateLink: string; // A link for the user to reactivate their subscription\n};\n\nexport const SubscriptionPaymentCancellationEN = ({\n username,\n planName,\n cancellationDate,\n reactivateLink,\n}: SubscriptionPaymentCancellationProps) => {\n const previewText = `Your ${planName} subscription has been canceled`;\n\n return (\n <Html>\n <Head />\n <Preview>{previewText}</Preview>\n <Tailwind>\n <Body className=\"m-auto px-2 font-sans\">\n <Container className=\"mx-auto my-[40px] max-w-[465px] rounded-xl border border-solid border-[#eaeaea] bg-white p-[20px]\">\n <Section className=\"mt-[32px]\">\n <Img\n src={`https://intlayer.org/
|
|
1
|
+
{"version":3,"sources":["../../../src/emails/SubscriptionPaymentCancellation.tsx"],"sourcesContent":["import {\n Html,\n Head,\n Preview,\n Tailwind,\n Body,\n Section,\n Img,\n Heading,\n Container,\n Button,\n Text,\n} from '@react-email/components';\n\nexport type SubscriptionPaymentCancellationProps = {\n username: string; // The name of the user receiving the email\n email: string; // The email address of the user\n planName: string; // The name of the subscription plan\n cancellationDate: string; // The date when the subscription will end\n reactivateLink: string; // A link for the user to reactivate their subscription\n};\n\nexport const SubscriptionPaymentCancellationEN = ({\n username,\n planName,\n cancellationDate,\n reactivateLink,\n}: SubscriptionPaymentCancellationProps) => {\n const previewText = `Your ${planName} subscription has been canceled`;\n\n return (\n <Html>\n <Head />\n <Preview>{previewText}</Preview>\n <Tailwind>\n <Body className=\"m-auto px-2 font-sans\">\n <Container className=\"mx-auto my-[40px] max-w-[465px] rounded-xl border border-solid border-[#eaeaea] bg-white p-[20px]\">\n <Section className=\"mt-[32px]\">\n <Img\n src={`https://intlayer.org/favicon-32x32.png`}\n width=\"40\"\n height=\"37\"\n alt=\"Intlayer\"\n className=\"mx-auto my-0\"\n />\n </Section>\n <Heading className=\"mx-0 my-[30px] p-0 text-center text-[24px] font-normal text-black\">\n Subscription Canceled\n </Heading>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Hello {username},\n </Text>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n We’re sorry to see you go! Your subscription to the{' '}\n <strong>{planName}</strong> plan has been canceled. You will still\n have access until <strong>{cancellationDate}</strong>.\n </Text>\n <Section className=\"my-[32px] text-center\">\n <Button\n className=\"rounded-md bg-[#000000] px-5 py-3 text-center text-[12px] font-semibold text-white no-underline\"\n href={reactivateLink}\n >\n Reactivate Your Subscription\n </Button>\n </Section>\n </Container>\n </Body>\n </Tailwind>\n </Html>\n );\n};\n\nexport const SubscriptionPaymentCancellationFR = ({\n username,\n planName,\n cancellationDate,\n reactivateLink,\n}: SubscriptionPaymentCancellationProps) => {\n const previewText = `Votre abonnement ${planName} a été annulé`;\n\n return (\n <Html>\n <Head />\n <Preview>{previewText}</Preview>\n <Tailwind>\n <Body className=\"m-auto px-2 font-sans\">\n <Container className=\"mx-auto my-[40px] max-w-[465px] rounded-xl border border-solid border-[#eaeaea] bg-white p-[20px]\">\n <Section className=\"mt-[32px]\">\n <Img\n src={`https://intlayer.org/favicon-32x32.png`}\n width=\"40\"\n height=\"37\"\n alt=\"Intlayer\"\n className=\"mx-auto my-0\"\n />\n </Section>\n <Heading className=\"mx-0 my-[30px] p-0 text-center text-[24px] font-normal text-black\">\n Abonnement Annulé\n </Heading>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Bonjour {username},\n </Text>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Nous sommes désolés de vous voir partir ! Votre abonnement au plan{' '}\n <strong>{planName}</strong> a été annulé. Vous aurez toujours\n accès jusqu'au <strong>{cancellationDate}</strong>.\n </Text>\n <Section className=\"my-[32px] text-center\">\n <Button\n className=\"rounded-md bg-[#000000] px-5 py-3 text-center text-[12px] font-semibold text-white no-underline\"\n href={reactivateLink}\n >\n Réactiver votre abonnement\n </Button>\n </Section>\n </Container>\n </Body>\n </Tailwind>\n </Html>\n );\n};\n\nexport const SubscriptionPaymentCancellationES = ({\n username,\n planName,\n cancellationDate,\n reactivateLink,\n}: SubscriptionPaymentCancellationProps) => {\n const previewText = `Tu suscripción ${planName} ha sido cancelada`;\n\n return (\n <Html>\n <Head />\n <Preview>{previewText}</Preview>\n <Tailwind>\n <Body className=\"m-auto px-2 font-sans\">\n <Container className=\"mx-auto my-[40px] max-w-[465px] rounded-xl border border-solid border-[#eaeaea] bg-white p-[20px]\">\n <Section className=\"mt-[32px]\">\n <Img\n src={`https://intlayer.org/favicon-32x32.png`}\n width=\"40\"\n height=\"37\"\n alt=\"Intlayer\"\n className=\"mx-auto my-0\"\n />\n </Section>\n <Heading className=\"mx-0 my-[30px] p-0 text-center text-[24px] font-normal text-black\">\n Suscripción Cancelada\n </Heading>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Hola {username},\n </Text>\n <Text className=\"text-[14px] leading-[24px] text-black\">\n Lamentamos verte partir. Tu suscripción al plan{' '}\n <strong>{planName}</strong> ha sido cancelada. Tendrás acceso\n hasta <strong>{cancellationDate}</strong>.\n </Text>\n <Section className=\"my-[32px] text-center\">\n <Button\n className=\"rounded-md bg-[#000000] px-5 py-3 text-center text-[12px] font-semibold text-white no-underline\"\n href={reactivateLink}\n >\n Reactivar tu suscripción\n </Button>\n </Section>\n </Container>\n </Body>\n </Tailwind>\n </Html>\n );\n};\n\nconst PreviewProps: SubscriptionPaymentCancellationProps = {\n username: 'John Doe',\n email: 'john.doe@example.com',\n planName: 'Pro Plan',\n cancellationDate: 'November 30, 2024',\n reactivateLink: 'https://intlayer.org/reactivate-subscription',\n};\n\nSubscriptionPaymentCancellationEN.PreviewProps = PreviewProps;\nSubscriptionPaymentCancellationFR.PreviewProps = PreviewProps;\nSubscriptionPaymentCancellationES.PreviewProps = PreviewProps;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgCM;AAhCN,wBAYO;AAUA,MAAM,oCAAoC,CAAC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA4C;AAC1C,QAAM,cAAc,QAAQ,QAAQ;AAEpC,SACE,6CAAC,0BACC;AAAA,gDAAC,0BAAK;AAAA,IACN,4CAAC,6BAAS,uBAAY;AAAA,IACtB,4CAAC,8BACC,sDAAC,0BAAK,WAAU,yBACd,uDAAC,+BAAU,WAAU,qGACnB;AAAA,kDAAC,6BAAQ,WAAU,aACjB;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UACL,OAAM;AAAA,UACN,QAAO;AAAA,UACP,KAAI;AAAA,UACJ,WAAU;AAAA;AAAA,MACZ,GACF;AAAA,MACA,4CAAC,6BAAQ,WAAU,qEAAoE,mCAEvF;AAAA,MACA,6CAAC,0BAAK,WAAU,yCAAwC;AAAA;AAAA,QAC/C;AAAA,QAAS;AAAA,SAClB;AAAA,MACA,6CAAC,0BAAK,WAAU,yCAAwC;AAAA;AAAA,QACF;AAAA,QACpD,4CAAC,YAAQ,oBAAS;AAAA,QAAS;AAAA,QACT,4CAAC,YAAQ,4BAAiB;AAAA,QAAS;AAAA,SACvD;AAAA,MACA,4CAAC,6BAAQ,WAAU,yBACjB;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,MAAM;AAAA,UACP;AAAA;AAAA,MAED,GACF;AAAA,OACF,GACF,GACF;AAAA,KACF;AAEJ;AAEO,MAAM,oCAAoC,CAAC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA4C;AAC1C,QAAM,cAAc,oBAAoB,QAAQ;AAEhD,SACE,6CAAC,0BACC;AAAA,gDAAC,0BAAK;AAAA,IACN,4CAAC,6BAAS,uBAAY;AAAA,IACtB,4CAAC,8BACC,sDAAC,0BAAK,WAAU,yBACd,uDAAC,+BAAU,WAAU,qGACnB;AAAA,kDAAC,6BAAQ,WAAU,aACjB;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UACL,OAAM;AAAA,UACN,QAAO;AAAA,UACP,KAAI;AAAA,UACJ,WAAU;AAAA;AAAA,MACZ,GACF;AAAA,MACA,4CAAC,6BAAQ,WAAU,qEAAoE,kCAEvF;AAAA,MACA,6CAAC,0BAAK,WAAU,yCAAwC;AAAA;AAAA,QAC7C;AAAA,QAAS;AAAA,SACpB;AAAA,MACA,6CAAC,0BAAK,WAAU,yCAAwC;AAAA;AAAA,QACa;AAAA,QACnE,4CAAC,YAAQ,oBAAS;AAAA,QAAS;AAAA,QACZ,4CAAC,YAAQ,4BAAiB;AAAA,QAAS;AAAA,SACpD;AAAA,MACA,4CAAC,6BAAQ,WAAU,yBACjB;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,MAAM;AAAA,UACP;AAAA;AAAA,MAED,GACF;AAAA,OACF,GACF,GACF;AAAA,KACF;AAEJ;AAEO,MAAM,oCAAoC,CAAC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA4C;AAC1C,QAAM,cAAc,qBAAkB,QAAQ;AAE9C,SACE,6CAAC,0BACC;AAAA,gDAAC,0BAAK;AAAA,IACN,4CAAC,6BAAS,uBAAY;AAAA,IACtB,4CAAC,8BACC,sDAAC,0BAAK,WAAU,yBACd,uDAAC,+BAAU,WAAU,qGACnB;AAAA,kDAAC,6BAAQ,WAAU,aACjB;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UACL,OAAM;AAAA,UACN,QAAO;AAAA,UACP,KAAI;AAAA,UACJ,WAAU;AAAA;AAAA,MACZ,GACF;AAAA,MACA,4CAAC,6BAAQ,WAAU,qEAAoE,sCAEvF;AAAA,MACA,6CAAC,0BAAK,WAAU,yCAAwC;AAAA;AAAA,QAChD;AAAA,QAAS;AAAA,SACjB;AAAA,MACA,6CAAC,0BAAK,WAAU,yCAAwC;AAAA;AAAA,QACN;AAAA,QAChD,4CAAC,YAAQ,oBAAS;AAAA,QAAS;AAAA,QACrB,4CAAC,YAAQ,4BAAiB;AAAA,QAAS;AAAA,SAC3C;AAAA,MACA,4CAAC,6BAAQ,WAAU,yBACjB;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,MAAM;AAAA,UACP;AAAA;AAAA,MAED,GACF;AAAA,OACF,GACF,GACF;AAAA,KACF;AAEJ;AAEA,MAAM,eAAqD;AAAA,EACzD,UAAU;AAAA,EACV,OAAO;AAAA,EACP,UAAU;AAAA,EACV,kBAAkB;AAAA,EAClB,gBAAgB;AAClB;AAEA,kCAAkC,eAAe;AACjD,kCAAkC,eAAe;AACjD,kCAAkC,eAAe;","names":[]}
|
|
@@ -39,7 +39,7 @@ const SubscriptionPaymentErrorEN = ({
|
|
|
39
39
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Section, { className: "mt-[32px]", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
40
40
|
import_components.Img,
|
|
41
41
|
{
|
|
42
|
-
src: `https://intlayer.org/
|
|
42
|
+
src: `https://intlayer.org/favicon-32x32.png`,
|
|
43
43
|
width: "40",
|
|
44
44
|
height: "37",
|
|
45
45
|
alt: "Intlayer",
|
|
@@ -85,7 +85,7 @@ const SubscriptionPaymentErrorFR = ({
|
|
|
85
85
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Section, { className: "mt-[32px]", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
86
86
|
import_components.Img,
|
|
87
87
|
{
|
|
88
|
-
src: `https://intlayer.org/
|
|
88
|
+
src: `https://intlayer.org/favicon-32x32.png`,
|
|
89
89
|
width: "40",
|
|
90
90
|
height: "37",
|
|
91
91
|
alt: "Intlayer",
|
|
@@ -131,7 +131,7 @@ const SubscriptionPaymentErrorES = ({
|
|
|
131
131
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.Section, { className: "mt-[32px]", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
132
132
|
import_components.Img,
|
|
133
133
|
{
|
|
134
|
-
src: `https://intlayer.org/
|
|
134
|
+
src: `https://intlayer.org/favicon-32x32.png`,
|
|
135
135
|
width: "40",
|
|
136
136
|
height: "37",
|
|
137
137
|
alt: "Intlayer",
|