@social-mail/social-mail-web-server 1.4.981 → 1.4.982

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 (25) hide show
  1. package/dist/server/model/events/DomainKeyEvents.d.ts.map +1 -1
  2. package/dist/server/model/events/DomainKeyEvents.js +5 -7
  3. package/dist/server/model/events/DomainKeyEvents.js.map +1 -1
  4. package/dist/server/model/events/HostedDomainEvents.d.ts.map +1 -1
  5. package/dist/server/model/events/HostedDomainEvents.js.map +1 -1
  6. package/dist/server/seed/ui/seed-ui.js +1 -1
  7. package/dist/server/workflows/dns/SyncDnsZoneRecordsWorkflow.d.ts.map +1 -1
  8. package/dist/server/workflows/dns/SyncDnsZoneRecordsWorkflow.js +72 -0
  9. package/dist/server/workflows/dns/SyncDnsZoneRecordsWorkflow.js.map +1 -1
  10. package/dist/tsconfig.tsbuildinfo +1 -1
  11. package/dist/wwwroot/routes/social-mail/public/dns/zones/index.d.ts +7 -0
  12. package/dist/wwwroot/routes/social-mail/public/dns/zones/index.d.ts.map +1 -0
  13. package/dist/wwwroot/routes/social-mail/public/dns/zones/index.js +35 -0
  14. package/dist/wwwroot/routes/social-mail/public/dns/zones/index.js.map +1 -0
  15. package/dist/wwwroot/routes/social-mail/public/dns/zones/put.d.ts +7 -0
  16. package/dist/wwwroot/routes/social-mail/public/dns/zones/put.d.ts.map +1 -0
  17. package/dist/wwwroot/routes/social-mail/public/dns/zones/put.js +38 -0
  18. package/dist/wwwroot/routes/social-mail/public/dns/zones/put.js.map +1 -0
  19. package/package.json +1 -1
  20. package/src/server/model/events/DomainKeyEvents.ts +5 -6
  21. package/src/server/model/events/HostedDomainEvents.ts +2 -0
  22. package/src/server/seed/ui/seed-ui.ts +1 -1
  23. package/src/server/workflows/dns/SyncDnsZoneRecordsWorkflow.ts +81 -0
  24. package/src/wwwroot/routes/social-mail/public/dns/zones/index.ts +31 -0
  25. package/src/wwwroot/routes/social-mail/public/dns/zones/put.ts +29 -0
