@social-mail/social-mail-web-server 1.5.455 → 1.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server/model/SocialMailContext.d.ts +2 -2
- package/dist/server/model/SocialMailContext.js +2 -2
- package/dist/server/model/SocialMailContextEvents.js +2 -2
- package/dist/server/model/entities/AppFile.d.ts +2 -0
- package/dist/server/model/entities/AppFile.d.ts.map +1 -1
- package/dist/server/model/entities/AppFile.js.map +1 -1
- package/dist/server/model/entities/{MailboxEmail.d.ts → ChannelEmail.d.ts} +5 -2
- package/dist/server/model/entities/ChannelEmail.d.ts.map +1 -0
- package/dist/server/model/entities/{MailboxEmail.js → ChannelEmail.js} +26 -13
- package/dist/server/model/entities/ChannelEmail.js.map +1 -0
- package/dist/server/model/entities/Email.d.ts +2 -2
- package/dist/server/model/entities/Email.d.ts.map +1 -1
- package/dist/server/model/entities/Email.js.map +1 -1
- package/dist/server/model/entities/EmailAddress.d.ts +2 -0
- package/dist/server/model/entities/EmailAddress.d.ts.map +1 -1
- package/dist/server/model/entities/EmailAddress.js.map +1 -1
- package/dist/server/model/entities/Mailbox.d.ts +2 -2
- package/dist/server/model/entities/MailboxContactEmail.d.ts +1 -1
- package/dist/server/model/entities/MailboxContactEmail.d.ts.map +1 -1
- package/dist/server/model/entities/MailboxContactEmail.js +5 -0
- package/dist/server/model/entities/MailboxContactEmail.js.map +1 -1
- package/dist/server/model/events/AppFileEvents.d.ts +3 -0
- package/dist/server/model/events/AppFileEvents.d.ts.map +1 -1
- package/dist/server/model/events/AppFileEvents.js +25 -5
- package/dist/server/model/events/AppFileEvents.js.map +1 -1
- package/dist/server/model/events/AppFileTagEvents.d.ts.map +1 -1
- package/dist/server/model/events/AppFileTagEvents.js +2 -3
- package/dist/server/model/events/AppFileTagEvents.js.map +1 -1
- package/dist/server/model/events/EmailAddressEvents.d.ts.map +1 -1
- package/dist/server/model/events/EmailAddressEvents.js +2 -4
- package/dist/server/model/events/EmailAddressEvents.js.map +1 -1
- package/dist/server/model/events/EmailEngagementEvents.js +1 -1
- package/dist/server/model/events/EmailEngagementEvents.js.map +1 -1
- package/dist/server/model/events/EmailEvents.js +6 -6
- package/dist/server/model/events/EmailEvents.js.map +1 -1
- package/dist/server/model/events/EmailLogEvents.js +1 -1
- package/dist/server/model/events/EmailLogEvents.js.map +1 -1
- package/dist/server/model/events/EmailRecipientEvents.js +1 -1
- package/dist/server/model/events/EmailRecipientEvents.js.map +1 -1
- package/dist/server/model/events/EmailTagEvents.js +1 -1
- package/dist/server/model/events/EmailTagEvents.js.map +1 -1
- package/dist/server/model/events/FileContentEvents.d.ts.map +1 -1
- package/dist/server/model/events/FileContentEvents.js +2 -3
- package/dist/server/model/events/FileContentEvents.js.map +1 -1
- package/dist/server/model/events/MailboxContactEvents.js +4 -4
- package/dist/server/model/events/MailboxContactEvents.js.map +1 -1
- package/dist/server/model/events/MailboxEmailEvents.d.ts +9 -6
- package/dist/server/model/events/MailboxEmailEvents.d.ts.map +1 -1
- package/dist/server/model/events/MailboxEmailEvents.js +11 -2
- package/dist/server/model/events/MailboxEmailEvents.js.map +1 -1
- package/dist/server/model/events/MailboxEvents.d.ts.map +1 -1
- package/dist/server/model/events/MailboxEvents.js +6 -6
- package/dist/server/model/events/MailboxEvents.js.map +1 -1
- package/dist/server/model/events/TagEvents.js +1 -1
- package/dist/server/model/events/TagEvents.js.map +1 -1
- package/dist/server/model/events/TextDocumentEvents.js +2 -2
- package/dist/server/model/events/TextDocumentEvents.js.map +1 -1
- package/dist/server/model/events/ThreadParticipantEvents.js +1 -1
- package/dist/server/model/events/ThreadParticipantEvents.js.map +1 -1
- package/dist/server/seed/ui/seed-ui.js +1 -1
- package/dist/server/seed/ui/seed-ui.js.map +1 -1
- package/dist/server/services/channels/ChannelPageService.d.ts +3 -1
- package/dist/server/services/channels/ChannelPageService.d.ts.map +1 -1
- package/dist/server/services/channels/ChannelPageService.js +21 -17
- package/dist/server/services/channels/ChannelPageService.js.map +1 -1
- package/dist/server/services/dom/HtmlSanitizer.js +5 -5
- package/dist/server/services/dom/HtmlSanitizer.js.map +1 -1
- package/dist/server/services/puppeteer/PuppeteerServer.d.ts +1 -19
- package/dist/server/services/puppeteer/PuppeteerServer.d.ts.map +1 -1
- package/dist/server/services/puppeteer/PuppeteerServer.js +176 -268
- package/dist/server/services/puppeteer/PuppeteerServer.js.map +1 -1
- package/dist/server/services/puppeteer/PuppeteerService.d.ts +1 -1
- package/dist/server/services/puppeteer/PuppeteerService.d.ts.map +1 -1
- package/dist/server/services/puppeteer/PuppeteerService.js +2 -1
- package/dist/server/services/puppeteer/PuppeteerService.js.map +1 -1
- package/dist/server/smtp/services/CachedEmailService.js +1 -1
- package/dist/server/smtp/services/EmailReferenceService.d.ts.map +1 -1
- package/dist/server/smtp/services/EmailReferenceService.js +34 -35
- package/dist/server/smtp/services/EmailReferenceService.js.map +1 -1
- package/dist/server/smtp/services/EngagementService.js +1 -1
- package/dist/server/workflows/channel/BroadcastEmail.d.ts.map +1 -1
- package/dist/server/workflows/channel/BroadcastEmail.js +16 -8
- package/dist/server/workflows/channel/BroadcastEmail.js.map +1 -1
- package/dist/server/workflows/repair/channel/RepairChannelEmailCountsWorkflow.js +1 -1
- package/dist/server/workflows/repair/counts/RepairEmailCountsWorkflow.js +1 -1
- package/dist/server/workflows/repair/counts/RepairEmailCountsWorkflow.js.map +1 -1
- package/dist/server/workflows/repair/tags/RepairEmailTagsWorkflow.js +1 -1
- package/dist/server/workflows/repair/tags/RepairEmailTagsWorkflow.js.map +1 -1
- package/dist/server/workflows/smtp/DispatchEmailToMX.d.ts +1 -1
- package/dist/server/workflows/smtp/DispatchEmailToMX.d.ts.map +1 -1
- package/dist/server/workflows/smtp/DispatchEmailToMX.js +9 -7
- package/dist/server/workflows/smtp/DispatchEmailToMX.js.map +1 -1
- package/dist/server/workflows/smtp/MailDispatcherService.d.ts +3 -2
- package/dist/server/workflows/smtp/MailDispatcherService.d.ts.map +1 -1
- package/dist/server/workflows/smtp/MailDispatcherService.js +4 -4
- package/dist/server/workflows/smtp/MailDispatcherService.js.map +1 -1
- package/dist/server/workflows/smtp/PrepareEmailToSend.d.ts +1 -1
- package/dist/server/workflows/smtp/PrepareEmailToSend.js +1 -1
- package/dist/server/workflows/smtp/PrepareEmailToSend.js.map +1 -1
- package/dist/server/workflows/sync/SyncMailboxWorkflow.js +2 -2
- package/dist/server/workflows/sync/SyncMailboxWorkflow.js.map +1 -1
- package/dist/server/workflows/web-hooks/InvokeWebHookWorkflow.js +1 -1
- package/dist/server/workflows/web-hooks/InvokeWebHookWorkflow.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/wwwroot/routes/api/emails/channel/content/attachment/index.js +2 -2
- package/dist/wwwroot/routes/api/emails/channel/content/attachment/index.js.map +1 -1
- package/dist/wwwroot/routes/api/emails/channel/content/html/index.js +6 -6
- package/dist/wwwroot/routes/api/emails/channel/content/html/index.js.map +1 -1
- package/dist/wwwroot/routes/social-mail/public/email/attachment/index.d.ts.map +1 -1
- package/dist/wwwroot/routes/social-mail/public/email/attachment/index.js +2 -1
- package/dist/wwwroot/routes/social-mail/public/email/attachment/index.js.map +1 -1
- package/dist/wwwroot/routes/social-mail/social/buttons/get.d.ts +1 -25
- package/dist/wwwroot/routes/social-mail/social/buttons/get.d.ts.map +1 -1
- package/dist/wwwroot/routes/social-mail/social/buttons/get.js +106 -120
- package/dist/wwwroot/routes/social-mail/social/buttons/get.js.map +1 -1
- package/dist/wwwroot/routes/social-mail/social/buttons-3x/get.d.ts +1 -26
- package/dist/wwwroot/routes/social-mail/social/buttons-3x/get.d.ts.map +1 -1
- package/dist/wwwroot/routes/social-mail/social/buttons-3x/get.js +116 -130
- package/dist/wwwroot/routes/social-mail/social/buttons-3x/get.js.map +1 -1
- package/package.json +2 -3
- package/src/server/model/SocialMailContext.ts +2 -2
- package/src/server/model/SocialMailContextEvents.ts +2 -2
- package/src/server/model/entities/AppFile.ts +2 -2
- package/src/server/model/entities/{MailboxEmail.ts → ChannelEmail.ts} +16 -2
- package/src/server/model/entities/Email.ts +3 -2
- package/src/server/model/entities/EmailAddress.ts +2 -0
- package/src/server/model/entities/Mailbox.ts +2 -2
- package/src/server/model/entities/MailboxContactEmail.ts +5 -1
- package/src/server/model/events/AppFileEvents.ts +24 -5
- package/src/server/model/events/AppFileTagEvents.ts +4 -5
- package/src/server/model/events/EmailAddressEvents.ts +5 -8
- package/src/server/model/events/EmailEngagementEvents.ts +1 -1
- package/src/server/model/events/EmailEvents.ts +6 -6
- package/src/server/model/events/EmailLogEvents.ts +1 -1
- package/src/server/model/events/EmailRecipientEvents.ts +1 -1
- package/src/server/model/events/EmailTagEvents.ts +1 -1
- package/src/server/model/events/FileContentEvents.ts +3 -4
- package/src/server/model/events/MailboxContactEvents.ts +4 -4
- package/src/server/model/events/MailboxEmailEvents.ts +16 -7
- package/src/server/model/events/MailboxEvents.ts +7 -6
- package/src/server/model/events/TagEvents.ts +2 -2
- package/src/server/model/events/TextDocumentEvents.ts +3 -3
- package/src/server/model/events/ThreadParticipantEvents.ts +1 -1
- package/src/server/seed/ui/seed-ui.ts +1 -1
- package/src/server/services/channels/ChannelPageService.tsx +22 -17
- package/src/server/services/dom/HtmlSanitizer.tsx +6 -6
- package/src/server/services/emails/UnreadCountService.ts +1 -1
- package/src/server/services/puppeteer/PuppeteerServer.ts +194 -194
- package/src/server/services/puppeteer/PuppeteerService.ts +1 -1
- package/src/server/smtp/services/CachedEmailService.ts +1 -1
- package/src/server/smtp/services/EmailReferenceService.ts +36 -37
- package/src/server/smtp/services/EngagementService.ts +1 -1
- package/src/server/workflows/channel/BroadcastEmail.ts +21 -8
- package/src/server/workflows/repair/channel/RepairChannelEmailCountsWorkflow.ts +1 -1
- package/src/server/workflows/repair/counts/RepairEmailCountsWorkflow.ts +1 -1
- package/src/server/workflows/repair/tags/RepairEmailTagsWorkflow.ts +1 -1
- package/src/server/workflows/smtp/DispatchEmailToMX.ts +11 -8
- package/src/server/workflows/smtp/MailDispatcherService.ts +5 -5
- package/src/server/workflows/smtp/PrepareEmailToSend.ts +1 -1
- package/src/server/workflows/sync/SyncMailboxWorkflow.ts +2 -2
- package/src/server/workflows/web-hooks/InvokeWebHookWorkflow.ts +1 -1
- package/src/wwwroot/routes/api/emails/channel/content/attachment/index.ts +2 -2
- package/src/wwwroot/routes/api/emails/channel/content/html/index.ts +6 -6
- package/src/wwwroot/routes/social-mail/public/email/attachment/index.ts +3 -1
- package/src/wwwroot/routes/social-mail/social/buttons/get.tsx +130 -130
- package/src/wwwroot/routes/social-mail/social/buttons-3x/get.tsx +143 -143
- package/dist/server/model/entities/MailboxEmail.d.ts.map +0 -1
- package/dist/server/model/entities/MailboxEmail.js.map +0 -1
|
@@ -1,194 +1,194 @@
|
|
|
1
|
-
/* eslint-disable no-console */
|
|
2
|
-
import Inject, { RegisterSingleton } from "@entity-access/entity-access/dist/di/di.js";
|
|
3
|
-
import puppeteer, { Page } from "puppeteer-core";
|
|
4
|
-
import { globalEnv } from "../../../common/globalEnv.js";
|
|
5
|
-
import HtmlSanitizer from "../dom/HtmlSanitizer.js";
|
|
6
|
-
import GlobalEvents from "../../../common/GlobalEvents.js";
|
|
7
|
-
import { rmdir, writeFile } from "node:fs/promises";
|
|
8
|
-
import { existsSync, mkdirSync, unlinkSync } from "node:fs";
|
|
9
|
-
import LockFile from "../../storage/LockFile.js";
|
|
10
|
-
|
|
11
|
-
const options = [
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
];
|
|
53
|
-
|
|
54
|
-
// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
|
|
55
|
-
export type DisposablePage = Partial<Page> & AsyncDisposable ;
|
|
56
|
-
|
|
57
|
-
const buffer = Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAAtJREFUGFdjYAACAAAFAAGq1chRAAAAAElFTkSuQmCC", "base64");
|
|
58
|
-
|
|
59
|
-
@RegisterSingleton
|
|
60
|
-
export default class PuppeteerServer {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
}
|
|
1
|
+
// /* eslint-disable no-console */
|
|
2
|
+
// import Inject, { RegisterSingleton } from "@entity-access/entity-access/dist/di/di.js";
|
|
3
|
+
// import puppeteer, { Page } from "puppeteer-core";
|
|
4
|
+
// import { globalEnv } from "../../../common/globalEnv.js";
|
|
5
|
+
// import HtmlSanitizer from "../dom/HtmlSanitizer.js";
|
|
6
|
+
// import GlobalEvents from "../../../common/GlobalEvents.js";
|
|
7
|
+
// import { rmdir, writeFile } from "node:fs/promises";
|
|
8
|
+
// import { existsSync, mkdirSync, unlinkSync } from "node:fs";
|
|
9
|
+
// import LockFile from "../../storage/LockFile.js";
|
|
10
|
+
|
|
11
|
+
// const options = [
|
|
12
|
+
// '--disable-background-networking',
|
|
13
|
+
// '--disable-background-timer-throttling',
|
|
14
|
+
// '--disable-backgrounding-occluded-windows',
|
|
15
|
+
// '--disable-breakpad',
|
|
16
|
+
// '--disable-client-side-phishing-detection',
|
|
17
|
+
// '--disable-component-update',
|
|
18
|
+
// '--disable-default-apps',
|
|
19
|
+
// '--disable-dev-shm-usage',
|
|
20
|
+
// '--disable-domain-reliability',
|
|
21
|
+
// '--disable-extensions',
|
|
22
|
+
// '--disable-features=AudioServiceOutOfProcess',
|
|
23
|
+
// '--disable-hang-monitor',
|
|
24
|
+
// '--disable-ipc-flooding-protection',
|
|
25
|
+
// '--disable-notifications',
|
|
26
|
+
// '--disable-offer-store-unmasked-wallet-cards',
|
|
27
|
+
// '--disable-popup-blocking',
|
|
28
|
+
// '--disable-print-preview',
|
|
29
|
+
// '--disable-prompt-on-repost',
|
|
30
|
+
// '--disable-renderer-backgrounding',
|
|
31
|
+
// '--disable-setuid-sandbox',
|
|
32
|
+
// '--disable-speech-api',
|
|
33
|
+
// '--disable-sync',
|
|
34
|
+
// '--disk-cache-size=33554432',
|
|
35
|
+
// // '--hide-scrollbars',
|
|
36
|
+
// // '--ignore-gpu-blacklist',
|
|
37
|
+
// // '--metrics-recording-only',
|
|
38
|
+
// '--mute-audio',
|
|
39
|
+
// '--no-default-browser-check',
|
|
40
|
+
// '--no-first-run',
|
|
41
|
+
// '--no-pings',
|
|
42
|
+
// '--no-sandbox',
|
|
43
|
+
// '--no-zygote',
|
|
44
|
+
// '--password-store=basic',
|
|
45
|
+
// '--use-mock-keychain',
|
|
46
|
+
// // '--single-process',
|
|
47
|
+
// '--autoplay-policy=no-user-gesture-required',
|
|
48
|
+
// // '--enable-logging=stderr',
|
|
49
|
+
// // '--v=1',
|
|
50
|
+
// // '--disable-gpu',
|
|
51
|
+
// // '--window-size=400,800',
|
|
52
|
+
// ];
|
|
53
|
+
|
|
54
|
+
// // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
|
|
55
|
+
// export type DisposablePage = Partial<Page> & AsyncDisposable ;
|
|
56
|
+
|
|
57
|
+
// const buffer = Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAAtJREFUGFdjYAACAAAFAAGq1chRAAAAAElFTkSuQmCC", "base64");
|
|
58
|
+
|
|
59
|
+
// @RegisterSingleton
|
|
60
|
+
// export default class PuppeteerServer {
|
|
61
|
+
|
|
62
|
+
// @Inject
|
|
63
|
+
// htmlSanitizer: HtmlSanitizer;
|
|
64
|
+
|
|
65
|
+
// public async htmlToPdf(content: string, { outputFile, deviceScaleFactor, pdfOptions }: { outputFile: string, pdfOptions?: string, deviceScaleFactor?: number }) {
|
|
66
|
+
// try {
|
|
67
|
+
// await using page = await this.newPage({ deviceScaleFactor });
|
|
68
|
+
// content = this.htmlSanitizer.prepareForPreview(content);
|
|
69
|
+
// if(typeof pdfOptions === "string") {
|
|
70
|
+
// pdfOptions = JSON.parse(pdfOptions);
|
|
71
|
+
// }
|
|
72
|
+
// await page.pdf({ ... pdfOptions as any,
|
|
73
|
+
// path: outputFile
|
|
74
|
+
// });
|
|
75
|
+
// } catch (error) {
|
|
76
|
+
// await writeFile(outputFile, buffer);
|
|
77
|
+
// if (/Node\shas\s0\swidth/i.test(error.message ?? error)) {
|
|
78
|
+
// return;
|
|
79
|
+
// }
|
|
80
|
+
// console.log(content);
|
|
81
|
+
// console.error(error);
|
|
82
|
+
// }
|
|
83
|
+
// }
|
|
84
|
+
|
|
85
|
+
// public async htmlToPng(content: string, {
|
|
86
|
+
// selector,
|
|
87
|
+
// outputFile,
|
|
88
|
+
// count,
|
|
89
|
+
// deviceScaleFactor
|
|
90
|
+
// }: { selector?: string; outputFile: string, count?: string, deviceScaleFactor?: number}) {
|
|
91
|
+
// try {
|
|
92
|
+
// await using page = await this.newPage({ deviceScaleFactor });
|
|
93
|
+
// content = this.htmlSanitizer.prepareForPreview(content);
|
|
94
|
+
// await page.setContent(content, {
|
|
95
|
+
// waitUntil: "networkidle2"
|
|
96
|
+
// });
|
|
97
|
+
// const element = await page.$(selector);
|
|
98
|
+
// if (!element) {
|
|
99
|
+
// await writeFile(buffer, outputFile);
|
|
100
|
+
// return;
|
|
101
|
+
// }
|
|
102
|
+
// if (count) {
|
|
103
|
+
// await element.evaluate((e, c) => {
|
|
104
|
+
// const span = e.querySelector(`[data-social-mail-element="count"]`);
|
|
105
|
+
// if (span) {
|
|
106
|
+
// span.textContent = c;
|
|
107
|
+
// }
|
|
108
|
+
// }, count);
|
|
109
|
+
// }
|
|
110
|
+
// await element.scrollIntoView();
|
|
111
|
+
// const clip = await element.boundingBox();
|
|
112
|
+
// let top = Math.floor(clip.y);
|
|
113
|
+
// if (top < clip.y) {
|
|
114
|
+
// clip.height++;
|
|
115
|
+
// } else {
|
|
116
|
+
// top-=2;
|
|
117
|
+
// clip.height+=4;
|
|
118
|
+
// }
|
|
119
|
+
// clip.height = Math.ceil(clip.height);
|
|
120
|
+
// clip.y = top;
|
|
121
|
+
// await page.screenshot({
|
|
122
|
+
// path: outputFile,
|
|
123
|
+
// clip,
|
|
124
|
+
// omitBackground: true
|
|
125
|
+
// });
|
|
126
|
+
|
|
127
|
+
// // change the dpi...
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
// } catch (error) {
|
|
131
|
+
// await writeFile(outputFile, buffer);
|
|
132
|
+
// if (/Node\shas\s0\swidth/i.test(error.message ?? error)) {
|
|
133
|
+
// return;
|
|
134
|
+
// }
|
|
135
|
+
// console.log(content);
|
|
136
|
+
// console.error(error);
|
|
137
|
+
// }
|
|
138
|
+
// }
|
|
139
|
+
|
|
140
|
+
// public async svgToPng(svgFile: string, outputFile: string) {
|
|
141
|
+
// await using page = await this.newPage();
|
|
142
|
+
// await page.goto(svgFile, { waitUntil: "networkidle2"});
|
|
143
|
+
// await page.screenshot({ path: outputFile });
|
|
144
|
+
// }
|
|
145
|
+
|
|
146
|
+
// public async newPage({ deviceScaleFactor }: Partial<puppeteer.Viewport> = {}): Promise<DisposablePage> {
|
|
147
|
+
|
|
148
|
+
// const lf = await LockFile.lock("puppeteer-html-to-image");
|
|
149
|
+
|
|
150
|
+
// const userDataDir = `/tmp/${Date.now().toString(36)}`;
|
|
151
|
+
|
|
152
|
+
// if(!existsSync(userDataDir)) {
|
|
153
|
+
// try {
|
|
154
|
+
// mkdirSync(userDataDir, { recursive: true });
|
|
155
|
+
// } catch {
|
|
156
|
+
// // ignore this...
|
|
157
|
+
// }
|
|
158
|
+
// }
|
|
159
|
+
|
|
160
|
+
// const browser = await puppeteer.launch({
|
|
161
|
+
// executablePath: globalEnv.puppeteerExecutablePath,
|
|
162
|
+
// userDataDir,
|
|
163
|
+
// args: options,
|
|
164
|
+
// // dumpio: true,
|
|
165
|
+
// // ignoreHTTPSErrors: true,
|
|
166
|
+
// ignoreDefaultArgs: ["--mute-audio"]
|
|
167
|
+
// });
|
|
168
|
+
|
|
169
|
+
// const page = await browser.newPage();
|
|
170
|
+
// await page.setViewport({
|
|
171
|
+
// ... (page.viewport() ?? {} as any),
|
|
172
|
+
// deviceScaleFactor
|
|
173
|
+
// });
|
|
174
|
+
|
|
175
|
+
// // we will kill browser in 15 seconds..
|
|
176
|
+
// const ct = setTimeout(() => browser.close().catch(console.error), 15000);
|
|
177
|
+
|
|
178
|
+
// page[Symbol.asyncDispose] = async () => {
|
|
179
|
+
// clearTimeout(ct);
|
|
180
|
+
// lf[Symbol.dispose]();
|
|
181
|
+
// try {
|
|
182
|
+
// await browser.close();
|
|
183
|
+
// } catch {
|
|
184
|
+
// // ignore error.
|
|
185
|
+
// }
|
|
186
|
+
// try {
|
|
187
|
+
// await rmdir(userDataDir);
|
|
188
|
+
// } catch {
|
|
189
|
+
// // ignore
|
|
190
|
+
// }
|
|
191
|
+
// };
|
|
192
|
+
// return page as any as DisposablePage;
|
|
193
|
+
// }
|
|
194
|
+
// }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { default as PuppeteerService } from "./PuppeteerServer.js";
|
|
1
|
+
// export { default as PuppeteerService } from "./PuppeteerServer.js";
|
|
@@ -101,7 +101,7 @@ export default class CachedEmailService {
|
|
|
101
101
|
};
|
|
102
102
|
|
|
103
103
|
const ef = await this.cacheService.get({
|
|
104
|
-
key: `cached-email-html-
|
|
104
|
+
key: `cached-email-html-a9-${emailID}-${emailAddressID}-${signedFileLogID}`,
|
|
105
105
|
factory,
|
|
106
106
|
ttl: TimeSpan.fromDays(30)
|
|
107
107
|
});
|
|
@@ -285,7 +285,6 @@ export default class EmailReferenceService {
|
|
|
285
285
|
.include((x) => [
|
|
286
286
|
x.recipients.forEach((r) => r.emailAddress.mailbox),
|
|
287
287
|
x.senderEmail.mailbox,
|
|
288
|
-
x.mailboxes.forEach((r) => r.mailbox),
|
|
289
288
|
x.thread.lastReply
|
|
290
289
|
])
|
|
291
290
|
.first();
|
|
@@ -395,19 +394,19 @@ export default class EmailReferenceService {
|
|
|
395
394
|
}
|
|
396
395
|
|
|
397
396
|
// event sent emails are part of mailbox
|
|
398
|
-
await db.mailboxEmails.statements.selectOrInsert({
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
});
|
|
397
|
+
// await db.mailboxEmails.statements.selectOrInsert({
|
|
398
|
+
// mailboxID: senderID,
|
|
399
|
+
// emailID
|
|
400
|
+
// });
|
|
402
401
|
|
|
403
402
|
if (mailbox) {
|
|
404
403
|
|
|
405
404
|
// this is the case when email was sent from the system
|
|
406
405
|
// we will insert in respective mailboxes here...
|
|
407
|
-
await db.mailboxEmails.statements.selectOrInsert({
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
});
|
|
406
|
+
// await db.mailboxEmails.statements.selectOrInsert({
|
|
407
|
+
// mailboxID: emailAddressID,
|
|
408
|
+
// emailID
|
|
409
|
+
// });
|
|
411
410
|
|
|
412
411
|
saved.add(emailAddressID);
|
|
413
412
|
|
|
@@ -439,10 +438,10 @@ export default class EmailReferenceService {
|
|
|
439
438
|
// we will only store in mailboxes that exist on the system
|
|
440
439
|
saved.add(emailAddressID);
|
|
441
440
|
if (mailbox) {
|
|
442
|
-
await db.mailboxEmails.statements.selectOrInsert({
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
});
|
|
441
|
+
// await db.mailboxEmails.statements.selectOrInsert({
|
|
442
|
+
// mailboxID: emailAddressID,
|
|
443
|
+
// emailID
|
|
444
|
+
// });
|
|
446
445
|
const mailboxID = emailAddressID;
|
|
447
446
|
await this.updateThread({
|
|
448
447
|
engagement,
|
|
@@ -467,30 +466,30 @@ export default class EmailReferenceService {
|
|
|
467
466
|
// or sent as bcc to hosted mailbox
|
|
468
467
|
// in that case we will put mail in sender's folder
|
|
469
468
|
|
|
470
|
-
if (email.mailboxes) {
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
}
|
|
469
|
+
// if (email.mailboxes) {
|
|
470
|
+
// for (const { mailbox } of email.mailboxes) {
|
|
471
|
+
|
|
472
|
+
// const mailboxID = mailbox.mailboxID;
|
|
473
|
+
// if (saved.has(mailboxID)) {
|
|
474
|
+
// continue;
|
|
475
|
+
// }
|
|
476
|
+
|
|
477
|
+
// await this.updateThread({
|
|
478
|
+
// engagement,
|
|
479
|
+
// mailbox,
|
|
480
|
+
// mailboxID,
|
|
481
|
+
// emailAddressID: senderID,
|
|
482
|
+
// lastEmailID: emailID,
|
|
483
|
+
// silent,
|
|
484
|
+
// timeRead,
|
|
485
|
+
// dateUpdated,
|
|
486
|
+
// tagIDs,
|
|
487
|
+
// email,
|
|
488
|
+
// newOpenThread,
|
|
489
|
+
// newThread,
|
|
490
|
+
// });
|
|
491
|
+
// }
|
|
492
|
+
// }
|
|
494
493
|
|
|
495
494
|
return email;
|
|
496
495
|
}
|
|
@@ -195,7 +195,7 @@ export default class EngagementService {
|
|
|
195
195
|
const ea = { emailID, engagement };
|
|
196
196
|
|
|
197
197
|
if (email.status === "published") {
|
|
198
|
-
await this.db.
|
|
198
|
+
await this.db.channelEmails.where(ea, (p) => (x) => x.emailID === p.emailID)
|
|
199
199
|
.update(void 0, (p) => (x) => ({
|
|
200
200
|
engagementCount: x.engagementCount + 1,
|
|
201
201
|
dateUpdated: Sql.date.now()
|
|
@@ -9,6 +9,7 @@ import { randomUUID } from "crypto";
|
|
|
9
9
|
import DispatchEmailToMX from "../smtp/DispatchEmailToMX.js";
|
|
10
10
|
import EmailAddressService from "../../services/EmailAddressService.js";
|
|
11
11
|
import TimeSpan from "@entity-access/entity-access/dist/types/TimeSpan.js";
|
|
12
|
+
import Sql from "@entity-access/entity-access/dist/sql/Sql.js";
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* Broadcasting Email is done in following manner.
|
|
@@ -82,22 +83,34 @@ export default class BroadcastEmail extends Workflow<IBroadcastEmail> {
|
|
|
82
83
|
const [email] = await db.emails.where(this.input, (p) => (x) => x.emailID === p.emailID)
|
|
83
84
|
.updateSelect(void 0, (p) => (x) => ({ status: "published"}));
|
|
84
85
|
|
|
86
|
+
// find first attachment
|
|
87
|
+
const types = ["video/%", "image/%"];
|
|
88
|
+
|
|
89
|
+
const firstAttachment = await db.appFiles.where({ types, emailID }, (p) => (x) =>
|
|
90
|
+
x.emailID === p.emailID
|
|
91
|
+
&& Sql.text.likeAny(x.contentType, p.types))
|
|
92
|
+
.orderBy(void 0, (p) => (x) => Sql.text.like(x.contentType, "video/%"))
|
|
93
|
+
.first();
|
|
94
|
+
|
|
95
|
+
const previewFileID = firstAttachment?.appFileID;
|
|
96
|
+
|
|
85
97
|
await db.mailboxes.statements.update({ datePublished }, { mailboxID });
|
|
86
98
|
|
|
87
99
|
// gmail sends in-reply-to for forwarded messages.
|
|
88
100
|
// ideally in-reply-to must not be set if the message was forwarded
|
|
89
101
|
|
|
90
102
|
let isThread = email.parentID === null;
|
|
91
|
-
if(email.parentID) {
|
|
92
|
-
const { parentID } = email;
|
|
93
|
-
isThread = !(await db.mailboxEmails.where({ mailboxID , parentID}, (p) => (x) => x.emailID === p.parentID && x.mailboxID === p.mailboxID)
|
|
94
|
-
.some());
|
|
95
|
-
}
|
|
96
103
|
|
|
97
104
|
if (isThread) {
|
|
98
|
-
await db.
|
|
105
|
+
await db.channelEmails.statements.upsert({ previewFileID, isThread: true, datePublished, dateUpdated,mailboxID, emailID }, (x) => x, { mailboxID, emailID });
|
|
99
106
|
} else {
|
|
100
|
-
await db.
|
|
107
|
+
await db.channelEmails.statements.upsert({ previewFileID, datePublished, dateUpdated, mailboxID, emailID }, (x) => x, { mailboxID, emailID });
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if(email.parentID) {
|
|
111
|
+
const { parentID } = email;
|
|
112
|
+
isThread = !(await db.channelEmails.where({ mailboxID , parentID}, (p) => (x) => x.emailID === p.parentID && x.mailboxID === p.mailboxID)
|
|
113
|
+
.some());
|
|
101
114
|
}
|
|
102
115
|
|
|
103
116
|
// load email..
|
|
@@ -151,7 +164,7 @@ export default class BroadcastEmail extends Workflow<IBroadcastEmail> {
|
|
|
151
164
|
const { activityID } = activity;
|
|
152
165
|
|
|
153
166
|
await this.context.queue(DispatchEmailToMX, {
|
|
154
|
-
emailAddressID,
|
|
167
|
+
recipientAddressID: emailAddressID,
|
|
155
168
|
emailID,
|
|
156
169
|
senderID,
|
|
157
170
|
external: false,
|
|
@@ -36,7 +36,7 @@ export default class RepairChannelEmailCountsWorkflow extends Workflow {
|
|
|
36
36
|
for (const iterator of mailboxes) {
|
|
37
37
|
start = iterator.mailboxID;
|
|
38
38
|
|
|
39
|
-
await db.
|
|
39
|
+
await db.channelEmails.where(iterator, (p) => (x) => x.mailboxID === p.mailboxID)
|
|
40
40
|
.update(void 0, (p) => (x) => ({
|
|
41
41
|
isThread: x.email.parentID === null ? true : false,
|
|
42
42
|
datePublished: Sql.cast.asDateTime( x.email.status === "published" ? x.email.dateSent : null ) as any,
|
|
@@ -56,7 +56,7 @@ export default class RepairEmailCountsWorkflow extends Workflow<{ mailboxID? }>
|
|
|
56
56
|
const q = db.emails
|
|
57
57
|
.where({ start, mailboxID }, (p) => (x) => x.emailID > p.start
|
|
58
58
|
&& x.threadID === null
|
|
59
|
-
&& x.
|
|
59
|
+
&& x.mailboxContactEvents.some((t) => t.mailboxID === p.mailboxID)
|
|
60
60
|
&& x.lastReplyID === null
|
|
61
61
|
);
|
|
62
62
|
const list = await q
|
|
@@ -173,7 +173,7 @@ export default class RepairEmailTagsWorkflow extends Workflow<{ mailboxID? }> {
|
|
|
173
173
|
|
|
174
174
|
// get last updated...
|
|
175
175
|
const last = await db.emails.where({ tagID, mailboxID}, (p) => (x) =>
|
|
176
|
-
x.
|
|
176
|
+
x.mailboxContactEvents.some((m) => m.mailboxID === p.mailboxID)
|
|
177
177
|
&& x.emailTags.some((t) => t.tagID === p.tagID)
|
|
178
178
|
).orderByDescending(void 0, (p) => (x) => x.dateCreated).first();
|
|
179
179
|
|