@servicelabsco/slabs-access-manager 2.0.14 → 2.0.15

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 (148) hide show
  1. package/dist/access/controllers/alias.mapping.controller.d.ts +16 -0
  2. package/dist/access/controllers/alias.mapping.controller.js +93 -0
  3. package/dist/access/controllers/alias.mapping.controller.js.map +1 -0
  4. package/dist/access/controllers/business.email.controller.d.ts +2 -1
  5. package/dist/access/controllers/business.email.controller.js +6 -3
  6. package/dist/access/controllers/business.email.controller.js.map +1 -1
  7. package/dist/access/controllers/emithook.controller.d.ts +12 -0
  8. package/dist/access/controllers/emithook.controller.js +49 -0
  9. package/dist/access/controllers/emithook.controller.js.map +1 -0
  10. package/dist/access/controllers/index.d.ts +2 -0
  11. package/dist/access/controllers/index.js +2 -0
  12. package/dist/access/controllers/index.js.map +1 -1
  13. package/dist/access/dtos/add.alias.mapping.dto.d.ts +7 -0
  14. package/dist/access/dtos/add.alias.mapping.dto.js +49 -0
  15. package/dist/access/dtos/add.alias.mapping.dto.js.map +1 -0
  16. package/dist/access/dtos/add.business.email.dto.d.ts +4 -0
  17. package/dist/access/dtos/add.business.email.dto.js +34 -0
  18. package/dist/access/dtos/add.business.email.dto.js.map +1 -0
  19. package/dist/access/dtos/business.email.attributes.dto.d.ts +1 -0
  20. package/dist/access/dtos/business.email.attributes.dto.js +6 -0
  21. package/dist/access/dtos/business.email.attributes.dto.js.map +1 -1
  22. package/dist/access/dtos/emithook.envelope.dto.d.ts +38 -0
  23. package/dist/access/dtos/emithook.envelope.dto.js +16 -0
  24. package/dist/access/dtos/emithook.envelope.dto.js.map +1 -0
  25. package/dist/access/dtos/index.d.ts +4 -0
  26. package/dist/access/dtos/index.js +4 -0
  27. package/dist/access/dtos/index.js.map +1 -1
  28. package/dist/access/dtos/search.alias.mapping.dto.d.ts +7 -0
  29. package/dist/access/dtos/search.alias.mapping.dto.js +51 -0
  30. package/dist/access/dtos/search.alias.mapping.dto.js.map +1 -0
  31. package/dist/access/entities/alias.mapping.entity.d.ts +11 -0
  32. package/dist/access/entities/alias.mapping.entity.js +51 -0
  33. package/dist/access/entities/alias.mapping.entity.js.map +1 -0
  34. package/dist/access/entities/business.email.entity.d.ts +1 -0
  35. package/dist/access/entities/business.email.entity.js +4 -0
  36. package/dist/access/entities/business.email.entity.js.map +1 -1
  37. package/dist/access/entities/index.d.ts +1 -0
  38. package/dist/access/entities/index.js +1 -0
  39. package/dist/access/entities/index.js.map +1 -1
  40. package/dist/access/enums/business.email.type.enum.d.ts +3 -0
  41. package/dist/access/enums/business.email.type.enum.js +8 -0
  42. package/dist/access/enums/business.email.type.enum.js.map +1 -0
  43. package/dist/access/enums/index.d.ts +1 -0
  44. package/dist/access/enums/index.js +1 -0
  45. package/dist/access/enums/index.js.map +1 -1
  46. package/dist/access/es6.classes.d.ts +21 -7
  47. package/dist/access/es6.classes.js +35 -0
  48. package/dist/access/es6.classes.js.map +1 -1
  49. package/dist/access/index.d.ts +1 -0
  50. package/dist/access/index.js +1 -0
  51. package/dist/access/index.js.map +1 -1
  52. package/dist/access/interfaces/alias.lookup.options.interface.d.ts +4 -0
  53. package/dist/access/interfaces/alias.lookup.options.interface.js +3 -0
  54. package/dist/access/interfaces/alias.lookup.options.interface.js.map +1 -0
  55. package/dist/access/interfaces/alias.mapping.input.interface.d.ts +7 -0
  56. package/dist/access/interfaces/alias.mapping.input.interface.js +3 -0
  57. package/dist/access/interfaces/alias.mapping.input.interface.js.map +1 -0
  58. package/dist/access/interfaces/alias.search.match.interface.d.ts +8 -0
  59. package/dist/access/interfaces/alias.search.match.interface.js +3 -0
  60. package/dist/access/interfaces/alias.search.match.interface.js.map +1 -0
  61. package/dist/access/interfaces/alias.search.query.interface.d.ts +7 -0
  62. package/dist/access/interfaces/alias.search.query.interface.js +3 -0
  63. package/dist/access/interfaces/alias.search.query.interface.js.map +1 -0
  64. package/dist/access/interfaces/emithook.email.body.interface.d.ts +24 -0
  65. package/dist/access/interfaces/emithook.email.body.interface.js +3 -0
  66. package/dist/access/interfaces/emithook.email.body.interface.js.map +1 -0
  67. package/dist/access/interfaces/inbound.email.message.interface.d.ts +31 -0
  68. package/dist/access/interfaces/inbound.email.message.interface.js +3 -0
  69. package/dist/access/interfaces/inbound.email.message.interface.js.map +1 -0
  70. package/dist/access/interfaces/index.d.ts +6 -0
  71. package/dist/access/interfaces/index.js +23 -0
  72. package/dist/access/interfaces/index.js.map +1 -0
  73. package/dist/access/jobs/handle.emithook.email.job.d.ts +27 -0
  74. package/dist/access/jobs/handle.emithook.email.job.js +162 -0
  75. package/dist/access/jobs/handle.emithook.email.job.js.map +1 -0
  76. package/dist/access/jobs/index.d.ts +3 -0
  77. package/dist/access/jobs/index.js +3 -0
  78. package/dist/access/jobs/index.js.map +1 -1
  79. package/dist/access/jobs/poll.emithook.email.inbox.job.d.ts +19 -0
  80. package/dist/access/jobs/poll.emithook.email.inbox.job.js +109 -0
  81. package/dist/access/jobs/poll.emithook.email.inbox.job.js.map +1 -0
  82. package/dist/access/jobs/poll.emithook.email.sqs.job.d.ts +20 -0
  83. package/dist/access/jobs/poll.emithook.email.sqs.job.js +83 -0
  84. package/dist/access/jobs/poll.emithook.email.sqs.job.js.map +1 -0
  85. package/dist/access/jobs/process.server.email.job.d.ts +1 -9
  86. package/dist/access/jobs/process.server.email.job.js +13 -105
  87. package/dist/access/jobs/process.server.email.job.js.map +1 -1
  88. package/dist/access/libraries/index.d.ts +4 -0
  89. package/dist/access/libraries/index.js +4 -0
  90. package/dist/access/libraries/index.js.map +1 -1
  91. package/dist/access/libraries/process.inbound.email.message.d.ts +21 -0
  92. package/dist/access/libraries/process.inbound.email.message.js +129 -0
  93. package/dist/access/libraries/process.inbound.email.message.js.map +1 -0
  94. package/dist/access/libraries/read.eml.attachments.d.ts +19 -0
  95. package/dist/access/libraries/read.eml.attachments.js +126 -0
  96. package/dist/access/libraries/read.eml.attachments.js.map +1 -0
  97. package/dist/access/libraries/search.alias.mappings.d.ts +12 -0
  98. package/dist/access/libraries/search.alias.mappings.js +46 -0
  99. package/dist/access/libraries/search.alias.mappings.js.map +1 -0
  100. package/dist/access/libraries/set.alias.mapping.d.ts +12 -0
  101. package/dist/access/libraries/set.alias.mapping.js +81 -0
  102. package/dist/access/libraries/set.alias.mapping.js.map +1 -0
  103. package/dist/access/services/alias.mapping.service.d.ts +9 -0
  104. package/dist/access/services/alias.mapping.service.js +45 -0
  105. package/dist/access/services/alias.mapping.service.js.map +1 -0
  106. package/dist/access/services/business.email.service.d.ts +5 -1
  107. package/dist/access/services/business.email.service.js +34 -2
  108. package/dist/access/services/business.email.service.js.map +1 -1
  109. package/dist/access/services/emithook.service.d.ts +32 -0
  110. package/dist/access/services/emithook.service.js +115 -0
  111. package/dist/access/services/emithook.service.js.map +1 -0
  112. package/dist/access/services/index.d.ts +2 -0
  113. package/dist/access/services/index.js +2 -0
  114. package/dist/access/services/index.js.map +1 -1
  115. package/dist/accessUtility/controllers/bulk.definition.controller.d.ts +5 -1
  116. package/dist/accessUtility/controllers/bulk.definition.controller.js +25 -8
  117. package/dist/accessUtility/controllers/bulk.definition.controller.js.map +1 -1
  118. package/dist/accessUtility/dtos/bulk.definition.script.dto.d.ts +4 -0
  119. package/dist/accessUtility/dtos/bulk.definition.script.dto.js +30 -0
  120. package/dist/accessUtility/dtos/bulk.definition.script.dto.js.map +1 -0
  121. package/dist/accessUtility/dtos/index.d.ts +1 -0
  122. package/dist/accessUtility/dtos/index.js +1 -0
  123. package/dist/accessUtility/dtos/index.js.map +1 -1
  124. package/dist/accessUtility/es6.classes.d.ts +4 -2
  125. package/dist/accessUtility/es6.classes.js +4 -0
  126. package/dist/accessUtility/es6.classes.js.map +1 -1
  127. package/dist/accessUtility/jobs/push.to.bulk.item.job.d.ts +2 -0
  128. package/dist/accessUtility/jobs/push.to.bulk.item.job.js +2 -0
  129. package/dist/accessUtility/jobs/push.to.bulk.item.job.js.map +1 -1
  130. package/dist/accessUtility/libraries/index.d.ts +1 -0
  131. package/dist/accessUtility/libraries/index.js +1 -0
  132. package/dist/accessUtility/libraries/index.js.map +1 -1
  133. package/dist/accessUtility/libraries/process.bulk.definition.script.d.ts +9 -0
  134. package/dist/accessUtility/libraries/process.bulk.definition.script.js +43 -0
  135. package/dist/accessUtility/libraries/process.bulk.definition.script.js.map +1 -0
  136. package/dist/accessUtility/libraries/read.xls.file.d.ts +4 -1
  137. package/dist/accessUtility/libraries/read.xls.file.js +49 -10
  138. package/dist/accessUtility/libraries/read.xls.file.js.map +1 -1
  139. package/dist/migrations/1790855763155-CreateBzAliasMappingsTable.d.ts +8 -0
  140. package/dist/migrations/1790855763155-CreateBzAliasMappingsTable.js +37 -0
  141. package/dist/migrations/1790855763155-CreateBzAliasMappingsTable.js.map +1 -0
  142. package/dist/migrations/1792089460727-AddIdentifierBzBusinessEmailsTable.d.ts +5 -0
  143. package/dist/migrations/1792089460727-AddIdentifierBzBusinessEmailsTable.js +16 -0
  144. package/dist/migrations/1792089460727-AddIdentifierBzBusinessEmailsTable.js.map +1 -0
  145. package/dist/migrations/1792091262917-AddUniqueEmailIdentifierBzEmailMessagesTable.d.ts +8 -0
  146. package/dist/migrations/1792091262917-AddUniqueEmailIdentifierBzEmailMessagesTable.js +30 -0
  147. package/dist/migrations/1792091262917-AddUniqueEmailIdentifierBzEmailMessagesTable.js.map +1 -0
  148. package/package.json +1 -1