@@ -0,0 +1,7 @@
1
+ import Page from "@entity-access/server-pages/dist/Page.js";
2
+ import SocialMailContext from "../../../../../../server/model/SocialMailContext.js";
3
+ export default class extends Page {
4
+ db: SocialMailContext;
5
+ run(): Promise<import("@entity-access/server-pages/dist/Content.js").default>;
6
+ }
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/wwwroot/routes/social-mail/public/dns/zones/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,0CAA0C,CAAC;AAG5D,OAAO,iBAAiB,MAAM,qDAAqD,CAAC;AAEpF,MAAM,CAAC,OAAO,MAAO,SAAQ,IAAI;IAG7B,EAAE,EAAE,iBAAiB,CAAC;IAEhB,GAAG;CAoBZ"}
@@ -0,0 +1,35 @@
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 Page from "@entity-access/server-pages/dist/Page.js";
11
+ import { globalEnv } from "../../../../../../common/globalEnv.js";
12
+ import Inject from "@entity-access/entity-access/dist/di/di.js";
13
+ import SocialMailContext from "../../../../../../server/model/SocialMailContext.js";
14
+ export default class default_1 extends Page {
15
+ async run() {
16
+ if (this.query.token !== globalEnv.parentApiToken) {
17
+ return this.content({
18
+ body: "Unauthorized",
19
+ status: 401
20
+ });
21
+ }
22
+ const zones = await this.db.hostedZones.asQuery().toArray();
23
+ await this.db.hostedZoneRecords.where(void 0, (p) => (x) => x.disabled === false)
24
+ .toArray();
25
+ return this.json(zones.map((z) => ({
26
+ ...z,
27
+ records: z.records.map((r) => ({ ...r, zone: void 0 }))
28
+ })));
29
+ }
30
+ }
31
+ __decorate([
32
+ Inject,
33
+ __metadata("design:type", SocialMailContext)
34
+ ], default_1.prototype, "db", void 0);
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/wwwroot/routes/social-mail/public/dns/zones/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,IAAI,MAAM,0CAA0C,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAClE,OAAO,MAAM,MAAM,4CAA4C,CAAC;AAChE,OAAO,iBAAiB,MAAM,qDAAqD,CAAC;AAEpF,MAAM,CAAC,OAAO,gBAAO,SAAQ,IAAI;IAK7B,KAAK,CAAC,GAAG;QAEL,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,cAAc,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC,OAAO,CAAC;gBAChB,IAAI,EAAE,cAAc;gBACpB,MAAM,EAAE,GAAG;aACd,CAAC,CAAC;QACP,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;QAE5D,MAAM,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC;aAC5E,OAAO,EAAE,CAAC;QAEf,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/B,GAAI,CAAC;YACL,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,EAAE,GAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,EAAC,CAAC,CAAC;SAC3D,CAAC,CAAC,CAAC,CAAC;IAET,CAAC;CACJ;AAtBG;IADC,MAAM;8BACH,iBAAiB;qCAAC"}
@@ -0,0 +1,7 @@
1
+ import Page from "@entity-access/server-pages/dist/Page.js";
2
+ import SocialMailContext from "../../../../../../server/model/SocialMailContext.js";
3
+ export default class extends Page {
4
+ db: SocialMailContext;
5
+ run(): Promise<import("@entity-access/server-pages/dist/Content.js").default>;
6
+ }
7
+ //# sourceMappingURL=put.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"put.d.ts","sourceRoot":"","sources":["../../../../../../../src/wwwroot/routes/social-mail/public/dns/zones/put.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,0CAA0C,CAAC;AAG5D,OAAO,iBAAiB,MAAM,qDAAqD,CAAC;AAIpF,MAAM,CAAC,OAAO,MAAO,SAAQ,IAAI;IAG7B,EAAE,EAAE,iBAAiB,CAAC;IAEhB,GAAG;CAgBZ"}
@@ -0,0 +1,38 @@
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 Page from "@entity-access/server-pages/dist/Page.js";
11
+ import { globalEnv } from "../../../../../../common/globalEnv.js";
12
+ import Inject from "@entity-access/entity-access/dist/di/di.js";
13
+ import SocialMailContext from "../../../../../../server/model/SocialMailContext.js";
14
+ import { Prepare } from "@entity-access/server-pages/dist/decorators/Prepare.js";
15
+ let default_1 = class extends Page {
16
+ async run() {
17
+ if (this.query.token !== globalEnv.parentApiToken) {
18
+ return this.content({
19
+ body: "Unauthorized",
20
+ status: 401
21
+ });
22
+ }
23
+ const { zoneID, unsigned, digest } = this.body;
24
+ await this.db.hostedZones.statements.update({
25
+ unsigned,
26
+ digest
27
+ }, { zoneID });
28
+ }
29
+ };
30
+ __decorate([
31
+ Inject,
32
+ __metadata("design:type", SocialMailContext)
33
+ ], default_1.prototype, "db", void 0);
34
+ default_1 = __decorate([
35
+ Prepare.parseJsonBody
36
+ ], default_1);
37
+ export default default_1;
38
+ //# sourceMappingURL=put.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"put.js","sourceRoot":"","sources":["../../../../../../../src/wwwroot/routes/social-mail/public/dns/zones/put.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,IAAI,MAAM,0CAA0C,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAClE,OAAO,MAAM,MAAM,4CAA4C,CAAC;AAChE,OAAO,iBAAiB,MAAM,qDAAqD,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,wDAAwD,CAAC;AAGlE,gBAAA,KAAM,SAAQ,IAAI;IAK7B,KAAK,CAAC,GAAG;QAEL,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,cAAc,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC,OAAO,CAAC;gBAChB,IAAI,EAAE,cAAc;gBACpB,MAAM,EAAE,GAAG;aACd,CAAC,CAAC;QACP,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAW,CAAC;QAEtD,MAAM,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC;YACxC,QAAQ;YACR,MAAM;SACT,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACnB,CAAC;CACJ,CAAA;AAlBG;IADC,MAAM;8BACH,iBAAiB;qCAAC;AAHX;IADd,OAAO,CAAC,aAAa;aAsBrB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@social-mail/social-mail-web-server",
3
- "version": "1.4.981",
3
+ "version": "1.4.982",
4
4
  "description": "## Phase 1",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -2,12 +2,14 @@ import { IEntityQuery } from "@entity-access/entity-access/dist/model/IFilterWit
