@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
@@ -1,131 +1,117 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- import Inject, { ServiceProvider } from "@entity-access/entity-access/dist/di/di.js";
11
- import { TempFileResult } from "@entity-access/server-pages/dist/Content.js";
12
- import Page from "@entity-access/server-pages/dist/Page.js";
13
- import CacheService from "../../../../../server/services/cache/CacheService.js";
14
- import SocialMailContext from "../../../../../server/model/SocialMailContext.js";
15
- import CachedEmailService from "../../../../../server/smtp/services/CachedEmailService.js";
16
- import { Base36 } from "../../../../../common/Base36.js";
17
- import { toKMBString } from "../../../../../common/NumberFormats.js";
18
- import { PuppeteerService } from "../../../../../server/services/puppeteer/PuppeteerService.js";
19
- import TempFileService from "../../../../../server/storage/TempFileService.js";
20
- /**
21
- * Social Buttons URL Pattern
22
- *
23
- * /social-mail/social/buttons-3x/{method}/{selector}/{emailID}/{activityID}
24
- *
25
- * method: can be track or any unicode emoji that will be considered as an engagement.
26
- *
27
- * selector: unique selector button that will be converted to PNG
28
- *
29
- * emailID: email id of the email, Base36 encoded.
30
- *
31
- * activityID: activity id of subscription activity to track activity/engagement of specific subscriber.
32
- * We are not going to use subscriberID as each activityID will be unique and it will be new for
33
- * new email.
34
- */
35
- export default class SocialButtonPage extends Page {
36
- async run() {
37
- const [method, selector, emailIDEncoded, activityID] = this.childPath;
38
- let emailID = emailIDEncoded;
39
- if (!/^\$/.test(emailID)) {
40
- emailID = Base36.decode(emailID, false);
41
- }
42
- const key = `buttons/${method}/${emailID}`;
43
- /**
44
- * why do we need to cache this?
45
- *
46
- * It is to avoid putting load on puppeteer service.
47
- * As rendering html to png will require significant cpu and network
48
- * resources, as styles can reference any external images.
49
- */
50
- // const file = await this.cacheService.get({
51
- // key, factory: () => this.createImage(method, selector, emailID, activityID),
52
- // ttl: TimeSpan.fromSeconds(8600)
53
- // });
54
- const file = await this.createImage(method, selector, emailID, activityID);
55
- this.cacheControl = "public, max-age=8600";
56
- return new TempFileResult(file, {});
57
- }
58
- async createImage(method, selector, emailID, activityID) {
59
- const db = ServiceProvider.resolve(this, SocialMailContext);
60
- const puppeteerService = ServiceProvider.resolve(this, PuppeteerService);
61
- const tempFileService = ServiceProvider.resolve(this, TempFileService);
62
- let count;
63
- if (method === "track") {
64
- count = await this.track(emailID, activityID);
65
- }
66
- else {
67
- const engagement = decodeURIComponent(method);
68
- // console.log(`Search for engagement ${engagement} in ${emailID}`);
69
- const ec = await this.db.emailEngagements
70
- .where({ emailID, engagement }, (p) => (x) => x.emailID === p.emailID && x.engagement === p.engagement)
71
- .first();
72
- if (ec?.count) {
73
- count = toKMBString(ec.count);
74
- }
75
- }
76
- count ??= "";
77
- const html = await this.getHtmlBody(emailID);
78
- const png = await tempFileService.createTempFile(".png", "button.png", "image/png");
79
- await puppeteerService.htmlToPng(html, { deviceScaleFactor: 3, selector, outputFile: png.path, count });
80
- return png;
81
- }
82
- async getHtmlBody(emailID) {
83
- const email = await this.db.emails
84
- .where({ emailID }, (p) => (x) => x.emailID === p.emailID)
85
- .first();
86
- if (email.htmlBody) {
87
- return email.htmlBody;
88
- }
89
- const file = await this.cachedEmailService.getHtml(emailID);
90
- return await file.readAsText();
91
- }
92
- async track(emailID, activityID) {
93
- const ep = { emailID };
94
- const isValidActivityID = !/^\$/.test(activityID);
95
- if (isValidActivityID) {
96
- const activity = await this.db.subscriberActivities
97
- .where({
98
- activityID: Base36.decode(activityID, false) ?? 0,
99
- emailID
100
- }, (p) => (x) => x.activityID === p.activityID && x.emailID === p.emailID)
101
- .first();
102
- if (activity) {
103
- delete activity.activityID;
104
- activity.activity = "view";
105
- activity.ipAddress = this.request?.remoteIPAddress;
106
- await this.db.subscriberActivities.statements.insert(activity);
107
- await this.db.emails.where(ep, (p) => (x) => x.emailID === p.emailID)
108
- .update(ep, (p) => (x) => ({ viewCount: x.viewCount + 1 }));
109
- }
110
- }
111
- const ec = await this.db.emails
112
- .where(ep, (p) => (x) => x.emailID === p.emailID)
113
- .first();
114
- if (ec?.viewCount) {
115
- return toKMBString(ec.viewCount);
116
- }
117
- }
118
- }
119
- __decorate([
120
- Inject,
121
- __metadata("design:type", CacheService)
122
- ], SocialButtonPage.prototype, "cacheService", void 0);
123
- __decorate([
124
- Inject,
125
- __metadata("design:type", CachedEmailService)
126
- ], SocialButtonPage.prototype, "cachedEmailService", void 0);
127
- __decorate([
128
- Inject,
129
- __metadata("design:type", SocialMailContext)
130
- ], SocialButtonPage.prototype, "db", void 0);
1
+ // import Inject, { ServiceProvider } from "@entity-access/entity-access/dist/di/di.js";
2
+ // import Content, { TempFileResult } from "@entity-access/server-pages/dist/Content.js";
3
+ // import Page from "@entity-access/server-pages/dist/Page.js";
4
+ // import CacheService from "../../../../../server/services/cache/CacheService.js";
5
+ // import TimeSpan from "@entity-access/entity-access/dist/types/TimeSpan.js";
6
+ // import SocialMailContext from "../../../../../server/model/SocialMailContext.js";
7
+ // import CachedEmailService from "../../../../../server/smtp/services/CachedEmailService.js";
8
+ // import { Base36 } from "../../../../../common/Base36.js";
9
+ // import { toKMBString } from "../../../../../common/NumberFormats.js";
10
+ // // import { PuppeteerService } from "../../../../../server/services/puppeteer/PuppeteerService.js";
11
+ // import TempFileService from "../../../../../server/storage/TempFileService.js";
12
+ export {};
13
+ // /**
14
+ // * Social Buttons URL Pattern
15
+ // *
16
+ // * /social-mail/social/buttons-3x/{method}/{selector}/{emailID}/{activityID}
17
+ // *
18
+ // * method: can be track or any unicode emoji that will be considered as an engagement.
19
+ // *
20
+ // * selector: unique selector button that will be converted to PNG
21
+ // *
22
+ // * emailID: email id of the email, Base36 encoded.
23
+ // *
24
+ // * activityID: activity id of subscription activity to track activity/engagement of specific subscriber.
25
+ // * We are not going to use subscriberID as each activityID will be unique and it will be new for
26
+ // * new email.
27
+ // */
28
+ // export default class SocialButtonPage extends Page {
29
+ // @Inject
30
+ // private cacheService: CacheService;
31
+ // @Inject
32
+ // private cachedEmailService: CachedEmailService;
33
+ // @Inject
34
+ // private db: SocialMailContext;
35
+ // async run() {
36
+ // const [method, selector, emailIDEncoded, activityID] = this.childPath;
37
+ // let emailID = emailIDEncoded;
38
+ // if (!/^\$/.test(emailID)) {
39
+ // emailID = Base36.decode(emailID, false);
40
+ // }
41
+ // const key = `buttons/${method}/${emailID}`;
42
+ // /**
43
+ // * why do we need to cache this?
44
+ // *
45
+ // * It is to avoid putting load on puppeteer service.
46
+ // * As rendering html to png will require significant cpu and network
47
+ // * resources, as styles can reference any external images.
48
+ // */
49
+ // // const file = await this.cacheService.get({
50
+ // // key, factory: () => this.createImage(method, selector, emailID, activityID),
51
+ // // ttl: TimeSpan.fromSeconds(8600)
52
+ // // });
53
+ // const file = await this.createImage(method, selector, emailID, activityID);
54
+ // this.cacheControl = "public, max-age=8600";
55
+ // return new TempFileResult(file, {});
56
+ // }
57
+ // async createImage(method: string, selector, emailID, activityID) {
58
+ // const db = ServiceProvider.resolve(this, SocialMailContext);
59
+ // const puppeteerService = ServiceProvider.resolve(this, PuppeteerService);
60
+ // const tempFileService = ServiceProvider.resolve(this, TempFileService);
61
+ // let count: string;
62
+ // if (method === "track") {
63
+ // count = await this.track(emailID, activityID);
64
+ // } else {
65
+ // const engagement = decodeURIComponent(method);
66
+ // // console.log(`Search for engagement ${engagement} in ${emailID}`);
67
+ // const ec = await this.db.emailEngagements
68
+ // .where({ emailID, engagement }, (p) => (x) => x.emailID === p.emailID && x.engagement === p.engagement)
69
+ // .first();
70
+ // if (ec?.count) {
71
+ // count = toKMBString(ec.count);
72
+ // }
73
+ // }
74
+ // count ??= "";
75
+ // const html = await this.getHtmlBody(emailID);
76
+ // const png = await tempFileService.createTempFile(".png", "button.png", "image/png");
77
+ // await puppeteerService.htmlToPng(html, { deviceScaleFactor: 3, selector, outputFile: png.path, count });
78
+ // return png;
79
+ // }
80
+ // async getHtmlBody(emailID: any) {
81
+ // const email = await this.db.emails
82
+ // .where({ emailID }, (p) => (x) => x.emailID === p.emailID)
83
+ // .first();
84
+ // if (email.htmlBody) {
85
+ // return email.htmlBody;
86
+ // }
87
+ // const file = await this.cachedEmailService.getHtml(emailID);
88
+ // return await file.readAsText();
89
+ // }
90
+ // async track(emailID: any, activityID: any) {
91
+ // const ep = { emailID };
92
+ // const isValidActivityID = !/^\$/.test(activityID);
93
+ // if (isValidActivityID) {
94
+ // const activity = await this.db.subscriberActivities
95
+ // .where({
96
+ // activityID: Base36.decode(activityID, false) ?? 0,
97
+ // emailID
98
+ // }, (p) => (x) => x.activityID === p.activityID && x.emailID === p.emailID)
99
+ // .first();
100
+ // if (activity) {
101
+ // delete activity.activityID;
102
+ // activity.activity = "view";
103
+ // activity.ipAddress = this.request?.remoteIPAddress;
104
+ // await this.db.subscriberActivities.statements.insert(activity);
105
+ // await this.db.emails.where(ep, (p) => (x) => x.emailID === p.emailID as any)
106
+ // .update(ep, (p) => (x) => ({ viewCount: x.viewCount + 1}));
107
+ // }
108
+ // }
109
+ // const ec = await this.db.emails
110
+ // .where(ep, (p) => (x) => x.emailID === p.emailID as any)
111
+ // .first();
112
+ // if (ec?.viewCount) {
113
+ // return toKMBString(ec.viewCount);
114
+ // }
115
+ // }
116
+ // }
131
117
  //# sourceMappingURL=get.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../../../src/wwwroot/routes/social-mail/social/buttons-3x/get.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../../../src/wwwroot/routes/social-mail/social/buttons-3x/get.tsx"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,yFAAyF;AACzF,+DAA+D;AAC/D,mFAAmF;AACnF,8EAA8E;AAC9E,oFAAoF;AACpF,8FAA8F;AAC9F,4DAA4D;AAC5D,wEAAwE;AACxE,sGAAsG;AACtG,kFAAkF;;AAElF,MAAM;AACN,gCAAgC;AAChC,KAAK;AACL,+EAA+E;AAC/E,KAAK;AACL,yFAAyF;AACzF,KAAK;AACL,oEAAoE;AACpE,KAAK;AACL,qDAAqD;AACrD,KAAK;AACL,2GAA2G;AAC3G,wGAAwG;AACxG,qBAAqB;AACrB,MAAM;AACN,uDAAuD;AAEvD,cAAc;AACd,0CAA0C;AAE1C,cAAc;AACd,sDAAsD;AAEtD,cAAc;AACd,qCAAqC;AAErC,oBAAoB;AAEpB,iFAAiF;AAEjF,wCAAwC;AAExC,sCAAsC;AACtC,uDAAuD;AACvD,YAAY;AAEZ,sDAAsD;AAEtD,cAAc;AACd,2CAA2C;AAC3C,aAAa;AACb,+DAA+D;AAC/D,+EAA+E;AAC/E,qEAAqE;AACrE,cAAc;AAEd,wDAAwD;AACxD,8FAA8F;AAC9F,iDAAiD;AACjD,iBAAiB;AAEjB,sFAAsF;AAEtF,sDAAsD;AAEtD,+CAA+C;AAC/C,QAAQ;AAER,yEAAyE;AACzE,uEAAuE;AACvE,oFAAoF;AACpF,kFAAkF;AAElF,6BAA6B;AAE7B,oCAAoC;AACpC,6DAA6D;AAC7D,mBAAmB;AACnB,6DAA6D;AAC7D,mFAAmF;AACnF,wDAAwD;AACxD,0HAA0H;AAC1H,4BAA4B;AAE5B,+BAA+B;AAC/B,iDAAiD;AACjD,gBAAgB;AAChB,YAAY;AAEZ,wBAAwB;AAExB,wDAAwD;AAExD,+FAA+F;AAC/F,mHAAmH;AACnH,sBAAsB;AACtB,QAAQ;AAER,wCAAwC;AAExC,6CAA6C;AAC7C,yEAAyE;AACzE,wBAAwB;AAExB,gCAAgC;AAChC,qCAAqC;AACrC,YAAY;AAEZ,uEAAuE;AACvE,0CAA0C;AAC1C,QAAQ;AAER,mDAAmD;AAEnD,kCAAkC;AAClC,6DAA6D;AAC7D,mCAAmC;AACnC,kEAAkE;AAClE,uBAAuB;AACvB,qEAAqE;AACrE,0BAA0B;AAC1B,yFAAyF;AACzF,wBAAwB;AAExB,8BAA8B;AAC9B,8CAA8C;AAC9C,8CAA8C;AAC9C,sEAAsE;AACtE,kFAAkF;AAElF,+FAA+F;AAC/F,kFAAkF;AAClF,gBAAgB;AAChB,YAAY;AAEZ,0CAA0C;AAC1C,uEAAuE;AACvE,wBAAwB;AAExB,+BAA+B;AAC/B,gDAAgD;AAChD,YAAY;AACZ,QAAQ;AAER,IAAI"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@social-mail/social-mail-web-server",
