@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
|
@@ -57,7 +57,7 @@ export default class EmailEvents extends AuthenticatedEvents<Email> {
|
|
|
57
57
|
}
|
|
58
58
|
const { userID } = this.sessionUser;
|
|
59
59
|
return query.where({ userID }, (p) => (x) =>
|
|
60
|
-
x.
|
|
60
|
+
x.mailboxContactEvents.some((m) =>
|
|
61
61
|
m.mailbox.userMailboxes.some((mu) => mu.userID === p.userID)
|
|
62
62
|
|| m.mailbox.domain.hostedDomain.domainUsers.some((du) => du.userID === p.userID && du.isAdmin === true)
|
|
63
63
|
)
|
|
@@ -76,10 +76,10 @@ export default class EmailEvents extends AuthenticatedEvents<Email> {
|
|
|
76
76
|
const q = mailboxes
|
|
77
77
|
? this.db.emails.where({ channelID, host, mailboxes}, (p) => (x) =>
|
|
78
78
|
x.status === "published"
|
|
79
|
-
&& x.
|
|
79
|
+
&& x.channelEmails.some((m) => Sql.in(m.mailboxID, p.mailboxes)))
|
|
80
80
|
: this.db.emails.where({ channelID, host, domains}, (p) => (x) =>
|
|
81
81
|
x.status === "published"
|
|
82
|
-
&& x.
|
|
82
|
+
&& x.channelEmails.some((m) => Sql.in(m.mailbox.domainID, p.domains)));
|
|
83
83
|
return q.limit(25);
|
|
84
84
|
}
|
|
85
85
|
|
|
@@ -211,7 +211,7 @@ export default class EmailEvents extends AuthenticatedEvents<Email> {
|
|
|
211
211
|
await this.db.emailEngagements.asQuery()
|
|
212
212
|
.delete(entity, (p) => (x) => x.emailID === p.emailID);
|
|
213
213
|
|
|
214
|
-
await this.db.
|
|
214
|
+
await this.db.channelEmails
|
|
215
215
|
.asQuery()
|
|
216
216
|
.delete(entity, (p) => (x) => x.emailID === p.emailID);
|
|
217
217
|
|
|
@@ -244,11 +244,11 @@ export default class EmailEvents extends AuthenticatedEvents<Email> {
|
|
|
244
244
|
if (entry.isUpdated("status")) {
|
|
245
245
|
switch(entity.status) {
|
|
246
246
|
case "published":
|
|
247
|
-
await this.db.
|
|
247
|
+
await this.db.channelEmails.where(entity, (p) => (x) => x.emailID === p.emailID && x.mailbox.isChannel === true)
|
|
248
248
|
.update(entity, (p) => (x) => ({ datePublished: Sql.cast.asDateTime(p.dateSent) as any }));
|
|
249
249
|
break;
|
|
250
250
|
default:
|
|
251
|
-
await this.db.
|
|
251
|
+
await this.db.channelEmails.where(entity, (p) => (x) => x.emailID === p.emailID && x.mailbox.isChannel === true)
|
|
252
252
|
.update(void 0, (p) => (x) => ({ datePublished: Sql.cast.asDateTime(null) as any }));
|
|
253
253
|
}
|
|
254
254
|
}
|
|
@@ -23,7 +23,7 @@ export default class EmailLogEvents extends BaseEvents<EmailLog> {
|
|
|
23
23
|
}
|
|
24
24
|
const { userID } = this.sessionUser;
|
|
25
25
|
return query.where({ userID }, (p) => (x) =>
|
|
26
|
-
x.email.
|
|
26
|
+
x.email.mailboxContactEvents.some((m) =>
|
|
27
27
|
m.mailbox.userMailboxes.some((mu) => mu.userID === p.userID)
|
|
28
28
|
|| m.mailbox.domain.hostedDomain.domainUsers.some((du) => du.userID === p.userID && du.isAdmin === true)
|
|
29
29
|
)
|
|
@@ -28,7 +28,7 @@ export default class EmailRecipientEvents extends AuthenticatedEvents<EmailRecip
|
|
|
28
28
|
}
|
|
29
29
|
const { userID } = this.sessionUser;
|
|
30
30
|
return query.where({ userID }, (p) => (x) =>
|
|
31
|
-
x.email.
|
|
31
|
+
x.email.mailboxContactEvents.some((m) =>
|
|
32
32
|
m.mailbox.userMailboxes.some((mu) => mu.userID === p.userID)
|
|
33
33
|
|| m.mailbox.domain.hostedDomain.domainUsers.some((du) => du.userID === p.userID && du.isAdmin === true)
|
|
34
34
|
)
|
|
@@ -13,7 +13,7 @@ export default class EmailTagEvents extends AuthenticatedEvents<EmailTag> {
|
|
|
13
13
|
}
|
|
14
14
|
const { userID } = this.sessionUser;
|
|
15
15
|
return query.where({ userID }, (p) => (x) =>
|
|
16
|
-
x.email.
|
|
16
|
+
x.email.mailboxContactEvents.some((m) =>
|
|
17
17
|
m.mailbox.userMailboxes.some((mu) => mu.userID === p.userID)
|
|
18
18
|
|| m.mailbox.domain.hostedDomain.domainUsers.some((du) => du.userID === p.userID && du.isAdmin === true)
|
|
19
19
|
)
|
|
@@ -21,10 +21,9 @@ export default class FileContentEvents extends AuthenticatedEvents<FileContent>
|
|
|
21
21
|
t.hostedDomain.domainUsers.some((d) => d.userID === p.userID)
|
|
22
22
|
|| t.mailbox.userMailboxes.some((u) => u.userID === p.userID)
|
|
23
23
|
|| t.mailbox.domain.hostedDomain.domainUsers.some((u) => u.userID === p.userID))
|
|
24
|
-
||
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|| um.mailbox.domain.hostedDomain.domainUsers.some((du) => du.userID === p.userID && du.isAdmin === true)
|
|
24
|
+
|| af.email.mailboxContactEvents.some((m) =>
|
|
25
|
+
m.mailbox.userMailboxes.some((mu) => mu.userID === p.userID)
|
|
26
|
+
|| m.mailbox.domain.hostedDomain.domainUsers.some((du) => du.userID === p.userID && du.isAdmin === true)
|
|
28
27
|
)
|
|
29
28
|
)
|
|
30
29
|
);
|
|
@@ -96,10 +96,10 @@ export default class MailboxContactEvents extends AuthenticatedEvents<MailboxCon
|
|
|
96
96
|
timeRead: dateSent
|
|
97
97
|
});
|
|
98
98
|
|
|
99
|
-
await db.mailboxEmails.statements.insert({
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
});
|
|
99
|
+
// await db.mailboxEmails.statements.insert({
|
|
100
|
+
// emailID,
|
|
101
|
+
// mailboxID
|
|
102
|
+
// });
|
|
103
103
|
|
|
104
104
|
await db.emails
|
|
105
105
|
.where(entity , (p) => (x) => x.threadContacts.some((t) => t.mailboxID === p.mailboxID
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import ChangeEntry from "@entity-access/entity-access/dist/model/changes/ChangeEntry.js";
|
|
2
|
-
import
|
|
2
|
+
import ChannelEmail from "../entities/ChannelEmail.js";
|
|
3
3
|
import AuthenticatedEvents from "./AuthenticatedEvents.js";
|
|
4
4
|
import { IEntityQuery } from "@entity-access/entity-access/dist/model/IFilterWithParameter.js";
|
|
5
5
|
import Inject, { ServiceProvider } from "@entity-access/entity-access/dist/di/di.js";
|
|
@@ -9,13 +9,17 @@ import WebSiteChannelService from "../../smtp/services/WebSiteChannelService.js"
|
|
|
9
9
|
import Page from "@entity-access/server-pages/dist/Page.js";
|
|
10
10
|
import SocialMailContext from "../SocialMailContext.js";
|
|
11
11
|
import EncryptionService from "../../services/encryption/EncryptionService.js";
|
|
12
|
+
import SessionSecurity from "@entity-access/server-pages/dist/services/SessionSecurity.js";
|
|
12
13
|
|
|
13
|
-
export default class MailboxEmailEvents extends AuthenticatedEvents<
|
|
14
|
+
export default class MailboxEmailEvents extends AuthenticatedEvents<ChannelEmail> {
|
|
14
15
|
|
|
15
16
|
@Inject
|
|
16
17
|
ecs: EncryptionService;
|
|
17
18
|
|
|
18
|
-
|
|
19
|
+
@Inject
|
|
20
|
+
ss: SessionSecurity;
|
|
21
|
+
|
|
22
|
+
filter(query: IEntityQuery<ChannelEmail>): IEntityQuery<ChannelEmail> {
|
|
19
23
|
if (!this.verify) {
|
|
20
24
|
return query;
|
|
21
25
|
}
|
|
@@ -41,22 +45,22 @@ export default class MailboxEmailEvents extends AuthenticatedEvents<MailboxEmail
|
|
|
41
45
|
const db = ServiceProvider.resolve(this, SocialMailContext);
|
|
42
46
|
|
|
43
47
|
const q = mailboxes
|
|
44
|
-
? db.
|
|
48
|
+
? db.channelEmails.where({ channelID, host, mailboxes}, (p) => (x) =>
|
|
45
49
|
x.datePublished !== null
|
|
46
50
|
&& Sql.in(x.mailboxID, p.mailboxes))
|
|
47
|
-
: db.
|
|
51
|
+
: db.channelEmails.where({ channelID, host, domains}, (p) => (x) =>
|
|
48
52
|
x.datePublished !== null
|
|
49
53
|
&& Sql.in(x.mailbox.domainID, p.domains));
|
|
50
54
|
return q.limit(25);
|
|
51
55
|
}
|
|
52
56
|
|
|
53
|
-
beforeInsert(entity:
|
|
57
|
+
beforeInsert(entity: ChannelEmail, entry: ChangeEntry<ChannelEmail>) {
|
|
54
58
|
if (this.verify) {
|
|
55
59
|
this.sessionUser.ensureLoggedIn();
|
|
56
60
|
}
|
|
57
61
|
}
|
|
58
62
|
|
|
59
|
-
beforeSerialize(items:
|
|
63
|
+
beforeSerialize(items: ChannelEmail[]) {
|
|
60
64
|
const { ecs } = this;
|
|
61
65
|
for (const item of items) {
|
|
62
66
|
if (!item.datePublished) {
|
|
@@ -66,4 +70,9 @@ export default class MailboxEmailEvents extends AuthenticatedEvents<MailboxEmail
|
|
|
66
70
|
}
|
|
67
71
|
}
|
|
68
72
|
|
|
73
|
+
preJson(entity: ChannelEmail): ChannelEmail {
|
|
74
|
+
this.ss.injectPublicKey(entity);
|
|
75
|
+
return entity;
|
|
76
|
+
}
|
|
77
|
+
|
|
69
78
|
}
|
|
@@ -18,10 +18,11 @@ import EntityAccessError from "@entity-access/entity-access/dist/common/EntityAc
|
|
|
18
18
|
import SyncMailboxWorkflow from "../../workflows/sync/SyncMailboxWorkflow.js";
|
|
19
19
|
import TagService from "../../services/tags/TagService.js";
|
|
20
20
|
import WebSiteChannelService from "../../smtp/services/WebSiteChannelService.js";
|
|
21
|
-
import
|
|
21
|
+
import ChannelEmail from "../entities/ChannelEmail.js";
|
|
22
22
|
import MailboxTag from "../entities/MailboxTag.js";
|
|
23
23
|
import MailboxContactEvent from "../entities/MailboxContactEvent.js";
|
|
24
24
|
import ScopeVars from "../../../common/ScopeVars.js";
|
|
25
|
+
import SessionSecurity from "@entity-access/server-pages/dist/services/SessionSecurity.js";
|
|
25
26
|
|
|
26
27
|
export default class MailboxEvents extends AuthenticatedEvents<Mailbox> {
|
|
27
28
|
|
|
@@ -195,7 +196,7 @@ export default class MailboxEvents extends AuthenticatedEvents<Mailbox> {
|
|
|
195
196
|
}
|
|
196
197
|
|
|
197
198
|
includeFilter(query: IEntityQuery<Mailbox>, type?: any, key?: string) {
|
|
198
|
-
if (type ===
|
|
199
|
+
if (type === ChannelEmail) {
|
|
199
200
|
return query;
|
|
200
201
|
}
|
|
201
202
|
if (type === MailboxTag) {
|
|
@@ -261,18 +262,18 @@ export default class MailboxEvents extends AuthenticatedEvents<Mailbox> {
|
|
|
261
262
|
// }
|
|
262
263
|
|
|
263
264
|
await db.fileContents.asQuery()
|
|
264
|
-
.where(entity, (p) => (x) => x.appFiles.some((a) => a.email.
|
|
265
|
+
.where(entity, (p) => (x) => x.appFiles.some((a) => a.email.mailboxContactEvents.some((m) => m.mailboxID === p.mailboxID)))
|
|
265
266
|
.update(void 0, (p) => (x) => ({
|
|
266
267
|
deleted: true
|
|
267
268
|
}));
|
|
268
269
|
|
|
269
270
|
|
|
270
271
|
await db.appFiles.asQuery()
|
|
271
|
-
.delete(entity, (p) => (x) => x.email.
|
|
272
|
+
.delete(entity, (p) => (x) => x.email.mailboxContactEvents.some((m) => m.mailboxID === p.mailboxID));
|
|
272
273
|
|
|
273
274
|
|
|
274
275
|
await db.emails.asQuery()
|
|
275
|
-
.delete(entity, (p) => (x) => x.
|
|
276
|
+
.delete(entity, (p) => (x) => x.mailboxContactEvents.some((m) => m.mailboxID === p.mailboxID));
|
|
276
277
|
|
|
277
278
|
await db.mailboxContactEmails.asQuery()
|
|
278
279
|
.delete(entity, (p) => (x) => x.mailboxID === p.mailboxID);
|
|
@@ -280,7 +281,7 @@ export default class MailboxEvents extends AuthenticatedEvents<Mailbox> {
|
|
|
280
281
|
await db.mailboxContactTags.asQuery()
|
|
281
282
|
.delete(entity, (p) => (x) => x.mailboxID === p.mailboxID);
|
|
282
283
|
|
|
283
|
-
await db.
|
|
284
|
+
await db.channelEmails.asQuery()
|
|
284
285
|
.delete(entity, (p) => (x) => x.mailboxID === p.mailboxID);
|
|
285
286
|
}
|
|
286
287
|
|
|
@@ -23,8 +23,8 @@ export default class TagEvents extends AuthenticatedEvents<Tag> {
|
|
|
23
23
|
const { userID } = this.sessionUser;
|
|
24
24
|
return query.where({ userID }, (p) => (x) =>
|
|
25
25
|
x.emailTags.some((et) =>
|
|
26
|
-
et.email.
|
|
27
|
-
m.mailbox.userMailboxes.some((
|
|
26
|
+
et.email.mailboxContactEvents.some((m) =>
|
|
27
|
+
m.mailbox.userMailboxes.some((mu) => mu.userID === p.userID)
|
|
28
28
|
|| m.mailbox.domain.hostedDomain.domainUsers.some((du) => du.userID === p.userID && du.isAdmin === true)
|
|
29
29
|
)
|
|
30
30
|
)
|
|
@@ -22,9 +22,9 @@ export default class TextDocumentEvents extends AuthenticatedEvents<TextDocument
|
|
|
22
22
|
|| t.mailbox.userMailboxes.some((u) => u.userID === p.userID)
|
|
23
23
|
|| t.mailbox.domain.hostedDomain.domainUsers.some((u) => u.userID === p.userID))
|
|
24
24
|
||
|
|
25
|
-
af.email.
|
|
26
|
-
|
|
27
|
-
||
|
|
25
|
+
af.email.mailboxContactEvents.some((m) =>
|
|
26
|
+
m.mailbox.userMailboxes.some((mu) => mu.userID === p.userID)
|
|
27
|
+
|| m.mailbox.domain.hostedDomain.domainUsers.some((du) => du.userID === p.userID && du.isAdmin === true)
|
|
28
28
|
)
|
|
29
29
|
)
|
|
30
30
|
);
|
|
@@ -14,7 +14,7 @@ export default class ThreadParticipantEvents extends AuthenticatedEvents<ThreadP
|
|
|
14
14
|
}
|
|
15
15
|
const { userID } = this.sessionUser;
|
|
16
16
|
return query.where({ userID }, (p) => (x) =>
|
|
17
|
-
x.email.
|
|
17
|
+
x.email.mailboxContactEvents.some((m) =>
|
|
18
18
|
m.mailbox.userMailboxes.some((mu) => mu.userID === p.userID)
|
|
19
19
|
|| m.mailbox.domain.hostedDomain.domainUsers.some((du) => du.userID === p.userID && du.isAdmin === true)
|
|
20
20
|
)
|
|
@@ -10,6 +10,7 @@ import { globalEnv } from "../../../common/globalEnv.js";
|
|
|
10
10
|
import WebSiteChannelService from "../../smtp/services/WebSiteChannelService.js";
|
|
11
11
|
import Sql from "@entity-access/entity-access/dist/sql/Sql.js";
|
|
12
12
|
import EncryptionService from "../encryption/EncryptionService.js";
|
|
13
|
+
import EmailAddressService from "../EmailAddressService.js";
|
|
13
14
|
|
|
14
15
|
const render = (parent: HTMLElement, { name, attributes, children }: XNode) => {
|
|
15
16
|
const child = parent.ownerDocument.createElement(name);
|
|
@@ -61,6 +62,9 @@ export default class ChannelPageService {
|
|
|
61
62
|
@Inject
|
|
62
63
|
encryptionService: EncryptionService;
|
|
63
64
|
|
|
65
|
+
@Inject
|
|
66
|
+
eas: EmailAddressService;
|
|
67
|
+
|
|
64
68
|
getMailboxEmail(mailboxSlug: string, postSlug: string) {
|
|
65
69
|
|
|
66
70
|
mailboxSlug = mailboxSlug.toLowerCase();
|
|
@@ -77,14 +81,14 @@ export default class ChannelPageService {
|
|
|
77
81
|
const emailID = Base36.decode(emailIDBase36) as any;
|
|
78
82
|
|
|
79
83
|
if (mailboxSlug === "@") {
|
|
80
|
-
return this.db.
|
|
84
|
+
return this.db.channelEmails.where({ emailID}, (p) => (x) => x.emailID === p.emailID).first();
|
|
81
85
|
}
|
|
82
86
|
|
|
83
87
|
if(mailboxSlug.startsWith("@")) {
|
|
84
88
|
mailboxSlug = mailboxSlug.substring(1) + "@%";
|
|
85
89
|
}
|
|
86
90
|
|
|
87
|
-
return this.db.
|
|
91
|
+
return this.db.channelEmails.where({ emailID, mailboxSlug}, (p) => (x) => Sql.text.like(x.mailbox.emailAddress.emailAddress,p.mailboxSlug)
|
|
88
92
|
&& x.emailID === p.emailID
|
|
89
93
|
).first();
|
|
90
94
|
}
|
|
@@ -101,19 +105,21 @@ export default class ChannelPageService {
|
|
|
101
105
|
|
|
102
106
|
async getEmailMeta(host, url, blogID, emailID) {
|
|
103
107
|
|
|
104
|
-
const
|
|
108
|
+
const channelEmail = await this.db.channelEmails
|
|
105
109
|
.where({ blogID, emailID }, (p) => (x) => x.emailID === p.emailID
|
|
106
|
-
&& x.
|
|
107
|
-
|
|
108
|
-
.include((x) => [x.attachments])
|
|
110
|
+
&& x.datePublished !== null)
|
|
111
|
+
.include((x) => [x.email])
|
|
109
112
|
.firstOrFail();
|
|
110
113
|
|
|
111
|
-
|
|
112
|
-
.
|
|
113
|
-
|
|
114
|
-
|
|
114
|
+
if (channelEmail.previewFileID) {
|
|
115
|
+
await this.db.changeSet.getEntry(channelEmail).loadNavigationAsync((x) => x.previewFile);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const { email, previewFile } = channelEmail;
|
|
119
|
+
|
|
120
|
+
const blog = await this.eas.getHostedMailbox(blogID);
|
|
115
121
|
|
|
116
|
-
const title = email.subject;
|
|
122
|
+
const title = channelEmail.email.subject;
|
|
117
123
|
|
|
118
124
|
const meta = [] as XNode[];
|
|
119
125
|
|
|
@@ -122,18 +128,17 @@ export default class ChannelPageService {
|
|
|
122
128
|
meta.push(<meta property="og:type" content="article" />);
|
|
123
129
|
meta.push(<meta property="og:site_name" content={blog.emailAddress.name} />);
|
|
124
130
|
meta.push(<meta name="author" content={email.senderName}/>);
|
|
125
|
-
meta.push(<meta property="article:published_date" content={DateTime.from(
|
|
126
|
-
meta.push(<meta property="article:publisher" content={
|
|
131
|
+
meta.push(<meta property="article:published_date" content={DateTime.from(channelEmail.datePublished ?? channelEmail.datePublished).asJSDate.toUTCString()}/>);
|
|
132
|
+
meta.push(<meta property="article:publisher" content={blog.emailAddress.emailAddress}/>);
|
|
127
133
|
if (email.summary) {
|
|
128
134
|
meta.push(<meta property="og:description" content={email.summary}/>);
|
|
129
135
|
}
|
|
130
136
|
|
|
131
137
|
// find first image...
|
|
132
|
-
|
|
133
|
-
if (firstImage) {
|
|
138
|
+
if (previewFile) {
|
|
134
139
|
const cdn = globalEnv.cdn ?? host;
|
|
135
140
|
const postID = this.encryptionService.general.encrypt(emailID);
|
|
136
|
-
meta.push(<meta property="og:image" content={`https://${cdn}/social-mail/cd/${host}/webp(300)/${postID}/${
|
|
141
|
+
meta.push(<meta property="og:image" content={`https://${cdn}/social-mail/cd/${host}/webp(300)/${postID}/${previewFile.appFileID}/${previewFile.name}/${previewFile.name}.300.webp`}/>);
|
|
137
142
|
}
|
|
138
143
|
|
|
139
144
|
return { meta, email, title };
|
|
@@ -161,7 +166,7 @@ export default class ChannelPageService {
|
|
|
161
166
|
|
|
162
167
|
const e = await this.db.emails
|
|
163
168
|
.where({ blogID }, (p) => (x) => x.status === "published"
|
|
164
|
-
&& x.
|
|
169
|
+
&& x.channelEmails.some((m) => m.mailboxID === p.blogID)
|
|
165
170
|
)
|
|
166
171
|
.orderByDescending(void 0, (p) => (x) => x.emailID)
|
|
167
172
|
.first();
|
|
@@ -235,13 +235,14 @@ export default class HtmlSanitizer {
|
|
|
235
235
|
clean.ownerDocument.body.appendChild(emojiBar);
|
|
236
236
|
}
|
|
237
237
|
|
|
238
|
-
emojiBar.setAttribute("style", "border:
|
|
238
|
+
emojiBar.setAttribute("style", "border: solid 1px lightgray;border-radius: 9999px;padding: 2px;padding-left: 5px;" +
|
|
239
|
+
"padding-right: 5px;display: table;margin-top: 20px;width: 100%;box-sizing: border-box;");
|
|
239
240
|
|
|
240
|
-
const emojiButton = (emoji, label = "", body = emoji, mail = emoji) =>
|
|
241
|
+
const emojiButton = (emoji, label = "", { body = emoji, mail = emoji, style=""} = {}) =>
|
|
241
242
|
((<a
|
|
242
243
|
href={`mailto:${senderEmail}?subject=${emoji}:${messageID}&body=${body}`}
|
|
243
244
|
title={label}
|
|
244
|
-
style="border-radius:9999px;padding:2px;padding-left:5px;padding-right:5px;text-decoration:none;"
|
|
245
|
+
style={"border-radius:9999px;padding:2px;padding-left:5px;padding-right:5px;text-decoration:none;" + style}
|
|
245
246
|
><emoji-button emoji={emoji}>{emoji}{label}</emoji-button>
|
|
246
247
|
</a>) as XNode).render();
|
|
247
248
|
|
|
@@ -249,9 +250,8 @@ export default class HtmlSanitizer {
|
|
|
249
250
|
${ emojiButton("🙂")}
|
|
250
251
|
${ emojiButton("👍")}
|
|
251
252
|
${ emojiButton("✅")}
|
|
252
|
-
${emojiButton("💬", "Reply", "")}
|
|
253
|
-
|
|
254
|
-
${ emojiButton("❌", "Unsubscribe")}
|
|
253
|
+
${emojiButton("💬", "Reply", { body: "" })}
|
|
254
|
+
${ emojiButton("❌", "Unsubscribe", { style: "display:table-cell; text-align: right;"})}
|
|
255
255
|
`;
|
|
256
256
|
} catch (error) {
|
|
257
257
|
console.error(error);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import Inject, { RegisterTransient, ServiceProvider } from "@entity-access/entity-access/dist/di/di.js";
|
|
2
2
|
import WorkflowContext from "@entity-access/entity-access/dist/workflows/WorkflowContext.js";
|
|
3
3
|
import UpdateUnreadCounts from "../../workflows/email/UpdateUnreadCounts.js";
|
|
4
|
-
import
|
|
4
|
+
import ChannelEmail from "../../model/entities/ChannelEmail.js";
|
|
5
5
|
import SocialMailContext from "../../model/SocialMailContext.js";
|
|
6
6
|
import Sql from "@entity-access/entity-access/dist/sql/Sql.js";
|
|
7
7
|
import MailboxNamespace from "../socket/rooms/MailboxNamespace.js";
|