@social-mail/social-mail-web-server 1.7.147 → 1.7.149

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 (28) hide show
  1. package/dist/server/model/entities/User.d.ts +1 -0
  2. package/dist/server/model/entities/User.d.ts.map +1 -1
  3. package/dist/server/model/entities/User.js +4 -0
  4. package/dist/server/model/entities/User.js.map +1 -1
  5. package/dist/server/model/entities/WebSite.d.ts +1 -0
  6. package/dist/server/model/entities/WebSite.d.ts.map +1 -1
  7. package/dist/server/model/entities/WebSite.js +4 -0
  8. package/dist/server/model/entities/WebSite.js.map +1 -1
  9. package/dist/server/model/events/UserEvents.d.ts.map +1 -1
  10. package/dist/server/model/events/UserEvents.js +2 -1
  11. package/dist/server/model/events/UserEvents.js.map +1 -1
  12. package/dist/server/seed/ui/seed-ui.js +1 -1
  13. package/dist/server/workflows/site/CopyTemplateWorkflow.d.ts +6 -1
  14. package/dist/server/workflows/site/CopyTemplateWorkflow.d.ts.map +1 -1
  15. package/dist/server/workflows/site/CopyTemplateWorkflow.js +50 -2
  16. package/dist/server/workflows/site/CopyTemplateWorkflow.js.map +1 -1
  17. package/dist/server/workflows/site/CreateSocialSiteWorkflow.d.ts +1 -0
  18. package/dist/server/workflows/site/CreateSocialSiteWorkflow.d.ts.map +1 -1
  19. package/dist/server/workflows/site/CreateSocialSiteWorkflow.js +4 -1
  20. package/dist/server/workflows/site/CreateSocialSiteWorkflow.js.map +1 -1
  21. package/dist/tsconfig.tsbuildinfo +1 -1
  22. package/package.json +1 -1
  23. package/src/server/model/entities/User.ts +3 -0
  24. package/src/server/model/entities/WebSite.ts +3 -0
  25. package/src/server/model/events/UserEvents.ts +2 -1
  26. package/src/server/seed/ui/seed-ui.ts +1 -1
  27. package/src/server/workflows/site/CopyTemplateWorkflow.ts +55 -2
  28. package/src/server/workflows/site/CreateSocialSiteWorkflow.ts +5 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@social-mail/social-mail-web-server",
