@social-mail/social-mail-web-server 1.7.200 → 1.7.201

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@social-mail/social-mail-web-server",
3
- "version": "1.7.200",
3
+ "version": "1.7.201",
4
4
  "description": "## Phase 1",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -38,6 +38,7 @@ export default class BaseDiskCache {
38
38
  this.keepTTLSeconds = keepTTLSeconds;
39
39
  this.minSize = minSize;
40
40
  this.updateAccessTime = updateAccessTime;
41
+ this.maxAge = maxAge;
41
42
  ensureDir(root);
42
43
  // eslint-disable-next-line no-console
43
44
  setTimeout(() => this.clean().catch(console.error), 1000);
@@ -7,23 +7,20 @@ import SocialMailContext from "../SocialMailContext.js";
7
7
  import EmailAddressService from "../../services/EmailAddressService.js";
8
8
  import { ForeignKeyFilter } from "@entity-access/entity-access/dist/model/events/EntityEvents.js";
9
9
  import DateTime from "@entity-access/entity-access/dist/types/DateTime.js";
10
- import { ignoreFK } from "./UserMailboxEvents.js";
11
10
  import WorkflowContext from "@entity-access/entity-access/dist/workflows/WorkflowContext.js";
12
11
  import ExternalQuery from "@entity-access/server-pages/dist/decorators/ExternalQuery.js";
13
12
  import ExternalInvoke from "@entity-access/server-pages/dist/decorators/ExternalInvoke.js";
14
13
  import Sql from "@entity-access/entity-access/dist/sql/Sql.js";
15
14
  import Page from "@entity-access/server-pages/dist/Page.js";
16
- import { Prepare } from "@entity-access/server-pages/dist/decorators/Prepare.js";
17
15
  import EntityAccessError from "@entity-access/entity-access/dist/common/EntityAccessError.js";
18
16
  import SyncMailboxWorkflow from "../../workflows/sync/SyncMailboxWorkflow.js";
19
- import TagService from "../../services/tags/TagService.js";
20
17
  import WebSiteChannelService from "../../smtp/services/WebSiteChannelService.js";
21
18
  import ChannelEmail from "../entities/ChannelEmail.js";
22
19
  import MailboxTag from "../entities/MailboxTag.js";
23
20
  import MailboxContactEvent from "../entities/MailboxContactEvent.js";
24
21
  import ScopeVars from "../../../common/ScopeVars.js";
25
- import SessionSecurity from "@entity-access/server-pages/dist/services/SessionSecurity.js";
26
22
  import MailboxFolderService from "../../services/mailboxes/MailboxFolderService.js";
23
+ import MailService from "../../services/emails/MailService.js";
27
24
 
28
25
  export default class MailboxEvents extends AuthenticatedEvents<Mailbox> {
29
26
 
@@ -218,6 +215,9 @@ export default class MailboxEvents extends AuthenticatedEvents<Mailbox> {
218
215
  }
219
216
 
220
217
  async afterInsert(entity: Mailbox) {
218
+
219
+ const ea = await this.emailAddressService.getEmailAddress(entity.mailboxID);
220
+
221
221
  this.emailAddressService.cache?.clear("getHostedMailbox");
222
222
  this.emailAddressService.cache?.clear("getHostedMailboxID");
223
223
 
@@ -235,6 +235,15 @@ export default class MailboxEvents extends AuthenticatedEvents<Mailbox> {
235
235
  }
236
236
 
237
237
  await this.updateFolders(entity);
238
+ // const ms = ServiceProvider.resolve(this, MailService);
239
+ // await ms.sendNotificationEmail(`welcome-${entity.mailboxID}`, {
240
+ // from: "social@esocialmail.com",
241
+ // fromName: "Social Mail",
242
+ // subject: "Welcome to Social Mail",
243
+ // textBody: "",
244
+ // to: ea.emailAddress,
245
+ // htmlBody: ""
246
+ // });
238
247
  return this.updateIndex(entity);
239
248
  }
240
249
 
@@ -6,7 +6,6 @@ import { link } from "node:fs/promises";
6
6
  import FileSize from "../../../common/FileSize.js";
7
7
  import ensureDir from "../../../common/FileApi.js";
8
8
  import { LocalFile } from "@entity-access/server-pages/dist/core/LocalFile.js";
9
- import { unlinkSync } from "fs";
10
9
  import { randomUUID } from "crypto";
11
10
  import BaseDiskCache from "../../../common/BaseDiskCache.js";
12
11
 
@@ -18,9 +17,6 @@ ensureDir(serverCache);
18
17
  const tempSize = FileSize.parse(globalEnv.tmpSize);
19
18
  const minSize = tempSize / 2;
20
19
 
21
- const doNothing = () => void 0;
22
-
23
-
24
20
  @RegisterSingleton
25
21
  export default class DiskCacheService extends BaseDiskCache {
26
22
 
@@ -28,7 +24,7 @@ export default class DiskCacheService extends BaseDiskCache {
28
24
 
29
25
  constructor() {
30
26
  super({
31
- root: join(cacheRoot),
27
+ root: join(cacheRoot, "fc"),
32
28
  keepTTLSeconds: 86400,
33
29
  minSize,
34
30
  maxAge:7
@@ -4,16 +4,20 @@ import EntityAccessError from "@entity-access/entity-access/dist/common/EntityAc
4
4
  import ensureDir from "../../../common/FileApi.js";
5
5
  import { spawnPromise } from "../../../common/spawnPromise.js";
6
6
  import TempFileService from "../../storage/TempFileService.js";
7
- import DiskCacheService from "../cache/DiskCacheService.js";
8
- import EncryptionService from "../encryption/EncryptionService.js";
9
7
  import { IVerification } from "./IVerification.js";
10
8
  import SocialMailContext from "../../model/SocialMailContext.js";
11
9
  import { randomUUID } from "crypto";
10
+ import BaseDiskCache from "../../../common/BaseDiskCache.js";
11
+ import { globalEnv } from "../../../common/globalEnv.js";
12
+ import FileSize from "../../../common/FileSize.js";
12
13
 
13
14
  const captchaCache = "/cache/captcha";
14
-
15
15
  ensureDir(captchaCache);
16
16
 
17
+ const tempSize = FileSize.parse(globalEnv.tmpSize);
18
+ const minSize = tempSize / 2;
19
+
20
+
17
21
  const zero = '0'.charCodeAt(0);
18
22
 
19
23
  const filter = "[0]pad=width=750:height=200:x=0:y=0:color=white[v0];"
@@ -30,11 +34,12 @@ const filter = "[0]pad=width=750:height=200:x=0:y=0:color=white[v0];"
30
34
  @RegisterScoped
31
35
  export default class CaptchaService {
32
36
 
33
- @Inject
34
- private diskCache: DiskCacheService;
35
-
36
- @Inject
37
- private encryption: EncryptionService;
37
+ private diskCache: BaseDiskCache = new BaseDiskCache({
38
+ root: captchaCache,
39
+ keepTTLSeconds: 86400,
40
+ minSize,
41
+ maxAge: 7
42
+ }) ;
38
43
 
39
44
  @Inject
40
45
  private db: SocialMailContext;
@@ -76,7 +81,7 @@ export default class CaptchaService {
76
81
  }
77
82
 
78
83
  async getVideo(code: string) {
79
- return this.diskCache.getOrCreateAsync("captcha/" + code + ".gif", (cf) => this.prepareVideo(code, cf.path));
84
+ return this.diskCache.getOrCreateAsync(code + ".gif", (cf) => this.prepareVideo(code, cf.path));
80
85
  }
81
86
 
82
87
  async prepareVideo(code: string, saveAs: string) {
@@ -106,7 +106,7 @@ export default abstract class BaseStorage {
106
106
 
107
107
  async downloadFile({ cloudPath, contentHash, compression}: FileContent) {
108
108
 
109
- return this.diskCache.getOrCreateAsync(path.join("fc", cloudPath), async (cf) => {
109
+ return this.diskCache.getOrCreateAsync(cloudPath, async (cf) => {
110
110
  let { stream } = await this.streamFile(cloudPath);
111
111
  if(compression) {
112
112
  switch(compression) {
@@ -86,7 +86,7 @@ export default class TempFileService {
86
86
  async downloadCloudFile(cloudPath: string, fileName: string, contentType?: string) {
87
87
  try {
88
88
 
89
- const localFile = await this.diskCache.getOrCreateAsync(path.join("fc", cloudPath), async (cf) => {
89
+ const localFile = await this.diskCache.getOrCreateAsync(cloudPath, async (cf) => {
90
90
  const { stream } = await this.storage.streamFile(cloudPath);
91
91
  await cf.writeAll(stream);
92
92
  } );