2
2
  import DomainKey from "../entities/DomainKey.js";
3
3
  import AuthenticatedEvents from "./AuthenticatedEvents.js";
4
4
  import ChangeEntry from "@entity-access/entity-access/dist/model/changes/ChangeEntry.js";
5
- import Inject from "@entity-access/entity-access/dist/di/di.js";
5
+ import Inject, { ServiceProvider } from "@entity-access/entity-access/dist/di/di.js";
6
6
  import CryptoService from "../../services/CryptoService.js";
7
7
  import EntityAccessError from "@entity-access/entity-access/dist/common/EntityAccessError.js";
8
8
  import SocialMailContext from "../SocialMailContext.js";
9
9
  import GlobalEvents from "../../../common/GlobalEvents.js";
10
10
  import { globalEnv } from "../../../common/globalEnv.js";
11
+ import WorkflowContext from "@entity-access/entity-access/dist/workflows/WorkflowContext.js";
12
+ import SyncDnsZoneRecordsWorkflow from "../../workflows/dns/SyncDnsZoneRecordsWorkflow.js";
11
13
 
12
14
  export default class DomainKeyEvents extends AuthenticatedEvents<DomainKey> {
13
15
 
@@ -61,10 +63,7 @@ export default class DomainKeyEvents extends AuthenticatedEvents<DomainKey> {
61
63
  }
62
64
 
63
65
  private async notify(entity: DomainKey) {
64
- const d = await this.db.domains.where(entity, (p) => (x) => x.domainID === p.domainID).first();
65
- const { publicKey, name, keyType } = entity;
66
- const host = d.name;
67
- const serverID = globalEnv.serverID;
68
- this.globalEvents.notify("dkim-added", { publicKey, host, name, keyType, serverID });
66
+ const wc = ServiceProvider.resolve(this, WorkflowContext);
67
+ await SyncDnsZoneRecordsWorkflow.enqueue(wc, entity.domainID);
69
68
  }
70
69
  }
@@ -7,6 +7,8 @@ import Inject, { ServiceProvider } from "@entity-access/entity-access/dist/di/di
7
7
  import EmailAddressService from "../../services/EmailAddressService.js";
8
8
  import SocialMailContext from "../SocialMailContext.js";
9
9
  import EntityAccessError from "@entity-access/entity-access/dist/common/EntityAccessError.js";
10
+ import SyncDnsZoneRecordsWorkflow from "../../workflows/dns/SyncDnsZoneRecordsWorkflow.js";
11
+ import WorkflowContext from "@entity-access/entity-access/dist/workflows/WorkflowContext.js";
10
12
 
