@punks/backend-entity-manager 0.0.36 → 0.0.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/cjs/index.js +34 -13
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/types/abstractions/email.d.ts +3 -1
  4. package/dist/cjs/types/abstractions/index.d.ts +1 -0
  5. package/dist/cjs/types/abstractions/localization.d.ts +4 -0
  6. package/dist/cjs/types/platforms/nest/__test__/server/app/auth/auth.dto.d.ts +3 -0
  7. package/dist/cjs/types/platforms/nest/extensions/authentication/handlers/user-password-reset-request/types.d.ts +1 -0
  8. package/dist/cjs/types/platforms/nest/extensions/authentication/handlers/user-register/types.d.ts +1 -0
  9. package/dist/cjs/types/platforms/nest/extensions/authentication/handlers/user-verify-request/types.d.ts +1 -0
  10. package/dist/cjs/types/platforms/nest/plugins/email/aws-ses/index.d.ts +1 -1
  11. package/dist/cjs/types/platforms/nest/plugins/email/sendgrid/abstractions/index.d.ts +3 -2
  12. package/dist/cjs/types/platforms/nest/plugins/email/sendgrid/index.d.ts +1 -0
  13. package/dist/cjs/types/platforms/nest/plugins/email/sendgrid/settings/index.d.ts +1 -0
  14. package/dist/cjs/types/utils/index.d.ts +2 -1
  15. package/dist/cjs/types/utils/localization.d.ts +2 -0
  16. package/dist/esm/index.js +34 -14
  17. package/dist/esm/index.js.map +1 -1
  18. package/dist/esm/types/abstractions/email.d.ts +3 -1
  19. package/dist/esm/types/abstractions/index.d.ts +1 -0
  20. package/dist/esm/types/abstractions/localization.d.ts +4 -0
  21. package/dist/esm/types/platforms/nest/__test__/server/app/auth/auth.dto.d.ts +3 -0
  22. package/dist/esm/types/platforms/nest/extensions/authentication/handlers/user-password-reset-request/types.d.ts +1 -0
  23. package/dist/esm/types/platforms/nest/extensions/authentication/handlers/user-register/types.d.ts +1 -0
  24. package/dist/esm/types/platforms/nest/extensions/authentication/handlers/user-verify-request/types.d.ts +1 -0
  25. package/dist/esm/types/platforms/nest/plugins/email/aws-ses/index.d.ts +1 -1
  26. package/dist/esm/types/platforms/nest/plugins/email/sendgrid/abstractions/index.d.ts +3 -2
  27. package/dist/esm/types/platforms/nest/plugins/email/sendgrid/index.d.ts +1 -0
  28. package/dist/esm/types/platforms/nest/plugins/email/sendgrid/settings/index.d.ts +1 -0
  29. package/dist/esm/types/utils/index.d.ts +2 -1
  30. package/dist/esm/types/utils/localization.d.ts +2 -0
  31. package/dist/index.d.ts +18 -5
  32. package/package.json +1 -1
@@ -13,15 +13,17 @@ export type TemplatedEmailInput<TPayload> = {
13
13
  bcc?: string[];
14
14
  subjectTemplate?: string;
15
15
  templateId: string;
16
+ languageId: string;
16
17
  payload: TPayload;
17
18
  };
18
19
  export interface HtmlEmailInput<TPayload> {
20
+ replyTo?: string;
19
21
  from?: string;
20
22
  to?: string[];
21
23
  cc?: string[];
22
24
  bcc?: string[];
23
25
  subjectTemplate: string;
24
- htmlTemplate: string;
26
+ bodyTemplate: string;
25
27
  payload: TPayload;
26
28
  }
