@serve.zone/dcrouter 18.5.0 → 18.6.0

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 (34) hide show
  1. package/deno.json +1 -1
  2. package/dist_ts/00_commitinfo_data.js +1 -1
  3. package/dist_ts/classes.dcrouter.d.ts +2 -1
  4. package/dist_ts/classes.dcrouter.js +4 -2
  5. package/dist_ts/db/documents/classes.gateway-mail-domain.doc.d.ts +16 -0
  6. package/dist_ts/db/documents/classes.gateway-mail-domain.doc.js +107 -0
  7. package/dist_ts/db/documents/index.d.ts +1 -0
  8. package/dist_ts/db/documents/index.js +2 -1
  9. package/dist_ts/email/classes.gateway-mail-domain.store.d.ts +11 -0
  10. package/dist_ts/email/classes.gateway-mail-domain.store.js +70 -0
  11. package/dist_ts/email/classes.workapp-mail-manager.d.ts +3 -23
  12. package/dist_ts/email/classes.workapp-mail-manager.js +18 -35
  13. package/dist_ts/email/gateway-mail-domain-authority.d.ts +44 -0
  14. package/dist_ts/email/gateway-mail-domain-authority.js +160 -0
  15. package/dist_ts/email/index.d.ts +2 -0
  16. package/dist_ts/email/index.js +3 -1
  17. package/dist_ts/opsserver/handlers/gatewayclient.handler.js +33 -1
  18. package/dist_ts/opsserver/helpers/gateway-client-auth.d.ts +2 -0
  19. package/dist_ts/opsserver/helpers/gateway-client-auth.js +5 -3
  20. package/dist_ts_migrations/index.js +196 -11
  21. package/dist_ts_web/00_commitinfo_data.js +1 -1
  22. package/package.json +2 -2
  23. package/readme.md +1 -1
  24. package/ts/00_commitinfo_data.ts +1 -1
  25. package/ts/classes.dcrouter.ts +3 -1
  26. package/ts/db/documents/classes.gateway-mail-domain.doc.ts +42 -0
  27. package/ts/db/documents/index.ts +1 -0
  28. package/ts/email/classes.gateway-mail-domain.store.ts +89 -0
  29. package/ts/email/classes.workapp-mail-manager.ts +33 -70
  30. package/ts/email/gateway-mail-domain-authority.ts +222 -0
  31. package/ts/email/index.ts +2 -0
  32. package/ts/opsserver/handlers/gatewayclient.handler.ts +43 -1
  33. package/ts/opsserver/helpers/gateway-client-auth.ts +6 -2
  34. package/ts_web/00_commitinfo_data.ts +1 -1
