@serve.zone/dcrouter 18.9.2 → 18.9.4

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 (42) hide show
  1. package/deno.json +1 -1
  2. package/dist_ts/00_commitinfo_data.js +1 -1
  3. package/dist_ts/classes.dcrouter.js +5 -4
  4. package/dist_ts/db/documents/classes.authentication-event.doc.d.ts +0 -1
  5. package/dist_ts/db/documents/classes.authentication-event.doc.js +176 -259
  6. package/dist_ts/db/documents/classes.email-traffic-bucket.doc.js +110 -188
  7. package/dist_ts/dns/manager.dns-authority.d.ts +5 -0
  8. package/dist_ts/dns/manager.dns-authority.js +97 -53
  9. package/dist_ts/dns/manager.dns.js +23 -5
  10. package/dist_ts/email/classes.email-domain.manager.js +14 -3
  11. package/dist_ts/email/classes.email-settings.manager.js +26 -6
  12. package/dist_ts/email/classes.mail-dns-sync.js +22 -2
  13. package/dist_ts/monitoring/classes.metricscache.d.ts +28 -19
  14. package/dist_ts/monitoring/classes.metricscache.js +133 -62
  15. package/dist_ts/monitoring/classes.metricsmanager.js +7 -5
  16. package/dist_ts/plugins.d.ts +2 -1
  17. package/dist_ts/plugins.js +3 -2
  18. package/dist_ts/remoteingress/classes.remoteingress-manager.js +46 -9
  19. package/dist_ts/security/classes.authentication-event-manager.d.ts +5 -1
  20. package/dist_ts/security/classes.authentication-event-manager.js +32 -22
  21. package/dist_ts/vpn/classes.vpn-manager.js +34 -2
  22. package/dist_ts_migrations/index.d.ts +4 -1
  23. package/dist_ts_migrations/index.js +18 -3
  24. package/dist_ts_web/00_commitinfo_data.js +1 -1
  25. package/package.json +9 -8
  26. package/readme.hints.md +72 -0
  27. package/ts/00_commitinfo_data.ts +1 -1
  28. package/ts/classes.dcrouter.ts +4 -3
  29. package/ts/db/documents/classes.authentication-event.doc.ts +64 -87
  30. package/ts/db/documents/classes.email-traffic-bucket.doc.ts +10 -9
  31. package/ts/dns/manager.dns-authority.ts +92 -54
  32. package/ts/dns/manager.dns.ts +20 -4
  33. package/ts/email/classes.email-domain.manager.ts +12 -2
  34. package/ts/email/classes.email-settings.manager.ts +23 -5
  35. package/ts/email/classes.mail-dns-sync.ts +23 -1
  36. package/ts/monitoring/classes.metricscache.ts +133 -79
  37. package/ts/monitoring/classes.metricsmanager.ts +6 -4
  38. package/ts/plugins.ts +2 -0
  39. package/ts/remoteingress/classes.remoteingress-manager.ts +42 -8
  40. package/ts/security/classes.authentication-event-manager.ts +31 -20
  41. package/ts/vpn/classes.vpn-manager.ts +32 -1
  42. package/ts_web/00_commitinfo_data.ts +1 -1
@@ -1,200 +1,122 @@
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
1
  import * as plugins from '../../plugins.js';
36
2
  import { DcRouterDb } from '../classes.dcrouter-db.js';
37
3
  const DB_OPERATION_TIMEOUT_MS = 5_000;
38
4
  const getDb = () => DcRouterDb.getInstance().getDb();
