@social-mail/social-mail-web-server 1.16.82 → 1.16.83

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.
@@ -1 +1 @@
1
- {"version":3,"file":"EmailParserService.d.ts","sourceRoot":"","sources":["../../../../src/server/smtp/services/EmailParserService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,oDAAoD,CAAC;AAG/E,MAAM,CAAC,OAAO,OAAO,kBAAkB;IAEtB,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,UAAQ;CAwBvD"}
1
+ {"version":3,"file":"EmailParserService.d.ts","sourceRoot":"","sources":["../../../../src/server/smtp/services/EmailParserService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,oDAAoD,CAAC;AAM/E,MAAM,CAAC,OAAO,OAAO,kBAAkB;IAsBtB,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,UAAQ;CAwBvD"}
@@ -7,7 +7,24 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { RegisterSingleton, ServiceProvider } from "@entity-access/entity-access/dist/di/di.js";
8
8
  import { simpleParser } from "mailparser";
9
9
  import HtmlSanitizer from "../../services/dom/HtmlSanitizer.js";
10
+ // import MimeMessage from "@social-mail/shared/dist/mime-parser/MimeMessage.js"
11
+ // import { Readable } from "node:stream";
10
12
  let EmailParserService = class EmailParserService {
13
+ // public async parseNew(file: LocalFile, sanitize = true) {
14
+ // const msg = await MimeMessage.load( Readable.toWeb(file.openReadStream()) as any , null, false);
15
+ // const parsed = {
16
+ // text: msg.text,
17
+ // html: msg.html,
18
+ // subject: msg.subject,
19
+ // };
20
+ // if (sanitize) {
21
+ // const sanitizer = ServiceProvider.resolve(this, HtmlSanitizer);
22
+ // const { html, text } = sanitizer.sanitize(msg.html || `<pre>${msg.text}</pre>`, msg.text);
23
+ // parsed.html = html;
24
+ // parsed.text = text;
25
+ // }
26
+ // return parsed;
27
+ // }
11
28
  async parse(file, sanitize = false) {
12
29
  const parsed = await new Promise((resolve, reject) => {
13
30
  simpleParser(file.openRead(), {
@@ -1 +1 @@
1
- {"version":3,"file":"EmailParserService.js","sourceRoot":"","sources":["../../../../src/server/smtp/services/EmailParserService.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAChG,OAAO,EAAc,YAAY,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,aAAa,MAAM,qCAAqC,CAAC;AAIjD,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAE5B,KAAK,CAAC,KAAK,CAAC,IAAe,EAAE,QAAQ,GAAG,KAAK;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7D,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;gBAC1B,YAAY,EAAE,IAAI;gBAClB,aAAa,EAAE,IAAI;aACtB,EAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBAClB,IAAI,KAAK,EAAE,CAAC;oBACR,MAAM,CAAC,KAAK,CAAC,CAAC;oBACd,OAAO;gBACX,CAAC;gBACD,OAAO,CAAC,MAAM,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAC/D,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,IAAI,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1G,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;YACnB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACvB,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;CAEJ,CAAA;AA1BoB,kBAAkB;IADtC,iBAAiB;GACG,kBAAkB,CA0BtC;eA1BoB,kBAAkB"}
1
+ {"version":3,"file":"EmailParserService.js","sourceRoot":"","sources":["../../../../src/server/smtp/services/EmailParserService.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAChG,OAAO,EAAc,YAAY,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,aAAa,MAAM,qCAAqC,CAAC;AAGhE,gFAAgF;AAChF,0CAA0C;AAG3B,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAEnC,4DAA4D;IAE5D,uGAAuG;IAEvG,uBAAuB;IACvB,0BAA0B;IAC1B,0BAA0B;IAC1B,gCAAgC;IAChC,SAAS;IAET,sBAAsB;IACtB,0EAA0E;IAC1E,qGAAqG;IACrG,8BAA8B;IAC9B,8BAA8B;IAC9B,QAAQ;IAER,qBAAqB;IACrB,IAAI;IAEG,KAAK,CAAC,KAAK,CAAC,IAAe,EAAE,QAAQ,GAAG,KAAK;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7D,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;gBAC1B,YAAY,EAAE,IAAI;gBAClB,aAAa,EAAE,IAAI;aACtB,EAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBAClB,IAAI,KAAK,EAAE,CAAC;oBACR,MAAM,CAAC,KAAK,CAAC,CAAC;oBACd,OAAO;gBACX,CAAC;gBACD,OAAO,CAAC,MAAM,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAC/D,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,IAAI,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1G,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;YACnB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACvB,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;CAEJ,CAAA;AA9CoB,kBAAkB;IADtC,iBAAiB;GACG,kBAAkB,CA8CtC;eA9CoB,kBAAkB"}
@@ -0,0 +1,13 @@
1
+ import Page from "@entity-access/server-pages/dist/Page.js";
2
+ import SocialMailContext from "../../../../../../server/model/SocialMailContext.js";
3
+ import EmailAddressService from "../../../../../../server/services/EmailAddressService.js";
4
+ import EmailLogService from "../../../../../../server/services/email-logs/EmailLogService.js";
5
+ import EmailParserService from "../../../../../../server/smtp/services/EmailParserService.js";
6
+ export default class extends Page {
7
+ db: SocialMailContext;
8
+ eas: EmailAddressService;
9
+ els: EmailLogService;
10
+ eps: EmailParserService;
11
+ run(): Promise<import("@entity-access/server-pages/dist/Content.js").default>;
12
+ }
13
+ //# sourceMappingURL=post.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../../../../../../src/wwwroot/routes/social-mail/api/v1/queue-mail/post.tsx"],"names":[],"mappings":"AAEA,OAAO,IAAI,MAAM,0CAA0C,CAAC;AAC5D,OAAO,iBAAiB,MAAM,qDAAqD,CAAC;AACpF,OAAO,mBAAmB,MAAM,0DAA0D,CAAC;AAC3F,OAAO,eAAe,MAAM,iEAAiE,CAAC;AAC9F,OAAO,kBAAkB,MAAM,8DAA8D,CAAC;AAI9F,MAAM,CAAC,OAAO,MAAO,SAAQ,IAAI;IAG7B,EAAE,EAAE,iBAAiB,CAAC;IAGtB,GAAG,EAAE,mBAAmB,CAAC;IAGzB,GAAG,EAAE,eAAe,CAAC;IAGrB,GAAG,EAAE,kBAAkB,CAAC;IAGlB,GAAG;CA2DZ"}
@@ -0,0 +1,86 @@
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 from "@entity-access/entity-access/dist/di/di.js";
11
+ import { Prepare } from "@entity-access/server-pages/dist/decorators/Prepare.js";
12
+ import Page from "@entity-access/server-pages/dist/Page.js";
13
+ import SocialMailContext from "../../../../../../server/model/SocialMailContext.js";
14
+ import EmailAddressService from "../../../../../../server/services/EmailAddressService.js";
15
+ import EmailLogService from "../../../../../../server/services/email-logs/EmailLogService.js";
16
+ import EmailParserService from "../../../../../../server/smtp/services/EmailParserService.js";
17
+ import DateTime from "@entity-access/entity-access/dist/types/DateTime.js";
18
+ let default_1 = class extends Page {
19
+ async run() {
20
+ this.sessionUser.ensureLoggedIn();
21
+ const from = this.form.fields.from;
22
+ const recipients = this.form.fields.recipients.split(",");
23
+ // const priority = this.form.fields.priority;
24
+ // create mailbox if doesn't exist only if this is the admin
25
+ // or user has ability to create mailbox
26
+ const file = this.form.files[0];
27
+ const sender = await this.eas.getHostedMailboxByAddress(from);
28
+ const l = await this.els.save(0, file);
29
+ const parsed = await this.eps.parse(file, true);
30
+ const headers = {};
31
+ const copyHeaders = [
32
+ "List-Unsubscribe",
33
+ "List-Unsubscribe-Post",
34
+ "Return-Path",
35
+ "In-Reply-To",
36
+ "Reply-To",
37
+ "Auto-Unsubscribe-On-Fail"
38
+ ];
39
+ for (const h of copyHeaders) {
40
+ const v = parsed.headers.get(h);
41
+ if (v) {
42
+ headers[h] = v.toString();
43
+ }
44
+ }
45
+ const now = DateTime.now;
46
+ const email = this.db.emails.add({
47
+ senderID: sender.mailboxID,
48
+ mimeFileID: l.logID,
49
+ recipients: recipients.map((r) => this.db.emailRecipients.add({
50
+ emailAddressText: r
51
+ })),
52
+ subject: parsed.subject,
53
+ dateCreated: now,
54
+ headers: JSON.stringify(headers),
55
+ textBody: parsed.text,
56
+ htmlBody: parsed.html || parsed.textAsHtml,
57
+ status: "scheduled",
58
+ dateSent: now
59
+ });
60
+ await this.db.saveChanges();
61
+ return this.json({
62
+ id: email.emailID
63
+ });
64
+ }
65
+ };
66
+ __decorate([
67
+ Inject,
68
+ __metadata("design:type", SocialMailContext)
69
+ ], default_1.prototype, "db", void 0);
70
+ __decorate([
71
+ Inject,
72
+ __metadata("design:type", EmailAddressService)
73
+ ], default_1.prototype, "eas", void 0);
74
+ __decorate([
75
+ Inject,
76
+ __metadata("design:type", EmailLogService)
77
+ ], default_1.prototype, "els", void 0);
78
+ __decorate([
79
+ Inject,
80
+ __metadata("design:type", EmailParserService)
81
+ ], default_1.prototype, "eps", void 0);
82
+ default_1 = __decorate([
83
+ Prepare.authorize
84
+ ], default_1);
85
+ export default default_1;
86
+ //# sourceMappingURL=post.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post.js","sourceRoot":"","sources":["../../../../../../../src/wwwroot/routes/social-mail/api/v1/queue-mail/post.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@social-mail/social-mail-web-server",
3
- "version": "1.16.82",
3
+ "version": "1.16.83",
4
4
  "description": "## Phase 1",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -27,7 +27,7 @@
27
27
  "@parse/node-apn": "^6.5.0",
28
28
  "@paypal/paypal-server-sdk": "^2.2.0",
29
29
  "@peculiar/asn1-schema": "^2.3.15",
30
- "@social-mail/shared": "^1.0.29",
30
+ "@social-mail/shared": "^1.1.3",
31
31
  "@socket.io/cluster-adapter": "^0.2.2",
32
32
  "@socket.io/postgres-adapter": "^0.4.0",
33
33
  "@socket.io/sticky": "^1.0.4",
@@ -3,9 +3,32 @@ import { ParsedMail, simpleParser } from "mailparser";
3
3
  import HtmlSanitizer from "../../services/dom/HtmlSanitizer.js";
4
4
  import { LocalFile } from "@entity-access/server-pages/dist/core/LocalFile.js";
5
5
 
6
+ // import MimeMessage from "@social-mail/shared/dist/mime-parser/MimeMessage.js"
7
+ // import { Readable } from "node:stream";
8
+
6
9
  @RegisterSingleton
7
10
  export default class EmailParserService {
8
11
 
12
+ // public async parseNew(file: LocalFile, sanitize = true) {
13
+
14
+ // const msg = await MimeMessage.load( Readable.toWeb(file.openReadStream()) as any , null, false);
15
+
16
+ // const parsed = {
17
+ // text: msg.text,
18
+ // html: msg.html,
19
+ // subject: msg.subject,
20
+ // };
21
+
22
+ // if (sanitize) {
23
+ // const sanitizer = ServiceProvider.resolve(this, HtmlSanitizer);
24
+ // const { html, text } = sanitizer.sanitize(msg.html || `<pre>${msg.text}</pre>`, msg.text);
25
+ // parsed.html = html;
26
+ // parsed.text = text;
27
+ // }
28
+
29
+ // return parsed;
30
+ // }
31
+
9
32
  public async parse(file: LocalFile, sanitize = false) {
10
33
  const parsed = await new Promise<ParsedMail>((resolve, reject) => {
11
34
  simpleParser(file.openRead(), {
@@ -0,0 +1,85 @@
1
+ import Inject from "@entity-access/entity-access/dist/di/di.js";
2
+ import { Prepare } from "@entity-access/server-pages/dist/decorators/Prepare.js";
3
+ import Page from "@entity-access/server-pages/dist/Page.js";
4
+ import SocialMailContext from "../../../../../../server/model/SocialMailContext.js";
5
+ import EmailAddressService from "../../../../../../server/services/EmailAddressService.js";
6
+ import EmailLogService from "../../../../../../server/services/email-logs/EmailLogService.js";
7
+ import EmailParserService from "../../../../../../server/smtp/services/EmailParserService.js";
8
+ import DateTime from "@entity-access/entity-access/dist/types/DateTime.js";
9
+
10
+ @Prepare.authorize
11
+ export default class extends Page {
12
+
13
+ @Inject
14
+ db: SocialMailContext;
15
+
16
+ @Inject
17
+ eas: EmailAddressService;
18
+
19
+ @Inject
20
+ els: EmailLogService;
21
+
22
+ @Inject
23
+ eps: EmailParserService;
24
+
25
+
26
+ async run() {
27
+
28
+ this.sessionUser.ensureLoggedIn();
29
+
30
+ const from = this.form.fields.from;
31
+ const recipients = (this.form.fields.recipients as string).split(",");
32
+ // const priority = this.form.fields.priority;
33
+
34
+ // create mailbox if doesn't exist only if this is the admin
35
+ // or user has ability to create mailbox
36
+ const file = this.form.files[0];
37
+
38
+ const sender = await this.eas.getHostedMailboxByAddress(from);
39
+
40
+ const l = await this.els.save(0, file);
41
+
42
+ const parsed = await this.eps.parse(file, true);
43
+
44
+ const headers = {};
45
+
46
+ const copyHeaders = [
47
+ "List-Unsubscribe",
48
+ "List-Unsubscribe-Post",
49
+ "Return-Path",
50
+ "In-Reply-To",
51
+ "Reply-To",
52
+ "Auto-Unsubscribe-On-Fail"
53
+ ];
54
+
55
+ for(const h of copyHeaders) {
56
+ const v = parsed.headers.get(h) as any;
57
+ if (v) {
58
+ headers[h] = v.toString();
59
+ }
60
+ }
61
+
62
+ const now = DateTime.now;
63
+
64
+ const email = this.db.emails.add({
65
+ senderID: sender.mailboxID,
66
+ mimeFileID: l.logID,
67
+ recipients: recipients.map((r) => this.db.emailRecipients.add({
68
+ emailAddressText: r
69
+ })),
70
+ subject: parsed.subject,
71
+ dateCreated: now,
72
+ headers: JSON.stringify(headers),
73
+ textBody: parsed.text,
74
+ htmlBody: parsed.html || parsed.textAsHtml,
75
+ status: "scheduled",
76
+ dateSent: now
77
+ });
78
+
79
+ await this.db.saveChanges();
80
+
81
+ return this.json({
82
+ id: email.emailID
83
+ });
84
+ }
85
+ }