@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.
Files changed (98) hide show
  1. package/deno.json +1 -1
  2. package/dist_serve/bundle.js +2219 -1887
  3. package/dist_ts/00_commitinfo_data.js +1 -1
  4. package/dist_ts/classes.dcrouter.d.ts +4 -1
  5. package/dist_ts/classes.dcrouter.js +42 -2
  6. package/dist_ts/config/classes.api-token-manager.d.ts +20 -2
  7. package/dist_ts/config/classes.api-token-manager.js +201 -6
  8. package/dist_ts/config/classes.gateway-client-manager.d.ts +36 -2
  9. package/dist_ts/config/classes.gateway-client-manager.js +391 -27
  10. package/dist_ts/db/documents/classes.api-token.doc.d.ts +2 -1
  11. package/dist_ts/db/documents/classes.api-token.doc.js +8 -2
  12. package/dist_ts/db/documents/classes.gateway-client.doc.d.ts +25 -0
  13. package/dist_ts/db/documents/classes.gateway-client.doc.js +73 -2
  14. package/dist_ts/db/documents/classes.ops-config-event.doc.d.ts +55 -0
  15. package/dist_ts/db/documents/classes.ops-config-event.doc.js +296 -0
  16. package/dist_ts/db/documents/index.d.ts +1 -0
  17. package/dist_ts/db/documents/index.js +2 -1
  18. package/dist_ts/dns/classes.gateway-route-dns-reconciler.d.ts +52 -0
  19. package/dist_ts/dns/classes.gateway-route-dns-reconciler.js +609 -0
  20. package/dist_ts/dns/index.d.ts +1 -0
  21. package/dist_ts/dns/index.js +2 -1
  22. package/dist_ts/dns/manager.dns.d.ts +19 -0
  23. package/dist_ts/dns/manager.dns.js +25 -1
  24. package/dist_ts/monitoring/classes.ops-event-manager.d.ts +32 -0
  25. package/dist_ts/monitoring/classes.ops-event-manager.js +71 -0
  26. package/dist_ts/monitoring/index.d.ts +1 -0
  27. package/dist_ts/monitoring/index.js +2 -1
  28. package/dist_ts/opsserver/classes.opsserver.d.ts +1 -0
  29. package/dist_ts/opsserver/classes.opsserver.js +3 -1
  30. package/dist_ts/opsserver/handlers/certificate.handler.d.ts +1 -0
  31. package/dist_ts/opsserver/handlers/certificate.handler.js +35 -5
  32. package/dist_ts/opsserver/handlers/config-event.handler.d.ts +12 -0
  33. package/dist_ts/opsserver/handlers/config-event.handler.js +47 -0
  34. package/dist_ts/opsserver/handlers/dns-record.handler.d.ts +1 -0
  35. package/dist_ts/opsserver/handlers/dns-record.handler.js +82 -3
  36. package/dist_ts/opsserver/handlers/gatewayclient.handler.d.ts +9 -1
  37. package/dist_ts/opsserver/handlers/gatewayclient.handler.js +714 -162
  38. package/dist_ts/opsserver/handlers/index.d.ts +1 -0
  39. package/dist_ts/opsserver/handlers/index.js +2 -1
  40. package/dist_ts/opsserver/helpers/gateway-client-auth.d.ts +25 -0
  41. package/dist_ts/opsserver/helpers/gateway-client-auth.js +168 -0
  42. package/dist_ts/plugins.d.ts +2 -1
  43. package/dist_ts/plugins.js +3 -2
  44. package/dist_ts_apiclient/classes.gatewayclient.d.ts +13 -1
  45. package/dist_ts_apiclient/classes.gatewayclient.js +18 -2
  46. package/dist_ts_interfaces/data/config-events.d.ts +34 -0
  47. package/dist_ts_interfaces/data/config-events.js +8 -0
  48. package/dist_ts_interfaces/data/index.d.ts +1 -0
  49. package/dist_ts_interfaces/data/index.js +2 -1
  50. package/dist_ts_interfaces/data/route-management.d.ts +28 -1
  51. package/dist_ts_interfaces/data/route-management.js +3 -1
  52. package/dist_ts_interfaces/data/workhoster.d.ts +1 -0
  53. package/dist_ts_interfaces/requests/config-events.d.ts +35 -0
  54. package/dist_ts_interfaces/requests/config-events.js +4 -0
  55. package/dist_ts_interfaces/requests/index.d.ts +1 -0
  56. package/dist_ts_interfaces/requests/index.js +2 -1
  57. package/dist_ts_interfaces/requests/realtime.d.ts +1 -1
  58. package/dist_ts_interfaces/requests/realtime.js +2 -1
  59. package/dist_ts_migrations/index.js +148 -9
  60. package/dist_ts_web/00_commitinfo_data.js +1 -1
  61. package/dist_ts_web/appstate/config-events.d.ts +19 -0
  62. package/dist_ts_web/appstate/config-events.js +68 -0
  63. package/dist_ts_web/appstate/runtime.js +7 -1
  64. package/dist_ts_web/appstate.d.ts +1 -0
  65. package/dist_ts_web/appstate.js +2 -1
  66. package/dist_ts_web/elements/ops-platform-events.d.ts +21 -0
  67. package/dist_ts_web/elements/ops-platform-events.js +361 -0
  68. package/dist_ts_web/elements/ops-view-logs.d.ts +4 -0
  69. package/dist_ts_web/elements/ops-view-logs.js +96 -9
  70. package/package.json +3 -3
  71. package/ts/00_commitinfo_data.ts +1 -1
  72. package/ts/classes.dcrouter.ts +48 -1
  73. package/ts/config/classes.api-token-manager.ts +237 -4
  74. package/ts/config/classes.gateway-client-manager.ts +463 -19
  75. package/ts/db/documents/classes.api-token.doc.ts +8 -1
  76. package/ts/db/documents/classes.gateway-client.doc.ts +86 -0
  77. package/ts/db/documents/classes.ops-config-event.doc.ts +257 -0
  78. package/ts/db/documents/index.ts +1 -0
  79. package/ts/dns/classes.gateway-route-dns-reconciler.ts +801 -0
  80. package/ts/dns/index.ts +1 -0
  81. package/ts/dns/manager.dns.ts +36 -0
  82. package/ts/monitoring/classes.ops-event-manager.ts +99 -0
  83. package/ts/monitoring/index.ts +2 -1
  84. package/ts/opsserver/classes.opsserver.ts +2 -0
  85. package/ts/opsserver/handlers/certificate.handler.ts +51 -4
  86. package/ts/opsserver/handlers/config-event.handler.ts +62 -0
  87. package/ts/opsserver/handlers/dns-record.handler.ts +101 -2
  88. package/ts/opsserver/handlers/gatewayclient.handler.ts +804 -136
  89. package/ts/opsserver/handlers/index.ts +1 -0
  90. package/ts/opsserver/helpers/gateway-client-auth.ts +198 -0
  91. package/ts/plugins.ts +2 -0
  92. package/ts_apiclient/classes.gatewayclient.ts +45 -0
  93. package/ts_web/00_commitinfo_data.ts +1 -1
  94. package/ts_web/appstate/config-events.ts +98 -0
  95. package/ts_web/appstate/runtime.ts +8 -1
  96. package/ts_web/appstate.ts +1 -0
  97. package/ts_web/elements/ops-platform-events.ts +315 -0
  98. 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