3
- "version": "1.7.147",
3
+ "version": "1.7.149",
4
4
  "description": "## Phase 1",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -96,6 +96,9 @@ export class User {
96
96
  @IgnoreJsonProperty
97
97
  public uniquePhoneNumber: string;
98
98
 
99
+ @Column({ dataType: "Char", length: 200, nullable: true })
100
+ public contactEmail: string;
101
+
99
102
  @Column({ dataType: "BigInt", default: () => 0 })
100
103
  public maxStorage: number;
101
104
 
@@ -49,6 +49,9 @@ export default class WebSite {
49
49
  @Column({ dataType: "Boolean", default:() => false })
50
50
  public isTemplate: boolean;
51
51
 
52
+ @Column({ dataType: "Char", length: 200, nullable: true })
53
+ public title: string;
54
+
52
55
  @Column({ dataType: "Boolean", default:() => false})
53
56
  @ReadOnlyJsonProperty
54
57
  public storeEnabled: boolean;
@@ -131,7 +131,8 @@ export default class UserEvents extends AuthenticatedEvents<User> {
131
131
  await context.queue(CreateSocialSiteWorkflow, {
132
132
  userID,
133
133
  domainName: entity.domainName,
134
- templateID: entity.createWebSiteTemplateID
134
+ templateID: entity.createWebSiteTemplateID,
135
+ name: entity.displayName
135
136
  });
136
137
  }
137
138
  }
@@ -3,7 +3,7 @@ import semver from "semver";
3
3
 
4
4
  export default async function seedUI(config: DBConfig) {
5
5
 
6
- const version = "1.4.130";
6
+ const version = "1.4.131";
7
7
 
8
8
  const existing = await config.getValue(UIPackageConfig, false);
9
9
  if (existing) {
@@ -2,16 +2,27 @@ import Inject from "@entity-access/entity-access/dist/di/di.js";
2
2
  import Workflow, { UniqueActivity } from "@entity-access/entity-access/dist/workflows/Workflow.js";
3
3
  import SocialMailContext from "../../model/SocialMailContext.js";
4
4
  import Sql from "@entity-access/entity-access/dist/sql/Sql.js";
5
+ import AppFile from "../../model/entities/AppFile.js";
6
+ import TempFileService from "../../storage/TempFileService.js";
7
+ import { JSDOM } from 'jsdom';
8
+ import BaseStorage from "../../storage/BaseStorage.js";
9
+ import SnapshotService from "../../services/files/SnapshotService.js";
10
+
5
11
 
6
12
  export default class CopyTemplateWorkflow extends Workflow<{ folderID, templateID }> {
7
13
 
14
+ set = new Set<AppFile>();
15
+
8
16
  async run() {
9
17
  return this.copy();
10
18
  }
11
19
 
12
20
  @UniqueActivity
13
21
  async copy(
14
- @Inject db?: SocialMailContext
22
+ @Inject db?: SocialMailContext,
23
+ @Inject tfs?: TempFileService,
24
+ @Inject storage?: BaseStorage,
25
+ @Inject ss?: SnapshotService
15
26
  ) {
16
27
  // delete all files from current folder ..
17
28
 
@@ -19,6 +30,8 @@ export default class CopyTemplateWorkflow extends Workflow<{ folderID, templateI
19
30
 
20
31
  const currentPath = `${folderID}/%`;
21
32
 
33
+ const site = await db.websiteFolders.where(this.input, (p) => (x) => x.folderID === p.folderID).first();
34
+
22
35
  await using tx = await db.connection.createTransaction();
23
36
 
24
37
  await db.appFiles
@@ -27,8 +40,44 @@ export default class CopyTemplateWorkflow extends Workflow<{ folderID, templateI
27
40
 
28
41
  await this.copyFolder(db, folderID, templateID);
29
42
 
30
-
31
43
  await tx.commit();
44
+
45
+ const { title } = site;
46
+
47
+ // change template content...
48
+ for (const htmlFile of this.set) {
49
+ const file = await tfs.downloadAppFile(htmlFile);
50
+
51
+ const text = await file.readAsText();
52
+ if (!/data\-template\-/.test(text)) {
53
+ continue;
54
+ }
55
+
56
+ let modified = false;
57
+
58
+ // replace template-part...
59
+ const window = new JSDOM(text);
60
+ for(const e of window.window.document.documentElement.querySelectorAll("*")) {
61
+ for(const k of e.getAttributeNames()) {
62
+ switch(k) {
63
+ case "data-template-name":
64
+ e.setAttribute(k, title);
65
+ modified = true;
66
+ break;
67
+ }
68
+ }
69
+ }
70
+
71
+ if (modified) {
72
+
73
+ const savedFile = await tfs.createTempFile(".html", htmlFile.name, htmlFile.contentType);
74
+
75
+ await storage.saveFile(savedFile, htmlFile);
76
+ }
77
+ }
78
+
79
+ // publish a snapshot...
80
+ await ss.createSnapshot(folderID);
32
81
  }
33
82
 
34
83
  async copyFolder(db: SocialMailContext, destFolderID: any, srcFolderID: any) {
@@ -77,6 +126,10 @@ export default class CopyTemplateWorkflow extends Workflow<{ folderID, templateI
77
126
 
78
127
  if (existing.isFolder) {
79
128
  await this.copyFolder(db, existing.appFileID, element.appFileID);
129
+ } else {
130
+ if (/^text\/html$/i.test(existing.contentType)) {
131
+ this.set.add(existing);
132
+ }
80
133
  }
81
134
 
82
135
  }
@@ -7,7 +7,7 @@ import { WebSiteHost } from "../../model/entities/WebSiteHost.js";
7
7
  import DateTime from "@entity-access/entity-access/dist/types/DateTime.js";
8
8
  import EmailAddressService from "../../services/EmailAddressService.js";
9
9
 
10
- export default class CreateSocialSiteWorkflow extends Workflow<{ userID: number, domainName: string, templateID?: any }> {
10
+ export default class CreateSocialSiteWorkflow extends Workflow<{ userID: number, domainName: string, templateID?: any, name?: string }> {
11
11
 
12
12
  run() {
13
13
  return this.createSite();
@@ -28,7 +28,7 @@ export default class CreateSocialSiteWorkflow extends Workflow<{ userID: number,
28
28
  const now = DateTime.now;
29
29
  const hosts = [] as WebSiteHost[];
30
30
 
31
- const { userID, domainName, templateID } = this.input;
31
+ const { userID, domainName, templateID, name } = this.input;
32
32
 
33
33
  // add a hosting domain..
34
34
 
@@ -99,6 +99,9 @@ export default class CreateSocialSiteWorkflow extends Workflow<{ userID: number,
99
99
  isStatic: true,
100
100
  hosts,
101
101
  templateID,
102
+ fromEmail: user.contactEmail,
103
+ supportEmail: user.contactEmail,
104
+ title: name,
102
105
  channelDomains
103
106
  }),
104
107
  });