@@ -0,0 +1,109 @@
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.PollEmithookEmailInboxJob = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const nestjs_utility_services_1 = require("@servicelabsco/nestjs-utility-services");
15
+ const typeorm_1 = require("typeorm");
16
+ const business_email_entity_1 = require("../entities/business.email.entity");
17
+ const email_message_entity_1 = require("../entities/email.message.entity");
18
+ const business_email_type_enum_1 = require("../enums/business.email.type.enum");
19
+ const emithook_service_1 = require("../services/emithook.service");
20
+ const handle_emithook_email_job_1 = require("./handle.emithook.email.job");
21
+ const DEFAULT_LOOKBACK_HOURS = 2;
22
+ const MAX_PAGES = 20;
23
+ let PollEmithookEmailInboxJob = class PollEmithookEmailInboxJob extends nestjs_utility_services_1.CommonJob {
24
+ constructor(queueService, emithookService, handleEmithookEmailJob) {
25
+ super('23303cbeb4b05aa00098a74cc25ef6af');
26
+ this.queueService = queueService;
27
+ this.emithookService = emithookService;
28
+ this.handleEmithookEmailJob = handleEmithookEmailJob;
29
+ this.noDuplicate = true;
30
+ this.priority = 10;
31
+ this.timeout = 600000;
32
+ }
33
+ async handle(payload) {
34
+ const hours = payload?.hours > 0 ? payload.hours : DEFAULT_LOOKBACK_HOURS;
35
+ const since = new Date(Date.now() - hours * 60 * 60 * 1000);
36
+ const mailboxes = await this.mailboxes();
37
+ let stored = 0;
38
+ for (const mailbox of mailboxes) {
39
+ try {
40
+ const count = await this.sweep(mailbox, since);
41
+ stored += count;
42
+ }
43
+ catch (error) {
44
+ this.logger.error(`emithook inbox poll failed for ${mailbox.identifier} : ${error}`);
45
+ }
46
+ }
47
+ return stored;
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
+ async mailboxes() {
93
+ return business_email_entity_1.BusinessEmailEntity.find({
94
+ where: {
95
+ active: true,
96
+ identifier: (0, typeorm_1.Not)((0, typeorm_1.IsNull)()),
97
+ attributes: (0, typeorm_1.Raw)((column) => `${column} ->> 'type' = :type`, { type: business_email_type_enum_1.BusinessEmailTypeEnum.EMITHOOK }),
98
+ },
99
+ });
100
+ }
101
+ };
102
+ exports.PollEmithookEmailInboxJob = PollEmithookEmailInboxJob;
103
+ exports.PollEmithookEmailInboxJob = PollEmithookEmailInboxJob = __decorate([
104
+ (0, common_1.Injectable)(),
105
+ __metadata("design:paramtypes", [nestjs_utility_services_1.QueueService,
106
+ emithook_service_1.EmithookService,
107
+ handle_emithook_email_job_1.HandleEmithookEmailJob])
108
+ ], PollEmithookEmailInboxJob);
109
+ //# sourceMappingURL=poll.emithook.email.inbox.job.js.map
@@ -0,0 +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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"}
@@ -0,0 +1,20 @@
1
+ import { CommonJob, PropertyService, QueueService, SqsService } from '@servicelabsco/nestjs-utility-services';
2
+ import { HandleEmithookEmailJob } from './handle.emithook.email.job';
3
+ export declare class PollEmithookEmailSqsJob extends CommonJob {
4
+ protected readonly queueService: QueueService;
5
+ private readonly sqsService;
6
+ private readonly propertyService;
7
+ protected readonly handleEmithookEmailJob: HandleEmithookEmailJob;
8
+ protected noDuplicate: boolean;
9
+ protected priority: number;
10
+ protected timeout: number;
11
+ protected sqsQueue: string;
12
+ protected countOfMessages: number;
13
+ protected maxMessagePerSession: number;
14
+ constructor(queueService: QueueService, sqsService: SqsService, propertyService: PropertyService, handleEmithookEmailJob: HandleEmithookEmailJob);
15
+ handle(): Promise<number>;
16
+ private processMessages;
17
+ private processMessage;
18
+ private getFetchCount;
19
+ private deleteMessages;
20
+ }
@@ -0,0 +1,83 @@
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.PollEmithookEmailSqsJob = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const nestjs_utility_services_1 = require("@servicelabsco/nestjs-utility-services");
15
+ const handle_emithook_email_job_1 = require("./handle.emithook.email.job");
16
+ let PollEmithookEmailSqsJob = class PollEmithookEmailSqsJob extends nestjs_utility_services_1.CommonJob {
17
+ constructor(queueService, sqsService, propertyService, handleEmithookEmailJob) {
18
+ super('f238f9dd0611f012f55b0fc038390bdd');
19
+ this.queueService = queueService;
20
+ this.sqsService = sqsService;
21
+ this.propertyService = propertyService;
22
+ this.handleEmithookEmailJob = handleEmithookEmailJob;
23
+ this.noDuplicate = true;
24
+ this.priority = 10;
25
+ this.timeout = 600000;
26
+ this.countOfMessages = 0;
27
+ this.maxMessagePerSession = 300000;
28
+ }
29
+ async handle() {
30
+ this.countOfMessages = 0;
31
+ this.sqsQueue = await this.propertyService.get('sqs.emithook.email.queue');
32
+ if (!this.sqsQueue)
33
+ throw new nestjs_utility_services_1.OperationException('System property sqs.emithook.email.queue is not configured');
34
+ const fetchCount = this.getFetchCount();
35
+ while (true) {
36
+ const response = await this.sqsService.get(this.sqsQueue, fetchCount);
37
+ const messages = response?.Messages || [];
38
+ if (!messages.length)
39
+ return this.countOfMessages;
40
+ await this.processMessages(messages);
41
+ if (this.countOfMessages > this.maxMessagePerSession)
42
+ return this.countOfMessages;
43
+ }
44
+ }
45
+ async processMessages(messages) {
46
+ for (const message of messages) {
47
+ await this.processMessage(message);
48
+ ++this.countOfMessages;
49
+ }
50
+ await this.deleteMessages(messages);
51
+ }
52
+ async processMessage(message) {
53
+ let payload;
54
+ try {
55
+ payload = JSON.parse(message.Body);
56
+ }
57
+ catch {
58
+ this.logger.error(`[Processing SQS] ${this.sqsQueue} dropped a message that is not JSON : ${message.MessageId}`);
59
+ return;
60
+ }
61
+ if (payload?.metadata?.source === 'https')
62
+ return;
63
+ await this.handleEmithookEmailJob.dispatch(payload);
64
+ }
65
+ getFetchCount() {
66
+ const isFifo = this.sqsQueue.split('.').pop()?.toLowerCase() === 'fifo';
67
+ return isFifo ? 1 : 10;
68
+ }
69
+ async deleteMessages(messages) {
70
+ const receiptHandles = messages.map((message) => message.ReceiptHandle);
71
+ await this.sqsService.deleteBulk(this.sqsQueue, receiptHandles);
72
+ this.logger.log(`[Processing SQS] ${this.sqsQueue} total messages : ${this.countOfMessages}`);
73
+ }
74
+ };
75
+ exports.PollEmithookEmailSqsJob = PollEmithookEmailSqsJob;
76
+ exports.PollEmithookEmailSqsJob = PollEmithookEmailSqsJob = __decorate([
77
+ (0, common_1.Injectable)(),
78
+ __metadata("design:paramtypes", [nestjs_utility_services_1.QueueService,
79
+ nestjs_utility_services_1.SqsService,
80
+ nestjs_utility_services_1.PropertyService,
81
+ handle_emithook_email_job_1.HandleEmithookEmailJob])
82
+ ], PollEmithookEmailSqsJob);
83
+ //# sourceMappingURL=poll.emithook.email.sqs.job.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poll.emithook.email.sqs.job.js","sourceRoot":"","sources":["../../../src/access/jobs/poll.emithook.email.sqs.job.ts"],"names":[],"mappings":"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"}
@@ -9,13 +9,5 @@ export declare class ProcessServerEmailJob extends CommonJob {
9
9
  protected noDuplicate: boolean;
10
10
  constructor(queueService: QueueService, uploadService: UploadService, internalServerConnectService: InternalServerConnectService, syncEmailMessageMetricsJob: SyncEmailMessageMetricsJob);
11
11
  handle(id: number): Promise<EmailMessageEntity>;
12
- private setMessage;
13
- private setAttachments;
14
- private setAttachment;
15
- private setRecipients;
16
- private getBody;
17
- private getAttachment;
18
- private getSenderId;
19
- private getParentDetails;
20
- private getMessageIdentifier;
12
+ private toInbound;
21
13
  }
@@ -12,13 +12,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ProcessServerEmailJob = void 0;
13
13
  const common_1 = require("@nestjs/common");
14
14
  const nestjs_utility_services_1 = require("@servicelabsco/nestjs-utility-services");
15
- const typeorm_1 = require("typeorm");
16
15
  const business_email_entity_1 = require("../entities/business.email.entity");
17
- const email_attachment_entity_1 = require("../entities/email.attachment.entity");
18
- const email_message_entity_1 = require("../entities/email.message.entity");
19
- const email_recipient_entity_1 = require("../entities/email.recipient.entity");
16
+ const process_inbound_email_message_1 = require("../libraries/process.inbound.email.message");
20
17
  const sync_email_message_metrics_job_1 = require("./sync.email.message.metrics.job");
21
- const PG_UNIQUE_VIOLATION = '23505';
22
18
  let ProcessServerEmailJob = class ProcessServerEmailJob extends nestjs_utility_services_1.CommonJob {
23
19
  constructor(queueService, uploadService, internalServerConnectService, syncEmailMessageMetricsJob) {
24
20
  super('6dc279beaec1891635dab7b1c7e76be3');
@@ -36,106 +32,18 @@ let ProcessServerEmailJob = class ProcessServerEmailJob extends nestjs_utility_s
36
32
  const email = await business_email_entity_1.BusinessEmailEntity.findOne({ where: { meta_server_id: data.email_id }, relations: ['business'] });
37
33
  if (!email)
38
34
  return null;
39
- return this.setMessage(email, data);
40
- }
41
- async setMessage(email, payload) {
42
- const message = await email_message_entity_1.EmailMessageEntity.firstOrNew({ email_id: email.id, identifier: payload.identifier });
43
- message.subject = payload.subject;
44
- message.from_email = payload.from_email;
45
- message.sender_id = await this.getSenderId(payload.from_email);
46
- message.tracking_identifier = this.getMessageIdentifier(payload);
47
- message.body = await this.getBody(email, payload.body);
48
- message.attributes = { ...message.attributes, ...payload.attributes };
49
- message.emailed_at = payload.attributes?.date || null;
50
- const parent = await this.getParentDetails(message);
51
- message.parent_id = parent?.parent_id || parent?.id || null;
52
- try {
53
- await message.save();
54
- }
55
- catch (e) {
56
- if (e instanceof typeorm_1.QueryFailedError && e.driverError?.code === PG_UNIQUE_VIOLATION) {
57
- const existing = await email_message_entity_1.EmailMessageEntity.findOne({
58
- where: { email_id: email.id, identifier: payload.identifier, deleted_at: (0, typeorm_1.IsNull)() },
59
- });
60
- if (existing)
61
- return existing;
62
- }
63
- throw e;
64
- }
65
- await this.setAttachments(email, message, payload.attachments);
66
- await this.setRecipients(message, payload.recipients);
67
- await this.syncEmailMessageMetricsJob.delayedDispatch(message.id);
68
- return message;
69
- }
70
- async setAttachments(email, message, attachments) {
71
- if (!Array.isArray(attachments))
72
- return;
73
- for (const attachment of attachments)
74
- await this.setAttachment(email, message, attachment);
75
- }
76
- async setAttachment(email, message, attachment) {
77
- try {
78
- const url = await this.getAttachment(email, attachment);
79
- const r = await email_attachment_entity_1.EmailAttachmentEntity.firstOrNew({ message_id: message.id, name: attachment.name });
80
- r.url = url;
81
- r.attributes = { ...r.attributes, size: attachment.size };
82
- return r.save();
83
- }
84
- catch {
85
- global.console.log('cannot find attachment url : ', attachment?.url);
86
- }
87
- }
88
- async setRecipients(message, recipients) {
89
- const nodes = ['to', 'cc'];
90
- for (const node of nodes) {
91
- const records = recipients.to;
92
- if (!Array.isArray(records))
93
- continue;
94
- for (const record of records) {
95
- const r = await email_recipient_entity_1.EmailRecipientEntity.firstOrNew({ message_id: message.id, type: node, email: record.email });
96
- r.attributes = { ...r.attributes, name: record.name };
97
- await r.save();
98
- }
99
- }
100
- }
101
- async getBody(email, url) {
102
- const originalname = `${Date.now()}.${nestjs_utility_services_1.PlatformUtility.generateRandomAlpha(6).toLowerCase()}.emailBody.html`;
103
- const file = { url, originalname };
104
- const params = { folder: `business/${email.business.identifier}/email/body`, acl: 'private' };
105
- return this.uploadService.upload(file, params);
106
- }
107
- async getAttachment(email, attachment) {
108
- const file = { url: attachment.url, originalname: attachment.name };
109
- const params = { folder: `business/${email.business.identifier}/email/attachments`, acl: 'private' };
110
- return this.uploadService.upload(file, params);
111
- }
112
- async getSenderId(email) {
113
- const user = await nestjs_utility_services_1.UserEntity.findOne({ where: { email } });
114
- return user?.id || null;
115
- }
116
- async getParentDetails(message) {
117
- let identifiers = [];
118
- const { in_reply_to, references } = message.attributes;
119
- if (in_reply_to)
120
- identifiers.push(in_reply_to);
121
- if (references?.length)
122
- identifiers = identifiers.concat(references);
123
- identifiers = identifiers.filter((item) => {
124
- return item?.length && item;
125
- });
126
- if (!identifiers.length)
127
- return;
128
- for (const identifier of identifiers) {
129
- const parent = await email_message_entity_1.EmailMessageEntity.findOne({ where: { email_id: message.email_id, tracking_identifier: identifier } });
130
- if (parent)
131
- return parent;
132
- }
133
- }
134
- getMessageIdentifier(payload) {
135
- const { in_reply_to, references, message_id } = payload?.attributes || {};
136
- if (!in_reply_to && references?.length === 1)
137
- return references[0];
138
- return message_id;
35
+ return new process_inbound_email_message_1.ProcessInboundEmailMessage(this.uploadService, this.syncEmailMessageMetricsJob).process(email, this.toInbound(data));
36
+ }
37
+ toInbound(data) {
38
+ return {
39
+ identifier: data.identifier,
40
+ from_email: data.from_email,
41
+ subject: data.subject,
42
+ body: { url: data.body },
43
+ recipients: data.recipients,
44
+ attachments: data.attachments,
45
+ attributes: data.attributes,
46
+ };
139
47
  }
140
48
  };
141
49
  exports.ProcessServerEmailJob = ProcessServerEmailJob;
@@ -1 +1 @@
1
- {"version":3,"file":"process.server.email.job.js","sourceRoot":"","sources":["../../../src/access/jobs/process.server.email.job.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process.server.email.job.js","sourceRoot":"","sources":["../../../src/access/jobs/process.server.email.job.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,oFAA8H;AAE9H,6EAAwE;AAGxE,8FAAwF;AACxF,qFAA8E;AAOvE,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,mCAAS;IAGhD,YACuB,YAA0B,EAC5B,aAA4B,EAC1B,4BAA0D,EAC5D,0BAAsD;QAEvE,KAAK,CAAC,kCAAkC,CAAC,CAAC;QALvB,iBAAY,GAAZ,YAAY,CAAc;QAC5B,kBAAa,GAAb,aAAa,CAAe;QAC1B,iCAA4B,GAA5B,4BAA4B,CAA8B;QAC5D,+BAA0B,GAA1B,0BAA0B,CAA4B;QANjE,gBAAW,GAAG,IAAI,CAAC;IAS7B,CAAC;IAOD,KAAK,CAAC,MAAM,CAAC,EAAU;QACnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAE5F,MAAM,IAAI,GAA0B,QAAQ,EAAE,IAAI,CAAC;QACnD,IAAI,CAAC,IAAI,EAAE,QAAQ;YAAE,OAAO,IAAI,CAAC;QAEjC,MAAM,KAAK,GAAG,MAAM,2CAAmB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAEvH,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,OAAO,IAAI,0DAA0B,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACpI,CAAC;IAMO,SAAS,CAAC,IAA2B;QACzC,OAAO;YACH,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE;YACxB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;SAC9B,CAAC;IACN,CAAC;CACJ,CAAA;AA7CY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;qCAK4B,sCAAY;QACb,uCAAa;QACI,sDAA4B;QAChC,2DAA0B;GAPlE,qBAAqB,CA6CjC"}
@@ -69,6 +69,7 @@ export * from './process.group.member.updation';
69
69
  export * from './process.group.role.list';
70
70
  export * from './process.gst.mapping.data';
71
71
  export * from './process.gst.mapping.list';
72
+ export * from './process.inbound.email.message';
72
73
  export * from './process.internal.notification';
73
74
  export * from './process.listing.csv.file';
74
75
  export * from './process.listing.order';
@@ -99,10 +100,12 @@ export * from './process.user.notification.list';
99
100
  export * from './process.whatsapp.integration';
100
101
  export * from './process.whatsapp.message';
101
102
  export * from './process.zoho.integration';
103
+ export * from './read.eml.attachments';
102
104
  export * from './report.view.enablement';
103
105
  export * from './report.view.query.compiler';
104
106
  export * from './resolve.client.ip';
105
107
  export * from './sanitize.email.addresses';
108
+ export * from './search.alias.mappings';
106
109
  export * from './search.developer.businesses';
107
110
  export * from './send.email.notification';
108
111
  export * from './send.fcm.notification';
@@ -112,6 +115,7 @@ export * from './send.slack.message.notification';
112
115
  export * from './send.slack.webhook.notification.';
113
116
  export * from './send.webhook.request';
114
117
  export * from './send.whatsapp.message.notification';
118
+ export * from './set.alias.mapping';
115
119
  export * from './set.fcm.token';
116
120
  export * from './sync.business.user.role';
117
121
  export * from './ui.action.businesses';
@@ -85,6 +85,7 @@ __exportStar(require("./process.group.member.updation"), exports);
85
85
  __exportStar(require("./process.group.role.list"), exports);
86
86
  __exportStar(require("./process.gst.mapping.data"), exports);
87
87
  __exportStar(require("./process.gst.mapping.list"), exports);
88
+ __exportStar(require("./process.inbound.email.message"), exports);
88
89
  __exportStar(require("./process.internal.notification"), exports);
89
90
  __exportStar(require("./process.listing.csv.file"), exports);
90
91
  __exportStar(require("./process.listing.order"), exports);
@@ -115,10 +116,12 @@ __exportStar(require("./process.user.notification.list"), exports);
115
116
  __exportStar(require("./process.whatsapp.integration"), exports);
116
117
  __exportStar(require("./process.whatsapp.message"), exports);
117
118
  __exportStar(require("./process.zoho.integration"), exports);
119
+ __exportStar(require("./read.eml.attachments"), exports);
118
120
  __exportStar(require("./report.view.enablement"), exports);
119
121
  __exportStar(require("./report.view.query.compiler"), exports);
120
122
  __exportStar(require("./resolve.client.ip"), exports);
121
123
  __exportStar(require("./sanitize.email.addresses"), exports);
124
+ __exportStar(require("./search.alias.mappings"), exports);
122
125
  __exportStar(require("./search.developer.businesses"), exports);
123
126
  __exportStar(require("./send.email.notification"), exports);
124
127
  __exportStar(require("./send.fcm.notification"), exports);
@@ -128,6 +131,7 @@ __exportStar(require("./send.slack.message.notification"), exports);
128
131
  __exportStar(require("./send.slack.webhook.notification."), exports);
129
132
  __exportStar(require("./send.webhook.request"), exports);
130
133
  __exportStar(require("./send.whatsapp.message.notification"), exports);
134
+ __exportStar(require("./set.alias.mapping"), exports);
131
135
  __exportStar(require("./set.fcm.token"), exports);
132
136
  __exportStar(require("./sync.business.user.role"), exports);
133
137
  __exportStar(require("./ui.action.businesses"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/access/libraries/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,sDAAoC;AACpC,6DAA2C;AAC3C,oEAAkD;AAClD,0DAAwC;AACxC,4DAA0C;AAC1C,gEAA8C;AAC9C,4CAA0B;AAC1B,wDAAsC;AACtC,4DAA0C;AAC1C,+DAA6C;AAC7C,+CAA6B;AAC7B,+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,+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,6DAA2C;AAC3C,0DAAwC;AACxC,kEAAgD;AAChD,+DAA6C;AAC7C,6DAA2C;AAC3C,6DAA2C;AAC3C,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,2DAAyC;AACzC,+DAA6C;AAC7C,sDAAoC;AACpC,6DAA2C;AAC3C,gEAA8C;AAC9C,4DAA0C;AAC1C,0DAAwC;AACxC,oEAAkD;AAClD,oEAAkD;AAClD,oEAAkD;AAClD,qEAAmD;AACnD,yDAAuC;AACvC,uEAAqD;AACrD,kDAAgC;AAChC,4DAA0C;AAC1C,yDAAuC;AACvC,qDAAmC;AACnC,+DAA6C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/access/libraries/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,sDAAoC;AACpC,6DAA2C;AAC3C,oEAAkD;AAClD,0DAAwC;AACxC,4DAA0C;AAC1C,gEAA8C;AAC9C,4CAA0B;AAC1B,wDAAsC;AACtC,4DAA0C;AAC1C,+DAA6C;AAC7C,+CAA6B;AAC7B,+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,+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,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,2DAAyC;AACzC,+DAA6C;AAC7C,sDAAoC;AACpC,6DAA2C;AAC3C,0DAAwC;AACxC,gEAA8C;AAC9C,4DAA0C;AAC1C,0DAAwC;AACxC,oEAAkD;AAClD,oEAAkD;AAClD,oEAAkD;AAClD,qEAAmD;AACnD,yDAAuC;AACvC,uEAAqD;AACrD,sDAAoC;AACpC,kDAAgC;AAChC,4DAA0C;AAC1C,yDAAuC;AACvC,qDAAmC;AACnC,+DAA6C"}
@@ -0,0 +1,21 @@
1
+ import { UploadService } from '@servicelabsco/nestjs-utility-services';
2
+ import { BusinessEmailEntity } from '../entities/business.email.entity';
3
+ import { EmailMessageEntity } from '../entities/email.message.entity';
4
+ import { InboundEmailMessageInterface } from '../interfaces/inbound.email.message.interface';
5
+ import { SyncEmailMessageMetricsJob } from '../jobs/sync.email.message.metrics.job';
6
+ export declare class ProcessInboundEmailMessage {
7
+ private readonly uploadService;
8
+ private readonly syncEmailMessageMetricsJob;
9
+ constructor(uploadService: UploadService, syncEmailMessageMetricsJob: SyncEmailMessageMetricsJob);
10
+ process(email: BusinessEmailEntity, payload: InboundEmailMessageInterface): Promise<EmailMessageEntity>;
11
+ private existingOnUniqueViolation;
12
+ private setAttachments;
13
+ private setAttachment;
14
+ private setRecipients;
15
+ private getBody;
16
+ private getAttachment;
17
+ private getDate;
18
+ private getSenderId;
19
+ private getParentDetails;
20
+ private getMessageIdentifier;
21
+ }
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProcessInboundEmailMessage = void 0;
4
+ const nestjs_utility_services_1 = require("@servicelabsco/nestjs-utility-services");
5
+ const typeorm_1 = require("typeorm");
6
+ const email_attachment_entity_1 = require("../entities/email.attachment.entity");
7
+ const email_message_entity_1 = require("../entities/email.message.entity");
8
+ const email_recipient_entity_1 = require("../entities/email.recipient.entity");
9
+ const PG_UNIQUE_VIOLATION = '23505';
10
+ class ProcessInboundEmailMessage {
11
+ constructor(uploadService, syncEmailMessageMetricsJob) {
12
+ this.uploadService = uploadService;
13
+ this.syncEmailMessageMetricsJob = syncEmailMessageMetricsJob;
14
+ }
15
+ async process(email, payload) {
16
+ const message = await email_message_entity_1.EmailMessageEntity.firstOrNew({ email_id: email.id, identifier: payload.identifier });
17
+ if (message.id)
18
+ return message;
19
+ message.subject = payload.subject;
20
+ message.from_email = payload.from_email;
21
+ message.sender_id = await this.getSenderId(payload.from_email);
22
+ message.tracking_identifier = this.getMessageIdentifier(payload);
23
+ message.body = await this.getBody(email, payload.body);
24
+ message.attributes = { ...message.attributes, ...payload.attributes };
25
+ message.emailed_at = this.getDate(payload.attributes?.date);
26
+ const parent = await this.getParentDetails(message);
27
+ message.parent_id = parent?.parent_id || parent?.id || null;
28
+ try {
29
+ await message.save();
30
+ }
31
+ catch (error) {
32
+ const existing = await this.existingOnUniqueViolation(error, email.id, payload.identifier);
33
+ if (existing)
34
+ return existing;
35
+ throw error;
36
+ }
37
+ await this.setAttachments(email, message, payload.attachments);
38
+ await this.setRecipients(message, payload.recipients);
39
+ await this.syncEmailMessageMetricsJob.delayedDispatch(message.id);
40
+ return message;
41
+ }
42
+ async existingOnUniqueViolation(error, emailId, identifier) {
43
+ const code = error instanceof typeorm_1.QueryFailedError ? error.driverError?.code : undefined;
44
+ if (code !== PG_UNIQUE_VIOLATION)
45
+ return null;
46
+ return email_message_entity_1.EmailMessageEntity.findOne({ where: { email_id: emailId, identifier, deleted_at: (0, typeorm_1.IsNull)() } });
47
+ }
48
+ async setAttachments(email, message, attachments) {
49
+ if (!Array.isArray(attachments))
50
+ return;
51
+ for (const attachment of attachments)
52
+ await this.setAttachment(email, message, attachment);
53
+ }
54
+ async setAttachment(email, message, attachment) {
55
+ try {
56
+ const url = await this.getAttachment(email, attachment);
57
+ const r = await email_attachment_entity_1.EmailAttachmentEntity.firstOrNew({ message_id: message.id, name: attachment.name });
58
+ r.url = url;
59
+ r.attributes = { ...r.attributes, size: attachment.size };
60
+ return r.save();
61
+ }
62
+ catch {
63
+ global.console.log('cannot store attachment : ', attachment?.name);
64
+ }
65
+ }
66
+ async setRecipients(message, recipients) {
67
+ const nodes = ['to', 'cc'];
68
+ for (const node of nodes) {
69
+ const records = recipients?.[node];
70
+ if (!Array.isArray(records))
71
+ continue;
72
+ for (const record of records) {
73
+ if (!record?.email)
74
+ continue;
75
+ const r = await email_recipient_entity_1.EmailRecipientEntity.firstOrNew({ message_id: message.id, type: node, email: record.email });
76
+ r.attributes = { ...r.attributes, name: record.name };
77
+ await r.save();
78
+ }
79
+ }
80
+ }
81
+ async getBody(email, body) {
82
+ const originalname = `${Date.now()}.${nestjs_utility_services_1.PlatformUtility.generateRandomAlpha(6).toLowerCase()}.emailBody.html`;
83
+ const params = { folder: `business/${email.business.identifier}/email/body`, acl: 'private' };
84
+ if (body?.url)
85
+ return this.uploadService.upload({ url: body.url, originalname }, params);
86
+ const buffer = Buffer.from(body?.html ?? '', 'utf-8');
87
+ return this.uploadService.upload({ buffer, originalname }, params);
88
+ }
89
+ async getAttachment(email, attachment) {
90
+ const params = { folder: `business/${email.business.identifier}/email/attachments`, acl: 'private' };
91
+ if (attachment.buffer)
92
+ return this.uploadService.upload({ buffer: attachment.buffer, originalname: attachment.name }, params);
93
+ return this.uploadService.upload({ url: attachment.url, originalname: attachment.name }, params);
94
+ }
95
+ getDate(value) {
96
+ if (!value)
97
+ return null;
98
+ const date = new Date(value);
99
+ return Number.isNaN(date.getTime()) ? null : date;
100
+ }
101
+ async getSenderId(email) {
102
+ const user = await nestjs_utility_services_1.UserEntity.findOne({ where: { email } });
103
+ return user?.id || null;
104
+ }
105
+ async getParentDetails(message) {
106
+ let identifiers = [];
107
+ const { in_reply_to, references } = message.attributes || {};
108
+ if (in_reply_to)
109
+ identifiers.push(in_reply_to);
110
+ if (references?.length)
111
+ identifiers = identifiers.concat(references);
112
+ identifiers = identifiers.filter((item) => item?.length);
113
+ if (!identifiers.length)
114
+ return;
115
+ for (const identifier of identifiers) {
116
+ const parent = await email_message_entity_1.EmailMessageEntity.findOne({ where: { email_id: message.email_id, tracking_identifier: identifier } });
117
+ if (parent)
118
+ return parent;
119
+ }
120
+ }
121
+ getMessageIdentifier(payload) {
122
+ const { in_reply_to, references, message_id } = payload?.attributes || {};
123
+ if (!in_reply_to && references?.length === 1)
124
+ return references[0];
125
+ return message_id;
126
+ }
127
+ }
128
+ exports.ProcessInboundEmailMessage = ProcessInboundEmailMessage;
129
+ //# sourceMappingURL=process.inbound.email.message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.inbound.email.message.js","sourceRoot":"","sources":["../../../src/access/libraries/process.inbound.email.message.ts"],"names":[],"mappings":"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"}