3
- "version": "1.5.455",
3
+ "version": "1.7.2",
4
4
  "description": "## Phase 1",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -22,7 +22,7 @@
22
22
  "@aws-sdk/client-s3": "^3.609.0",
23
23
  "@azure/storage-blob": "^12.25.0",
24
24
  "@entity-access/entity-access": "^1.0.401",
25
- "@entity-access/server-pages": "^1.1.398",
25
+ "@entity-access/server-pages": "^1.1.399",
26
26
  "@ffmpeg/core-mt": "^0.12.6",
27
27
  "@ffmpeg/ffmpeg": "^0.12.10",
28
28
  "@ffmpeg/util": "^0.12.1",
@@ -49,7 +49,6 @@
49
49
  "nodemailer": "^6.9.4",
50
50
  "pg": "^8.11.1",
51
51
  "pg-cursor": "^2.10.1",
52
- "puppeteer-core": "^22.6.2",
53
52
  "qrcode": "^1.5.3",
54
53
  "semver": "^7.6.2",
55
54
  "sharp": "^0.33.5",
@@ -22,7 +22,7 @@ import DomainRelay from "./entities/DomainRelay.js";
22
22
  import MailboxContact from "./entities/MailboxContact.js";
23
23
  import MailboxContactEmail from "./entities/MailboxContactEmail.js";