27
29
  export interface IEmailProvider<TTemplateData> {
@@ -10,6 +10,7 @@ export * from "./email";
10
10
  export * from "./errors";
11
11
  export { IEntityEventsManager } from "./events";
12
12
  export * from "./filters";
13
+ export * from "./localization";
13
14
  export { IEntityManager } from "./manager";
14
15
  export { IEntityMapper } from "./mappers";
15
16
  export { IEntitiesSearchQuery, IEntityGetQuery, IEntitiesQueryBuilder, } from "./queries";
@@ -0,0 +1,4 @@
1
+ export type LocalizedMap<T> = {
2
+ [key: string]: T;
3
+ };
4
+ export type LocalizedTexts = LocalizedMap<string>;
@@ -27,6 +27,7 @@ export declare class UserRegisterRequest {
27
27
  data: UserRegistrationData;
28
28
  userContext: UserContext;
29
29
  callback: OperationCallbackTemplate;
30
+ languageId: string;
30
31
  }
31
32
  export declare class UserRegisterResponse {
32
33
  success: boolean;
@@ -36,6 +37,7 @@ export declare class UserPasswordResetRequest {
36
37
  userName: string;
37
38
  userContext?: UserContext;
38
39
  callback: OperationCallbackTemplate;
40
+ languageId: string;
39
41
  }
40
42
  export declare class UserPasswordResetCompleteRequest {
41
43
  token: string;
@@ -48,4 +50,5 @@ export declare class UserEmailVerifyRequest {
48
50
  email: string;
49
51
  userContext: UserContext;
50
52
  callback: OperationCallbackTemplate;
53
+ languageId: string;
51
54
  }
@@ -6,6 +6,7 @@ export type UserPasswordResetRequestCallbackTemplate = {
6
6
  export interface UserPasswordResetRequestInput<TUserContext extends IUserContext> {
7
7
  email: string;
8
8
  callback: UserPasswordResetRequestCallbackTemplate;
9
+ languageId: string;
9
10
  context?: TUserContext;
10
11
  }
11
12
  export interface UserPasswordResetRequestResult {
@@ -9,6 +9,7 @@ export interface UserRegistrationInput<TUserRegistrationInfo, TUserContext exten
9
9
  password: string;
10
10
  registrationInfo: TUserRegistrationInfo;
11
11
  callback: UserRegisterCallbackTemplate;
12
+ languageId: string;
12
13
  context?: TUserContext;
13
14
  }
14
15
  export interface UserRegistrationResult {
@@ -2,6 +2,7 @@ import { IUserContext } from "../../abstractions";
2
2
  export interface UserVerifyRequestInput<TUserContext extends IUserContext> {
3
3
  email: string;
4
4
  callback: UserVerifyRequestCallbackTemplate;
5
+ languageId: string;
5
6
  context?: TUserContext;
6
7
  }
7
8
  export interface UserVerifyRequestResult {
@@ -1,5 +1,5 @@
1
1
  export * from "./abstractions";
2
2
  export * from "./base";
3
3
  export * from "./decorators";
4
- export { AwsSesSettings } from "./settings";
5
4
  export { AwsEmailModule } from "./module";
5
+ export { AwsSesSettings } from "./settings";
@@ -1,3 +1,4 @@
1
+ import { LocalizedTexts } from "../../../../../../abstractions";
1
2
  export type SendgridTemplateType = "template" | "html";
2
3
  export type SendgridTemplateBaseData = {
3
4
  from?: string;
@@ -11,6 +12,6 @@ export type SendgridEmailTemplateData = SendgridTemplateBaseData & ({
11
12
  sendgridTemplateId: string;
12
13
  } | {
13
14
  type: "html";
14
- subjectTemplate: string;
15
- bodyTemplate: string;
15
+ subjectTemplate: string | LocalizedTexts;
16
+ bodyTemplate: string | LocalizedTexts;
16
17
  });
@@ -2,3 +2,4 @@ export * from "./abstractions";
2
2
  export * from "./base";
3
3
  export * from "./decorators";
4
4
  export { SendgridEmailModule } from "./module";
5
+ export { SendgridSettings } from "./settings";
@@ -2,6 +2,7 @@ import { AppInMemorySettings } from "../../../../../../settings";
2
2
  export type SendgridSettings = {
3
3
  apiKey: string;
4
4
  defaultSender: string;
5
+ defaultReplyTo?: string;
5
6
  defaultCc?: string[];
6
7
  defaultBcc?: string[];
7
8
  };
@@ -1,2 +1,3 @@
1
- export { newUuid } from "./uid";
1
+ export { getLocalizedText } from "./localization";
2
2
  export { renderHandlebarsTemplate } from "./rendering";
3
+ export { newUuid } from "./uid";
@@ -0,0 +1,2 @@
1
+ import { LocalizedTexts } from "../abstractions";
2
+ export declare const getLocalizedText: (item: string | LocalizedTexts, languageId: string, defaultLanguageId?: string) => string;
package/dist/esm/index.js CHANGED
@@ -19020,7 +19020,7 @@ let UserRegistrationHandler = class UserRegistrationHandler {
19020
19020
  passwordHash,
19021
19021
  passwordUpdateTimestamp: new Date(),
19022
19022
  });
19023
- await this.sendRegistrationEmail(user, input.callback);
19023
+ await this.sendRegistrationEmail(user, input.callback, input.languageId);
19024
19024
  return {
19025
19025
  success: true,
19026
19026
  };
@@ -19031,7 +19031,7 @@ let UserRegistrationHandler = class UserRegistrationHandler {
19031
19031
  passwordHash,
19032
19032
  passwordUpdateTimestamp: new Date(),
19033
19033
  });
19034
- await this.sendRegistrationEmail(newUser, input.callback);
19034
+ await this.sendRegistrationEmail(newUser, input.callback, input.languageId);
19035
19035
  return {
19036
19036
  success: true,
19037
19037
  };
@@ -19042,11 +19042,12 @@ let UserRegistrationHandler = class UserRegistrationHandler {
19042
19042
  userId,
19043
19043
  });
19044
19044
  }
19045
- async sendRegistrationEmail(user, callback) {
19045
+ async sendRegistrationEmail(user, callback, languageId) {
19046
19046
  const token = await this.generateEmailVerifyToken(user);
19047
19047
  await this.emailService.sendTemplatedEmail({
19048
19048
  to: [user.email],
19049
19049
  templateId: AuthenticationEmailTemplates.Registration,
19050
+ languageId,
19050
19051
  payload: {
19051
19052
  firstName: user.profile?.firstName,
19052
19053
  lastName: user.profile?.lastName,
@@ -19247,16 +19248,17 @@ let UserPasswordResetRequestHandler = class UserPasswordResetRequestHandler {
19247
19248
  success: false,
19248
19249
  };
19249
19250
  }
19250
- await this.sendPasswordResetEmail(user, input.callback);
19251
+ await this.sendPasswordResetEmail(user, input.callback, input.languageId);
19251
19252
  return {
19252
19253
  success: true,
19253
19254
  };
19254
19255
  }
19255
- async sendPasswordResetEmail(user, callback) {
19256
+ async sendPasswordResetEmail(user, callback, languageId) {
19256
19257
  const token = await this.generatePasswordResetToken(user);
19257
19258
  await this.emailService.sendTemplatedEmail({
19258
19259
  to: [user.email],
19259
19260
  templateId: AuthenticationEmailTemplates.PasswordReset,
19261
+ languageId,
19260
19262
  payload: {
19261
19263
  firstName: user.profile.firstName,
19262
19264
  lastName: user.profile.lastName,
@@ -19356,12 +19358,12 @@ let UserVerifyRequestHandler = class UserVerifyRequestHandler {
19356
19358
  success: false,
19357
19359
  };
19358
19360
  }
19359
- await this.sendEmailVerifyEmail(user, input.callback);
19361
+ await this.sendEmailVerifyEmail(user, input.callback, input.languageId);
19360
19362
  return {
19361
19363
  success: true,
19362
19364
  };
19363
19365
  }
19364
- async sendEmailVerifyEmail(user, callback) {
19366
+ async sendEmailVerifyEmail(user, callback, languageId) {
19365
19367
  const token = await this.generateEmailVerifyToken(user);
19366
19368
  await this.emailService.sendTemplatedEmail({
19367
19369
  to: [user.email],
@@ -19371,6 +19373,7 @@ let UserVerifyRequestHandler = class UserVerifyRequestHandler {
19371
19373
  lastName: user.profile.lastName,
19372
19374
  callbackUrl: callback.urlTemplate.replace(callback.tokenPlaceholder, token),
19373
19375
  },
19376
+ languageId,
19374
19377
  });
19375
19378
  }
19376
19379
  async generateEmailVerifyToken(user) {
@@ -19958,7 +19961,12 @@ const WpAwsSesEmailTemplate = (templateId, sendgridTemplateData) => applyDecorat
19958
19961
 
19959
19962
  const awsSesSettings = new AppInMemorySettings();
19960
19963
 
19961
- const newUuid = newUuid$1;
19964
+ const getLocalizedText = (item, languageId, defaultLanguageId) => {
19965
+ return typeof item === "string"
19966
+ ? item
19967
+ : item[languageId] ??
19968
+ (defaultLanguageId ? item[defaultLanguageId] : undefined);
19969
+ };
19962
19970
 
19963
19971
  var handlebars$1 = {exports: {}};
19964
19972
 
@@ -24901,6 +24909,8 @@ const renderHandlebarsTemplate = (input) => {
24901
24909
  return compiled(input.context);
24902
24910
  };
24903
24911
 
24912
+ const newUuid = newUuid$1;
24913
+
24904
24914
  const createClient = (settings) => new SESClient({
24905
24915
  region: settings.region,
24906
24916
  credentials: settings.awsAccessKeyId && settings.awsSecretAccessKey
@@ -24918,7 +24928,7 @@ let AwsSesEmailProvider = class AwsSesEmailProvider {
24918
24928
  const processedPayload = await template.processPayload(input.payload);
24919
24929
  const templateData = await template.getTemplateData(processedPayload);
24920
24930
  await this.sendHtmlEmail({
24921
- htmlTemplate: templateData.htmlTemplate,
24931
+ bodyTemplate: templateData.htmlTemplate,
24922
24932
  payload: processedPayload,
24923
24933
  subjectTemplate: templateData.subjectTemplate,
24924
24934
  to: input.to ?? templateData.to,
@@ -24945,7 +24955,7 @@ let AwsSesEmailProvider = class AwsSesEmailProvider {
24945
24955
  Body: {
24946
24956
  Html: {
24947
24957
  Data: renderHandlebarsTemplate({
24948
- template: input.htmlTemplate,
24958
+ template: input.bodyTemplate,
24949
24959
  context: input.payload,
24950
24960
  }),
24951
24961
  },
@@ -25005,10 +25015,18 @@ let SendgridEmailProvider = class SendgridEmailProvider {
25005
25015
  const processedPayload = await template.processPayload(input.payload);
25006
25016
  const templateData = await template.getTemplateData(processedPayload);
25007
25017
  if (templateData.type === "html") {
25018
+ const body = getLocalizedText(templateData.bodyTemplate, input.languageId);
25019
+ if (!body) {
25020
+ throw new Error(`Missing body template for language ${input.languageId}`);
25021
+ }
25022
+ const subject = getLocalizedText(templateData.bodyTemplate, input.languageId);
25023
+ if (!subject) {
25024
+ throw new Error(`Missing subject template for language ${input.languageId}`);
25025
+ }
25008
25026
  await this.sendHtmlEmail({
25009
- htmlTemplate: templateData.bodyTemplate,
25027
+ bodyTemplate: body,
25028
+ subjectTemplate: subject,
25010
25029
  payload: processedPayload,
25011
- subjectTemplate: templateData.subjectTemplate,
25012
25030
  bcc: input.bcc ?? templateData.bcc,
25013
25031
  cc: input.cc ?? templateData.cc,
25014
25032
  from: input.from ?? templateData.from,
@@ -25032,6 +25050,7 @@ let SendgridEmailProvider = class SendgridEmailProvider {
25032
25050
  context: processedPayload,
25033
25051
  })
25034
25052
  : undefined,
25053
+ replyTo: templateData.replyTo ?? sendgridSettings.value.defaultReplyTo,
25035
25054
  dynamicTemplateData: {
25036
25055
  ...processedPayload,
25037
25056
  },
@@ -25048,9 +25067,10 @@ let SendgridEmailProvider = class SendgridEmailProvider {
25048
25067
  context: input.payload,
25049
25068
  }),
25050
25069
  html: renderHandlebarsTemplate({
25051
- template: input.htmlTemplate,
25070
+ template: input.bodyTemplate,
25052
25071
  context: input.payload,
25053
25072
  }),
25073
+ replyTo: input.replyTo ?? sendgridSettings.value.defaultReplyTo,
25054
25074
  });
25055
25075
  }
25056
25076
  };
@@ -25115,5 +25135,5 @@ AppSessionMiddleware = __decorate([
25115
25135
  Injectable()
25116
25136
  ], AppSessionMiddleware);
25117
25137
 
25118
- export { AppExceptionsFilterBase, AppHashingService, AppInMemorySettings, AppSessionMiddleware, AppSessionService, AuthenticationEmailTemplates, AuthenticationError, AuthenticationExtensionSymbols, AuthenticationModule, AuthenticationService, AwsEmailModule, AwsSesEmailTemplate, EmailService, EntityManagerConfigurationError, EntityManagerException, EntityManagerInitializer, EntityManagerModule, EntityManagerRegistry, EntityManagerService, EntityManagerSymbols, EntityManagerUnauthorizedException, EntityNotFoundException, EntityOperationType, EntityOperationUnauthorizedException, InvalidCredentialsError, ModulesContainerProvider, MultiTenancyModule, MultipleEntitiesFoundException, NestEntityActions, NestEntityAuthorizationMiddleware, NestEntityManager, NestTypeOrmQueryBuilder, NestTypeOrmRepository, OperationTokenMismatchError, QueryBuilderBase, ReplicationMode, SendgridEmailModule, SendgridEmailTemplate, SortDirection, UserRegistrationError, WpAppInitializer, WpAwsSesEmailTemplate, WpEmailTemplate, WpEntity, WpEntityActions, WpEntityAdapter, WpEntityAuthMiddleware, WpEntityConnector, WpEntityConverter, WpEntityManager, WpEntityQueryBuilder, WpEntityRepository, WpSendgridEmailTemplate, WpUserService, newUuid, renderHandlebarsTemplate };
25138
+ export { AppExceptionsFilterBase, AppHashingService, AppInMemorySettings, AppSessionMiddleware, AppSessionService, AuthenticationEmailTemplates, AuthenticationError, AuthenticationExtensionSymbols, AuthenticationModule, AuthenticationService, AwsEmailModule, AwsSesEmailTemplate, EmailService, EntityManagerConfigurationError, EntityManagerException, EntityManagerInitializer, EntityManagerModule, EntityManagerRegistry, EntityManagerService, EntityManagerSymbols, EntityManagerUnauthorizedException, EntityNotFoundException, EntityOperationType, EntityOperationUnauthorizedException, InvalidCredentialsError, ModulesContainerProvider, MultiTenancyModule, MultipleEntitiesFoundException, NestEntityActions, NestEntityAuthorizationMiddleware, NestEntityManager, NestTypeOrmQueryBuilder, NestTypeOrmRepository, OperationTokenMismatchError, QueryBuilderBase, ReplicationMode, SendgridEmailModule, SendgridEmailTemplate, SortDirection, UserRegistrationError, WpAppInitializer, WpAwsSesEmailTemplate, WpEmailTemplate, WpEntity, WpEntityActions, WpEntityAdapter, WpEntityAuthMiddleware, WpEntityConnector, WpEntityConverter, WpEntityManager, WpEntityQueryBuilder, WpEntityRepository, WpSendgridEmailTemplate, WpUserService, getLocalizedText, newUuid, renderHandlebarsTemplate };
25119
25139
  //# sourceMappingURL=index.js.map