11
13
  export default class HostedDomainEvents extends AuthenticatedEvents<HostedDomain> {
12
14
 
@@ -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.2.460";
6
+ const version = "1.2.474";
7
7
 
8
8
  const existing = await config.getValue(UIPackageConfig, false);
9
9
  if (existing) {
@@ -5,6 +5,7 @@ import WorkflowContext from "@entity-access/entity-access/dist/workflows/Workflo
5
5
  import SocialMailContext from "../../model/SocialMailContext.js";
6
6
  import EmailAddressService from "../../services/EmailAddressService.js";
7
7
  import Sql from "@entity-access/entity-access/dist/sql/Sql.js";
8
+ import { globalEnv } from "../../../common/globalEnv.js";
8
9
 
9
10
  export default class SyncDnsZoneRecordsWorkflow extends Workflow {
10
11
 
@@ -35,6 +36,86 @@ export default class SyncDnsZoneRecordsWorkflow extends Workflow {
35
36
  }, {
36
37
  zoneID
37
38
  });
39
+
40
+ const exists = await db.hostedZoneRecords.statements.select({}, { zoneID });
41
+ if (exists) {
42
+ return;
43
+ }
44
+
45
+ const { name: domain } = await db.domains.statements.select({}, { domainID: zoneID });
46
+
47
+ const ttl = 8600;
48
+ const dateCreated = DateTime.now;
49
+ const dateUpdated = dateCreated;
50
+
51
+ await db.hostedZoneRecords.statements.insert({
52
+ zoneID,
53
+ dateCreated,
54
+ dateUpdated,
55
+ ttl,
56
+ name: "@",
57
+ type: "SOA",
58
+ value: globalEnv.dns.soa,
59
+ readonly: true,
60
+ });
61
+
62
+ await db.hostedZoneRecords.statements.insert({
63
+ zoneID,
64
+ dateCreated,
65
+ dateUpdated,
66
+ ttl,
67
+ name: "_acme-challenge",
68
+ type: "CNAME",
69
+ value: `${domain}.${globalEnv.dns.letsEncryptPrefix}`,
70
+ readonly: true,
71
+ });
72
+
73
+ await db.hostedZoneRecords.statements.insert({
74
+ zoneID,
75
+ dateCreated,
76
+ dateUpdated,
77
+ ttl,
78
+ name: "_dmarc",
79
+ type: "TXT",
80
+ value: `v=DMARC1; p=reject; rua=mailto:no-reply@${domain};`,
81
+ readonly: true,
82
+ });
83
+
84
+ await db.hostedZoneRecords.statements.insert({
85
+ zoneID,
86
+ dateCreated,
87
+ dateUpdated,
88
+ ttl,
89
+ type: "A",
90
+ name: "@",
91
+ value: "$IP$",
92
+ fqdn: `${domain}`,
93
+ readonly: true
94
+ });
95
+
96
+ await db.hostedZoneRecords.statements.insert({
97
+ zoneID,
98
+ dateCreated,
99
+ dateUpdated,
100
+ ttl,
101
+ type: "CNAME",
102
+ name: "www",
103
+ value: "$HOST$",
104
+ fqdn: `www.${domain}`,
105
+ readonly: true
106
+ });
107
+
108
+ await db.hostedZoneRecords.statements.insert({
109
+ zoneID,
110
+ dateCreated,
111
+ dateUpdated,
112
+ ttl,
113
+ type: "CNAME",
114
+ name: "*",
115
+ value: "$HOST$",
116
+ fqdn: `*.${domain}`,
117
+ readonly: true
118
+ });
38
119
  }
39
120
 
40
121
  @UniqueActivity
@@ -0,0 +1,31 @@
1
+ import Page from "@entity-access/server-pages/dist/Page.js";
2
+ import { globalEnv } from "../../../../../../common/globalEnv.js";
3
+ import Inject from "@entity-access/entity-access/dist/di/di.js";
4
+ import SocialMailContext from "../../../../../../server/model/SocialMailContext.js";
5
+
6
+ export default class extends Page {
7
+
8
+ @Inject
9
+ db: SocialMailContext;
10
+
11
+ async run() {
12
+
13
+ if (this.query.token !== globalEnv.parentApiToken) {
14
+ return this.content({
15
+ body: "Unauthorized",
16
+ status: 401
17
+ });
18
+ }
19
+
20
+ const zones = await this.db.hostedZones.asQuery().toArray();
21
+
22
+ await this.db.hostedZoneRecords.where(void 0, (p) => (x) => x.disabled === false)
23
+ .toArray();
24
+
25
+ return this.json(zones.map((z) => ({
26
+ ... z,
27
+ records: z.records.map((r) => ( { ... r, zone: void 0}))
28
+ })));
29
+
30
+ }
31
+ }
@@ -0,0 +1,29 @@
1
+ import Page from "@entity-access/server-pages/dist/Page.js";
2
+ import { globalEnv } from "../../../../../../common/globalEnv.js";
3
+ import Inject from "@entity-access/entity-access/dist/di/di.js";
4
+ import SocialMailContext from "../../../../../../server/model/SocialMailContext.js";
5
+ import { Prepare } from "@entity-access/server-pages/dist/decorators/Prepare.js";
6
+
7
+ @Prepare.parseJsonBody
8
+ export default class extends Page {
9
+
10
+ @Inject
11
+ db: SocialMailContext;
12
+
13
+ async run() {
14
+
15
+ if (this.query.token !== globalEnv.parentApiToken) {
16
+ return this.content({
17
+ body: "Unauthorized",
18
+ status: 401
19
+ });
20
+ }
21
+
22
+ const { zoneID, unsigned, digest } = this.body as any;
23
+
24
+ await this.db.hostedZones.statements.update({
25
+ unsigned,
26
+ digest
27
+ }, { zoneID });
28
+ }
29
+ }