@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.
Files changed (168) hide show
  1. package/dist/server/model/SocialMailContext.d.ts +2 -2
  2. package/dist/server/model/SocialMailContext.js +2 -2
  3. package/dist/server/model/SocialMailContextEvents.js +2 -2
  4. package/dist/server/model/entities/AppFile.d.ts +2 -0
  5. package/dist/server/model/entities/AppFile.d.ts.map +1 -1
  6. package/dist/server/model/entities/AppFile.js.map +1 -1
  7. package/dist/server/model/entities/{MailboxEmail.d.ts → ChannelEmail.d.ts} +5 -2
  8. package/dist/server/model/entities/ChannelEmail.d.ts.map +1 -0
  9. package/dist/server/model/entities/{MailboxEmail.js → ChannelEmail.js} +26 -13
  10. package/dist/server/model/entities/ChannelEmail.js.map +1 -0
  11. package/dist/server/model/entities/Email.d.ts +2 -2
  12. package/dist/server/model/entities/Email.d.ts.map +1 -1
  13. package/dist/server/model/entities/Email.js.map +1 -1
  14. package/dist/server/model/entities/EmailAddress.d.ts +2 -0
  15. package/dist/server/model/entities/EmailAddress.d.ts.map +1 -1
  16. package/dist/server/model/entities/EmailAddress.js.map +1 -1
  17. package/dist/server/model/entities/Mailbox.d.ts +2 -2
  18. package/dist/server/model/entities/MailboxContactEmail.d.ts +1 -1
  19. package/dist/server/model/entities/MailboxContactEmail.d.ts.map +1 -1
  20. package/dist/server/model/entities/MailboxContactEmail.js +5 -0
  21. package/dist/server/model/entities/MailboxContactEmail.js.map +1 -1
  22. package/dist/server/model/events/AppFileEvents.d.ts +3 -0
  23. package/dist/server/model/events/AppFileEvents.d.ts.map +1 -1
  24. package/dist/server/model/events/AppFileEvents.js +25 -5
  25. package/dist/server/model/events/AppFileEvents.js.map +1 -1
  26. package/dist/server/model/events/AppFileTagEvents.d.ts.map +1 -1
  27. package/dist/server/model/events/AppFileTagEvents.js +2 -3
  28. package/dist/server/model/events/AppFileTagEvents.js.map +1 -1
  29. package/dist/server/model/events/EmailAddressEvents.d.ts.map +1 -1
  30. package/dist/server/model/events/EmailAddressEvents.js +2 -4
  31. package/dist/server/model/events/EmailAddressEvents.js.map +1 -1
  32. package/dist/server/model/events/EmailEngagementEvents.js +1 -1
  33. package/dist/server/model/events/EmailEngagementEvents.js.map +1 -1
  34. package/dist/server/model/events/EmailEvents.js +6 -6
  35. package/dist/server/model/events/EmailEvents.js.map +1 -1
  36. package/dist/server/model/events/EmailLogEvents.js +1 -1
  37. package/dist/server/model/events/EmailLogEvents.js.map +1 -1
  38. package/dist/server/model/events/EmailRecipientEvents.js +1 -1
  39. package/dist/server/model/events/EmailRecipientEvents.js.map +1 -1
  40. package/dist/server/model/events/EmailTagEvents.js +1 -1
  41. package/dist/server/model/events/EmailTagEvents.js.map +1 -1
  42. package/dist/server/model/events/FileContentEvents.d.ts.map +1 -1
  43. package/dist/server/model/events/FileContentEvents.js +2 -3
  44. package/dist/server/model/events/FileContentEvents.js.map +1 -1
  45. package/dist/server/model/events/MailboxContactEvents.js +4 -4
  46. package/dist/server/model/events/MailboxContactEvents.js.map +1 -1
  47. package/dist/server/model/events/MailboxEmailEvents.d.ts +9 -6
  48. package/dist/server/model/events/MailboxEmailEvents.d.ts.map +1 -1
  49. package/dist/server/model/events/MailboxEmailEvents.js +11 -2
  50. package/dist/server/model/events/MailboxEmailEvents.js.map +1 -1
  51. package/dist/server/model/events/MailboxEvents.d.ts.map +1 -1
  52. package/dist/server/model/events/MailboxEvents.js +6 -6
  53. package/dist/server/model/events/MailboxEvents.js.map +1 -1
  54. package/dist/server/model/events/TagEvents.js +1 -1
  55. package/dist/server/model/events/TagEvents.js.map +1 -1
  56. package/dist/server/model/events/TextDocumentEvents.js +2 -2
  57. package/dist/server/model/events/TextDocumentEvents.js.map +1 -1
  58. package/dist/server/model/events/ThreadParticipantEvents.js +1 -1
  59. package/dist/server/model/events/ThreadParticipantEvents.js.map +1 -1
  60. package/dist/server/seed/ui/seed-ui.js +1 -1
  61. package/dist/server/seed/ui/seed-ui.js.map +1 -1
  62. package/dist/server/services/channels/ChannelPageService.d.ts +3 -1
  63. package/dist/server/services/channels/ChannelPageService.d.ts.map +1 -1
  64. package/dist/server/services/channels/ChannelPageService.js +21 -17
  65. package/dist/server/services/channels/ChannelPageService.js.map +1 -1
  66. package/dist/server/services/dom/HtmlSanitizer.js +5 -5
  67. package/dist/server/services/dom/HtmlSanitizer.js.map +1 -1
  68. package/dist/server/services/puppeteer/PuppeteerServer.d.ts +1 -19
  69. package/dist/server/services/puppeteer/PuppeteerServer.d.ts.map +1 -1
  70. package/dist/server/services/puppeteer/PuppeteerServer.js +176 -268
  71. package/dist/server/services/puppeteer/PuppeteerServer.js.map +1 -1
  72. package/dist/server/services/puppeteer/PuppeteerService.d.ts +1 -1
  73. package/dist/server/services/puppeteer/PuppeteerService.d.ts.map +1 -1
  74. package/dist/server/services/puppeteer/PuppeteerService.js +2 -1
  75. package/dist/server/services/puppeteer/PuppeteerService.js.map +1 -1
  76. package/dist/server/smtp/services/CachedEmailService.js +1 -1
  77. package/dist/server/smtp/services/EmailReferenceService.d.ts.map +1 -1
  78. package/dist/server/smtp/services/EmailReferenceService.js +34 -35
  79. package/dist/server/smtp/services/EmailReferenceService.js.map +1 -1
  80. package/dist/server/smtp/services/EngagementService.js +1 -1
  81. package/dist/server/workflows/channel/BroadcastEmail.d.ts.map +1 -1
  82. package/dist/server/workflows/channel/BroadcastEmail.js +16 -8
  83. package/dist/server/workflows/channel/BroadcastEmail.js.map +1 -1
  84. package/dist/server/workflows/repair/channel/RepairChannelEmailCountsWorkflow.js +1 -1
  85. package/dist/server/workflows/repair/counts/RepairEmailCountsWorkflow.js +1 -1
  86. package/dist/server/workflows/repair/counts/RepairEmailCountsWorkflow.js.map +1 -1
  87. package/dist/server/workflows/repair/tags/RepairEmailTagsWorkflow.js +1 -1
  88. package/dist/server/workflows/repair/tags/RepairEmailTagsWorkflow.js.map +1 -1
  89. package/dist/server/workflows/smtp/DispatchEmailToMX.d.ts +1 -1
  90. package/dist/server/workflows/smtp/DispatchEmailToMX.d.ts.map +1 -1
  91. package/dist/server/workflows/smtp/DispatchEmailToMX.js +9 -7
  92. package/dist/server/workflows/smtp/DispatchEmailToMX.js.map +1 -1
  93. package/dist/server/workflows/smtp/MailDispatcherService.d.ts +3 -2
  94. package/dist/server/workflows/smtp/MailDispatcherService.d.ts.map +1 -1
  95. package/dist/server/workflows/smtp/MailDispatcherService.js +4 -4
  96. package/dist/server/workflows/smtp/MailDispatcherService.js.map +1 -1
  97. package/dist/server/workflows/smtp/PrepareEmailToSend.d.ts +1 -1
  98. package/dist/server/workflows/smtp/PrepareEmailToSend.js +1 -1
  99. package/dist/server/workflows/smtp/PrepareEmailToSend.js.map +1 -1
  100. package/dist/server/workflows/sync/SyncMailboxWorkflow.js +2 -2
  101. package/dist/server/workflows/sync/SyncMailboxWorkflow.js.map +1 -1
  102. package/dist/server/workflows/web-hooks/InvokeWebHookWorkflow.js +1 -1
  103. package/dist/server/workflows/web-hooks/InvokeWebHookWorkflow.js.map +1 -1
  104. package/dist/tsconfig.tsbuildinfo +1 -1
  105. package/dist/wwwroot/routes/api/emails/channel/content/attachment/index.js +2 -2
  106. package/dist/wwwroot/routes/api/emails/channel/content/attachment/index.js.map +1 -1
  107. package/dist/wwwroot/routes/api/emails/channel/content/html/index.js +6 -6
  108. package/dist/wwwroot/routes/api/emails/channel/content/html/index.js.map +1 -1
  109. package/dist/wwwroot/routes/social-mail/public/email/attachment/index.d.ts.map +1 -1
  110. package/dist/wwwroot/routes/social-mail/public/email/attachment/index.js +2 -1
  111. package/dist/wwwroot/routes/social-mail/public/email/attachment/index.js.map +1 -1
  112. package/dist/wwwroot/routes/social-mail/social/buttons/get.d.ts +1 -25
  113. package/dist/wwwroot/routes/social-mail/social/buttons/get.d.ts.map +1 -1
  114. package/dist/wwwroot/routes/social-mail/social/buttons/get.js +106 -120
  115. package/dist/wwwroot/routes/social-mail/social/buttons/get.js.map +1 -1
  116. package/dist/wwwroot/routes/social-mail/social/buttons-3x/get.d.ts +1 -26
  117. package/dist/wwwroot/routes/social-mail/social/buttons-3x/get.d.ts.map +1 -1
  118. package/dist/wwwroot/routes/social-mail/social/buttons-3x/get.js +116 -130
  119. package/dist/wwwroot/routes/social-mail/social/buttons-3x/get.js.map +1 -1
  120. package/package.json +2 -3
  121. package/src/server/model/SocialMailContext.ts +2 -2
  122. package/src/server/model/SocialMailContextEvents.ts +2 -2
  123. package/src/server/model/entities/AppFile.ts +2 -2
  124. package/src/server/model/entities/{MailboxEmail.ts → ChannelEmail.ts} +16 -2
  125. package/src/server/model/entities/Email.ts +3 -2
  126. package/src/server/model/entities/EmailAddress.ts +2 -0
  127. package/src/server/model/entities/Mailbox.ts +2 -2
  128. package/src/server/model/entities/MailboxContactEmail.ts +5 -1
  129. package/src/server/model/events/AppFileEvents.ts +24 -5
  130. package/src/server/model/events/AppFileTagEvents.ts +4 -5
  131. package/src/server/model/events/EmailAddressEvents.ts +5 -8
  132. package/src/server/model/events/EmailEngagementEvents.ts +1 -1
  133. package/src/server/model/events/EmailEvents.ts +6 -6
  134. package/src/server/model/events/EmailLogEvents.ts +1 -1
  135. package/src/server/model/events/EmailRecipientEvents.ts +1 -1
  136. package/src/server/model/events/EmailTagEvents.ts +1 -1
  137. package/src/server/model/events/FileContentEvents.ts +3 -4
  138. package/src/server/model/events/MailboxContactEvents.ts +4 -4
  139. package/src/server/model/events/MailboxEmailEvents.ts +16 -7
  140. package/src/server/model/events/MailboxEvents.ts +7 -6
  141. package/src/server/model/events/TagEvents.ts +2 -2
  142. package/src/server/model/events/TextDocumentEvents.ts +3 -3
  143. package/src/server/model/events/ThreadParticipantEvents.ts +1 -1
  144. package/src/server/seed/ui/seed-ui.ts +1 -1
  145. package/src/server/services/channels/ChannelPageService.tsx +22 -17
  146. package/src/server/services/dom/HtmlSanitizer.tsx +6 -6
  147. package/src/server/services/emails/UnreadCountService.ts +1 -1
  148. package/src/server/services/puppeteer/PuppeteerServer.ts +194 -194
  149. package/src/server/services/puppeteer/PuppeteerService.ts +1 -1
  150. package/src/server/smtp/services/CachedEmailService.ts +1 -1
  151. package/src/server/smtp/services/EmailReferenceService.ts +36 -37
  152. package/src/server/smtp/services/EngagementService.ts +1 -1
  153. package/src/server/workflows/channel/BroadcastEmail.ts +21 -8
  154. package/src/server/workflows/repair/channel/RepairChannelEmailCountsWorkflow.ts +1 -1
  155. package/src/server/workflows/repair/counts/RepairEmailCountsWorkflow.ts +1 -1
  156. package/src/server/workflows/repair/tags/RepairEmailTagsWorkflow.ts +1 -1
  157. package/src/server/workflows/smtp/DispatchEmailToMX.ts +11 -8
  158. package/src/server/workflows/smtp/MailDispatcherService.ts +5 -5
  159. package/src/server/workflows/smtp/PrepareEmailToSend.ts +1 -1
  160. package/src/server/workflows/sync/SyncMailboxWorkflow.ts +2 -2
  161. package/src/server/workflows/web-hooks/InvokeWebHookWorkflow.ts +1 -1
  162. package/src/wwwroot/routes/api/emails/channel/content/attachment/index.ts +2 -2
  163. package/src/wwwroot/routes/api/emails/channel/content/html/index.ts +6 -6
  164. package/src/wwwroot/routes/social-mail/public/email/attachment/index.ts +3 -1
  165. package/src/wwwroot/routes/social-mail/social/buttons/get.tsx +130 -130
  166. package/src/wwwroot/routes/social-mail/social/buttons-3x/get.tsx +143 -143
  167. package/dist/server/model/entities/MailboxEmail.d.ts.map +0 -1
  168. 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.mailboxes.some((m) =>
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.mailboxes.some((m) => Sql.in(m.mailboxID, p.mailboxes)))
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.mailboxes.some((m) => Sql.in(m.mailbox.domainID, p.domains)));
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.mailboxEmails
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.mailboxEmails.where(entity, (p) => (x) => x.emailID === p.emailID && x.mailbox.isChannel === true)
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.mailboxEmails.where(entity, (p) => (x) => x.emailID === p.emailID && x.mailbox.isChannel === true)
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.mailboxes.some((m) =>
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.mailboxes.some((m) =>
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.mailboxes.some((m) =>
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
- af.email.mailboxes.some((um) =>
26
- um.mailbox.userMailboxes.some((mu) => mu.userID === p.userID)
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
- emailID,
101
- mailboxID
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 MailboxEmail from "../entities/MailboxEmail.js";
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<MailboxEmail> {
14
+ export default class MailboxEmailEvents extends AuthenticatedEvents<ChannelEmail> {
14
15
 
15
16
  @Inject
16
17
  ecs: EncryptionService;
17
18
 
18
- filter(query: IEntityQuery<MailboxEmail>): IEntityQuery<MailboxEmail> {
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.mailboxEmails.where({ channelID, host, mailboxes}, (p) => (x) =>
48
+ ? db.channelEmails.where({ channelID, host, mailboxes}, (p) => (x) =>
45
49
  x.datePublished !== null
46
50
  && Sql.in(x.mailboxID, p.mailboxes))
47
- : db.mailboxEmails.where({ channelID, host, domains}, (p) => (x) =>
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: MailboxEmail, entry: ChangeEntry<MailboxEmail>) {
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: MailboxEmail[]) {
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 MailboxEmail from "../entities/MailboxEmail.js";
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 === MailboxEmail) {
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.mailboxes.some((m) => m.mailboxID === p.mailboxID)))
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.mailboxes.some((m) => m.mailboxID === p.mailboxID));
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.mailboxes.some((m) => m.mailboxID === p.mailboxID));
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.mailboxEmails.asQuery()
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.mailboxes.some((m) =>
27
- m.mailbox.userMailboxes.some((um) => um.userID === p.userID)
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.mailboxes.some((um) =>
26
- um.mailbox.userMailboxes.some((mu) => mu.userID === p.userID)
27
- || um.mailbox.domain.hostedDomain.domainUsers.some((du) => du.userID === p.userID && du.isAdmin === true)
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.mailboxes.some((m) =>
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
  )
@@ -3,7 +3,7 @@ import semver from "semver";
3
3
 
4
4
  export default async function seedUI(config: DBConfig) {
5
5
 
6
- const version = "1.2.787";
6
+ const version = "1.4.9";
7
7
 
8
8
  const existing = await config.getValue(UIPackageConfig, false);
9
9
  if (existing) {
@@ -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.mailboxEmails.where({ emailID}, (p) => (x) => x.emailID === p.emailID).first();
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.mailboxEmails.where({ emailID, mailboxSlug}, (p) => (x) => Sql.text.like(x.mailbox.emailAddress.emailAddress,p.mailboxSlug)
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 email = await this.db.emails
108
+ const channelEmail = await this.db.channelEmails
105
109
  .where({ blogID, emailID }, (p) => (x) => x.emailID === p.emailID
106
- && x.status === "published"
107
- && x.mailboxes.some((m) => m.mailboxID === p.blogID))
108
- .include((x) => [x.attachments])
110
+ && x.datePublished !== null)
111
+ .include((x) => [x.email])
109
112
  .firstOrFail();
110
113
 
111
- const blog = await this.db.mailboxes
112
- .where({ blogID }, (p) => (x) => x.mailboxID === p.blogID)
113
- .include((x) => x.emailAddress)
114
- .first();
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(email.dateSent ?? email.dateCreated).asJSDate.toUTCString()}/>);
126
- meta.push(<meta property="article:publisher" content={email.senderName}/>);
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
- const firstImage = email.attachments?.find((x) => /^(image|video)/i.test(x.contentType));
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}/${firstImage.appFileID}/${firstImage.name}/${firstImage.name}.300.webp`}/>);
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.mailboxes.some((m) => m.mailboxID === p.blogID)
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: soild 1px lightgray; border-radius: 9999px; padding: 2px; padding-left: 5px; padding-right: 5px;");
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
- <div style="display:block;min-width:100px;height:10px;margin-left: auto;"/>
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 MailboxEmail from "../../model/entities/MailboxEmail.js";
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";