@serve.zone/dcrouter 17.2.3 → 17.3.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.
- package/deno.json +1 -1
- package/dist_serve/bundle.js +2219 -1887
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.dcrouter.d.ts +4 -1
- package/dist_ts/classes.dcrouter.js +42 -2
- package/dist_ts/config/classes.api-token-manager.d.ts +20 -2
- package/dist_ts/config/classes.api-token-manager.js +201 -6
- package/dist_ts/config/classes.gateway-client-manager.d.ts +36 -2
- package/dist_ts/config/classes.gateway-client-manager.js +391 -27
- package/dist_ts/db/documents/classes.api-token.doc.d.ts +2 -1
- package/dist_ts/db/documents/classes.api-token.doc.js +8 -2
- package/dist_ts/db/documents/classes.gateway-client.doc.d.ts +25 -0
- package/dist_ts/db/documents/classes.gateway-client.doc.js +73 -2
- package/dist_ts/db/documents/classes.ops-config-event.doc.d.ts +55 -0
- package/dist_ts/db/documents/classes.ops-config-event.doc.js +296 -0
- package/dist_ts/db/documents/index.d.ts +1 -0
- package/dist_ts/db/documents/index.js +2 -1
- package/dist_ts/dns/classes.gateway-route-dns-reconciler.d.ts +52 -0
- package/dist_ts/dns/classes.gateway-route-dns-reconciler.js +609 -0
- package/dist_ts/dns/index.d.ts +1 -0
- package/dist_ts/dns/index.js +2 -1
- package/dist_ts/dns/manager.dns.d.ts +19 -0
- package/dist_ts/dns/manager.dns.js +25 -1
- package/dist_ts/monitoring/classes.ops-event-manager.d.ts +32 -0
- package/dist_ts/monitoring/classes.ops-event-manager.js +71 -0
- package/dist_ts/monitoring/index.d.ts +1 -0
- package/dist_ts/monitoring/index.js +2 -1
- package/dist_ts/opsserver/classes.opsserver.d.ts +1 -0
- package/dist_ts/opsserver/classes.opsserver.js +3 -1
- package/dist_ts/opsserver/handlers/certificate.handler.d.ts +1 -0
- package/dist_ts/opsserver/handlers/certificate.handler.js +35 -5
- package/dist_ts/opsserver/handlers/config-event.handler.d.ts +12 -0
- package/dist_ts/opsserver/handlers/config-event.handler.js +47 -0
- package/dist_ts/opsserver/handlers/dns-record.handler.d.ts +1 -0
- package/dist_ts/opsserver/handlers/dns-record.handler.js +82 -3
- package/dist_ts/opsserver/handlers/gatewayclient.handler.d.ts +9 -1
- package/dist_ts/opsserver/handlers/gatewayclient.handler.js +714 -162
- package/dist_ts/opsserver/handlers/index.d.ts +1 -0
- package/dist_ts/opsserver/handlers/index.js +2 -1
- package/dist_ts/opsserver/helpers/gateway-client-auth.d.ts +25 -0
- package/dist_ts/opsserver/helpers/gateway-client-auth.js +168 -0
- package/dist_ts/plugins.d.ts +2 -1
- package/dist_ts/plugins.js +3 -2
- package/dist_ts_apiclient/classes.gatewayclient.d.ts +13 -1
- package/dist_ts_apiclient/classes.gatewayclient.js +18 -2
- package/dist_ts_interfaces/data/config-events.d.ts +34 -0
- package/dist_ts_interfaces/data/config-events.js +8 -0
- package/dist_ts_interfaces/data/index.d.ts +1 -0
- package/dist_ts_interfaces/data/index.js +2 -1
- package/dist_ts_interfaces/data/route-management.d.ts +28 -1
- package/dist_ts_interfaces/data/route-management.js +3 -1
- package/dist_ts_interfaces/data/workhoster.d.ts +1 -0
- package/dist_ts_interfaces/requests/config-events.d.ts +35 -0
- package/dist_ts_interfaces/requests/config-events.js +4 -0
- package/dist_ts_interfaces/requests/index.d.ts +1 -0
- package/dist_ts_interfaces/requests/index.js +2 -1
- package/dist_ts_interfaces/requests/realtime.d.ts +1 -1
- package/dist_ts_interfaces/requests/realtime.js +2 -1
- package/dist_ts_migrations/index.js +148 -9
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/appstate/config-events.d.ts +19 -0
- package/dist_ts_web/appstate/config-events.js +68 -0
- package/dist_ts_web/appstate/runtime.js +7 -1
- package/dist_ts_web/appstate.d.ts +1 -0
- package/dist_ts_web/appstate.js +2 -1
- package/dist_ts_web/elements/ops-platform-events.d.ts +21 -0
- package/dist_ts_web/elements/ops-platform-events.js +361 -0
- package/dist_ts_web/elements/ops-view-logs.d.ts +4 -0
- package/dist_ts_web/elements/ops-view-logs.js +96 -9
- package/package.json +3 -3
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.dcrouter.ts +48 -1
- package/ts/config/classes.api-token-manager.ts +237 -4
- package/ts/config/classes.gateway-client-manager.ts +463 -19
- package/ts/db/documents/classes.api-token.doc.ts +8 -1
- package/ts/db/documents/classes.gateway-client.doc.ts +86 -0
- package/ts/db/documents/classes.ops-config-event.doc.ts +257 -0
- package/ts/db/documents/index.ts +1 -0
- package/ts/dns/classes.gateway-route-dns-reconciler.ts +801 -0
- package/ts/dns/index.ts +1 -0
- package/ts/dns/manager.dns.ts +36 -0
- package/ts/monitoring/classes.ops-event-manager.ts +99 -0
- package/ts/monitoring/index.ts +2 -1
- package/ts/opsserver/classes.opsserver.ts +2 -0
- package/ts/opsserver/handlers/certificate.handler.ts +51 -4
- package/ts/opsserver/handlers/config-event.handler.ts +62 -0
- package/ts/opsserver/handlers/dns-record.handler.ts +101 -2
- package/ts/opsserver/handlers/gatewayclient.handler.ts +804 -136
- package/ts/opsserver/handlers/index.ts +1 -0
- package/ts/opsserver/helpers/gateway-client-auth.ts +198 -0
- package/ts/plugins.ts +2 -0
- package/ts_apiclient/classes.gatewayclient.ts +45 -0
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/appstate/config-events.ts +98 -0
- package/ts_web/appstate/runtime.ts +8 -1
- package/ts_web/appstate.ts +1 -0
- package/ts_web/elements/ops-platform-events.ts +315 -0
- package/ts_web/elements/ops-view-logs.ts +84 -7
|
@@ -65,6 +65,21 @@ let GatewayClientDoc = (() => {
|
|
|
65
65
|
let _enabled_decorators;
|
|
66
66
|
let _enabled_initializers = [];
|
|
67
67
|
let _enabled_extraInitializers = [];
|
|
68
|
+
let _policyGeneration_decorators;
|
|
69
|
+
let _policyGeneration_initializers = [];
|
|
70
|
+
let _policyGeneration_extraInitializers = [];
|
|
71
|
+
let _credentialSequence_decorators;
|
|
72
|
+
let _credentialSequence_initializers = [];
|
|
73
|
+
let _credentialSequence_extraInitializers = [];
|
|
74
|
+
let _activeCredentialSequence_decorators;
|
|
75
|
+
let _activeCredentialSequence_initializers = [];
|
|
76
|
+
let _activeCredentialSequence_extraInitializers = [];
|
|
77
|
+
let _mutationRevision_decorators;
|
|
78
|
+
let _mutationRevision_initializers = [];
|
|
79
|
+
let _mutationRevision_extraInitializers = [];
|
|
80
|
+
let _pendingProvisioning_decorators;
|
|
81
|
+
let _pendingProvisioning_initializers = [];
|
|
82
|
+
let _pendingProvisioning_extraInitializers = [];
|
|
68
83
|
let _createdAt_decorators;
|
|
69
84
|
let _createdAt_initializers = [];
|
|
70
85
|
let _createdAt_extraInitializers = [];
|
|
@@ -86,6 +101,11 @@ let GatewayClientDoc = (() => {
|
|
|
86
101
|
_allowedRouteTargets_decorators = [plugins.smartdata.svDb()];
|
|
87
102
|
_capabilities_decorators = [plugins.smartdata.svDb()];
|
|
88
103
|
_enabled_decorators = [plugins.smartdata.svDb()];
|
|
104
|
+
_policyGeneration_decorators = [plugins.smartdata.svDb()];
|
|
105
|
+
_credentialSequence_decorators = [plugins.smartdata.svDb()];
|
|
106
|
+
_activeCredentialSequence_decorators = [plugins.smartdata.svDb()];
|
|
107
|
+
_mutationRevision_decorators = [plugins.smartdata.svDb()];
|
|
108
|
+
_pendingProvisioning_decorators = [plugins.smartdata.svDb()];
|
|
89
109
|
_createdAt_decorators = [plugins.smartdata.svDb()];
|
|
90
110
|
_updatedAt_decorators = [plugins.smartdata.svDb()];
|
|
91
111
|
_createdBy_decorators = [plugins.smartdata.svDb()];
|
|
@@ -97,6 +117,11 @@ let GatewayClientDoc = (() => {
|
|
|
97
117
|
__esDecorate(null, null, _allowedRouteTargets_decorators, { kind: "field", name: "allowedRouteTargets", static: false, private: false, access: { has: obj => "allowedRouteTargets" in obj, get: obj => obj.allowedRouteTargets, set: (obj, value) => { obj.allowedRouteTargets = value; } }, metadata: _metadata }, _allowedRouteTargets_initializers, _allowedRouteTargets_extraInitializers);
|
|
98
118
|
__esDecorate(null, null, _capabilities_decorators, { kind: "field", name: "capabilities", static: false, private: false, access: { has: obj => "capabilities" in obj, get: obj => obj.capabilities, set: (obj, value) => { obj.capabilities = value; } }, metadata: _metadata }, _capabilities_initializers, _capabilities_extraInitializers);
|
|
99
119
|
__esDecorate(null, null, _enabled_decorators, { kind: "field", name: "enabled", static: false, private: false, access: { has: obj => "enabled" in obj, get: obj => obj.enabled, set: (obj, value) => { obj.enabled = value; } }, metadata: _metadata }, _enabled_initializers, _enabled_extraInitializers);
|
|
120
|
+
__esDecorate(null, null, _policyGeneration_decorators, { kind: "field", name: "policyGeneration", static: false, private: false, access: { has: obj => "policyGeneration" in obj, get: obj => obj.policyGeneration, set: (obj, value) => { obj.policyGeneration = value; } }, metadata: _metadata }, _policyGeneration_initializers, _policyGeneration_extraInitializers);
|
|
121
|
+
__esDecorate(null, null, _credentialSequence_decorators, { kind: "field", name: "credentialSequence", static: false, private: false, access: { has: obj => "credentialSequence" in obj, get: obj => obj.credentialSequence, set: (obj, value) => { obj.credentialSequence = value; } }, metadata: _metadata }, _credentialSequence_initializers, _credentialSequence_extraInitializers);
|
|
122
|
+
__esDecorate(null, null, _activeCredentialSequence_decorators, { kind: "field", name: "activeCredentialSequence", static: false, private: false, access: { has: obj => "activeCredentialSequence" in obj, get: obj => obj.activeCredentialSequence, set: (obj, value) => { obj.activeCredentialSequence = value; } }, metadata: _metadata }, _activeCredentialSequence_initializers, _activeCredentialSequence_extraInitializers);
|
|
123
|
+
__esDecorate(null, null, _mutationRevision_decorators, { kind: "field", name: "mutationRevision", static: false, private: false, access: { has: obj => "mutationRevision" in obj, get: obj => obj.mutationRevision, set: (obj, value) => { obj.mutationRevision = value; } }, metadata: _metadata }, _mutationRevision_initializers, _mutationRevision_extraInitializers);
|
|
124
|
+
__esDecorate(null, null, _pendingProvisioning_decorators, { kind: "field", name: "pendingProvisioning", static: false, private: false, access: { has: obj => "pendingProvisioning" in obj, get: obj => obj.pendingProvisioning, set: (obj, value) => { obj.pendingProvisioning = value; } }, metadata: _metadata }, _pendingProvisioning_initializers, _pendingProvisioning_extraInitializers);
|
|
100
125
|
__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);
|
|
101
126
|
__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);
|
|
102
127
|
__esDecorate(null, null, _createdBy_decorators, { kind: "field", name: "createdBy", static: false, private: false, access: { has: obj => "createdBy" in obj, get: obj => obj.createdBy, set: (obj, value) => { obj.createdBy = value; } }, metadata: _metadata }, _createdBy_initializers, _createdBy_extraInitializers);
|
|
@@ -113,7 +138,14 @@ let GatewayClientDoc = (() => {
|
|
|
113
138
|
allowedRouteTargets = (__runInitializers(this, _hostnamePatterns_extraInitializers), __runInitializers(this, _allowedRouteTargets_initializers, []));
|
|
114
139
|
capabilities = (__runInitializers(this, _allowedRouteTargets_extraInitializers), __runInitializers(this, _capabilities_initializers, {}));
|
|
115
140
|
enabled = (__runInitializers(this, _capabilities_extraInitializers), __runInitializers(this, _enabled_initializers, true));
|
|
116
|
-
|
|
141
|
+
policyGeneration = (__runInitializers(this, _enabled_extraInitializers), __runInitializers(this, _policyGeneration_initializers, 1));
|
|
142
|
+
credentialSequence = (__runInitializers(this, _policyGeneration_extraInitializers), __runInitializers(this, _credentialSequence_initializers, 0));
|
|
143
|
+
/** Exact provisioned credential sequence authorized for the active policy. */
|
|
144
|
+
activeCredentialSequence = (__runInitializers(this, _credentialSequence_extraInitializers), __runInitializers(this, _activeCredentialSequence_initializers, 0));
|
|
145
|
+
/** Monotonic compare-and-set authority for every mutable client field. */
|
|
146
|
+
mutationRevision = (__runInitializers(this, _activeCredentialSequence_extraInitializers), __runInitializers(this, _mutationRevision_initializers, 0));
|
|
147
|
+
pendingProvisioning = (__runInitializers(this, _mutationRevision_extraInitializers), __runInitializers(this, _pendingProvisioning_initializers, null));
|
|
148
|
+
createdAt = (__runInitializers(this, _pendingProvisioning_extraInitializers), __runInitializers(this, _createdAt_initializers, void 0));
|
|
117
149
|
updatedAt = (__runInitializers(this, _createdAt_extraInitializers), __runInitializers(this, _updatedAt_initializers, void 0));
|
|
118
150
|
createdBy = (__runInitializers(this, _updatedAt_extraInitializers), __runInitializers(this, _createdBy_initializers, void 0));
|
|
119
151
|
constructor() {
|
|
@@ -123,6 +155,45 @@ let GatewayClientDoc = (() => {
|
|
|
123
155
|
static async findById(id) {
|
|
124
156
|
return await GatewayClientDoc.getInstance({ id });
|
|
125
157
|
}
|
|
158
|
+
static async getNativeCollection() {
|
|
159
|
+
const smartdataCollection = GatewayClientDoc.collection;
|
|
160
|
+
await smartdataCollection.init();
|
|
161
|
+
return smartdataCollection.mongoDbCollection;
|
|
162
|
+
}
|
|
163
|
+
static buildRevisionSelector(idArg, revisionArg) {
|
|
164
|
+
if (revisionArg === 0) {
|
|
165
|
+
return {
|
|
166
|
+
id: idArg,
|
|
167
|
+
$or: [
|
|
168
|
+
{ mutationRevision: 0 },
|
|
169
|
+
{ mutationRevision: { $exists: false } },
|
|
170
|
+
],
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
return { id: idArg, mutationRevision: revisionArg };
|
|
174
|
+
}
|
|
175
|
+
static async compareAndSet(idArg, expectedRevisionArg, setArg, unsetArg = []) {
|
|
176
|
+
const collection = await GatewayClientDoc.getNativeCollection();
|
|
177
|
+
const update = {
|
|
178
|
+
$set: {
|
|
179
|
+
...setArg,
|
|
180
|
+
mutationRevision: expectedRevisionArg + 1,
|
|
181
|
+
_updatedAt: new Date().toISOString(),
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
if (unsetArg.length > 0) {
|
|
185
|
+
update.$unset = Object.fromEntries(unsetArg.map((fieldArg) => [fieldArg, '']));
|
|
186
|
+
}
|
|
187
|
+
const result = await collection.updateOne(GatewayClientDoc.buildRevisionSelector(idArg, expectedRevisionArg), update);
|
|
188
|
+
if (result.matchedCount !== 1)
|
|
189
|
+
return null;
|
|
190
|
+
return await GatewayClientDoc.findById(idArg);
|
|
191
|
+
}
|
|
192
|
+
static async deleteIfRevision(idArg, expectedRevisionArg) {
|
|
193
|
+
const collection = await GatewayClientDoc.getNativeCollection();
|
|
194
|
+
const result = await collection.deleteOne(GatewayClientDoc.buildRevisionSelector(idArg, expectedRevisionArg));
|
|
195
|
+
return result.deletedCount === 1;
|
|
196
|
+
}
|
|
126
197
|
static async findAll() {
|
|
127
198
|
return await GatewayClientDoc.getInstances({});
|
|
128
199
|
}
|
|
@@ -130,4 +201,4 @@ let GatewayClientDoc = (() => {
|
|
|
130
201
|
return GatewayClientDoc = _classThis;
|
|
131
202
|
})();
|
|
132
203
|
export { GatewayClientDoc };
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
204
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5nYXRld2F5LWNsaWVudC5kb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9kYi9kb2N1bWVudHMvY2xhc3Nlcy5nYXRld2F5LWNsaWVudC5kb2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBa0J2RCxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7SUFHeEMsZ0JBQWdCOzRCQUQ1QixPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7OztzQkFDTixPQUFPLENBQUMsU0FBUyxDQUFDLGNBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Z0NBQXhDLFNBQVEsV0FBb0U7Ozs7OEJBQ3ZHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQ3ZCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO2dDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7dUNBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFOzRDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTsrQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7d0NBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO21DQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTs0Q0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJ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
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
import type { IOpsConfigEvent, IOpsConfigEventCursor, IOpsConfigEventContext, TOpsConfigEventSeverity } from '../../../dist_ts_interfaces/data/config-events.js';
|
|
3
|
+
export interface IOpsConfigEventFilter {
|
|
4
|
+
acknowledged?: boolean;
|
|
5
|
+
severity?: TOpsConfigEventSeverity;
|
|
6
|
+
category?: string;
|
|
7
|
+
limit?: number;
|
|
8
|
+
cursor?: IOpsConfigEventCursor;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Durable operator-facing platform configuration event (see
|
|
12
|
+
* ts_interfaces/data/config-events.ts). Unacknowledged events persist
|
|
13
|
+
* indefinitely; acknowledged events are pruned after a retention window.
|
|
14
|
+
*/
|
|
15
|
+
export declare class OpsConfigEventDoc extends plugins.smartdata.SmartDataDbDoc<OpsConfigEventDoc, OpsConfigEventDoc> implements IOpsConfigEvent {
|
|
16
|
+
id: string;
|
|
17
|
+
severity: TOpsConfigEventSeverity;
|
|
18
|
+
category: string;
|
|
19
|
+
title: string;
|
|
20
|
+
detail: string;
|
|
21
|
+
context: IOpsConfigEventContext;
|
|
22
|
+
createdAt: number;
|
|
23
|
+
acknowledgedBy?: string;
|
|
24
|
+
acknowledgedAt?: number;
|
|
25
|
+
/** Sparse uniqueness authority for the current open occurrence. */
|
|
26
|
+
openDedupeKey?: string;
|
|
27
|
+
constructor();
|
|
28
|
+
toApiObject(): IOpsConfigEvent;
|
|
29
|
+
createSavableObject(): Promise<OpsConfigEventDoc>;
|
|
30
|
+
private static getNativeCollection;
|
|
31
|
+
private static hydrate;
|
|
32
|
+
static upsertOpenEvent(optionsArg: {
|
|
33
|
+
id: string;
|
|
34
|
+
openDedupeKey: string;
|
|
35
|
+
severity: TOpsConfigEventSeverity;
|
|
36
|
+
category: string;
|
|
37
|
+
title: string;
|
|
38
|
+
detail: string;
|
|
39
|
+
context: IOpsConfigEventContext;
|
|
40
|
+
createdAt: number;
|
|
41
|
+
}): Promise<{
|
|
42
|
+
event: OpsConfigEventDoc;
|
|
43
|
+
created: boolean;
|
|
44
|
+
}>;
|
|
45
|
+
static findFiltered(filter?: IOpsConfigEventFilter): Promise<{
|
|
46
|
+
events: OpsConfigEventDoc[];
|
|
47
|
+
total: number;
|
|
48
|
+
nextCursor?: IOpsConfigEventCursor;
|
|
49
|
+
}>;
|
|
50
|
+
static countUnacknowledged(): Promise<number>;
|
|
51
|
+
/** Acknowledge the given event ids; returns how many were newly acknowledged. */
|
|
52
|
+
static acknowledgeByIds(ids: string[], userId: string): Promise<number>;
|
|
53
|
+
/** Delete acknowledged events older than the retention window. */
|
|
54
|
+
static pruneAcknowledged(maxAgeMs: number): Promise<number>;
|
|
55
|
+
}
|
|
@@ -0,0 +1,296 @@
|
|
|
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
|
+
* Durable operator-facing platform configuration event (see
|
|
40
|
+
* ts_interfaces/data/config-events.ts). Unacknowledged events persist
|
|
41
|
+
* indefinitely; acknowledged events are pruned after a retention window.
|
|
42
|
+
*/
|
|
43
|
+
let OpsConfigEventDoc = (() => {
|
|
44
|
+
let _classDecorators = [plugins.smartdata.Collection(() => getDb())];
|
|
45
|
+
let _classDescriptor;
|
|
46
|
+
let _classExtraInitializers = [];
|
|
47
|
+
let _classThis;
|
|
48
|
+
let _classSuper = plugins.smartdata.SmartDataDbDoc;
|
|
49
|
+
let _id_decorators;
|
|
50
|
+
let _id_initializers = [];
|
|
51
|
+
let _id_extraInitializers = [];
|
|
52
|
+
let _severity_decorators;
|
|
53
|
+
let _severity_initializers = [];
|
|
54
|
+
let _severity_extraInitializers = [];
|
|
55
|
+
let _category_decorators;
|
|
56
|
+
let _category_initializers = [];
|
|
57
|
+
let _category_extraInitializers = [];
|
|
58
|
+
let _title_decorators;
|
|
59
|
+
let _title_initializers = [];
|
|
60
|
+
let _title_extraInitializers = [];
|
|
61
|
+
let _detail_decorators;
|
|
62
|
+
let _detail_initializers = [];
|
|
63
|
+
let _detail_extraInitializers = [];
|
|
64
|
+
let _context_decorators;
|
|
65
|
+
let _context_initializers = [];
|
|
66
|
+
let _context_extraInitializers = [];
|
|
67
|
+
let _createdAt_decorators;
|
|
68
|
+
let _createdAt_initializers = [];
|
|
69
|
+
let _createdAt_extraInitializers = [];
|
|
70
|
+
let _acknowledgedBy_decorators;
|
|
71
|
+
let _acknowledgedBy_initializers = [];
|
|
72
|
+
let _acknowledgedBy_extraInitializers = [];
|
|
73
|
+
let _acknowledgedAt_decorators;
|
|
74
|
+
let _acknowledgedAt_initializers = [];
|
|
75
|
+
let _acknowledgedAt_extraInitializers = [];
|
|
76
|
+
let _openDedupeKey_decorators;
|
|
77
|
+
let _openDedupeKey_initializers = [];
|
|
78
|
+
let _openDedupeKey_extraInitializers = [];
|
|
79
|
+
var OpsConfigEventDoc = class extends _classSuper {
|
|
80
|
+
static { _classThis = this; }
|
|
81
|
+
static {
|
|
82
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
83
|
+
_id_decorators = [plugins.smartdata.unI(), plugins.smartdata.svDb()];
|
|
84
|
+
_severity_decorators = [plugins.smartdata.index(), plugins.smartdata.svDb()];
|
|
85
|
+
_category_decorators = [plugins.smartdata.index(), plugins.smartdata.svDb()];
|
|
86
|
+
_title_decorators = [plugins.smartdata.svDb()];
|
|
87
|
+
_detail_decorators = [plugins.smartdata.svDb()];
|
|
88
|
+
_context_decorators = [plugins.smartdata.svDb()];
|
|
89
|
+
_createdAt_decorators = [plugins.smartdata.index(), plugins.smartdata.svDb()];
|
|
90
|
+
_acknowledgedBy_decorators = [plugins.smartdata.svDb()];
|
|
91
|
+
_acknowledgedAt_decorators = [plugins.smartdata.index(), plugins.smartdata.svDb()];
|
|
92
|
+
_openDedupeKey_decorators = [plugins.smartdata.index({ unique: true, sparse: true }), plugins.smartdata.svDb()];
|
|
93
|
+
__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);
|
|
94
|
+
__esDecorate(null, null, _severity_decorators, { kind: "field", name: "severity", static: false, private: false, access: { has: obj => "severity" in obj, get: obj => obj.severity, set: (obj, value) => { obj.severity = value; } }, metadata: _metadata }, _severity_initializers, _severity_extraInitializers);
|
|
95
|
+
__esDecorate(null, null, _category_decorators, { kind: "field", name: "category", static: false, private: false, access: { has: obj => "category" in obj, get: obj => obj.category, set: (obj, value) => { obj.category = value; } }, metadata: _metadata }, _category_initializers, _category_extraInitializers);
|
|
96
|
+
__esDecorate(null, null, _title_decorators, { kind: "field", name: "title", static: false, private: false, access: { has: obj => "title" in obj, get: obj => obj.title, set: (obj, value) => { obj.title = value; } }, metadata: _metadata }, _title_initializers, _title_extraInitializers);
|
|
97
|
+
__esDecorate(null, null, _detail_decorators, { kind: "field", name: "detail", static: false, private: false, access: { has: obj => "detail" in obj, get: obj => obj.detail, set: (obj, value) => { obj.detail = value; } }, metadata: _metadata }, _detail_initializers, _detail_extraInitializers);
|
|
98
|
+
__esDecorate(null, null, _context_decorators, { kind: "field", name: "context", static: false, private: false, access: { has: obj => "context" in obj, get: obj => obj.context, set: (obj, value) => { obj.context = value; } }, metadata: _metadata }, _context_initializers, _context_extraInitializers);
|
|
99
|
+
__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);
|
|
100
|
+
__esDecorate(null, null, _acknowledgedBy_decorators, { kind: "field", name: "acknowledgedBy", static: false, private: false, access: { has: obj => "acknowledgedBy" in obj, get: obj => obj.acknowledgedBy, set: (obj, value) => { obj.acknowledgedBy = value; } }, metadata: _metadata }, _acknowledgedBy_initializers, _acknowledgedBy_extraInitializers);
|
|
101
|
+
__esDecorate(null, null, _acknowledgedAt_decorators, { kind: "field", name: "acknowledgedAt", static: false, private: false, access: { has: obj => "acknowledgedAt" in obj, get: obj => obj.acknowledgedAt, set: (obj, value) => { obj.acknowledgedAt = value; } }, metadata: _metadata }, _acknowledgedAt_initializers, _acknowledgedAt_extraInitializers);
|
|
102
|
+
__esDecorate(null, null, _openDedupeKey_decorators, { kind: "field", name: "openDedupeKey", static: false, private: false, access: { has: obj => "openDedupeKey" in obj, get: obj => obj.openDedupeKey, set: (obj, value) => { obj.openDedupeKey = value; } }, metadata: _metadata }, _openDedupeKey_initializers, _openDedupeKey_extraInitializers);
|
|
103
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
104
|
+
OpsConfigEventDoc = _classThis = _classDescriptor.value;
|
|
105
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
106
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
107
|
+
}
|
|
108
|
+
id = __runInitializers(this, _id_initializers, void 0);
|
|
109
|
+
severity = (__runInitializers(this, _id_extraInitializers), __runInitializers(this, _severity_initializers, void 0));
|
|
110
|
+
category = (__runInitializers(this, _severity_extraInitializers), __runInitializers(this, _category_initializers, void 0));
|
|
111
|
+
title = (__runInitializers(this, _category_extraInitializers), __runInitializers(this, _title_initializers, void 0));
|
|
112
|
+
detail = (__runInitializers(this, _title_extraInitializers), __runInitializers(this, _detail_initializers, void 0));
|
|
113
|
+
context = (__runInitializers(this, _detail_extraInitializers), __runInitializers(this, _context_initializers, {}));
|
|
114
|
+
createdAt = (__runInitializers(this, _context_extraInitializers), __runInitializers(this, _createdAt_initializers, Date.now()));
|
|
115
|
+
acknowledgedBy = (__runInitializers(this, _createdAt_extraInitializers), __runInitializers(this, _acknowledgedBy_initializers, void 0));
|
|
116
|
+
acknowledgedAt = (__runInitializers(this, _acknowledgedBy_extraInitializers), __runInitializers(this, _acknowledgedAt_initializers, void 0));
|
|
117
|
+
/** Sparse uniqueness authority for the current open occurrence. */
|
|
118
|
+
openDedupeKey = (__runInitializers(this, _acknowledgedAt_extraInitializers), __runInitializers(this, _openDedupeKey_initializers, void 0));
|
|
119
|
+
constructor() {
|
|
120
|
+
super();
|
|
121
|
+
__runInitializers(this, _openDedupeKey_extraInitializers);
|
|
122
|
+
}
|
|
123
|
+
toApiObject() {
|
|
124
|
+
return {
|
|
125
|
+
id: this.id,
|
|
126
|
+
severity: this.severity,
|
|
127
|
+
category: this.category,
|
|
128
|
+
title: this.title,
|
|
129
|
+
detail: this.detail,
|
|
130
|
+
context: this.context || {},
|
|
131
|
+
createdAt: this.createdAt,
|
|
132
|
+
acknowledgedBy: this.acknowledgedBy ?? undefined,
|
|
133
|
+
acknowledgedAt: this.acknowledgedAt ?? undefined,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
async createSavableObject() {
|
|
137
|
+
const savable = await super.createSavableObject();
|
|
138
|
+
// Presence is the uniqueness authority for an open event. Acknowledged
|
|
139
|
+
// events must not leave a null-valued sparse-index key behind.
|
|
140
|
+
if (!this.openDedupeKey)
|
|
141
|
+
delete savable.openDedupeKey;
|
|
142
|
+
return savable;
|
|
143
|
+
}
|
|
144
|
+
static async getNativeCollection() {
|
|
145
|
+
const smartdataCollection = OpsConfigEventDoc.collection;
|
|
146
|
+
await smartdataCollection.init();
|
|
147
|
+
const probe = new OpsConfigEventDoc();
|
|
148
|
+
await smartdataCollection.markUniqueIndexes(probe.uniqueIndexes || []);
|
|
149
|
+
await smartdataCollection.createRegularIndexes(probe.regularIndexes || []);
|
|
150
|
+
return smartdataCollection.mongoDbCollection;
|
|
151
|
+
}
|
|
152
|
+
static hydrate(rawArg) {
|
|
153
|
+
return OpsConfigEventDoc.createInstanceFromMongoDbNativeDoc(rawArg);
|
|
154
|
+
}
|
|
155
|
+
static async upsertOpenEvent(optionsArg) {
|
|
156
|
+
const collection = await OpsConfigEventDoc.getNativeCollection();
|
|
157
|
+
const timestamp = new Date(optionsArg.createdAt).toISOString();
|
|
158
|
+
const result = await collection.updateOne({ openDedupeKey: optionsArg.openDedupeKey }, {
|
|
159
|
+
$set: {
|
|
160
|
+
severity: optionsArg.severity,
|
|
161
|
+
detail: optionsArg.detail,
|
|
162
|
+
context: optionsArg.context,
|
|
163
|
+
createdAt: optionsArg.createdAt,
|
|
164
|
+
_updatedAt: timestamp,
|
|
165
|
+
},
|
|
166
|
+
$setOnInsert: {
|
|
167
|
+
id: optionsArg.id,
|
|
168
|
+
category: optionsArg.category,
|
|
169
|
+
title: optionsArg.title,
|
|
170
|
+
openDedupeKey: optionsArg.openDedupeKey,
|
|
171
|
+
_createdAt: timestamp,
|
|
172
|
+
},
|
|
173
|
+
}, { upsert: true });
|
|
174
|
+
const raw = await collection.findOne({ openDedupeKey: optionsArg.openDedupeKey });
|
|
175
|
+
if (!raw)
|
|
176
|
+
throw new Error('Failed to read the recorded platform configuration event');
|
|
177
|
+
return {
|
|
178
|
+
event: OpsConfigEventDoc.hydrate(raw),
|
|
179
|
+
created: result.upsertedCount > 0,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
static async findFiltered(filter = {}) {
|
|
183
|
+
const selector = {};
|
|
184
|
+
if (filter.acknowledged === true)
|
|
185
|
+
selector.acknowledgedAt = { $gt: 0 };
|
|
186
|
+
if (filter.acknowledged === false)
|
|
187
|
+
selector.acknowledgedAt = null;
|
|
188
|
+
if (filter.severity)
|
|
189
|
+
selector.severity = filter.severity;
|
|
190
|
+
if (filter.category)
|
|
191
|
+
selector.category = filter.category;
|
|
192
|
+
const requestedLimit = Number.isSafeInteger(filter.limit) && filter.limit > 0
|
|
193
|
+
? filter.limit
|
|
194
|
+
: 100;
|
|
195
|
+
const limit = Math.min(requestedLimit, 200);
|
|
196
|
+
const countSelector = structuredClone(selector);
|
|
197
|
+
if (filter.cursor) {
|
|
198
|
+
if (!Number.isSafeInteger(filter.cursor.createdAt) || filter.cursor.createdAt < 0
|
|
199
|
+
|| typeof filter.cursor.id !== 'string' || !filter.cursor.id.trim()) {
|
|
200
|
+
throw new Error('Invalid platform configuration event cursor');
|
|
201
|
+
}
|
|
202
|
+
selector.$or = [
|
|
203
|
+
{ createdAt: { $lt: filter.cursor.createdAt } },
|
|
204
|
+
{ createdAt: filter.cursor.createdAt, id: { $lt: filter.cursor.id } },
|
|
205
|
+
];
|
|
206
|
+
}
|
|
207
|
+
const collection = await OpsConfigEventDoc.getNativeCollection();
|
|
208
|
+
const cursor = collection
|
|
209
|
+
.find(selector)
|
|
210
|
+
.sort({ createdAt: -1, id: -1 })
|
|
211
|
+
.limit(limit + 1);
|
|
212
|
+
try {
|
|
213
|
+
const [rawEvents, total] = await Promise.all([
|
|
214
|
+
cursor.toArray(),
|
|
215
|
+
collection.countDocuments(countSelector),
|
|
216
|
+
]);
|
|
217
|
+
const hasMore = rawEvents.length > limit;
|
|
218
|
+
const pageRows = rawEvents.slice(0, limit);
|
|
219
|
+
const lastRow = pageRows.at(-1);
|
|
220
|
+
return {
|
|
221
|
+
events: pageRows.map((rawArg) => OpsConfigEventDoc.hydrate(rawArg)),
|
|
222
|
+
total,
|
|
223
|
+
...(hasMore && lastRow ? {
|
|
224
|
+
nextCursor: {
|
|
225
|
+
createdAt: Number(lastRow.createdAt),
|
|
226
|
+
id: String(lastRow.id),
|
|
227
|
+
},
|
|
228
|
+
} : {}),
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
finally {
|
|
232
|
+
await cursor.close();
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
static async countUnacknowledged() {
|
|
236
|
+
const collection = await OpsConfigEventDoc.getNativeCollection();
|
|
237
|
+
return await collection.countDocuments({ acknowledgedAt: null });
|
|
238
|
+
}
|
|
239
|
+
/** Acknowledge the given event ids; returns how many were newly acknowledged. */
|
|
240
|
+
static async acknowledgeByIds(ids, userId) {
|
|
241
|
+
if (typeof userId !== 'string' || !userId.trim()) {
|
|
242
|
+
throw new Error('acknowledgeByIds requires a non-empty user id');
|
|
243
|
+
}
|
|
244
|
+
if (ids.length > 500 || ids.some((idArg) => typeof idArg !== 'string' || !idArg.trim())) {
|
|
245
|
+
throw new Error('acknowledgeByIds requires 0 to 500 non-empty event ids');
|
|
246
|
+
}
|
|
247
|
+
const uniqueIds = Array.from(new Set(ids));
|
|
248
|
+
if (uniqueIds.length === 0)
|
|
249
|
+
return 0;
|
|
250
|
+
const collection = await OpsConfigEventDoc.getNativeCollection();
|
|
251
|
+
const now = Date.now();
|
|
252
|
+
const result = await collection.updateMany({ id: { $in: uniqueIds }, acknowledgedAt: null }, {
|
|
253
|
+
$set: {
|
|
254
|
+
acknowledgedBy: userId,
|
|
255
|
+
acknowledgedAt: now,
|
|
256
|
+
_updatedAt: new Date(now).toISOString(),
|
|
257
|
+
},
|
|
258
|
+
$unset: { openDedupeKey: '' },
|
|
259
|
+
});
|
|
260
|
+
return result.modifiedCount;
|
|
261
|
+
}
|
|
262
|
+
/** Delete acknowledged events older than the retention window. */
|
|
263
|
+
static async pruneAcknowledged(maxAgeMs) {
|
|
264
|
+
const cutoff = Date.now() - maxAgeMs;
|
|
265
|
+
let pruned = 0;
|
|
266
|
+
const collection = await OpsConfigEventDoc.getNativeCollection();
|
|
267
|
+
while (true) {
|
|
268
|
+
const cursor = collection
|
|
269
|
+
.find({ acknowledgedAt: { $lt: cutoff } }, { projection: { _id: 1 } })
|
|
270
|
+
.sort({ acknowledgedAt: 1, _id: 1 })
|
|
271
|
+
.limit(500);
|
|
272
|
+
let rows;
|
|
273
|
+
try {
|
|
274
|
+
rows = await cursor.toArray();
|
|
275
|
+
}
|
|
276
|
+
finally {
|
|
277
|
+
await cursor.close();
|
|
278
|
+
}
|
|
279
|
+
if (rows.length === 0)
|
|
280
|
+
break;
|
|
281
|
+
const deleteFilter = {
|
|
282
|
+
_id: { $in: rows.map((rowArg) => rowArg._id) },
|
|
283
|
+
acknowledgedAt: { $lt: cutoff },
|
|
284
|
+
};
|
|
285
|
+
const result = await collection.deleteMany(deleteFilter);
|
|
286
|
+
if (result.deletedCount === 0)
|
|
287
|
+
break;
|
|
288
|
+
pruned += result.deletedCount;
|
|
289
|
+
}
|
|
290
|
+
return pruned;
|
|
291
|
+
}
|
|
292
|
+
};
|
|
293
|
+
return OpsConfigEventDoc = _classThis;
|
|
294
|
+
})();
|
|
295
|
+
export { OpsConfigEventDoc };
|
|
296
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5vcHMtY29uZmlnLWV2ZW50LmRvYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL2RiL2RvY3VtZW50cy9jbGFzc2VzLm9wcy1jb25maWctZXZlbnQuZG9jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQVF2RCxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7QUFVckQ7Ozs7R0FJRztJQUVVLGlCQUFpQjs0QkFEN0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Ozs7c0JBQ0wsT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lDQUF4QyxTQUFRLFdBQXNFOzs7OzhCQUMxRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUN2QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtvQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFDekIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7b0NBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQ3pCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO2lDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtrQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7bUNBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3FDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFB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
|
|
@@ -34,4 +34,5 @@ export * from './classes.acme-config.doc.js';
|
|
|
34
34
|
export * from './classes.email-domain.doc.js';
|
|
35
35
|
export * from './classes.email-server-settings.doc.js';
|
|
36
36
|
export * from './classes.smartmta-storage.doc.js';
|
|
37
|
-
|
|
37
|
+
export * from './classes.ops-config-event.doc.js';
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9kYi9kb2N1bWVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOEJBQThCO0FBQzlCLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyx3Q0FBd0MsQ0FBQztBQUV2RCwwQkFBMEI7QUFDMUIsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsaUNBQWlDLENBQUM7QUFFaEQsdUJBQXVCO0FBQ3ZCLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyw2QkFBNkIsQ0FBQztBQUU1QywrQkFBK0I7QUFDL0IsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsK0JBQStCLENBQUM7QUFFOUMsa0NBQWtDO0FBQ2xDLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyw4Q0FBOEMsQ0FBQztBQUU3RCwwQkFBMEI7QUFDMUIsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHFDQUFxQyxDQUFDO0FBRXBELDJDQUEyQztBQUMzQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw2QkFBNkIsQ0FBQztBQUU1QyxpQ0FBaUM7QUFDakMsY0FBYyw4QkFBOEIsQ0FBQztBQUU3QywwQkFBMEI7QUFDMUIsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxtQ0FBbUMsQ0FBQyJ9
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as plugins from '../plugins.js';
|
|
2
|
+
import type { DcRouter } from '../classes.dcrouter.js';
|
|
3
|
+
export declare const GATEWAY_ROUTE_DNS_MANAGED_BY = "gateway-route-dns";
|
|
4
|
+
type TGatewayDnsResult = plugins.servezoneInterfaces.data.IGatewayRouteDnsResult;
|
|
5
|
+
export interface IGatewayRouteDnsReconcileOptions {
|
|
6
|
+
externalKey: string;
|
|
7
|
+
gatewayClientId: string;
|
|
8
|
+
hostname?: string;
|
|
9
|
+
mode?: plugins.servezoneInterfaces.data.TGatewayRouteDnsMode;
|
|
10
|
+
delete?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface IGatewayDnsActiveClaim {
|
|
13
|
+
gatewayClientId: string;
|
|
14
|
+
routeExternalKeys: string[];
|
|
15
|
+
}
|
|
16
|
+
export declare function getActiveGatewayDnsClaims(dcRouterRefArg: Pick<DcRouter, 'routeConfigManager'>, hostnameArg: string): IGatewayDnsActiveClaim[];
|
|
17
|
+
export declare class GatewayRouteDnsReconciler {
|
|
18
|
+
private dcRouterRef;
|
|
19
|
+
private interval?;
|
|
20
|
+
private fullReconcilePromise?;
|
|
21
|
+
private lastAttemptByHostname;
|
|
22
|
+
private latestIntentByHostname;
|
|
23
|
+
private hostnameChains;
|
|
24
|
+
private intentGeneration;
|
|
25
|
+
constructor(dcRouterRef: DcRouter);
|
|
26
|
+
start(): Promise<void>;
|
|
27
|
+
stop(): Promise<void>;
|
|
28
|
+
reconcileRoute(optionsArg: IGatewayRouteDnsReconcileOptions): Promise<TGatewayDnsResult>;
|
|
29
|
+
private reconcileRouteWithExecution;
|
|
30
|
+
private reconcileRouteUnderHostnameLock;
|
|
31
|
+
runFullReconcile(force?: boolean): Promise<void>;
|
|
32
|
+
private reconcileAll;
|
|
33
|
+
private deleteOwnedRecords;
|
|
34
|
+
private getDesiredTargetIp;
|
|
35
|
+
private getRouteHostname;
|
|
36
|
+
private buildWorkKey;
|
|
37
|
+
private refreshProviderZone;
|
|
38
|
+
buildClaimOwnerId(gatewayClientIdArg: string, hostnameArg: string): string;
|
|
39
|
+
getActiveClaimsForHostname(hostnameArg: string): IGatewayDnsActiveClaim[];
|
|
40
|
+
private buildManagedRecordKey;
|
|
41
|
+
private getContributingRouteKeys;
|
|
42
|
+
private isAddressRecord;
|
|
43
|
+
private normalizeStoredHostname;
|
|
44
|
+
private toEvidence;
|
|
45
|
+
private snapshotRecord;
|
|
46
|
+
private restoreRecords;
|
|
47
|
+
private withHostnameLock;
|
|
48
|
+
private recordManualClaimEvent;
|
|
49
|
+
private successForZone;
|
|
50
|
+
private failureForZone;
|
|
51
|
+
}
|
|
52
|
+
export {};
|