@@ -0,0 +1,107 @@
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
27
+ };
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
34
+ };
35
+ import * as plugins from '../../plugins.js';
36
+ import { DcRouterDb } from '../classes.dcrouter-db.js';
37
+ const getDb = () => DcRouterDb.getInstance().getDb();
38
+ /**
39
+ * Authoritative WorkApp mail identity storage, grouped so one document equals
40
+ * one distinct gateway-client-owned mail domain.
41
+ */
42
+ let GatewayMailDomainDoc = (() => {
43
+ let _classDecorators = [plugins.smartdata.Collection(() => getDb())];
44
+ let _classDescriptor;
45
+ let _classExtraInitializers = [];
46
+ let _classThis;
47
+ let _classSuper = plugins.smartdata.SmartDataDbDoc;
48
+ let _id_decorators;
49
+ let _id_initializers = [];
50
+ let _id_extraInitializers = [];
51
+ let _ownerGatewayClientType_decorators;
52
+ let _ownerGatewayClientType_initializers = [];
53
+ let _ownerGatewayClientType_extraInitializers = [];
54
+ let _ownerGatewayClientId_decorators;
55
+ let _ownerGatewayClientId_initializers = [];
56
+ let _ownerGatewayClientId_extraInitializers = [];
57
+ let _domain_decorators;
58
+ let _domain_initializers = [];
59
+ let _domain_extraInitializers = [];
60
+ let _identities_decorators;
61
+ let _identities_initializers = [];
62
+ let _identities_extraInitializers = [];
63
+ let _createdAt_decorators;
64
+ let _createdAt_initializers = [];
65
+ let _createdAt_extraInitializers = [];
66
+ let _updatedAt_decorators;
67
+ let _updatedAt_initializers = [];
68
+ let _updatedAt_extraInitializers = [];
69
+ var GatewayMailDomainDoc = class extends _classSuper {
70
+ static { _classThis = this; }
71
+ static {
72
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
73
+ _id_decorators = [plugins.smartdata.unI(), plugins.smartdata.svDb()];
74
+ _ownerGatewayClientType_decorators = [plugins.smartdata.index(), plugins.smartdata.svDb()];
75
+ _ownerGatewayClientId_decorators = [plugins.smartdata.index(), plugins.smartdata.svDb()];
76
+ _domain_decorators = [plugins.smartdata.index(), plugins.smartdata.svDb()];
77
+ _identities_decorators = [plugins.smartdata.svDb()];
78
+ _createdAt_decorators = [plugins.smartdata.svDb()];
79
+ _updatedAt_decorators = [plugins.smartdata.svDb()];
80
+ __esDecorate(null, null, _id_decorators, { kind: "field", name: "id", static: false, private: false, access: { has: obj => "id" in obj, get: obj => obj.id, set: (obj, value) => { obj.id = value; } }, metadata: _metadata }, _id_initializers, _id_extraInitializers);
81
+ __esDecorate(null, null, _ownerGatewayClientType_decorators, { kind: "field", name: "ownerGatewayClientType", static: false, private: false, access: { has: obj => "ownerGatewayClientType" in obj, get: obj => obj.ownerGatewayClientType, set: (obj, value) => { obj.ownerGatewayClientType = value; } }, metadata: _metadata }, _ownerGatewayClientType_initializers, _ownerGatewayClientType_extraInitializers);
82
+ __esDecorate(null, null, _ownerGatewayClientId_decorators, { kind: "field", name: "ownerGatewayClientId", static: false, private: false, access: { has: obj => "ownerGatewayClientId" in obj, get: obj => obj.ownerGatewayClientId, set: (obj, value) => { obj.ownerGatewayClientId = value; } }, metadata: _metadata }, _ownerGatewayClientId_initializers, _ownerGatewayClientId_extraInitializers);
83
+ __esDecorate(null, null, _domain_decorators, { kind: "field", name: "domain", static: false, private: false, access: { has: obj => "domain" in obj, get: obj => obj.domain, set: (obj, value) => { obj.domain = value; } }, metadata: _metadata }, _domain_initializers, _domain_extraInitializers);
84
+ __esDecorate(null, null, _identities_decorators, { kind: "field", name: "identities", static: false, private: false, access: { has: obj => "identities" in obj, get: obj => obj.identities, set: (obj, value) => { obj.identities = value; } }, metadata: _metadata }, _identities_initializers, _identities_extraInitializers);
85
+ __esDecorate(null, null, _createdAt_decorators, { kind: "field", name: "createdAt", static: false, private: false, access: { has: obj => "createdAt" in obj, get: obj => obj.createdAt, set: (obj, value) => { obj.createdAt = value; } }, metadata: _metadata }, _createdAt_initializers, _createdAt_extraInitializers);
86
+ __esDecorate(null, null, _updatedAt_decorators, { kind: "field", name: "updatedAt", static: false, private: false, access: { has: obj => "updatedAt" in obj, get: obj => obj.updatedAt, set: (obj, value) => { obj.updatedAt = value; } }, metadata: _metadata }, _updatedAt_initializers, _updatedAt_extraInitializers);
87
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
88
+ GatewayMailDomainDoc = _classThis = _classDescriptor.value;
89
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
90
+ __runInitializers(_classThis, _classExtraInitializers);
91
+ }
92
+ id = __runInitializers(this, _id_initializers, void 0);
93
+ ownerGatewayClientType = (__runInitializers(this, _id_extraInitializers), __runInitializers(this, _ownerGatewayClientType_initializers, void 0));
94
+ ownerGatewayClientId = (__runInitializers(this, _ownerGatewayClientType_extraInitializers), __runInitializers(this, _ownerGatewayClientId_initializers, void 0));
95
+ domain = (__runInitializers(this, _ownerGatewayClientId_extraInitializers), __runInitializers(this, _domain_initializers, void 0));
96
+ identities = (__runInitializers(this, _domain_extraInitializers), __runInitializers(this, _identities_initializers, []));
97
+ createdAt = (__runInitializers(this, _identities_extraInitializers), __runInitializers(this, _createdAt_initializers, void 0));
98
+ updatedAt = (__runInitializers(this, _createdAt_extraInitializers), __runInitializers(this, _updatedAt_initializers, void 0));
99
+ constructor() {
100
+ super(...arguments);
101
+ __runInitializers(this, _updatedAt_extraInitializers);
102
+ }
103
+ };
104
+ return GatewayMailDomainDoc = _classThis;
105
+ })();
106
+ export { GatewayMailDomainDoc };
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5nYXRld2F5LW1haWwtZG9tYWluLmRvYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL2RiL2RvY3VtZW50cy9jbGFzc2VzLmdhdGV3YXktbWFpbC1kb21haW4uZG9jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUl2RCxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7QUFFckQ7OztHQUdHO0lBRVUsb0JBQW9COzRCQURoQyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7OztzQkFDRixPQUFPLENBQUMsU0FBUyxDQUFDLGNBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0NBQXhDLFNBQVEsV0FHekM7Ozs7OEJBQ0UsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFDdkIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7a0RBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQ3pCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO2dEQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUN6QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtrQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFDekIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7c0NBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3FDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtxQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7WUFwQnpCLHdKQUFPLEVBQUUsNkJBQUYsRUFBRSwrRUFBVTtZQUluQixvTkFBTyxzQkFBc0IsNkJBQXRCLHNCQUFzQix1SEFBc0I7WUFJbkQsOE1BQU8sb0JBQW9CLDZCQUFwQixvQkFBb0IsbUhBQVU7WUFJckMsb0tBQU8sTUFBTSw2QkFBTixNQUFNLHVGQUFVO1lBR3ZCLGdMQUFPLFVBQVUsNkJBQVYsVUFBVSwrRkFBb0M7WUFHckQsNktBQU8sU0FBUyw2QkFBVCxTQUFTLDZGQUFVO1lBRzFCLDZLQUFPLFNBQVMsNkJBQVQsU0FBUyw2RkFBVTtZQTNCNUIsNktBNEJDOzs7WUE1QlksdURBQW9COztRQU14QixFQUFFLHFEQUFVO1FBSVosc0JBQXNCLDJIQUFzQjtRQUk1QyxvQkFBb0IsNklBQVU7UUFJOUIsTUFBTSw2SEFBVTtRQUdoQixVQUFVLDBHQUFpQyxFQUFFLEdBQUM7UUFHOUMsU0FBUyxzSEFBVTtRQUduQixTQUFTLHFIQUFVOzs7Ozs7OztTQTNCZixvQkFBb0IifQ==
@@ -26,6 +26,7 @@ export * from './classes.dns-record.doc.js';
26
26
  export * from './classes.dns-authority.doc.js';