24
24
  import UserAuthFactor from "./entities/UserAuthFactor.js";
25
- import MailboxEmail from "./entities/MailboxEmail.js";
25
+ import ChannelEmail from "./entities/ChannelEmail.js";
26
26
  import AppFileTag from "./entities/AppFileTag.js";
27
27
  import UserPin from "./entities/UserPin.js";
28
28
  import Contact, { ContactAddress, ContactDomain, ContactEmail, ContactItem, ContactPhone } from "./entities/Contact.js";
@@ -146,7 +146,7 @@ export default class SocialMailContext extends EntityContext {
146
146
 
147
147
  public mailboxes = this.model.register(Mailbox);
148
148
 
149
- public mailboxEmails = this.model.register(MailboxEmail);
149
+ public channelEmails = this.model.register(ChannelEmail);
150
150
 
151
151
 
152
152
  public mailboxContacts = this.model.register(MailboxContact);
@@ -54,7 +54,7 @@ import EmailTemplate from "./entities/EmailTemplate.js";
54
54
  import EmailTemplateEvents from "./events/EmailTemplateEvents.js";
55
55
  import MailboxSyncTarget from "./entities/MailboxSyncTarget.js";
56
56
  import MailboxSyncTargetEvents from "./events/MailboxSyncTargetEvents.js";
57
- import MailboxEmail from "./entities/MailboxEmail.js";
57
+ import ChannelEmail from "./entities/ChannelEmail.js";
58
58
  import MailboxEmailEvents from "./events/MailboxEmailEvents.js";
59
59
  import EmailLogEvents from "./events/EmailLogEvents.js";
60
60
  import WebSite from "./entities/WebSite.js";
@@ -182,7 +182,7 @@ export default class SocialMailContextEvents extends ContextEvents {
182
182
  this.register(MailboxContactEvent, MailboxContactEventEvents);
183
183
  this.register(MailboxContactTag, MailboxContactTagEvents);
184
184
  this.register(MailboxTag, MailboxTagEvents);
185
- this.register(MailboxEmail, MailboxEmailEvents);
185
+ this.register(ChannelEmail, MailboxEmailEvents);
186
186
  this.register(NameToken, NameTokenEvents);
187
187
  this.register(StoreItem, StoreItemEvents);
188
188
  this.register(StoreItemPrice, StoreItemPriceEvents);
@@ -22,8 +22,7 @@ import type { StoreItem } from "./StoreItem.js";
22
22
  import type { StoreMediaFile } from "./StoreMediaFile.js";
23
23
  import CheckConstraint from "@entity-access/entity-access/dist/decorators/CheckConstraint.js";
24
24
  import type { StoreJournal } from "./StoreJournal.js";
25
- import { ServiceProvider } from "@entity-access/entity-access/dist/di/di.js";
26
- import EncryptionService from "../../services/encryption/EncryptionService.js";
25
+ import type ChannelEmail from "./ChannelEmail.js";
27
26
 
28
27
  const accessTypesEnum = ["create", "read", "write", "delegate"] as const;
29
28
  export type fileAccessTypes = typeof accessTypesEnum[number];
@@ -208,6 +207,7 @@ export default class AppFile {
208
207
  storeItems: StoreItem[];
209
208
  currentVersionWebSites: WebSite[];
210
209
  storeMediaFiles: StoreMediaFile[];
210
+ channelEmails: ChannelEmail[];
211
211
 
212
212
  @ReadOnlyJsonProperty
213
213
  public get postID() {
@@ -6,6 +6,7 @@ import Mailbox from "./Mailbox.js";
6
6
  import DateTime from "@entity-access/entity-access/dist/types/DateTime.js";
7
7
  import Index from "@entity-access/entity-access/dist/decorators/Index.js";
8
8
  import { ReadOnlyJsonProperty } from "@entity-access/server-pages/dist/services/ModelService.js";
9
+ import AppFile from "./AppFile.js";
9
10
 
10
11
  @Table("MailboxEmails")
11
12
  @Index({
@@ -30,7 +31,7 @@ import { ReadOnlyJsonProperty } from "@entity-access/server-pages/dist/services/
30
31
  ],
31
32
  filter: (x) => x.datePublished !== null && x.isThread === true
32
33
  })
33
- export default class MailboxEmail {
34
+ export default class ChannelEmail {
34
35
 
35
36
  @Column({ dataType: "BigInt", key: true, order: 1 })
36
37
  @RelateTo(Mailbox, {
@@ -45,7 +46,7 @@ export default class MailboxEmail {
45
46
  @Column({ dataType: "BigInt", key: true, order: 2})
46
47
  @RelateTo(Email, {
47
48
  property: (me) => me.email,
48
- inverseProperty: (e) => e.mailboxes,
49
+ inverseProperty: (e) => e.channelEmails,
49
50
  foreignKeyConstraint: {
50
51
  cascade: "delete"
51
52
  }
@@ -75,8 +76,21 @@ export default class MailboxEmail {
75
76
  @Column({ dataType: "Boolean", default: () => false})
76
77
  isThread: boolean;
77
78
 
79
+ @Column({dataType: "BigInt", nullable: true})
80
+ @RelateTo(AppFile, {
81
+ property: (x) => x.previewFile,
82
+ inverseProperty: (x) => x.channelEmails,
83
+ foreignKeyConstraint: {
84
+ name: "FC_ChannelEmails_PreviewFileID",
85
+ cascade: "set-null"
86
+ }
87
+ })
88
+ previewFileID: number;
89
+
78
90
  mailbox: Mailbox;
79
91
 
92
+ previewFile: AppFile;
93
+
80
94
  @ReadOnlyJsonProperty
81
95
  postID: string;
82
96
 
@@ -10,7 +10,7 @@ import AppFile from "./AppFile.js";
10
10
  import Index from "@entity-access/entity-access/dist/decorators/Index.js";
11
11
  import type MailboxContact from "./MailboxContact.js";
12
12
  import MailboxContactEmail from "./MailboxContactEmail.js";
13
- import type MailboxEmail from "./MailboxEmail.js";
13
+ import type ChannelEmail from "./ChannelEmail.js";
14
14
  import { User } from "./User.js";
15
15
  import type SubscriberActivity from "./SubscriberActivity.js";
16
16
  import { IgnoreJsonProperty, JsonProperty, ReadOnlyJsonProperty } from "@entity-access/server-pages/dist/services/ModelService.js";
@@ -277,7 +277,7 @@ export class Email {
277
277
 
278
278
  // public originalFile: AppFile;
279
279
 
280
- public mailboxes: MailboxEmail[];
280
+ // public mailboxes: MailboxEmail[];
281
281
 
282
282
  public parent: Email;
283
283
 
@@ -299,6 +299,7 @@ export class Email {
299
299
  public engagements: EmailEngagement[];
300
300
  mailboxContactEvents: MailboxContactEvent[];
301
301
  threadParticipants: ThreadParticipant[];
302
+ channelEmails: ChannelEmail[];
302
303
  }
303
304
 
304
305
  @Table("EmailLogs")
@@ -12,6 +12,7 @@ import type SubscriberActivity from "./SubscriberActivity.js";
12
12
  import type EmailAddressName from "./EmailAddressName.js";
13
13
  import type StoreAccountEmail from "./StoreAccountEmail.js";
14
14
  import type ThreadParticipant from "./ThreadParticipant.js";
15
+ import type MailboxContactEmail from "./MailboxContactEmail.js";
15
16
 
16
17
  @Table("EmailAddresses")
17
18
  @Index({
@@ -56,5 +57,6 @@ export default class EmailAddress {
56
57
  names: EmailAddressName[];
57
58
  storeAccounts: StoreAccountEmail[];
58
59
  threadParticipants: ThreadParticipant[];
60
+ mailboxContactEmails: MailboxContactEmail[];
59
61
 
60
62
  }
@@ -6,7 +6,7 @@ import EmailAddress from "./EmailAddress.js";
6
6
  import { HostedDomain } from "./HostedDomain.js";
7
7
  import type MailboxContact from "./MailboxContact.js";
8
8
  import type MailboxContactEmail from "./MailboxContactEmail.js";
9
- import type MailboxEmail from "./MailboxEmail.js";
9
+ import type ChannelEmail from "./ChannelEmail.js";
10
10
  import DateTime from "@entity-access/entity-access/dist/types/DateTime.js";
11
11
  import type UserPin from "./UserPin.js";
12
12
  import type Contact from "./Contact.js";
@@ -211,7 +211,7 @@ export default class Mailbox {
211
211
 
212
212
  public domain: Domain;
213
213
 
214
- public emails: MailboxEmail[];
214
+ public emails: ChannelEmail[];
215
215
 
216
216
  public userMailboxes: UserMailbox[];
217
217
 
@@ -2,7 +2,7 @@ import Column from "@entity-access/entity-access/dist/decorators/Column.js";
2
2
  import Table from "@entity-access/entity-access/dist/decorators/Table.js";
3
3
  import { Email } from "./Email.js";
4
4
  import Mailbox from "./Mailbox.js";
5
- import type EmailAddress from "./EmailAddress.js";
5
+ import EmailAddress from "./EmailAddress.js";
6
6
  import { RelateTo } from "@entity-access/entity-access/dist/decorators/Relate.js";
7
7
  import DateTime from "@entity-access/entity-access/dist/types/DateTime.js";
8
8
  import Sql from "@entity-access/entity-access/dist/sql/Sql.js";
@@ -33,6 +33,10 @@ export default class MailboxContactEmail {
33
33
  mailboxID: number;
34
34
 
35
35
  @Column({ key: true, dataType: "BigInt", order: 2})
36
+ @RelateTo(EmailAddress, {
37
+ property: (x) => x.emailAddress,
38
+ inverseProperty: (x) => x.mailboxContactEmails
39
+ })
36
40
  emailAddressID: number;
37
41
 
38
42
  @Column({ key: true, dataType: "BigInt", order: 3, indexOrder: "descending"})
@@ -30,6 +30,8 @@ import SessionSecurity from "@entity-access/server-pages/dist/services/SessionSe
30
30
  import ExternalInvoke from "@entity-access/server-pages/dist/decorators/ExternalInvoke.js";
31
31
  import FileConversionService from "../../services/convert/FileConversionService.js";
32
32
  import { TempFileResult } from "@entity-access/server-pages/dist/Content.js";
33
+ import ChannelEmail from "../entities/ChannelEmail.js";
34
+ import Mailbox from "../entities/Mailbox.js";
33
35
 
34
36
  export default class AppFileEvents extends AuthenticatedEvents<AppFile> {
35
37
 
@@ -75,6 +77,20 @@ export default class AppFileEvents extends AuthenticatedEvents<AppFile> {
75
77
  return db.appFiles.where({ path }, (p) => (x) => Sql.text.like(x.path, p.path));
76
78
  }
77
79
 
80
+ @ExternalQuery
81
+ async channelPostFiles(post: Email | ChannelEmail) {
82
+ return this.db.appFiles.where(post, (p) => (x) => x.emailID === p.emailID);
83
+ }
84
+
85
+ // @ExternalQuery
86
+ // async channelAllFiles(post: Mailbox) {
87
+ // return this.db.appFiles.where(post, (p) => (x) => x.email.status === "published"
88
+ // && x.email.channelEmails.some((m) => m.mailboxID === p.mailboxID));
89
+ // }
90
+ // async channelFiles(emailID) {
91
+
92
+ // }
93
+
78
94
  @ExternalQuery
79
95
  async channelEmailFiles(emailID) {
80
96
  const page = ServiceProvider.resolve(this, Page as any) as Page;
@@ -86,10 +102,10 @@ export default class AppFileEvents extends AuthenticatedEvents<AppFile> {
86
102
  let q = mailboxes
87
103
  ? this.db.appFiles.where({ mailboxes }, (p) => (x) =>
88
104
  x.email.status === "published"
89
- && x.email.mailboxes.some((mc)=> Sql.in(mc.mailboxID, p.mailboxes )))
105
+ && x.email.channelEmails.some((mc)=> Sql.in(mc.mailboxID, p.mailboxes )))
90
106
  : this.db.appFiles.where({ domains }, (p) => (x) =>
91
107
  x.email.status === "published"
92
- && x.email.mailboxes.some((mc)=> Sql.in(mc.mailbox.domainID, p.domains )))
108
+ && x.email.channelEmails.some((mc)=> Sql.in(mc.mailbox.domainID, p.domains )))
93
109
  ;
94
110
 
95
111
  if (emailID) {
@@ -111,14 +127,14 @@ export default class AppFileEvents extends AuthenticatedEvents<AppFile> {
111
127
  x.email.status === "published");
112
128
 
113
129
  if (mailboxID) {
114
- q = q.where({ mailboxID }, (p) => (x) => x.email.mailboxes.some((m) => m.mailboxID === p.mailboxID));
130
+ q = q.where({ mailboxID }, (p) => (x) => x.email.channelEmails.some((m) => m.mailboxID === p.mailboxID));
115
131
  } else {
116
132
  if (mailboxes) {
117
133
  q = q.where({ mailboxes }, (p) => (x) =>
118
- x.email.mailboxes.some((mc)=> Sql.in(mc.mailboxID, p.mailboxes )));
134
+ x.email.channelEmails.some((mc)=> Sql.in(mc.mailboxID, p.mailboxes )));
119
135
  } else {
120
136
  q = q.where({ domains }, (p) => (x) =>
121
- x.email.mailboxes.some((mc)=> Sql.in(mc.mailbox.domainID, p.domains )));
137
+ x.email.channelEmails.some((mc)=> Sql.in(mc.mailbox.domainID, p.domains )));
122
138
  }
123
139
  }
124
140
 
@@ -254,6 +270,9 @@ export default class AppFileEvents extends AuthenticatedEvents<AppFile> {
254
270
  if (type === Email) {
255
271
  return query;
256
272
  }
273
+ if (type === ChannelEmail) {
274
+ return query;
275
+ }
257
276
  return this.filter(query);
258
277
  }
259
278
 
@@ -1,6 +1,7 @@
1
1
  import { IEntityQuery } from "@entity-access/entity-access/dist/model/IFilterWithParameter.js";
2
2
  import AppFileTag from "../entities/AppFileTag.js";
3
3
  import AuthenticatedEvents from "./AuthenticatedEvents.js";
4
+ import Sql from "@entity-access/entity-access/dist/sql/Sql.js";
4
5
 
5
6
  export default class AppFileTagEvents extends AuthenticatedEvents<AppFileTag> {
6
7
 
@@ -8,11 +9,9 @@ export default class AppFileTagEvents extends AuthenticatedEvents<AppFileTag> {
8
9
  if (this.sessionUser.isAdmin) {
9
10
  return query;
10
11
  }
11
- const { userID } = this.sessionUser;
12
- return query.where({ userID}, (p) => (x) =>
13
- x.file.email.mailboxes.some((mb) => mb.mailbox.userMailboxes.some((um) => um.userID === p.userID)
14
- || mb.mailbox.domain.hostedDomain.domainUsers.some((du) => du.userID === p.userID )
15
- ));
12
+ return query.where(this.sessionUser, (p) => (x) =>
13
+ Sql.text.likeAny(x.file.path, p.readFileAccess)
14
+ );
16
15
  }
17
16
 
18
17
  includeFilter(query: IEntityQuery<AppFileTag>, type?: any, key?: string): IEntityQuery<AppFileTag> {
@@ -13,14 +13,11 @@ export default class EmailAddressEvents extends AuthenticatedEvents<EmailAddress
13
13
  }
14
14
  const { userID } = this.sessionUser;
15
15
  return query.where({ userID }, (p) => (x) =>
16
- x.mailbox.userMailboxes.some((um) => um.userID === p.userID)
17
- || x.mailbox.domain.hostedDomain.domainUsers.some((du) => du.userID === p.userID && du.isAdmin === true)
18
- || x.senders.some((us) =>
19
- us.mailboxes.some((mb) =>
20
- mb.mailbox.userMailboxes.some((du) => du.userID === p.userID)
21
- || mb.mailbox.domain.hostedDomain.domainUsers.some((du) => du.userID === p.userID && du.isAdmin === true)
22
- )
23
- ));
16
+ x.mailboxContactEmails.some((mce) =>
17
+ mce.mailbox.userMailboxes.some((u) => u.userID === p.userID)
18
+ || mce.mailbox.domain.hostedDomain.domainUsers.some((du) => du.userID === p.userID)
19
+ )
20
+ );
24
21
  }
25
22
 
26
23
  includeFilter(query: IEntityQuery<EmailAddress>, type?: any, key?: string): IEntityQuery<EmailAddress> {
@@ -14,7 +14,7 @@ export default class EmailEngagementEvents extends AuthenticatedEvents<EmailEnga
14
14
  }
15
15
  const { userID } = 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
  )