- createdAt = (__runInitializers(this, _enabled_extraInitializers), __runInitializers(this, _createdAt_initializers, void 0));
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5nYXRld2F5LWNsaWVudC5kb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9kYi9kb2N1bWVudHMvY2xhc3Nlcy5nYXRld2F5LWNsaWVudC5kb2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3ZELE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUd4QyxnQkFBZ0I7NEJBRDVCLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDOzs7O3NCQUNOLE9BQU8sQ0FBQyxTQUFTLENBQUMsY0FBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztnQ0FBeEMsU0FBUSxXQUFvRTs7Ozs4QkFDdkcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFDdkIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0NBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO2dDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTt1Q0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7NENBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFOytDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTt3Q0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7bUNBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3FDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtxQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7cUNBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO1lBN0J6Qix3SkFBTyxFQUFFLDZCQUFGLEVBQUUsK0VBQVU7WUFHbkIsOEpBQU8sSUFBSSw2QkFBSixJQUFJLG1GQUFzQjtZQUdqQyw4SkFBTyxJQUFJLDZCQUFKLElBQUksbUZBQWM7WUFHekIsbUxBQU8sV0FBVyw2QkFBWCxXQUFXLGlHQUFVO1lBRzVCLGtNQUFPLGdCQUFnQiw2QkFBaEIsZ0JBQWdCLDJHQUFnQjtZQUd2QywyTUFBTyxtQkFBbUIsNkJBQW5CLG1CQUFtQixpSEFBMkQ7WUFHckYsc0xBQU8sWUFBWSw2QkFBWixZQUFZLG1HQUFvRDtZQUd2RSx1S0FBTyxPQUFPLDZCQUFQLE9BQU8seUZBQWlCO1lBRy9CLDZLQUFPLFNBQVMsNkJBQVQsU0FBUyw2RkFBVTtZQUcxQiw2S0FBTyxTQUFTLDZCQUFULFNBQVMsNkZBQVU7WUFHMUIsNktBQU8sU0FBUyw2QkFBVCxTQUFTLDZGQUFVO1lBakM1Qiw2S0E4Q0M7OztZQTlDWSx1REFBZ0I7O1FBR3BCLEVBQUUscURBQVU7UUFHWixJQUFJLHlHQUFzQjtRQUcxQixJQUFJLGtHQUFXLEVBQUUsR0FBQztRQUdsQixXQUFXLGtIQUFVO1FBR3JCLGdCQUFnQixxSEFBYSxFQUFFLEdBQUM7UUFHaEMsbUJBQW1CLDZIQUF3RCxFQUFFLEdBQUM7UUFHOUUsWUFBWSx5SEFBaUQsRUFBRSxHQUFDO1FBR2hFLE9BQU8sNkdBQVksSUFBSSxHQUFDO1FBR3hCLFNBQVMsbUhBQVU7UUFHbkIsU0FBUyxxSEFBVTtRQUduQixTQUFTLHFIQUFVO1FBRTFCO1lBQ0UsS0FBSyxFQUFFLENBQUM7O1NBQ1Q7UUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFVO1lBQ3JDLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU87WUFDekIsT0FBTyxNQUFNLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRCxDQUFDOzs7O1NBN0NVLGdCQUFnQiJ9
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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
@@ -25,3 +25,4 @@ export * from './classes.acme-config.doc.js';
25
25
  export * from './classes.email-domain.doc.js';
26
26
  export * from './classes.email-server-settings.doc.js';
27
27
  export * from './classes.smartmta-storage.doc.js';
28
+ export * from './classes.ops-config-event.doc.js';
@@ -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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9kYi9kb2N1bWVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOEJBQThCO0FBQzlCLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyx3Q0FBd0MsQ0FBQztBQUV2RCwwQkFBMEI7QUFDMUIsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsaUNBQWlDLENBQUM7QUFFaEQsdUJBQXVCO0FBQ3ZCLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyw2QkFBNkIsQ0FBQztBQUU1QywrQkFBK0I7QUFDL0IsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsK0JBQStCLENBQUM7QUFFOUMsa0NBQWtDO0FBQ2xDLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyw4Q0FBOEMsQ0FBQztBQUU3RCwwQkFBMEI7QUFDMUIsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHFDQUFxQyxDQUFDO0FBRXBELDJDQUEyQztBQUMzQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw2QkFBNkIsQ0FBQztBQUU1QyxpQ0FBaUM7QUFDakMsY0FBYyw4QkFBOEIsQ0FBQztBQUU3QywwQkFBMEI7QUFDMUIsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsbUNBQW1DLENBQUMifQ==
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 {};