27
27
  export * from './classes.acme-config.doc.js';
28
28
  export * from './classes.email-domain.doc.js';
29
+ export * from './classes.gateway-mail-domain.doc.js';
29
30
  export * from './classes.email-server-settings.doc.js';
30
31
  export * from './classes.smtp-account.doc.js';
31
32
  export * from './classes.webpush-binding.doc.js';
@@ -35,6 +35,7 @@ export * from './classes.dns-authority.doc.js';
35
35
  export * from './classes.acme-config.doc.js';
36
36
  // Email domain management
37
37
  export * from './classes.email-domain.doc.js';
38
+ export * from './classes.gateway-mail-domain.doc.js';
38
39
  export * from './classes.email-server-settings.doc.js';
39
40
  export * from './classes.smtp-account.doc.js';
40
41
  // Web Push provider documents
@@ -43,4 +44,4 @@ export * from './classes.webpush-admission.doc.js';
43
44
  export * from './classes.webpush-spool.doc.js';
44
45
  export * from './classes.smartmta-storage.doc.js';
45
46
  export * from './classes.ops-config-event.doc.js';
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9kYi9kb2N1bWVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOEJBQThCO0FBQzlCLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsdUNBQXVDLENBQUM7QUFFdEQsMEJBQTBCO0FBQzFCLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGlDQUFpQyxDQUFDO0FBRWhELHVCQUF1QjtBQUN2QixjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsNkJBQTZCLENBQUM7QUFFNUMsK0JBQStCO0FBQy9CLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLCtCQUErQixDQUFDO0FBRTlDLGtDQUFrQztBQUNsQyxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsOENBQThDLENBQUM7QUFFN0QsMEJBQTBCO0FBQzFCLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxxQ0FBcUMsQ0FBQztBQUVwRCwyQ0FBMkM7QUFDM0MsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUUvQyxpQ0FBaUM7QUFDakMsY0FBYyw4QkFBOEIsQ0FBQztBQUU3QywwQkFBMEI7QUFDMUIsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsK0JBQStCLENBQUM7QUFFOUMsOEJBQThCO0FBQzlCLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxtQ0FBbUMsQ0FBQyJ9
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9kYi9kb2N1bWVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOEJBQThCO0FBQzlCLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsdUNBQXVDLENBQUM7QUFFdEQsMEJBQTBCO0FBQzFCLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGlDQUFpQyxDQUFDO0FBRWhELHVCQUF1QjtBQUN2QixjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsNkJBQTZCLENBQUM7QUFFNUMsK0JBQStCO0FBQy9CLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLCtCQUErQixDQUFDO0FBRTlDLGtDQUFrQztBQUNsQyxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsOENBQThDLENBQUM7QUFFN0QsMEJBQTBCO0FBQzFCLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxxQ0FBcUMsQ0FBQztBQUVwRCwyQ0FBMkM7QUFDM0MsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUUvQyxpQ0FBaUM7QUFDakMsY0FBYyw4QkFBOEIsQ0FBQztBQUU3QywwQkFBMEI7QUFDMUIsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYywrQkFBK0IsQ0FBQztBQUU5Qyw4QkFBOEI7QUFDOUIsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLG1DQUFtQyxDQUFDIn0=
@@ -0,0 +1,11 @@
1
+ import { type IGatewayMailDomainOwner, type IStoredWorkAppMailIdentity } from './gateway-mail-domain-authority.js';
2
+ export interface IGatewayMailDomainStore {
3
+ readAllIdentities(): Promise<IStoredWorkAppMailIdentity[]>;
4
+ writeAllIdentities(identitiesArg: IStoredWorkAppMailIdentity[]): Promise<IStoredWorkAppMailIdentity[]>;
5
+ countDomains(ownerArg: IGatewayMailDomainOwner): Promise<number>;
6
+ }
7
+ export declare class GatewayMailDomainStore implements IGatewayMailDomainStore {
8
+ readAllIdentities(): Promise<IStoredWorkAppMailIdentity[]>;
9
+ writeAllIdentities(identitiesArg: IStoredWorkAppMailIdentity[]): Promise<IStoredWorkAppMailIdentity[]>;
10
+ countDomains(ownerArg: IGatewayMailDomainOwner): Promise<number>;
11
+ }
@@ -0,0 +1,70 @@
1
+ import { DcRouterDb } from '../db/classes.dcrouter-db.js';
2
+ import { GatewayMailDomainDoc } from '../db/documents/classes.gateway-mail-domain.doc.js';
3
+ import { createGatewayMailDomainId, groupGatewayMailIdentities, normalizeGatewayMailDomain, normalizeGatewayMailDomainOwner, } from './gateway-mail-domain-authority.js';
4
+ const validateDocument = (documentArg) => {
5
+ const owner = normalizeGatewayMailDomainOwner({
6
+ gatewayClientType: documentArg.ownerGatewayClientType,
7
+ gatewayClientId: documentArg.ownerGatewayClientId,
8
+ });
9
+ const domain = normalizeGatewayMailDomain(documentArg.domain);
10
+ const expectedId = createGatewayMailDomainId(owner, domain);
11
+ if (documentArg.id !== expectedId) {
12
+ throw new Error(`GatewayMailDomainDoc has a non-canonical id: ${documentArg.id}`);
13
+ }
14
+ const groups = groupGatewayMailIdentities(documentArg.identities || []);
15
+ if (groups.length !== 1 || groups[0].id !== expectedId) {
16
+ throw new Error(`GatewayMailDomainDoc identities do not match owner/domain: ${documentArg.id}`);
17
+ }
18
+ return groups[0].identities;
19
+ };
20
+ export class GatewayMailDomainStore {
21
+ async readAllIdentities() {
22
+ const documents = await GatewayMailDomainDoc.getInstances({});
23
+ const identities = documents.flatMap((documentArg) => validateDocument(documentArg));
24
+ return groupGatewayMailIdentities(identities).flatMap((groupArg) => groupArg.identities);
25
+ }
26
+ async writeAllIdentities(identitiesArg) {
27
+ const desiredGroups = groupGatewayMailIdentities(identitiesArg);
28
+ const desiredById = new Map(desiredGroups.map((groupArg) => [groupArg.id, groupArg]));
29
+ const db = DcRouterDb.getInstance().getDb();
30
+ const session = db.startSession();
31
+ try {
32
+ await session.withTransaction(async () => {
33
+ const existingDocuments = await GatewayMailDomainDoc.getInstances({}, { session });
34
+ const existingById = new Map(existingDocuments.map((documentArg) => {
35
+ validateDocument(documentArg);
36
+ return [documentArg.id, documentArg];
37
+ }));
38
+ const now = Date.now();
39
+ for (const group of desiredGroups) {
40
+ const document = existingById.get(group.id) || new GatewayMailDomainDoc();
41
+ document.id = group.id;
42
+ document.ownerGatewayClientType = group.gatewayClientType;
43
+ document.ownerGatewayClientId = group.gatewayClientId;
44
+ document.domain = group.domain;
45
+ document.identities = group.identities;
46
+ document.createdAt = document.createdAt || now;
47
+ document.updatedAt = now;
48
+ await document.save({ session });
49
+ }
50
+ for (const existingDocument of existingDocuments) {
51
+ if (!desiredById.has(existingDocument.id)) {
52
+ await existingDocument.delete({ session });
53
+ }
54
+ }
55
+ });
56
+ }
57
+ finally {
58
+ await session.endSession();
59
+ }
60
+ return await this.readAllIdentities();
61
+ }
62
+ async countDomains(ownerArg) {
63
+ const owner = normalizeGatewayMailDomainOwner(ownerArg);
64
+ return await GatewayMailDomainDoc.getCount({
65
+ ownerGatewayClientType: owner.gatewayClientType,
66
+ ownerGatewayClientId: owner.gatewayClientId,
67
+ });
68
+ }
69
+ }
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5nYXRld2F5LW1haWwtZG9tYWluLnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZW1haWwvY2xhc3Nlcy5nYXRld2F5LW1haWwtZG9tYWluLnN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMxRixPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLDBCQUEwQixFQUMxQiwwQkFBMEIsRUFDMUIsK0JBQStCLEdBR2hDLE1BQU0sb0NBQW9DLENBQUM7QUFRNUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFdBQWlDLEVBQWdDLEVBQUU7SUFDM0YsTUFBTSxLQUFLLEdBQUcsK0JBQStCLENBQUM7UUFDNUMsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLHNCQUFzQjtRQUNyRCxlQUFlLEVBQUUsV0FBVyxDQUFDLG9CQUFvQjtLQUNsRCxDQUFDLENBQUM7SUFDSCxNQUFNLE1BQU0sR0FBRywwQkFBMEIsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUQsTUFBTSxVQUFVLEdBQUcseUJBQXlCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVELElBQUksV0FBVyxDQUFDLEVBQUUsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsMEJBQTBCLENBQUMsV0FBVyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN4RSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDdkQs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
@@ -4,6 +4,7 @@ import * as plugins from '../plugins.js';
4
4
  import { CachedEmail } from '../db/index.js';
