@social-mail/social-mail-web-server 1.7.80 → 1.7.82
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/events/EmailLogEvents.d.ts +2 -0
- package/dist/server/model/events/EmailLogEvents.d.ts.map +1 -1
- package/dist/server/model/events/EmailLogEvents.js +7 -1
- package/dist/server/model/events/EmailLogEvents.js.map +1 -1
- package/dist/server/services/email-logs/EmailLogService.d.ts +4 -0
- package/dist/server/services/email-logs/EmailLogService.d.ts.map +1 -1
- package/dist/server/services/email-logs/EmailLogService.js +27 -20
- package/dist/server/services/email-logs/EmailLogService.js.map +1 -1
- package/dist/server/workflows/smtp/DispatchEmailToMX.d.ts.map +1 -1
- package/dist/server/workflows/smtp/DispatchEmailToMX.js +8 -6
- package/dist/server/workflows/smtp/DispatchEmailToMX.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/server/model/events/EmailLogEvents.ts +10 -1
- package/src/server/services/email-logs/EmailLogService.ts +30 -22
- package/src/server/workflows/smtp/DispatchEmailToMX.ts +7 -6
package/package.json
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { IEntityQuery } from "@entity-access/entity-access/dist/model/IFilterWithParameter.js";
|
|
2
2
|
import BaseEvents from "./BaseEvents.js";
|
|
3
|
-
import Inject from "@entity-access/entity-access/dist/di/di.js";
|
|
3
|
+
import Inject, { ServiceProvider } from "@entity-access/entity-access/dist/di/di.js";
|
|
4
4
|
import BaseStorage from "../../storage/BaseStorage.js";
|
|
5
5
|
import TempFileService from "../../storage/TempFileService.js";
|
|
6
6
|
import { EmailLog } from "../entities/Email.js";
|
|
7
|
+
import ChangeEntry from "@entity-access/entity-access/dist/model/changes/ChangeEntry.js";
|
|
8
|
+
import EmailLogService from "../../services/email-logs/EmailLogService.js";
|
|
7
9
|
|
|
8
10
|
|
|
9
11
|
export default class EmailLogEvents extends BaseEvents<EmailLog> {
|
|
@@ -39,4 +41,11 @@ export default class EmailLogEvents extends BaseEvents<EmailLog> {
|
|
|
39
41
|
Object.defineProperty(entity, "url", { value: entity.url, enumerable: true });
|
|
40
42
|
return entity;
|
|
41
43
|
}
|
|
44
|
+
|
|
45
|
+
async afterDelete(entity: EmailLog, entry: ChangeEntry<EmailLog>) {
|
|
46
|
+
await this.storage.deleteFile(entity.cloudPath);
|
|
47
|
+
|
|
48
|
+
const els = ServiceProvider.resolve(this, EmailLogService);
|
|
49
|
+
await els.updateStorage({ emailID: entity.emailID, size: - entity.fileSize});
|
|
50
|
+
}
|
|
42
51
|
}
|
|
@@ -33,6 +33,7 @@ export default class EmailLogService {
|
|
|
33
33
|
for (const element of logs) {
|
|
34
34
|
await this.storage.deleteFile(element.cloudPath);
|
|
35
35
|
await this.db.emailLogs.statements.delete(element);
|
|
36
|
+
await this.updateStorage({ emailID: element.emailID, size: -element.fileSize});
|
|
36
37
|
}
|
|
37
38
|
}
|
|
38
39
|
|
|
@@ -42,6 +43,8 @@ export default class EmailLogService {
|
|
|
42
43
|
await this.storage.deleteFile(log.cloudPath);
|
|
43
44
|
await this.db.emailLogs.statements.delete({ logID });
|
|
44
45
|
await tx.commit();
|
|
46
|
+
|
|
47
|
+
await this.updateStorage({ emailID: log, size: -log.fileSize});
|
|
45
48
|
}
|
|
46
49
|
|
|
47
50
|
async save(emailID: number, file: LocalFile, compression: string = "gz") {
|
|
@@ -54,36 +57,18 @@ export default class EmailLogService {
|
|
|
54
57
|
const compressed = await tfs.createFrom(file.fileName + ".gz", GZip.zip(file.openRead()), "text/plain");
|
|
55
58
|
await this.storage.createFile(cloudPath, compressed);
|
|
56
59
|
|
|
60
|
+
const size = file.contentSize;
|
|
61
|
+
|
|
57
62
|
const log = await db.emailLogs.statements.insert({
|
|
58
63
|
emailID,
|
|
59
64
|
fileName: file.fileName,
|
|
60
|
-
fileSize:
|
|
65
|
+
fileSize: size,
|
|
61
66
|
dateCreated,
|
|
62
67
|
cloudPath,
|
|
63
68
|
compression
|
|
64
69
|
});
|
|
65
70
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
// we will make sure that we succeed once...
|
|
69
|
-
for (let index = 0; index < 3; index++) {
|
|
70
|
-
try {
|
|
71
|
-
await db.mailboxes.where({ emailID}, (p) => (x) => x.emails.some((e) => e.emailID === p.emailID))
|
|
72
|
-
.update({ size: file.contentSize }, (p) => (x) => ({
|
|
73
|
-
storage: x.storage + Sql.cast.asInteger(p.size),
|
|
74
|
-
dateUpdated: Sql.date.now()
|
|
75
|
-
}));
|
|
76
|
-
} catch (error) {
|
|
77
|
-
lastError = error;
|
|
78
|
-
await sleep(1000);
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
return log;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
if(lastError) {
|
|
85
|
-
console.error(lastError);
|
|
86
|
-
}
|
|
71
|
+
await this.updateStorage({ emailID, size});
|
|
87
72
|
|
|
88
73
|
return log;
|
|
89
74
|
}
|
|
@@ -104,4 +89,27 @@ export default class EmailLogService {
|
|
|
104
89
|
return tf;
|
|
105
90
|
}
|
|
106
91
|
|
|
92
|
+
async updateStorage({ emailID, size }) {
|
|
93
|
+
const { db } = this;
|
|
94
|
+
let lastError = null;
|
|
95
|
+
// we will make sure that we succeed once...
|
|
96
|
+
for (let index = 0; index < 3; index++) {
|
|
97
|
+
try {
|
|
98
|
+
await db.mailboxes.where({ emailID}, (p) => (x) => x.emails.some((e) => e.emailID === p.emailID))
|
|
99
|
+
.update({ size }, (p) => (x) => ({
|
|
100
|
+
storage: x.storage + Sql.cast.asInteger(p.size),
|
|
101
|
+
dateUpdated: Sql.date.now()
|
|
102
|
+
}));
|
|
103
|
+
} catch (error) {
|
|
104
|
+
lastError = error;
|
|
105
|
+
await sleep(1000);
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (lastError) {
|
|
111
|
+
console.error(lastError);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
107
115
|
}
|
|
@@ -300,16 +300,17 @@ export default class DispatchEmailToMX extends Workflow<IMessageEnvelope> {
|
|
|
300
300
|
|
|
301
301
|
if (this.response?.statusCode === SmtpStatusCodes.Ok) {
|
|
302
302
|
|
|
303
|
-
await db.emailRecipients.statements.update({
|
|
304
|
-
emailID,
|
|
305
|
-
emailAddressID,
|
|
306
|
-
status: "sent",
|
|
307
|
-
dateSent: DateTime.now
|
|
308
|
-
});
|
|
309
303
|
await els.saveText(emailID,this.input.to.join(","), this.response.logs);
|
|
310
304
|
|
|
311
305
|
if (activityID) {
|
|
312
306
|
await db.subscriberActivities.statements.update({ activity: "sent" }, { activityID});
|
|
307
|
+
} else {
|
|
308
|
+
await db.emailRecipients.statements.update({
|
|
309
|
+
emailID,
|
|
310
|
+
emailAddressID,
|
|
311
|
+
status: "sent",
|
|
312
|
+
dateSent: DateTime.now
|
|
313
|
+
});
|
|
313
314
|
}
|
|
314
315
|
return;
|
|
315
316
|
}
|