@social-mail/social-mail-web-server 1.5.455 → 1.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server/model/SocialMailContext.d.ts +2 -2
- package/dist/server/model/SocialMailContext.js +2 -2
- package/dist/server/model/SocialMailContextEvents.js +2 -2
- package/dist/server/model/entities/AppFile.d.ts +2 -0
- package/dist/server/model/entities/AppFile.d.ts.map +1 -1
- package/dist/server/model/entities/AppFile.js.map +1 -1
- package/dist/server/model/entities/{MailboxEmail.d.ts → ChannelEmail.d.ts} +5 -2
- package/dist/server/model/entities/ChannelEmail.d.ts.map +1 -0
- package/dist/server/model/entities/{MailboxEmail.js → ChannelEmail.js} +26 -13
- package/dist/server/model/entities/ChannelEmail.js.map +1 -0
- package/dist/server/model/entities/Email.d.ts +2 -2
- package/dist/server/model/entities/Email.d.ts.map +1 -1
- package/dist/server/model/entities/Email.js.map +1 -1
- package/dist/server/model/entities/EmailAddress.d.ts +2 -0
- package/dist/server/model/entities/EmailAddress.d.ts.map +1 -1
- package/dist/server/model/entities/EmailAddress.js.map +1 -1
- package/dist/server/model/entities/Mailbox.d.ts +2 -2
- package/dist/server/model/entities/MailboxContactEmail.d.ts +1 -1
- package/dist/server/model/entities/MailboxContactEmail.d.ts.map +1 -1
- package/dist/server/model/entities/MailboxContactEmail.js +5 -0
- package/dist/server/model/entities/MailboxContactEmail.js.map +1 -1
- package/dist/server/model/events/AppFileEvents.d.ts +3 -0
- package/dist/server/model/events/AppFileEvents.d.ts.map +1 -1
- package/dist/server/model/events/AppFileEvents.js +25 -5
- package/dist/server/model/events/AppFileEvents.js.map +1 -1
- package/dist/server/model/events/AppFileTagEvents.d.ts.map +1 -1
- package/dist/server/model/events/AppFileTagEvents.js +2 -3
- package/dist/server/model/events/AppFileTagEvents.js.map +1 -1
- package/dist/server/model/events/EmailAddressEvents.d.ts.map +1 -1
- package/dist/server/model/events/EmailAddressEvents.js +2 -4
- package/dist/server/model/events/EmailAddressEvents.js.map +1 -1
- package/dist/server/model/events/EmailEngagementEvents.js +1 -1
- package/dist/server/model/events/EmailEngagementEvents.js.map +1 -1
- package/dist/server/model/events/EmailEvents.js +6 -6
- package/dist/server/model/events/EmailEvents.js.map +1 -1
- package/dist/server/model/events/EmailLogEvents.js +1 -1
- package/dist/server/model/events/EmailLogEvents.js.map +1 -1
- package/dist/server/model/events/EmailRecipientEvents.js +1 -1
- package/dist/server/model/events/EmailRecipientEvents.js.map +1 -1
- package/dist/server/model/events/EmailTagEvents.js +1 -1
- package/dist/server/model/events/EmailTagEvents.js.map +1 -1
- package/dist/server/model/events/FileContentEvents.d.ts.map +1 -1
- package/dist/server/model/events/FileContentEvents.js +2 -3
- package/dist/server/model/events/FileContentEvents.js.map +1 -1
- package/dist/server/model/events/MailboxContactEvents.js +4 -4
- package/dist/server/model/events/MailboxContactEvents.js.map +1 -1
- package/dist/server/model/events/MailboxEmailEvents.d.ts +9 -6
- package/dist/server/model/events/MailboxEmailEvents.d.ts.map +1 -1
- package/dist/server/model/events/MailboxEmailEvents.js +11 -2
- package/dist/server/model/events/MailboxEmailEvents.js.map +1 -1
- package/dist/server/model/events/MailboxEvents.d.ts.map +1 -1
- package/dist/server/model/events/MailboxEvents.js +6 -6
- package/dist/server/model/events/MailboxEvents.js.map +1 -1
- package/dist/server/model/events/TagEvents.js +1 -1
- package/dist/server/model/events/TagEvents.js.map +1 -1
- package/dist/server/model/events/TextDocumentEvents.js +2 -2
- package/dist/server/model/events/TextDocumentEvents.js.map +1 -1
- package/dist/server/model/events/ThreadParticipantEvents.js +1 -1
- package/dist/server/model/events/ThreadParticipantEvents.js.map +1 -1
- package/dist/server/seed/ui/seed-ui.js +1 -1
- package/dist/server/seed/ui/seed-ui.js.map +1 -1
- package/dist/server/services/channels/ChannelPageService.d.ts +3 -1
- package/dist/server/services/channels/ChannelPageService.d.ts.map +1 -1
- package/dist/server/services/channels/ChannelPageService.js +21 -17
- package/dist/server/services/channels/ChannelPageService.js.map +1 -1
- package/dist/server/services/dom/HtmlSanitizer.js +5 -5
- package/dist/server/services/dom/HtmlSanitizer.js.map +1 -1
- package/dist/server/services/puppeteer/PuppeteerServer.d.ts +1 -19
- package/dist/server/services/puppeteer/PuppeteerServer.d.ts.map +1 -1
- package/dist/server/services/puppeteer/PuppeteerServer.js +176 -268
- package/dist/server/services/puppeteer/PuppeteerServer.js.map +1 -1
- package/dist/server/services/puppeteer/PuppeteerService.d.ts +1 -1
- package/dist/server/services/puppeteer/PuppeteerService.d.ts.map +1 -1
- package/dist/server/services/puppeteer/PuppeteerService.js +2 -1
- package/dist/server/services/puppeteer/PuppeteerService.js.map +1 -1
- package/dist/server/smtp/services/CachedEmailService.js +1 -1
- package/dist/server/smtp/services/EmailReferenceService.d.ts.map +1 -1
- package/dist/server/smtp/services/EmailReferenceService.js +34 -35
- package/dist/server/smtp/services/EmailReferenceService.js.map +1 -1
- package/dist/server/smtp/services/EngagementService.js +1 -1
- package/dist/server/workflows/channel/BroadcastEmail.d.ts.map +1 -1
- package/dist/server/workflows/channel/BroadcastEmail.js +16 -8
- package/dist/server/workflows/channel/BroadcastEmail.js.map +1 -1
- package/dist/server/workflows/repair/channel/RepairChannelEmailCountsWorkflow.js +1 -1
- package/dist/server/workflows/repair/counts/RepairEmailCountsWorkflow.js +1 -1
- package/dist/server/workflows/repair/counts/RepairEmailCountsWorkflow.js.map +1 -1
- package/dist/server/workflows/repair/tags/RepairEmailTagsWorkflow.js +1 -1
- package/dist/server/workflows/repair/tags/RepairEmailTagsWorkflow.js.map +1 -1
- package/dist/server/workflows/smtp/DispatchEmailToMX.d.ts +1 -1
- package/dist/server/workflows/smtp/DispatchEmailToMX.d.ts.map +1 -1
- package/dist/server/workflows/smtp/DispatchEmailToMX.js +9 -7
- package/dist/server/workflows/smtp/DispatchEmailToMX.js.map +1 -1
- package/dist/server/workflows/smtp/MailDispatcherService.d.ts +3 -2
- package/dist/server/workflows/smtp/MailDispatcherService.d.ts.map +1 -1
- package/dist/server/workflows/smtp/MailDispatcherService.js +4 -4
- package/dist/server/workflows/smtp/MailDispatcherService.js.map +1 -1
- package/dist/server/workflows/smtp/PrepareEmailToSend.d.ts +1 -1
- package/dist/server/workflows/smtp/PrepareEmailToSend.js +1 -1
- package/dist/server/workflows/smtp/PrepareEmailToSend.js.map +1 -1
- package/dist/server/workflows/sync/SyncMailboxWorkflow.js +2 -2
- package/dist/server/workflows/sync/SyncMailboxWorkflow.js.map +1 -1
- package/dist/server/workflows/web-hooks/InvokeWebHookWorkflow.js +1 -1
- package/dist/server/workflows/web-hooks/InvokeWebHookWorkflow.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/wwwroot/routes/api/emails/channel/content/attachment/index.js +2 -2
- package/dist/wwwroot/routes/api/emails/channel/content/attachment/index.js.map +1 -1
- package/dist/wwwroot/routes/api/emails/channel/content/html/index.js +6 -6
- package/dist/wwwroot/routes/api/emails/channel/content/html/index.js.map +1 -1
- package/dist/wwwroot/routes/social-mail/public/email/attachment/index.d.ts.map +1 -1
- package/dist/wwwroot/routes/social-mail/public/email/attachment/index.js +2 -1
- package/dist/wwwroot/routes/social-mail/public/email/attachment/index.js.map +1 -1
- package/dist/wwwroot/routes/social-mail/social/buttons/get.d.ts +1 -25
- package/dist/wwwroot/routes/social-mail/social/buttons/get.d.ts.map +1 -1
- package/dist/wwwroot/routes/social-mail/social/buttons/get.js +106 -120
- package/dist/wwwroot/routes/social-mail/social/buttons/get.js.map +1 -1
- package/dist/wwwroot/routes/social-mail/social/buttons-3x/get.d.ts +1 -26
- package/dist/wwwroot/routes/social-mail/social/buttons-3x/get.d.ts.map +1 -1
- package/dist/wwwroot/routes/social-mail/social/buttons-3x/get.js +116 -130
- package/dist/wwwroot/routes/social-mail/social/buttons-3x/get.js.map +1 -1
- package/package.json +2 -3
- package/src/server/model/SocialMailContext.ts +2 -2
- package/src/server/model/SocialMailContextEvents.ts +2 -2
- package/src/server/model/entities/AppFile.ts +2 -2
- package/src/server/model/entities/{MailboxEmail.ts → ChannelEmail.ts} +16 -2
- package/src/server/model/entities/Email.ts +3 -2
- package/src/server/model/entities/EmailAddress.ts +2 -0
- package/src/server/model/entities/Mailbox.ts +2 -2
- package/src/server/model/entities/MailboxContactEmail.ts +5 -1
- package/src/server/model/events/AppFileEvents.ts +24 -5
- package/src/server/model/events/AppFileTagEvents.ts +4 -5
- package/src/server/model/events/EmailAddressEvents.ts +5 -8
- package/src/server/model/events/EmailEngagementEvents.ts +1 -1
- package/src/server/model/events/EmailEvents.ts +6 -6
- package/src/server/model/events/EmailLogEvents.ts +1 -1
- package/src/server/model/events/EmailRecipientEvents.ts +1 -1
- package/src/server/model/events/EmailTagEvents.ts +1 -1
- package/src/server/model/events/FileContentEvents.ts +3 -4
- package/src/server/model/events/MailboxContactEvents.ts +4 -4
- package/src/server/model/events/MailboxEmailEvents.ts +16 -7
- package/src/server/model/events/MailboxEvents.ts +7 -6
- package/src/server/model/events/TagEvents.ts +2 -2
- package/src/server/model/events/TextDocumentEvents.ts +3 -3
- package/src/server/model/events/ThreadParticipantEvents.ts +1 -1
- package/src/server/seed/ui/seed-ui.ts +1 -1
- package/src/server/services/channels/ChannelPageService.tsx +22 -17
- package/src/server/services/dom/HtmlSanitizer.tsx +6 -6
- package/src/server/services/emails/UnreadCountService.ts +1 -1
- package/src/server/services/puppeteer/PuppeteerServer.ts +194 -194
- package/src/server/services/puppeteer/PuppeteerService.ts +1 -1
- package/src/server/smtp/services/CachedEmailService.ts +1 -1
- package/src/server/smtp/services/EmailReferenceService.ts +36 -37
- package/src/server/smtp/services/EngagementService.ts +1 -1
- package/src/server/workflows/channel/BroadcastEmail.ts +21 -8
- package/src/server/workflows/repair/channel/RepairChannelEmailCountsWorkflow.ts +1 -1
- package/src/server/workflows/repair/counts/RepairEmailCountsWorkflow.ts +1 -1
- package/src/server/workflows/repair/tags/RepairEmailTagsWorkflow.ts +1 -1
- package/src/server/workflows/smtp/DispatchEmailToMX.ts +11 -8
- package/src/server/workflows/smtp/MailDispatcherService.ts +5 -5
- package/src/server/workflows/smtp/PrepareEmailToSend.ts +1 -1
- package/src/server/workflows/sync/SyncMailboxWorkflow.ts +2 -2
- package/src/server/workflows/web-hooks/InvokeWebHookWorkflow.ts +1 -1
- package/src/wwwroot/routes/api/emails/channel/content/attachment/index.ts +2 -2
- package/src/wwwroot/routes/api/emails/channel/content/html/index.ts +6 -6
- package/src/wwwroot/routes/social-mail/public/email/attachment/index.ts +3 -1
- package/src/wwwroot/routes/social-mail/social/buttons/get.tsx +130 -130
- package/src/wwwroot/routes/social-mail/social/buttons-3x/get.tsx +143 -143
- package/dist/server/model/entities/MailboxEmail.d.ts.map +0 -1
- package/dist/server/model/entities/MailboxEmail.js.map +0 -1
|
@@ -1,131 +1,117 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
};
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
__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":"
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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:
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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.
|
|
17
|
-
|
|
18
|
-
||
|
|
19
|
-
|
|
20
|
-
|
|
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.
|
|
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
|
)
|