5
5
  import type { DcRouter } from '../classes.dcrouter.js';
6
6
  import type * as interfaces from '../../dist_ts_interfaces/index.js';
7
+ import { type IStoredWorkAppMailIdentity } from './gateway-mail-domain-authority.js';
7
8
  type TSyncRequest = {
8
9
  ownership: interfaces.data.IWorkAppMailOwnership;
9
10
  localPart: string;
@@ -26,27 +27,6 @@ type TMailEnqueueResponse = plugins.servezoneInterfaces.requests.mail.IReq_Enque
26
27
  type TMailDeliveryStatusResponse = plugins.servezoneInterfaces.requests.mail.IReq_GetMailDeliveryStatus['response'];
27
28
  type TMailEndpointRegistrationResponse = plugins.servezoneInterfaces.requests.mail.IReq_RegisterServiceMailEndpoint['response'];
28
29
  type TWorkAppMailBinding = plugins.servezoneInterfaces.data.IWorkAppMailBinding;
29
- interface IStoredWorkAppMailIdentity {
30
- id: string;
31
- externalKey: string;
32
- ownership: interfaces.data.IWorkAppMailOwnership;
33
- address: string;
34
- localPart: string;
35
- domain: string;
36
- enabled: boolean;
37
- displayName?: string;
38
- inbound?: interfaces.data.IWorkAppMailInboundRoute;
39
- inboundTarget?: plugins.servezoneInterfaces.data.IMailInboundTarget;
40
- smtp: {
41
- enabled: boolean;
42
- username: string;
43
- };
44
- createdAt: number;
45
- updatedAt: number;
46
- createdBy: string;
47
- smtpPassword: string;
48
- smtpLastRotatedAt?: number;
49
- }
50
30
  /**
51
31
  * WorkApp-generated routes and SMTP users contributed to the composed email
52
32
  * runtime config. Consumed by SmtpAccountManager, the single owner of the
@@ -65,8 +45,8 @@ export declare function isWorkAppManagedMailRouteName(routeName: string): boolea
65
45
  export declare function isWorkAppManagedSmtpUsername(username: string): boolean;
66
46
  export declare class WorkAppMailManager {
67
47
  private dcRouterRef;
68
- private readonly storageKey;
69
48
  private readonly emailValidator;
49
+ private readonly gatewayMailDomainStore;
70
50
  private identityMutationPromise;
71
51
  constructor(dcRouterRef: DcRouter);
72
52
  listMailIdentities(ownership?: Partial<interfaces.data.IWorkAppMailOwnership>): Promise<interfaces.data.IWorkAppMailIdentity[]>;
@@ -79,6 +59,7 @@ export declare class WorkAppMailManager {
79
59
  address?: string;
80
60
  }): Promise<TMailAddressBinding[]>;
81
61
  listWorkAppMailBindings(owner?: Partial<TMailResourceOwner>): Promise<TWorkAppMailBinding[]>;
62
+ countMailDomains(ownerArg: Pick<TMailResourceOwner, 'gatewayClientType' | 'gatewayClientId'>): Promise<number>;
82
63
  syncMailAddressBinding(binding: TMailAddressBindingSync, createdBy: string): Promise<TMailAddressBindingSyncResponse>;
83
64
  rotateMailCredential(credentialId: string, createdBy: string, owner?: Partial<TMailResourceOwner>): Promise<TMailCredentialRotateResponse>;
84
65
  private rotateMailCredentialInner;
@@ -105,7 +86,6 @@ export declare class WorkAppMailManager {
105
86
  applyStoredIdentitiesToRuntime(identities?: IStoredWorkAppMailIdentity[] | undefined): Promise<void>;
106
87
  private readStoredIdentities;
107
88
  private writeStoredIdentities;
108
- private getRequiredStorageManager;
109
89
  private buildInboundRoute;
110
90
  private buildOutboundRoute;
111
91
  private ensureEmailDomainConfigured;