@servicelabsco/slabs-access-manager 2.0.18 → 2.0.20

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 (109) hide show
  1. package/dist/access/controllers/business.email.controller.d.ts +7 -1
  2. package/dist/access/controllers/business.email.controller.js +23 -2
  3. package/dist/access/controllers/business.email.controller.js.map +1 -1
  4. package/dist/access/controllers/business.preference.controller.d.ts +3 -1
  5. package/dist/access/controllers/business.preference.controller.js +6 -3
  6. package/dist/access/controllers/business.preference.controller.js.map +1 -1
  7. package/dist/access/controllers/mail.log.controller.d.ts +11 -3
  8. package/dist/access/controllers/mail.log.controller.js +46 -12
  9. package/dist/access/controllers/mail.log.controller.js.map +1 -1
  10. package/dist/access/dtos/email.notification.payload.dto.d.ts +4 -0
  11. package/dist/access/dtos/email.notification.payload.dto.js.map +1 -1
  12. package/dist/access/dtos/fetch.business.email.messages.dto.d.ts +4 -0
  13. package/dist/access/dtos/fetch.business.email.messages.dto.js +35 -0
  14. package/dist/access/dtos/fetch.business.email.messages.dto.js.map +1 -0
  15. package/dist/access/dtos/index.d.ts +2 -0
  16. package/dist/access/dtos/index.js +2 -0
  17. package/dist/access/dtos/index.js.map +1 -1
  18. package/dist/access/dtos/mail.log.content.query.dto.d.ts +1 -2
  19. package/dist/access/dtos/mail.log.content.query.dto.js +1 -2
  20. package/dist/access/dtos/mail.log.content.query.dto.js.map +1 -1
  21. package/dist/access/dtos/mail.log.list.filter.dto.d.ts +0 -1
  22. package/dist/access/dtos/mail.log.list.filter.dto.js +0 -8
  23. package/dist/access/dtos/mail.log.list.filter.dto.js.map +1 -1
  24. package/dist/access/dtos/refresh.mail.log.status.dto.d.ts +3 -0
  25. package/dist/access/dtos/refresh.mail.log.status.dto.js +27 -0
  26. package/dist/access/dtos/refresh.mail.log.status.dto.js.map +1 -0
  27. package/dist/access/enums/notification.channel.type.enum.d.ts +1 -1
  28. package/dist/access/enums/notification.channel.type.enum.js +1 -1
  29. package/dist/access/enums/notification.channel.type.enum.js.map +1 -1
  30. package/dist/access/es6.classes.d.ts +14 -6
  31. package/dist/access/es6.classes.js +16 -0
  32. package/dist/access/es6.classes.js.map +1 -1
  33. package/dist/access/interfaces/email.redaction.map.interface.d.ts +1 -0
  34. package/dist/access/interfaces/email.redaction.map.interface.js +3 -0
  35. package/dist/access/interfaces/email.redaction.map.interface.js.map +1 -0
  36. package/dist/access/interfaces/index.d.ts +2 -0
  37. package/dist/access/interfaces/index.js +2 -0
  38. package/dist/access/interfaces/index.js.map +1 -1
  39. package/dist/access/interfaces/mail.log.read.scope.interface.d.ts +9 -0
  40. package/dist/access/interfaces/mail.log.read.scope.interface.js +3 -0
  41. package/dist/access/interfaces/mail.log.read.scope.interface.js.map +1 -0
  42. package/dist/access/interfaces/send.emithook.template.email.options.interface.d.ts +2 -0
  43. package/dist/access/jobs/fetch.business.email.messages.job.d.ts +25 -0
  44. package/dist/access/jobs/fetch.business.email.messages.job.js +86 -0
  45. package/dist/access/jobs/fetch.business.email.messages.job.js.map +1 -0
  46. package/dist/access/jobs/index.d.ts +2 -0
  47. package/dist/access/jobs/index.js +2 -0
  48. package/dist/access/jobs/index.js.map +1 -1
  49. package/dist/access/jobs/poll.emithook.email.inbox.job.d.ts +0 -3
  50. package/dist/access/jobs/poll.emithook.email.inbox.job.js +3 -46
  51. package/dist/access/jobs/poll.emithook.email.inbox.job.js.map +1 -1
  52. package/dist/access/jobs/refresh.business.mail.log.status.job.d.ts +19 -0
  53. package/dist/access/jobs/refresh.business.mail.log.status.job.js +40 -0
  54. package/dist/access/jobs/refresh.business.mail.log.status.job.js.map +1 -0
  55. package/dist/access/jobs/sync.email.messages.job.d.ts +0 -1
  56. package/dist/access/jobs/sync.email.messages.job.js +3 -16
  57. package/dist/access/jobs/sync.email.messages.job.js.map +1 -1
  58. package/dist/access/libraries/apply.email.test.redirect.d.ts +5 -0
  59. package/dist/access/libraries/apply.email.test.redirect.js +20 -0
  60. package/dist/access/libraries/apply.email.test.redirect.js.map +1 -0
  61. package/dist/access/libraries/fetch.emithook.mailbox.messages.d.ts +11 -0
  62. package/dist/access/libraries/fetch.emithook.mailbox.messages.js +57 -0
  63. package/dist/access/libraries/fetch.emithook.mailbox.messages.js.map +1 -0
  64. package/dist/access/libraries/fetch.meta.mailbox.messages.d.ts +10 -0
  65. package/dist/access/libraries/fetch.meta.mailbox.messages.js +35 -0
  66. package/dist/access/libraries/fetch.meta.mailbox.messages.js.map +1 -0
  67. package/dist/access/libraries/index.d.ts +4 -0
  68. package/dist/access/libraries/index.js +4 -0
  69. package/dist/access/libraries/index.js.map +1 -1
  70. package/dist/access/libraries/process.email.notification.d.ts +4 -0
  71. package/dist/access/libraries/process.email.notification.js +53 -11
  72. package/dist/access/libraries/process.email.notification.js.map +1 -1
  73. package/dist/access/libraries/process.internal.notification.js +2 -0
  74. package/dist/access/libraries/process.internal.notification.js.map +1 -1
  75. package/dist/access/libraries/process.mail.log.list.d.ts +2 -1
  76. package/dist/access/libraries/process.mail.log.list.js +5 -1
  77. package/dist/access/libraries/process.mail.log.list.js.map +1 -1
  78. package/dist/access/libraries/reconcile.emithook.email.status.d.ts +6 -0
  79. package/dist/access/libraries/reconcile.emithook.email.status.js +26 -1
  80. package/dist/access/libraries/reconcile.emithook.email.status.js.map +1 -1
  81. package/dist/access/libraries/redact.email.log.d.ts +17 -0
  82. package/dist/access/libraries/redact.email.log.js +93 -0
  83. package/dist/access/libraries/redact.email.log.js.map +1 -0
  84. package/dist/access/libraries/resolve.emithook.template.key.d.ts +0 -1
  85. package/dist/access/libraries/resolve.emithook.template.key.js +0 -12
  86. package/dist/access/libraries/resolve.emithook.template.key.js.map +1 -1
  87. package/dist/access/libraries/send.emithook.template.email.d.ts +1 -0
  88. package/dist/access/libraries/send.emithook.template.email.js +12 -6
  89. package/dist/access/libraries/send.emithook.template.email.js.map +1 -1
  90. package/dist/access/libraries/show.mail.log.content.d.ts +2 -1
  91. package/dist/access/libraries/show.mail.log.content.js +7 -1
  92. package/dist/access/libraries/show.mail.log.content.js.map +1 -1
  93. package/dist/access/libraries/show.mail.log.d.ts +2 -1
  94. package/dist/access/libraries/show.mail.log.js +4 -1
  95. package/dist/access/libraries/show.mail.log.js.map +1 -1
  96. package/dist/access/services/mail.log.access.service.d.ts +3 -2
  97. package/dist/access/services/mail.log.access.service.js +19 -5
  98. package/dist/access/services/mail.log.access.service.js.map +1 -1
  99. package/dist/migrations/1792454400003-AddSmsNotificationChannelDataSeederTable.js +1 -1
  100. package/dist/migrations/1792454400003-AddSmsNotificationChannelDataSeederTable.js.map +1 -1
  101. package/dist/migrations/1792532792345-AddBusinessIdSysMailLogsTable.js +4 -0
  102. package/dist/migrations/1792532792345-AddBusinessIdSysMailLogsTable.js.map +1 -1
  103. package/dist/migrations/1792614718869-MoveSmsNotificationChannelLookupValue.d.ts +7 -0
  104. package/dist/migrations/1792614718869-MoveSmsNotificationChannelLookupValue.js +43 -0
  105. package/dist/migrations/1792614718869-MoveSmsNotificationChannelLookupValue.js.map +1 -0
  106. package/dist/migrations/1792615636366-AddBusinessIdIndexSysMailLogsTable.d.ts +6 -0
  107. package/dist/migrations/1792615636366-AddBusinessIdIndexSysMailLogsTable.js +18 -0
  108. package/dist/migrations/1792615636366-AddBusinessIdIndexSysMailLogsTable.js.map +1 -0
  109. package/package.json +2 -2