39
- let EmailTrafficBucketDoc = (() => {
40
- let _classDecorators = [plugins.smartdata.Collection(() => getDb())];
41
- let _classDescriptor;
42
- let _classExtraInitializers = [];
43
- let _classThis;
44
- let _classSuper = plugins.smartdata.SmartDataDbDoc;
45
- let _id_decorators;
46
- let _id_initializers = [];
47
- let _id_extraInitializers = [];
48
- let _bucketStart_decorators;
49
- let _bucketStart_initializers = [];
50
- let _bucketStart_extraInitializers = [];
51
- let _sent_decorators;
52
- let _sent_initializers = [];
53
- let _sent_extraInitializers = [];
54
- let _received_decorators;
55
- let _received_initializers = [];
56
- let _received_extraInitializers = [];
57
- let _failed_decorators;
58
- let _failed_initializers = [];
59
- let _failed_extraInitializers = [];
60
- let _createdAt_decorators;
61
- let _createdAt_initializers = [];
62
- let _createdAt_extraInitializers = [];
63
- let _updatedAt_decorators;
64
- let _updatedAt_initializers = [];
65
- let _updatedAt_extraInitializers = [];
66
- var EmailTrafficBucketDoc = class extends _classSuper {
67
- static { _classThis = this; }
68
- static {
69
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
70
- _id_decorators = [plugins.smartdata.unI(), plugins.smartdata.svDb()];
71
- _bucketStart_decorators = [plugins.smartdata.svDb()];
72
- _sent_decorators = [plugins.smartdata.svDb()];
73
- _received_decorators = [plugins.smartdata.svDb()];
74
- _failed_decorators = [plugins.smartdata.svDb()];
75
- _createdAt_decorators = [plugins.smartdata.svDb()];
76
- _updatedAt_decorators = [plugins.smartdata.svDb()];
77
- __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);
78
- __esDecorate(null, null, _bucketStart_decorators, { kind: "field", name: "bucketStart", static: false, private: false, access: { has: obj => "bucketStart" in obj, get: obj => obj.bucketStart, set: (obj, value) => { obj.bucketStart = value; } }, metadata: _metadata }, _bucketStart_initializers, _bucketStart_extraInitializers);
79
- __esDecorate(null, null, _sent_decorators, { kind: "field", name: "sent", static: false, private: false, access: { has: obj => "sent" in obj, get: obj => obj.sent, set: (obj, value) => { obj.sent = value; } }, metadata: _metadata }, _sent_initializers, _sent_extraInitializers);
80
- __esDecorate(null, null, _received_decorators, { kind: "field", name: "received", static: false, private: false, access: { has: obj => "received" in obj, get: obj => obj.received, set: (obj, value) => { obj.received = value; } }, metadata: _metadata }, _received_initializers, _received_extraInitializers);
81
- __esDecorate(null, null, _failed_decorators, { kind: "field", name: "failed", static: false, private: false, access: { has: obj => "failed" in obj, get: obj => obj.failed, set: (obj, value) => { obj.failed = value; } }, metadata: _metadata }, _failed_initializers, _failed_extraInitializers);
82
- __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);
83
- __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);
84
- __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
85
- EmailTrafficBucketDoc = _classThis = _classDescriptor.value;
86
- if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
87
- __runInitializers(_classThis, _classExtraInitializers);
88
- }
89
- id = __runInitializers(this, _id_initializers, void 0);
90
- bucketStart = (__runInitializers(this, _id_extraInitializers), __runInitializers(this, _bucketStart_initializers, void 0));
91
- sent = (__runInitializers(this, _bucketStart_extraInitializers), __runInitializers(this, _sent_initializers, 0));
92
- received = (__runInitializers(this, _sent_extraInitializers), __runInitializers(this, _received_initializers, 0));
93
- failed = (__runInitializers(this, _received_extraInitializers), __runInitializers(this, _failed_initializers, 0));
94
- createdAt = (__runInitializers(this, _failed_extraInitializers), __runInitializers(this, _createdAt_initializers, void 0));
95
- updatedAt = (__runInitializers(this, _createdAt_extraInitializers), __runInitializers(this, _updatedAt_initializers, void 0));
96
- constructor() {
97
- super();
98
- __runInitializers(this, _updatedAt_extraInitializers);
5
+ export class EmailTrafficBucketDoc extends plugins.smartdata.SmartDataDbDoc {
6
+ id;
7
+ bucketStart;
8
+ sent = 0;
9
+ received = 0;
10
+ failed = 0;
11
+ createdAt;
12
+ updatedAt;
13
+ constructor() {
14
+ super();
15
+ }
16
+ static async getNativeCollection() {
17
+ const smartdataCollection = EmailTrafficBucketDoc.collection;
18
+ await smartdataCollection.init();
19
+ const probe = new EmailTrafficBucketDoc();
20
+ await smartdataCollection.markUniqueIndexes(probe.uniqueIndexes || []);
21
+ await smartdataCollection.createRegularIndexes(probe.regularIndexes || []);
22
+ return smartdataCollection.mongoDbCollection;
23
+ }
24
+ static validateSnapshot(snapshotArg) {
25
+ const counts = [snapshotArg.sent, snapshotArg.received, snapshotArg.failed];
26
+ if (!Number.isSafeInteger(snapshotArg.bucketStart)
27
+ || snapshotArg.bucketStart < 0
28
+ || snapshotArg.bucketStart % 60_000 !== 0
29
+ || counts.some((count) => !Number.isSafeInteger(count) || count < 0)) {
30
+ throw new Error('Invalid email traffic bucket snapshot');
99
31
  }
100
- static async getNativeCollection() {
101
- const smartdataCollection = EmailTrafficBucketDoc.collection;
102
- await smartdataCollection.init();
103
- const probe = new EmailTrafficBucketDoc();
104
- await smartdataCollection.markUniqueIndexes(probe.uniqueIndexes || []);
105
- await smartdataCollection.createRegularIndexes(probe.regularIndexes || []);
106
- return smartdataCollection.mongoDbCollection;
32
+ }
33
+ /** Persist retry-safe absolute monotonic counters. */
34
+ static async persistAbsolute(snapshotsArg) {
35
+ if (snapshotsArg.length === 0)
36
+ return;
37
+ if (snapshotsArg.length > 500) {
38
+ throw new Error('EmailTrafficBucketDoc.persistAbsolute accepts at most 500 buckets');
107
39
  }
108
- static validateSnapshot(snapshotArg) {
109
- const counts = [snapshotArg.sent, snapshotArg.received, snapshotArg.failed];
110
- if (!Number.isSafeInteger(snapshotArg.bucketStart)
111
- || snapshotArg.bucketStart < 0
112
- || snapshotArg.bucketStart % 60_000 !== 0
113
- || counts.some((count) => !Number.isSafeInteger(count) || count < 0)) {
114
- throw new Error('Invalid email traffic bucket snapshot');
115
- }
40
+ for (const snapshot of snapshotsArg) {
41
+ EmailTrafficBucketDoc.validateSnapshot(snapshot);
116
42
  }
117
- /** Persist retry-safe absolute monotonic counters. */
118
- static async persistAbsolute(snapshotsArg) {
119
- if (snapshotsArg.length === 0)
120
- return;
121
- if (snapshotsArg.length > 500) {
122
- throw new Error('EmailTrafficBucketDoc.persistAbsolute accepts at most 500 buckets');
123
- }
124
- for (const snapshot of snapshotsArg) {
125
- EmailTrafficBucketDoc.validateSnapshot(snapshot);
126
- }
127
- const collection = await EmailTrafficBucketDoc.getNativeCollection();
128
- const now = Date.now();
129
- const updatedAt = new Date(now).toISOString();
130
- await collection.bulkWrite(snapshotsArg.map((snapshot) => ({
131
- updateOne: {
132
- filter: { bucketStart: snapshot.bucketStart },
133
- update: {
134
- $max: {
135
- sent: snapshot.sent,
136
- received: snapshot.received,
137
- failed: snapshot.failed,
138
- },
139
- $set: {
140
- updatedAt: now,
141
- _updatedAt: updatedAt,
142
- },
143
- $setOnInsert: {
144
- id: `email-traffic-${snapshot.bucketStart}`,
145
- bucketStart: snapshot.bucketStart,
146
- createdAt: now,
147
- _createdAt: updatedAt,
148
- },
43
+ const collection = await EmailTrafficBucketDoc.getNativeCollection();
44
+ const now = Date.now();
45
+ const updatedAt = new Date(now).toISOString();
46
+ await collection.bulkWrite(snapshotsArg.map((snapshot) => ({
47
+ updateOne: {
48
+ filter: { bucketStart: snapshot.bucketStart },
49
+ update: {
50
+ $max: {
51
+ sent: snapshot.sent,
52
+ received: snapshot.received,
53
+ failed: snapshot.failed,
54
+ },
55
+ $set: {
56
+ updatedAt: now,
57
+ _updatedAt: updatedAt,
58
+ },
59
+ $setOnInsert: {
60
+ id: `email-traffic-${snapshot.bucketStart}`,
61
+ bucketStart: snapshot.bucketStart,
62
+ createdAt: now,
63
+ _createdAt: updatedAt,
149
64
  },
150
- upsert: true,
151
65
  },
152
- })), { ordered: false, timeoutMS: DB_OPERATION_TIMEOUT_MS });
66
+ upsert: true,
67
+ },
68
+ })), { ordered: false, timeoutMS: DB_OPERATION_TIMEOUT_MS });
69
+ }
70
+ static async loadSince(cutoffArg) {
71
+ if (!Number.isSafeInteger(cutoffArg) || cutoffArg < 0) {
72
+ throw new Error('EmailTrafficBucketDoc.loadSince requires a valid cutoff');
153
73
  }
154
- static async loadSince(cutoffArg) {
155
- if (!Number.isSafeInteger(cutoffArg) || cutoffArg < 0) {
156
- throw new Error('EmailTrafficBucketDoc.loadSince requires a valid cutoff');
157
- }
158
- const collection = await EmailTrafficBucketDoc.getNativeCollection();
159
- const cursor = collection
160
- .find({ bucketStart: { $gte: cutoffArg } }, { timeoutMS: DB_OPERATION_TIMEOUT_MS })
161
- .sort({ bucketStart: 1 });
162
- try {
163
- const rows = await cursor.toArray();
164
- return rows.map((row) => ({
165
- bucketStart: Number(row.bucketStart),
166
- sent: Number(row.sent || 0),
167
- received: Number(row.received || 0),
168
- failed: Number(row.failed || 0),
169
- }));
170
- }
171
- finally {
172
- await cursor.close({ timeoutMS: DB_OPERATION_TIMEOUT_MS });
173
- }
74
+ const collection = await EmailTrafficBucketDoc.getNativeCollection();
75
+ const cursor = collection
76
+ .find({ bucketStart: { $gte: cutoffArg } }, { timeoutMS: DB_OPERATION_TIMEOUT_MS })
77
+ .sort({ bucketStart: 1 });
78
+ try {
79
+ const rows = await cursor.toArray();
80
+ return rows.map((row) => ({
81
+ bucketStart: Number(row.bucketStart),
82
+ sent: Number(row.sent || 0),
83
+ received: Number(row.received || 0),
84
+ failed: Number(row.failed || 0),
85
+ }));
174
86
  }
175
- static async pruneBefore(cutoffArg) {
176
- if (!Number.isSafeInteger(cutoffArg) || cutoffArg < 0) {
177
- throw new Error('EmailTrafficBucketDoc.pruneBefore requires a valid cutoff');
178
- }
179
- const collection = await EmailTrafficBucketDoc.getNativeCollection();
180
- let deletedCount = 0;
181
- while (true) {
182
- const rows = await collection
183
- .find({ bucketStart: { $lt: cutoffArg } }, { projection: { _id: 1 }, timeoutMS: DB_OPERATION_TIMEOUT_MS })
184
- .sort({ bucketStart: 1, _id: 1 })
185
- .limit(500)
186
- .toArray();
187
- if (rows.length === 0)
188
- break;
189
- const result = await collection.deleteMany({ _id: { $in: rows.map((row) => row._id) } }, { timeoutMS: DB_OPERATION_TIMEOUT_MS });
190
- deletedCount += result.deletedCount;
191
- if (rows.length < 500)
192
- break;
193
- }
194
- return deletedCount;
87
+ finally {
88
+ await cursor.close({ timeoutMS: DB_OPERATION_TIMEOUT_MS });
195
89
  }
196
- };
197
- return EmailTrafficBucketDoc = _classThis;
198
- })();
199
- export { EmailTrafficBucketDoc };
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5lbWFpbC10cmFmZmljLWJ1Y2tldC5kb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9kYi9kb2N1bWVudHMvY2xhc3Nlcy5lbWFpbC10cmFmZmljLWJ1Y2tldC5kb2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXZELE1BQU0sdUJBQXVCLEdBQUcsS0FBSyxDQUFDO0FBRXRDLE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQWF4QyxxQkFBcUI7NEJBRGpDLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDOzs7O3NCQUNELE9BQU8sQ0FBQyxTQUFTLENBQUMsY0FBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztxQ0FBeEMsU0FBUSxXQUcxQzs7Ozs4QkFDRSxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUN2QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTt1Q0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0NBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO29DQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtrQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7cUNBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3FDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtZQWpCekIsd0pBQU8sRUFBRSw2QkFBRixFQUFFLCtFQUFVO1lBR25CLG1MQUFPLFdBQVcs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
90
+ }
91
+ static async pruneBefore(cutoffArg) {
92
+ if (!Number.isSafeInteger(cutoffArg) || cutoffArg < 0) {
93
+ throw new Error('EmailTrafficBucketDoc.pruneBefore requires a valid cutoff');
94
+ }
95
+ const collection = await EmailTrafficBucketDoc.getNativeCollection();
96
+ let deletedCount = 0;
97
+ while (true) {
98
+ const rows = await collection
99
+ .find({ bucketStart: { $lt: cutoffArg } }, { projection: { _id: 1 }, timeoutMS: DB_OPERATION_TIMEOUT_MS })
100
+ .sort({ bucketStart: 1, _id: 1 })
101
+ .limit(500)
102
+ .toArray();
103
+ if (rows.length === 0)
104
+ break;
105
+ const result = await collection.deleteMany({ _id: { $in: rows.map((row) => row._id) } }, { timeoutMS: DB_OPERATION_TIMEOUT_MS });
106
+ deletedCount += result.deletedCount;
107
+ if (rows.length < 500)
108
+ break;
109
+ }
110
+ return deletedCount;
111
+ }
112
+ }
113
+ plugins.smartdata.defineCollectionModel(EmailTrafficBucketDoc, getDb, {
114
+ collectionName: 'EmailTrafficBucketDoc',
115
+ persistedFields: ['id', 'bucketStart', 'sent', 'received', 'failed', 'createdAt', 'updatedAt'],
116
+ identityFields: ['id'],
117
+ indexes: [
118
+ { name: 'email_traffic_bucket_id_unique', key: { id: 1 }, options: { unique: true } },
119
+ { name: 'email_traffic_bucket_start_unique', key: { bucketStart: 1 }, options: { unique: true } },
120
+ ],
121
+ });
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5lbWFpbC10cmFmZmljLWJ1Y2tldC5kb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9kYi9kb2N1bWVudHMvY2xhc3Nlcy5lbWFpbC10cmFmZmljLWJ1Y2tldC5kb2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsTUFBTSx1QkFBdUIsR0FBRyxLQUFLLENBQUM7QUFFdEMsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBWXJELE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxPQUFPLENBQUMsU0FBUyxDQUFDLGNBRzVEO0lBQ1EsRUFBRSxDQUFVO0lBRVosV0FBVyxDQUFVO0lBRXJCLElBQUksR0FBVyxDQUFDLENBQUM7SUFFakIsUUFBUSxHQUFXLENBQUMsQ0FBQztJQUVyQixNQUFNLEdBQVcsQ0FBQyxDQUFDO0lBRW5CLFNBQVMsQ0FBVTtJQUVuQixTQUFTLENBQVU7SUFFMUI7UUFDRSxLQUFLLEVBQUUsQ0FBQztJQUNWLENBQUM7SUFFTyxNQUFNLENBQUMsS0FBSyxDQUFDLG1CQUFtQjtRQUN0QyxNQUFNLG1CQUFtQixHQUFJLHFCQUUzQixDQUFDLFVBQVUsQ0FBQztRQUNkLE1BQU0sbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakMsTUFBTSxLQUFLLEdBQUcsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQzFDLE1BQU0sbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2RSxNQUFNLG1CQUFtQixDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0UsT0FB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
@@ -71,6 +71,9 @@ export declare class DnsAuthorityManager {
71
71
  private updatedBy;
72
72
  private state;
73
73
  private reconciler?;
74
+ private stopped;
75
+ private activeProbes;
76
+ private ownedProbeClients;
74
77
  constructor(getExpectedNameservers: () => string[]);
75
78
  start(): Promise<void>;
76
79
  stop(): Promise<void>;
@@ -106,6 +109,8 @@ export declare class DnsAuthorityManager {
106
109
  * would let a transient resolver fault revoke authority.
107
110
  */
108
111
  probeDelegation(zoneArg: string): Promise<IDnsDelegationProbe>;
112
+ private createProbeClient;
113
+ private probeDelegationUnlocked;
109
114
  /**
110
115
  * Claim authority over a zone, but only against a positive delegation proof.
111
116
  * An undeterminable probe refuses the mutation — never assume either way.