@@ -14,12 +14,11 @@ const common_1 = require("@nestjs/common");
14
14
  const nestjs_utility_services_1 = require("@servicelabsco/nestjs-utility-services");
15
15
  const typeorm_1 = require("typeorm");
16
16
  const business_email_entity_1 = require("../entities/business.email.entity");
17
- const email_message_entity_1 = require("../entities/email.message.entity");
18
17
  const business_email_type_enum_1 = require("../enums/business.email.type.enum");
18
+ const fetch_emithook_mailbox_messages_1 = require("../libraries/fetch.emithook.mailbox.messages");
19
19
  const emithook_service_1 = require("../services/emithook.service");
20
20
  const handle_emithook_email_job_1 = require("./handle.emithook.email.job");
21
21
  const DEFAULT_LOOKBACK_HOURS = 2;
22
- const MAX_PAGES = 20;
23
22
  let PollEmithookEmailInboxJob = class PollEmithookEmailInboxJob extends nestjs_utility_services_1.CommonJob {
24
23
  constructor(queueService, emithookService, handleEmithookEmailJob) {
25
24
  super('7158f74fd614f3df7d918dd010c73c71');
@@ -34,10 +33,11 @@ let PollEmithookEmailInboxJob = class PollEmithookEmailInboxJob extends nestjs_u
34
33
  const hours = payload?.hours > 0 ? payload.hours : DEFAULT_LOOKBACK_HOURS;
35
34
  const since = new Date(Date.now() - hours * 60 * 60 * 1000);
36
35
  const mailboxes = await this.mailboxes();
36
+ const fetcher = new fetch_emithook_mailbox_messages_1.FetchEmithookMailboxMessages(this.emithookService, this.handleEmithookEmailJob);
37
37
  let stored = 0;
38
38
  for (const mailbox of mailboxes) {
39
39
  try {
40
- const count = await this.sweep(mailbox, since);
40
+ const count = await fetcher.process(mailbox, since);
41
41
  stored += count;
42
42
  }
43
43
  catch (error) {
@@ -46,49 +46,6 @@ let PollEmithookEmailInboxJob = class PollEmithookEmailInboxJob extends nestjs_u
46
46
  }
47
47
  return stored;
48
48
  }
49
- async sweep(mailbox, since) {
50
- let stored = 0;
51
- let cursor;
52
- for (let pages = 0; pages < MAX_PAGES; pages++) {
53
- const page = await this.emithookService.listMessages(mailbox.identifier, cursor);
54
- const rows = page.data || [];
55
- if (!rows.length)
56
- return stored;
57
- for (const row of rows) {
58
- if (this.isBefore(row.received_at, since))
59
- return stored;
60
- if (!row.message_id)
61
- continue;
62
- const existing = await email_message_entity_1.EmailMessageEntity.findOne({
63
- where: { email_id: mailbox.id, identifier: row.message_id, deleted_at: (0, typeorm_1.IsNull)() },
64
- });
65
- if (existing?.id)
66
- continue;
67
- await this.handleEmithookEmailJob.handle(this.envelope(mailbox, row));
68
- stored += 1;
69
- }
70
- if (!page.next_cursor)
71
- return stored;
72
- cursor = page.next_cursor;
73
- }
74
- this.logger.warn(`emithook inbox poll stopped after ${MAX_PAGES} pages for ${mailbox.identifier}`);
75
- return stored;
76
- }
77
- envelope(mailbox, row) {
78
- return {
79
- version: 2,
80
- metadata: { source: 'email', identifier: mailbox.identifier, event_id: row.id, name: mailbox.email },
81
- data: { body: { message_id: row.message_id }, headers: {}, queries: {} },
82
- };
83
- }
84
- isBefore(receivedAt, since) {
85
- if (!receivedAt)
86
- return false;
87
- const received = new Date(receivedAt);
88
- if (Number.isNaN(received.getTime()))
89
- return false;
90
- return received < since;
91
- }
92
49
  async mailboxes() {
93
50
  return business_email_entity_1.BusinessEmailEntity.find({
94
51
  where: {
@@ -1 +1 @@
1
- {"version":3,"file":"poll.emithook.email.inbox.job.js","sourceRoot":"","sources":["../../../src/access/jobs/poll.emithook.email.inbox.job.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"poll.emithook.email.inbox.job.js","sourceRoot":"","sources":["../../../src/access/jobs/poll.emithook.email.inbox.job.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,oFAAiF;AACjF,qCAA2C;AAC3C,6EAAwE;AACxE,gFAA0E;AAC1E,kGAA4F;AAC5F,mEAA+D;AAC/D,2EAAqE;AAGrE,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAQ1B,IAAM,yBAAyB,GAA/B,MAAM,yBAA0B,SAAQ,mCAAS;IAKpD,YACuB,YAA0B,EAC5B,eAAgC,EAChC,sBAA8C;QAE/D,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAJvB,iBAAY,GAAZ,YAAY,CAAc;QAC5B,oBAAe,GAAf,eAAe,CAAiB;QAChC,2BAAsB,GAAtB,sBAAsB,CAAwB;QAPzD,gBAAW,GAAG,IAAI,CAAC;QACnB,aAAQ,GAAG,EAAE,CAAC;QACd,YAAO,GAAW,MAAM,CAAC;IAQnC,CAAC;IAOD,KAAK,CAAC,MAAM,CAAC,OAA4B;QACrC,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC;QAC1E,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,8DAA4B,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACpG,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACpD,MAAM,IAAI,KAAK,CAAC;YACpB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,OAAO,CAAC,UAAU,MAAM,KAAK,EAAE,CAAC,CAAC;YACzF,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAMO,KAAK,CAAC,SAAS;QACnB,OAAO,2CAAmB,CAAC,IAAI,CAAC;YAC5B,KAAK,EAAE;gBACH,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,IAAA,aAAG,EAAC,IAAA,gBAAM,GAAE,CAAC;gBACzB,UAAU,EAAE,IAAA,aAAG,EAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,qBAAqB,EAAE,EAAE,IAAI,EAAE,gDAAqB,CAAC,QAAQ,EAAE,CAAC;aACxG;SACJ,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AAlDY,8DAAyB;oCAAzB,yBAAyB;IADrC,IAAA,mBAAU,GAAE;qCAO4B,sCAAY;QACX,kCAAe;QACR,kDAAsB;GAR1D,yBAAyB,CAkDrC"}
@@ -0,0 +1,19 @@
1
+ import { CommonJob, QueueService, SqlService } from '@servicelabsco/nestjs-utility-services';
2
+ import { EmithookService } from '../services/emithook.service';
3
+ export declare const MAIL_LOG_REFRESH_DEFAULT_HOURS = 48;
4
+ export declare class RefreshBusinessMailLogStatusJob extends CommonJob {
5
+ protected readonly queueService: QueueService;
6
+ private readonly sqlService;
7
+ private readonly emithookService;
8
+ protected noDuplicate: boolean;
9
+ protected timeout: number;
10
+ constructor(queueService: QueueService, sqlService: SqlService, emithookService: EmithookService);
11
+ handle(payload: {
12
+ business_id: number;
13
+ recipient_user_id?: number;
14
+ hours?: number;
15
+ }): Promise<{
16
+ checked: number;
17
+ failed: number;
18
+ }>;
19
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RefreshBusinessMailLogStatusJob = exports.MAIL_LOG_REFRESH_DEFAULT_HOURS = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const nestjs_utility_services_1 = require("@servicelabsco/nestjs-utility-services");
15
+ const reconcile_emithook_email_status_1 = require("../libraries/reconcile.emithook.email.status");
16
+ const emithook_service_1 = require("../services/emithook.service");
17
+ exports.MAIL_LOG_REFRESH_DEFAULT_HOURS = 48;
18
+ let RefreshBusinessMailLogStatusJob = class RefreshBusinessMailLogStatusJob extends nestjs_utility_services_1.CommonJob {
19
+ constructor(queueService, sqlService, emithookService) {
20
+ super('466a3124f94bd042d1d7e507c8908fa1');
21
+ this.queueService = queueService;
22
+ this.sqlService = sqlService;
23
+ this.emithookService = emithookService;
24
+ this.noDuplicate = true;
25
+ this.timeout = 600000;
26
+ }
27
+ async handle(payload) {
28
+ const hours = payload?.hours > 0 ? payload.hours : exports.MAIL_LOG_REFRESH_DEFAULT_HOURS;
29
+ const since = new Date(Date.now() - hours * 60 * 60 * 1000);
30
+ return new reconcile_emithook_email_status_1.ReconcileEmithookEmailStatus(this.sqlService, this.emithookService).processBusiness(payload.business_id, since, payload.recipient_user_id);
31
+ }
32
+ };
33
+ exports.RefreshBusinessMailLogStatusJob = RefreshBusinessMailLogStatusJob;
34
+ exports.RefreshBusinessMailLogStatusJob = RefreshBusinessMailLogStatusJob = __decorate([
35
+ (0, common_1.Injectable)(),
36
+ __metadata("design:paramtypes", [nestjs_utility_services_1.QueueService,
37
+ nestjs_utility_services_1.SqlService,
38
+ emithook_service_1.EmithookService])
39
+ ], RefreshBusinessMailLogStatusJob);
40
+ //# sourceMappingURL=refresh.business.mail.log.status.job.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh.business.mail.log.status.job.js","sourceRoot":"","sources":["../../../src/access/jobs/refresh.business.mail.log.status.job.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,oFAA6F;AAC7F,kGAA4F;AAC5F,mEAA+D;AAGlD,QAAA,8BAA8B,GAAG,EAAE,CAAC;AAQ1C,IAAM,+BAA+B,GAArC,MAAM,+BAAgC,SAAQ,mCAAS;IAI1D,YACuB,YAA0B,EAC5B,UAAsB,EACtB,eAAgC;QAEjD,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAJvB,iBAAY,GAAZ,YAAY,CAAc;QAC5B,eAAU,GAAV,UAAU,CAAY;QACtB,oBAAe,GAAf,eAAe,CAAiB;QAN3C,gBAAW,GAAG,IAAI,CAAC;QACnB,YAAO,GAAW,MAAM,CAAC;IAQnC,CAAC;IAOD,KAAK,CAAC,MAAM,CAAC,OAA4E;QACrF,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,sCAA8B,CAAC;QAClF,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAE5D,OAAO,IAAI,8DAA4B,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,eAAe,CAC1F,OAAO,CAAC,WAAW,EACnB,KAAK,EACL,OAAO,CAAC,iBAAiB,CAC5B,CAAC;IACN,CAAC;CACJ,CAAA;AA3BY,0EAA+B;0CAA/B,+BAA+B;IAD3C,IAAA,mBAAU,GAAE;qCAM4B,sCAAY;QAChB,oCAAU;QACL,kCAAe;GAP5C,+BAA+B,CA2B3C"}
@@ -6,5 +6,4 @@ export declare class SyncEmailMessagesJob extends CommonJob {
6
6
  private readonly internalServerConnectService;
7
7
  constructor(queueService: QueueService, processServerEmailJob: ProcessServerEmailJob, internalServerConnectService: InternalServerConnectService);
8
8
  handle(date: string): Promise<void>;
9
- private handleEmail;
10
9
  }
@@ -14,7 +14,7 @@ const common_1 = require("@nestjs/common");
14
14
  const nestjs_utility_services_1 = require("@servicelabsco/nestjs-utility-services");
15
15
  const typeorm_1 = require("typeorm");
16
16
  const business_email_entity_1 = require("../entities/business.email.entity");
17
- const email_message_entity_1 = require("../entities/email.message.entity");
17
+ const fetch_meta_mailbox_messages_1 = require("../libraries/fetch.meta.mailbox.messages");
18
18
  const process_server_email_job_1 = require("./process.server.email.job");
19
19
  let SyncEmailMessagesJob = class SyncEmailMessagesJob extends nestjs_utility_services_1.CommonJob {
20
20
  constructor(queueService, processServerEmailJob, internalServerConnectService) {
@@ -25,25 +25,12 @@ let SyncEmailMessagesJob = class SyncEmailMessagesJob extends nestjs_utility_ser
25
25
  }
26
26
  async handle(date) {
27
27
  const d = date ? new Date(date) : new Date();
28
- const day = nestjs_utility_services_1.DateUtil.getDateInFormat(d);
29
28
  const emails = await business_email_entity_1.BusinessEmailEntity.find({ where: { active: true, meta_server_id: (0, typeorm_1.Not)((0, typeorm_1.IsNull)()) } });
29
+ const fetcher = new fetch_meta_mailbox_messages_1.FetchMetaMailboxMessages(this.internalServerConnectService, this.processServerEmailJob);
30
30
  for (const email of emails) {
31
- const response = await this.internalServerConnectService.get('meta', `email/${email.meta_server_id}/messages?day=${day}`);
32
- const messages = response?.data || [];
33
- for (const message of messages) {
34
- await this.handleEmail(email, message);
35
- }
31
+ await fetcher.process(email, d);
36
32
  }
37
33
  }
38
- async handleEmail(email, message) {
39
- const identifier = message?.identifier;
40
- if (!identifier)
41
- return;
42
- const r = await email_message_entity_1.EmailMessageEntity.findOne({ where: { email_id: email.id, identifier } });
43
- if (r)
44
- return;
45
- return this.processServerEmailJob.dispatch(message?.id);
46
- }
47
34
  };
48
35
  exports.SyncEmailMessagesJob = SyncEmailMessagesJob;
49
36
  exports.SyncEmailMessagesJob = SyncEmailMessagesJob = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"sync.email.messages.job.js","sourceRoot":"","sources":["../../../src/access/jobs/sync.email.messages.job.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,oFAAyH;AACzH,qCAAsC;AACtC,6EAAwE;AACxE,2EAAsE;AACtE,yEAAmE;AAO5D,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,mCAAS;IAC/C,YACuB,YAA0B,EAC1B,qBAA4C,EAC9C,4BAA0D;QAE3E,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAJvB,iBAAY,GAAZ,YAAY,CAAc;QAC1B,0BAAqB,GAArB,qBAAqB,CAAuB;QAC9C,iCAA4B,GAA5B,4BAA4B,CAA8B;IAG/E,CAAC;IAOD,KAAK,CAAC,MAAM,CAAC,IAAY;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,kCAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAExC,MAAM,MAAM,GAAG,MAAM,2CAAmB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAA,aAAG,EAAC,IAAA,gBAAM,GAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAE1G,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,KAAK,CAAC,cAAc,iBAAiB,GAAG,EAAE,CAAC,CAAC;YAE1H,MAAM,QAAQ,GAAG,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;YACtC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC7B,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC3C,CAAC;QACL,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,KAA0B,EAAE,OAA2B;QAC7E,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;QACvC,IAAI,CAAC,UAAU;YAAE,OAAO;QAExB,MAAM,CAAC,GAAG,MAAM,yCAAkB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QAC1F,IAAI,CAAC;YAAE,OAAO;QAEd,OAAO,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC5D,CAAC;CACJ,CAAA;AAvCY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;qCAG4B,sCAAY;QACH,gDAAqB;QAChB,sDAA4B;GAJtE,oBAAoB,CAuChC"}
1
+ {"version":3,"file":"sync.email.messages.job.js","sourceRoot":"","sources":["../../../src/access/jobs/sync.email.messages.job.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,oFAA+G;AAC/G,qCAAsC;AACtC,6EAAwE;AACxE,0FAAoF;AACpF,yEAAmE;AAO5D,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,mCAAS;IAC/C,YACuB,YAA0B,EAC1B,qBAA4C,EAC9C,4BAA0D;QAE3E,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAJvB,iBAAY,GAAZ,YAAY,CAAc;QAC1B,0BAAqB,GAArB,qBAAqB,CAAuB;QAC9C,iCAA4B,GAA5B,4BAA4B,CAA8B;IAG/E,CAAC;IAMD,KAAK,CAAC,MAAM,CAAC,IAAY;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAE7C,MAAM,MAAM,GAAG,MAAM,2CAAmB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAA,aAAG,EAAC,IAAA,gBAAM,GAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1G,MAAM,OAAO,GAAG,IAAI,sDAAwB,CAAC,IAAI,CAAC,4BAA4B,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAE5G,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACpC,CAAC;IACL,CAAC;CACJ,CAAA;AAvBY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;qCAG4B,sCAAY;QACH,gDAAqB;QAChB,sDAA4B;GAJtE,oBAAoB,CAuBhC"}
@@ -0,0 +1,5 @@
1
+ import { PropertyService } from '@servicelabsco/nestjs-utility-services';
2
+ import { EmailNotificationPayloadDto } from '../dtos/email.notification.payload.dto';
3
+ export declare class ApplyEmailTestRedirect {
4
+ static process(payload: EmailNotificationPayloadDto, propertyService?: PropertyService): Promise<boolean>;
5
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApplyEmailTestRedirect = void 0;
4
+ class ApplyEmailTestRedirect {
5
+ static async process(payload, propertyService) {
6
+ if (!propertyService)
7
+ return false;
8
+ const value = await propertyService.get('email.test.redirect.to', null);
9
+ const redirect = typeof value === 'string' ? value.trim() : '';
10
+ if (!redirect)
11
+ return false;
12
+ payload.to = [redirect];
13
+ payload.cc = [];
14
+ payload.bcc = [];
15
+ payload.metadata = { ...payload.metadata, test_redirect: true };
16
+ return true;
17
+ }
18
+ }
19
+ exports.ApplyEmailTestRedirect = ApplyEmailTestRedirect;
20
+ //# sourceMappingURL=apply.email.test.redirect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply.email.test.redirect.js","sourceRoot":"","sources":["../../../src/access/libraries/apply.email.test.redirect.ts"],"names":[],"mappings":";;;AAQA,MAAa,sBAAsB;IAS/B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAoC,EAAE,eAAiC;QACxF,IAAI,CAAC,eAAe;YAAE,OAAO,KAAK,CAAC;QAEnC,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAE5B,OAAO,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;QACjB,OAAO,CAAC,QAAQ,GAAG,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAtBD,wDAsBC"}
@@ -0,0 +1,11 @@
1
+ import { BusinessEmailEntity } from '../entities/business.email.entity';
2
+ import { HandleEmithookEmailJob } from '../jobs/handle.emithook.email.job';
3
+ import { EmithookService } from '../services/emithook.service';
4
+ export declare class FetchEmithookMailboxMessages {
5
+ private readonly emithookService;
6
+ private readonly handleEmithookEmailJob;
7
+ constructor(emithookService: EmithookService, handleEmithookEmailJob: HandleEmithookEmailJob);
8
+ process(mailbox: BusinessEmailEntity, since: Date): Promise<number>;
9
+ private envelope;
10
+ private isBefore;
11
+ }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FetchEmithookMailboxMessages = void 0;
4
+ const typeorm_1 = require("typeorm");
5
+ const email_message_entity_1 = require("../entities/email.message.entity");
6
+ const MAX_PAGES = 20;
7
+ class FetchEmithookMailboxMessages {
8
+ constructor(emithookService, handleEmithookEmailJob) {
9
+ this.emithookService = emithookService;
10
+ this.handleEmithookEmailJob = handleEmithookEmailJob;
11
+ }
12
+ async process(mailbox, since) {
13
+ let stored = 0;
14
+ let cursor;
15
+ for (let pages = 0; pages < MAX_PAGES; pages++) {
16
+ const page = await this.emithookService.listMessages(mailbox.identifier, cursor);
17
+ const rows = page.data || [];
18
+ if (!rows.length)
19
+ return stored;
20
+ for (const row of rows) {
21
+ if (this.isBefore(row.received_at, since))
22
+ return stored;
23
+ if (!row.message_id)
24
+ continue;
25
+ const existing = await email_message_entity_1.EmailMessageEntity.findOne({
26
+ where: { email_id: mailbox.id, identifier: row.message_id, deleted_at: (0, typeorm_1.IsNull)() },
27
+ });
28
+ if (existing?.id)
29
+ continue;
30
+ await this.handleEmithookEmailJob.handle(this.envelope(mailbox, row));
31
+ stored += 1;
32
+ }
33
+ if (!page.next_cursor)
34
+ return stored;
35
+ cursor = page.next_cursor;
36
+ }
37
+ global.console.warn(`emithook inbox fetch stopped after ${MAX_PAGES} pages for ${mailbox.identifier}`);
38
+ return stored;
39
+ }
40
+ envelope(mailbox, row) {
41
+ return {
42
+ version: 2,
43
+ metadata: { source: 'email', identifier: mailbox.identifier, event_id: row.id, name: mailbox.email },
44
+ data: { body: { message_id: row.message_id }, headers: {}, queries: {} },
45
+ };
46
+ }
47
+ isBefore(receivedAt, since) {
48
+ if (!receivedAt)
49
+ return false;
50
+ const received = new Date(receivedAt);
51
+ if (Number.isNaN(received.getTime()))
52
+ return false;
53
+ return received < since;
54
+ }
55
+ }
56
+ exports.FetchEmithookMailboxMessages = FetchEmithookMailboxMessages;
57
+ //# sourceMappingURL=fetch.emithook.mailbox.messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.emithook.mailbox.messages.js","sourceRoot":"","sources":["../../../src/access/libraries/fetch.emithook.mailbox.messages.ts"],"names":[],"mappings":";;;AAAA,qCAAiC;AAGjC,2EAAsE;AAMtE,MAAM,SAAS,GAAG,EAAE,CAAC;AAOrB,MAAa,4BAA4B;IACrC,YACqB,eAAgC,EAChC,sBAA8C;QAD9C,oBAAe,GAAf,eAAe,CAAiB;QAChC,2BAAsB,GAAtB,sBAAsB,CAAwB;IAChE,CAAC;IASJ,KAAK,CAAC,OAAO,CAAC,OAA4B,EAAE,KAAW;QACnD,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,MAAc,CAAC;QAEnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACjF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO,MAAM,CAAC;YAEhC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACrB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC;oBAAE,OAAO,MAAM,CAAC;gBACzD,IAAI,CAAC,GAAG,CAAC,UAAU;oBAAE,SAAS;gBAE9B,MAAM,QAAQ,GAAG,MAAM,yCAAkB,CAAC,OAAO,CAAC;oBAC9C,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,IAAA,gBAAM,GAAE,EAAE;iBACpF,CAAC,CAAC;gBACH,IAAI,QAAQ,EAAE,EAAE;oBAAE,SAAS;gBAE3B,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;gBACtE,MAAM,IAAI,CAAC,CAAC;YAChB,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,WAAW;gBAAE,OAAO,MAAM,CAAC;YACrC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;QAC9B,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,sCAAsC,SAAS,cAAc,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAEvG,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,QAAQ,CAAC,OAA4B,EAAE,GAAyC;QACpF,OAAO;YACH,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAS;YAC3G,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;SAC3E,CAAC;IACN,CAAC;IAEO,QAAQ,CAAC,UAAkB,EAAE,KAAW;QAC5C,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;QAEnD,OAAO,QAAQ,GAAG,KAAK,CAAC;IAC5B,CAAC;CACJ;AA3DD,oEA2DC"}
@@ -0,0 +1,10 @@
1
+ import { InternalServerConnectService } from '@servicelabsco/nestjs-utility-services';
2
+ import { BusinessEmailEntity } from '../entities/business.email.entity';
3
+ import { ProcessServerEmailJob } from '../jobs/process.server.email.job';
4
+ export declare class FetchMetaMailboxMessages {
5
+ private readonly internalServerConnectService;
6
+ private readonly processServerEmailJob;
7
+ constructor(internalServerConnectService: InternalServerConnectService, processServerEmailJob: ProcessServerEmailJob);
8
+ process(mailbox: BusinessEmailEntity, date: Date): Promise<number>;
9
+ private handleMessage;
10
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FetchMetaMailboxMessages = void 0;
4
+ const nestjs_utility_services_1 = require("@servicelabsco/nestjs-utility-services");
5
+ const email_message_entity_1 = require("../entities/email.message.entity");
6
+ class FetchMetaMailboxMessages {
7
+ constructor(internalServerConnectService, processServerEmailJob) {
8
+ this.internalServerConnectService = internalServerConnectService;
9
+ this.processServerEmailJob = processServerEmailJob;
10
+ }
11
+ async process(mailbox, date) {
12
+ const day = nestjs_utility_services_1.DateUtil.getDateInFormat(date);
13
+ const response = await this.internalServerConnectService.get('meta', `email/${mailbox.meta_server_id}/messages?day=${day}`);
14
+ const messages = response?.data || [];
15
+ let queued = 0;
16
+ for (const message of messages) {
17
+ const dispatched = await this.handleMessage(mailbox, message);
18
+ if (dispatched)
19
+ queued += 1;
20
+ }
21
+ return queued;
22
+ }
23
+ async handleMessage(mailbox, message) {
24
+ const identifier = message?.identifier;
25
+ if (!identifier)
26
+ return false;
27
+ const existing = await email_message_entity_1.EmailMessageEntity.findOne({ where: { email_id: mailbox.id, identifier } });
28
+ if (existing)
29
+ return false;
30
+ await this.processServerEmailJob.dispatch(message?.id);
31
+ return true;
32
+ }
33
+ }
34
+ exports.FetchMetaMailboxMessages = FetchMetaMailboxMessages;
35
+ //# sourceMappingURL=fetch.meta.mailbox.messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.meta.mailbox.messages.js","sourceRoot":"","sources":["../../../src/access/libraries/fetch.meta.mailbox.messages.ts"],"names":[],"mappings":";;;AAAA,oFAAgG;AAEhG,2EAAsE;AAQtE,MAAa,wBAAwB;IACjC,YACqB,4BAA0D,EAC1D,qBAA4C;QAD5C,iCAA4B,GAA5B,4BAA4B,CAA8B;QAC1D,0BAAqB,GAArB,qBAAqB,CAAuB;IAC9D,CAAC;IAOJ,KAAK,CAAC,OAAO,CAAC,OAA4B,EAAE,IAAU;QAClD,MAAM,GAAG,GAAG,kCAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,OAAO,CAAC,cAAc,iBAAiB,GAAG,EAAE,CAAC,CAAC;QAE5H,MAAM,QAAQ,GAAyB,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;QAC5D,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9D,IAAI,UAAU;gBAAE,MAAM,IAAI,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAKO,KAAK,CAAC,aAAa,CAAC,OAA4B,EAAE,OAA2B;QACjF,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;QACvC,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QAE9B,MAAM,QAAQ,GAAG,MAAM,yCAAkB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QACnG,IAAI,QAAQ;YAAE,OAAO,KAAK,CAAC;QAE3B,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAvCD,4DAuCC"}
@@ -1,3 +1,4 @@
1
+ export * from './apply.email.test.redirect';
1
2
  export * from './apply.menu.layout';
2
3
  export * from './apply.notification.preferences';
3
4
  export * from './assert.safe.sql.fragment';
@@ -10,6 +11,8 @@ export * from './delete.business.property';
10
11
  export * from './evaluate.email.rule';
11
12
  export * from './execute.business.script';
12
13
  export * from './extract.client.credentials';
14
+ export * from './fetch.emithook.mailbox.messages';
15
+ export * from './fetch.meta.mailbox.messages';
13
16
  export * from './load.notification.preference.context';
14
17
  export * from './notification.type.catalogue';
15
18
  export * from './oauth.pkce';
@@ -110,6 +113,7 @@ export * from './process.zoho.integration';
110
113
  export * from './read.eml.attachments';
111
114
  export * from './reconcile.emithook.email.status';
112
115
  export * from './record.emithook.email.events';
116
+ export * from './redact.email.log';
113
117
  export * from './report.view.enablement';
114
118
  export * from './report.view.query.compiler';
115
119
  export * from './resolve.client.ip';
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./apply.email.test.redirect"), exports);
17
18
  __exportStar(require("./apply.menu.layout"), exports);
18
19
  __exportStar(require("./apply.notification.preferences"), exports);
19
20
  __exportStar(require("./assert.safe.sql.fragment"), exports);
@@ -26,6 +27,8 @@ __exportStar(require("./delete.business.property"), exports);
26
27
  __exportStar(require("./evaluate.email.rule"), exports);
27
28
  __exportStar(require("./execute.business.script"), exports);
28
29
  __exportStar(require("./extract.client.credentials"), exports);
30
+ __exportStar(require("./fetch.emithook.mailbox.messages"), exports);
31
+ __exportStar(require("./fetch.meta.mailbox.messages"), exports);
29
32
  __exportStar(require("./load.notification.preference.context"), exports);
30
33
  __exportStar(require("./notification.type.catalogue"), exports);
31
34
  __exportStar(require("./oauth.pkce"), exports);
@@ -126,6 +129,7 @@ __exportStar(require("./process.zoho.integration"), exports);
126
129
  __exportStar(require("./read.eml.attachments"), exports);
127
130
  __exportStar(require("./reconcile.emithook.email.status"), exports);
128
131
  __exportStar(require("./record.emithook.email.events"), exports);
132
+ __exportStar(require("./redact.email.log"), exports);
129
133
  __exportStar(require("./report.view.enablement"), exports);
130
134
  __exportStar(require("./report.view.query.compiler"), exports);
131
135
  __exportStar(require("./resolve.client.ip"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/access/libraries/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,sDAAoC;AACpC,mEAAiD;AACjD,6DAA2C;AAC3C,oEAAkD;AAClD,0DAAwC;AACxC,4DAA0C;AAC1C,gEAA8C;AAC9C,4CAA0B;AAC1B,6DAA2C;AAC3C,wDAAsC;AACtC,4DAA0C;AAC1C,+DAA6C;AAC7C,yEAAuD;AACvD,gEAA8C;AAC9C,+CAA6B;AAC7B,8DAA4C;AAC5C,+DAA6C;AAC7C,6DAA2C;AAC3C,6DAA2C;AAC3C,4DAA0C;AAC1C,6DAA2C;AAC3C,kEAAgD;AAChD,6DAA2C;AAC3C,mEAAiD;AACjD,gEAA8C;AAC9C,sEAAoD;AACpD,sEAAoD;AACpD,yEAAuD;AACvD,0FAAwE;AACxE,mEAAiD;AACjD,mEAAiD;AACjD,iEAA+C;AAC/C,qEAAmD;AACnD,iEAA+C;AAC/C,iEAA+C;AAC/C,+DAA6C;AAC7C,qEAAmD;AACnD,uFAAqE;AACrE,sEAAoD;AACpD,6DAA2C;AAC3C,6DAA2C;AAC3C,6DAA2C;AAC3C,6DAA2C;AAC3C,gEAA8C;AAC9C,gEAA8C;AAC9C,wDAAsC;AACtC,8DAA4C;AAC5C,uEAAqD;AACrD,+DAA6C;AAC7C,kEAAgD;AAChD,8DAA4C;AAC5C,gEAA8C;AAC9C,kEAAgD;AAChD,6DAA2C;AAC3C,wDAAsC;AACtC,oDAAkC;AAClC,2DAAyC;AACzC,8DAA4C;AAC5C,gEAA8C;AAC9C,sEAAoD;AACpD,+DAA6C;AAC7C,4DAA0C;AAC1C,4DAA0C;AAC1C,kEAAgD;AAChD,+DAA6C;AAC7C,+DAA6C;AAC7C,mEAAiD;AACjD,kEAAgD;AAChD,kEAAgD;AAChD,6DAA2C;AAC3C,4DAA0C;AAC1C,0DAAwC;AACxC,8DAA4C;AAC5C,kEAAgD;AAChD,4DAA0C;AAC1C,6DAA2C;AAC3C,6DAA2C;AAC3C,kEAAgD;AAChD,kEAAgD;AAChD,6DAA2C;AAC3C,0DAAwC;AACxC,kEAAgD;AAChD,+DAA6C;AAC7C,6DAA2C;AAC3C,6DAA2C;AAC3C,0DAAwC;AACxC,0DAAwC;AACxC,yDAAuC;AACvC,4DAA0C;AAC1C,iEAA+C;AAC/C,yDAAuC;AACvC,mEAAiD;AACjD,mEAAiD;AACjD,4DAA0C;AAC1C,wDAAsC;AACtC,8DAA4C;AAC5C,qEAAmD;AACnD,oEAAkD;AAClD,kEAAgD;AAChD,uEAAqD;AACrD,kEAAgD;AAChD,8DAA4C;AAC5C,0DAAwC;AACxC,sDAAoC;AACpC,gEAA8C;AAC9C,mEAAiD;AACjD,iEAA+C;AAC/C,6DAA2C;AAC3C,6DAA2C;AAC3C,yDAAuC;AACvC,oEAAkD;AAClD,iEAA+C;AAC/C,2DAAyC;AACzC,+DAA6C;AAC7C,sDAAoC;AACpC,kEAAgD;AAChD,oEAAkD;AAClD,6DAA2C;AAC3C,0DAAwC;AACxC,gEAA8C;AAC9C,4DAA0C;AAC1C,iEAA+C;AAC/C,0DAAwC;AACxC,oEAAkD;AAClD,oEAAkD;AAClD,oEAAkD;AAClD,qEAAmD;AACnD,yDAAuC;AACvC,uEAAqD;AACrD,sDAAoC;AACpC,0DAAwC;AACxC,kDAAgC;AAChC,0DAAwC;AACxC,kDAAgC;AAChC,4DAA0C;AAC1C,yDAAuC;AACvC,8DAA4C;AAC5C,qDAAmC;AACnC,+DAA6C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/access/libraries/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,8DAA4C;AAC5C,sDAAoC;AACpC,mEAAiD;AACjD,6DAA2C;AAC3C,oEAAkD;AAClD,0DAAwC;AACxC,4DAA0C;AAC1C,gEAA8C;AAC9C,4CAA0B;AAC1B,6DAA2C;AAC3C,wDAAsC;AACtC,4DAA0C;AAC1C,+DAA6C;AAC7C,oEAAkD;AAClD,gEAA8C;AAC9C,yEAAuD;AACvD,gEAA8C;AAC9C,+CAA6B;AAC7B,8DAA4C;AAC5C,+DAA6C;AAC7C,6DAA2C;AAC3C,6DAA2C;AAC3C,4DAA0C;AAC1C,6DAA2C;AAC3C,kEAAgD;AAChD,6DAA2C;AAC3C,mEAAiD;AACjD,gEAA8C;AAC9C,sEAAoD;AACpD,sEAAoD;AACpD,yEAAuD;AACvD,0FAAwE;AACxE,mEAAiD;AACjD,mEAAiD;AACjD,iEAA+C;AAC/C,qEAAmD;AACnD,iEAA+C;AAC/C,iEAA+C;AAC/C,+DAA6C;AAC7C,qEAAmD;AACnD,uFAAqE;AACrE,sEAAoD;AACpD,6DAA2C;AAC3C,6DAA2C;AAC3C,6DAA2C;AAC3C,6DAA2C;AAC3C,gEAA8C;AAC9C,gEAA8C;AAC9C,wDAAsC;AACtC,8DAA4C;AAC5C,uEAAqD;AACrD,+DAA6C;AAC7C,kEAAgD;AAChD,8DAA4C;AAC5C,gEAA8C;AAC9C,kEAAgD;AAChD,6DAA2C;AAC3C,wDAAsC;AACtC,oDAAkC;AAClC,2DAAyC;AACzC,8DAA4C;AAC5C,gEAA8C;AAC9C,sEAAoD;AACpD,+DAA6C;AAC7C,4DAA0C;AAC1C,4DAA0C;AAC1C,kEAAgD;AAChD,+DAA6C;AAC7C,+DAA6C;AAC7C,mEAAiD;AACjD,kEAAgD;AAChD,kEAAgD;AAChD,6DAA2C;AAC3C,4DAA0C;AAC1C,0DAAwC;AACxC,8DAA4C;AAC5C,kEAAgD;AAChD,4DAA0C;AAC1C,6DAA2C;AAC3C,6DAA2C;AAC3C,kEAAgD;AAChD,kEAAgD;AAChD,6DAA2C;AAC3C,0DAAwC;AACxC,kEAAgD;AAChD,+DAA6C;AAC7C,6DAA2C;AAC3C,6DAA2C;AAC3C,0DAAwC;AACxC,0DAAwC;AACxC,yDAAuC;AACvC,4DAA0C;AAC1C,iEAA+C;AAC/C,yDAAuC;AACvC,mEAAiD;AACjD,mEAAiD;AACjD,4DAA0C;AAC1C,wDAAsC;AACtC,8DAA4C;AAC5C,qEAAmD;AACnD,oEAAkD;AAClD,kEAAgD;AAChD,uEAAqD;AACrD,kEAAgD;AAChD,8DAA4C;AAC5C,0DAAwC;AACxC,sDAAoC;AACpC,gEAA8C;AAC9C,mEAAiD;AACjD,iEAA+C;AAC/C,6DAA2C;AAC3C,6DAA2C;AAC3C,yDAAuC;AACvC,oEAAkD;AAClD,iEAA+C;AAC/C,qDAAmC;AACnC,2DAAyC;AACzC,+DAA6C;AAC7C,sDAAoC;AACpC,kEAAgD;AAChD,oEAAkD;AAClD,6DAA2C;AAC3C,0DAAwC;AACxC,gEAA8C;AAC9C,4DAA0C;AAC1C,iEAA+C;AAC/C,0DAAwC;AACxC,oEAAkD;AAClD,oEAAkD;AAClD,oEAAkD;AAClD,qEAAmD;AACnD,yDAAuC;AACvC,uEAAqD;AACrD,sDAAoC;AACpC,0DAAwC;AACxC,kDAAgC;AAChC,0DAAwC;AACxC,kDAAgC;AAChC,4DAA0C;AAC1C,yDAAuC;AACvC,8DAA4C;AAC5C,qDAAmC;AACnC,+DAA6C"}
@@ -15,18 +15,22 @@ export declare class ProcessEmailNotification {
15
15
  private knownUserAddress;
16
16
  constructor(mailService: MailService, propertyService?: PropertyService, remoteRequestService?: RemoteRequestService, emithookService?: EmithookService, businessPropertyService?: BusinessPropertyService);
17
17
  process(payload: EmailNotificationPayloadDto): Promise<MailLogEntity>;
18
+ private applyTestRedirect;
18
19
  applyNotificationPreferences(): Promise<ResolveNotificationRecipientsResultInterface>;
19
20
  private getCheckRecipients;
20
21
  private getKnownUserAddress;
21
22
  private sanitize;
22
23
  private logSuppressed;
23
24
  sendThroughEmithook(): Promise<EmithookTemplateEmailResultInterface | undefined>;
25
+ private getRedactor;
24
26
  private getLogMetadata;
25
27
  private hasLocalTemplate;
26
28
  setBusinessTemplateRecipient(): Promise<void>;
27
29
  setPreferencePayload(): Promise<void>;
28
30
  private setTemplate;
29
31
  private sendEmail;
32
+ private getLogMailService;
33
+ private setLogSubject;
30
34
  private setLogBusiness;
31
35
  private setBody;
32
36
  private setSubject;
@@ -9,7 +9,9 @@ const email_style_entity_1 = require("../entities/email.style.entity");
9
9
  const email_template_log_entity_1 = require("../entities/email.template.log.entity");
10
10
  const email_template_recipient_entity_1 = require("../entities/email.template.recipient.entity");
11
11
  const notification_channel_type_enum_1 = require("../enums/notification.channel.type.enum");
12
+ const apply_email_test_redirect_1 = require("./apply.email.test.redirect");
12
13
  const apply_notification_preferences_1 = require("./apply.notification.preferences");
14
+ const redact_email_log_1 = require("./redact.email.log");
13
15
  const resolve_emithook_template_key_1 = require("./resolve.emithook.template.key");
14
16
  const sanitize_email_addresses_1 = require("./sanitize.email.addresses");
15
17
  const send_emithook_template_email_1 = require("./send.emithook.template.email");
@@ -26,28 +28,36 @@ class ProcessEmailNotification {
26
28
  this.init();
27
29
  this.payload = payload;
28
30
  this.knownUserAddress = this.getKnownUserAddress();
29
- await this.setPreferencePayload();
31
+ if (!this.payload.essential)
32
+ await this.setPreferencePayload();
30
33
  const templateResponse = await this.setTemplate(payload);
31
34
  if (!templateResponse)
32
35
  return;
33
36
  this.template = templateResponse;
34
- await this.setBusinessTemplateRecipient();
35
- const check = await this.applyNotificationPreferences();
36
- if (!check.send)
37
- return this.logSuppressed(check);
37
+ if (!this.payload.essential) {
38
+ await this.setBusinessTemplateRecipient();
39
+ const check = await this.applyNotificationPreferences();
40
+ if (!check.send)
41
+ return this.logSuppressed(check);
42
+ }
43
+ await this.applyTestRedirect();
38
44
  const emithook = await this.sendThroughEmithook();
39
45
  if (emithook?.sent)
40
46
  return emithook.log;
41
47
  if (emithook)
42
48
  this.payload.metadata = { ...this.payload.metadata, emithook_fallback: emithook.reason };
43
49
  if (!this.hasLocalTemplate()) {
44
- global.console.log(`Email template ${this.payload.template} doesn't exist`);
50
+ const refused = emithook ? `; Emithook refused it: ${emithook.reason}` : '';
51
+ global.console.error(`Email template ${this.payload.template} has no local template${refused}`);
45
52
  return;
46
53
  }
47
54
  await this.setBody();
48
55
  await this.setSubject();
49
56
  return this.sendEmail();
50
57
  }
58
+ async applyTestRedirect() {
59
+ await apply_email_test_redirect_1.ApplyEmailTestRedirect.process(this.payload, this.propertyService);
60
+ }
51
61
  async applyNotificationPreferences() {
52
62
  const recipients = this.getCheckRecipients();
53
63
  if (!recipients.some((r) => r.role === 'to'))
@@ -100,7 +110,7 @@ class ProcessEmailNotification {
100
110
  try {
101
111
  const log = access_mail_log_entity_1.AccessMailLogEntity.create({
102
112
  business_id: this.payload.business_id,
103
- subject: nestjs_utility_services_1.PlatformUtility.compileHandlebar(this.template?.subject || '', this.payload.data || {}),
113
+ subject: this.getRedactor().text(nestjs_utility_services_1.PlatformUtility.compileHandlebar(this.template?.subject || '', this.payload.data || {})),
104
114
  processed_on: new Date(),
105
115
  attributes: {
106
116
  metadata,
@@ -136,7 +146,7 @@ class ProcessEmailNotification {
136
146
  to,
137
147
  cc: this.sanitize(this.payload.cc),
138
148
  bcc: this.sanitize(this.payload.bcc),
139
- from: this.payload.from,
149
+ from: this.payload.emithook_from || this.payload.from,
140
150
  business_id: this.payload.business_id,
141
151
  replyTo: this.payload.replyTo,
142
152
  template: key,
@@ -145,8 +155,12 @@ class ProcessEmailNotification {
145
155
  files: this.payload.files,
146
156
  subject: nestjs_utility_services_1.PlatformUtility.compileHandlebar(this.template?.subject || '', this.payload.data || {}),
147
157
  metadata,
158
+ redact: this.payload.template_redact,
148
159
  });
149
160
  }
161
+ getRedactor() {
162
+ return new redact_email_log_1.RedactEmailLog(this.payload?.template_redact, this.payload?.template_data);
163
+ }
150
164
  getLogMetadata() {
151
165
  const identifier = this.template?.identifier || this.payload.template;
152
166
  if (!identifier)
@@ -230,7 +244,7 @@ class ProcessEmailNotification {
230
244
  };
231
245
  let log;
232
246
  try {
233
- log = await this.mailService.send(options, metadata);
247
+ log = await this.getLogMailService().send(options, metadata);
234
248
  }
235
249
  catch (error) {
236
250
  const message = error instanceof Error ? error.message : String(error);
@@ -238,8 +252,35 @@ class ProcessEmailNotification {
238
252
  return;
239
253
  }
240
254
  await this.setLogBusiness(log);
255
+ await this.setLogSubject(log);
241
256
  return log;
242
257
  }
258
+ getLogMailService() {
259
+ const redact = this.getRedactor();
260
+ if (redact.isEmpty())
261
+ return this.mailService;
262
+ const mailService = this.mailService;
263
+ return Object.create(mailService, {
264
+ getBody: {
265
+ value: (options) => mailService.getBody({ ...options, html: redact.text(options.html), text: redact.text(options.text) }),
266
+ },
267
+ });
268
+ }
269
+ async setLogSubject(log) {
270
+ if (!log?.id || typeof log.subject !== 'string')
271
+ return;
272
+ const subject = this.getRedactor().text(log.subject);
273
+ if (subject === log.subject)
274
+ return;
275
+ try {
276
+ await access_mail_log_entity_1.AccessMailLogEntity.update(log.id, { subject });
277
+ log.subject = subject;
278
+ }
279
+ catch (error) {
280
+ const message = error instanceof Error ? error.message : String(error);
281
+ global.console.error(`Mail log ${log.id} subject not redacted: ${message}`);
282
+ }
283
+ }
243
284
  async setLogBusiness(log) {
244
285
  if (!log?.id || !this.payload.business_id)
245
286
  return;
@@ -299,12 +340,13 @@ class ProcessEmailNotification {
299
340
  return res.data?.html || res.data;
300
341
  }
301
342
  async logEmailTemplate(response, payload) {
343
+ const redact = this.getRedactor();
302
344
  const log = email_template_log_entity_1.EmailTemplateLogEntity.create({
303
345
  template_id: this.template?.id,
304
- payload: payload,
346
+ payload: redact.json(payload),
305
347
  is_success: response.success,
306
348
  attempted_at: new Date(),
307
- response_body: { response: response.data },
349
+ response_body: { response: redact.json(response.data) },
308
350
  });
309
351
  await log.save();
310
352
  }