@serve.zone/dcrouter 13.5.0 → 13.7.1

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 (136) hide show
  1. package/dist_serve/bundle.js +1705 -1365
  2. package/dist_ts/00_commitinfo_data.js +1 -1
  3. package/dist_ts/classes.dcrouter.d.ts +2 -5
  4. package/dist_ts/classes.dcrouter.js +41 -10
  5. package/dist_ts/db/documents/classes.dns-provider.doc.d.ts +22 -0
  6. package/dist_ts/db/documents/classes.dns-provider.doc.js +134 -0
  7. package/dist_ts/db/documents/classes.dns-record.doc.d.ts +21 -0
  8. package/dist_ts/db/documents/classes.dns-record.doc.js +143 -0
  9. package/dist_ts/db/documents/classes.domain.doc.d.ts +22 -0
  10. package/dist_ts/db/documents/classes.domain.doc.js +146 -0
  11. package/dist_ts/db/documents/index.d.ts +3 -0
  12. package/dist_ts/db/documents/index.js +5 -1
  13. package/dist_ts/dns/index.d.ts +2 -0
  14. package/dist_ts/dns/index.js +3 -0
  15. package/dist_ts/dns/manager.dns.d.ts +227 -0
  16. package/dist_ts/dns/manager.dns.js +747 -0
  17. package/dist_ts/dns/providers/cloudflare.provider.d.ts +21 -0
  18. package/dist_ts/dns/providers/cloudflare.provider.js +106 -0
  19. package/dist_ts/dns/providers/factory.d.ts +23 -0
  20. package/dist_ts/dns/providers/factory.js +38 -0
  21. package/dist_ts/dns/providers/index.d.ts +3 -0
  22. package/dist_ts/dns/providers/index.js +4 -0
  23. package/dist_ts/dns/providers/interfaces.d.ts +54 -0
  24. package/dist_ts/dns/providers/interfaces.js +2 -0
  25. package/dist_ts/opsserver/classes.opsserver.d.ts +3 -0
  26. package/dist_ts/opsserver/classes.opsserver.js +7 -1
  27. package/dist_ts/opsserver/handlers/config.handler.js +11 -2
  28. package/dist_ts/opsserver/handlers/dns-provider.handler.d.ts +16 -0
  29. package/dist_ts/opsserver/handlers/dns-provider.handler.js +119 -0
  30. package/dist_ts/opsserver/handlers/dns-record.handler.d.ts +13 -0
  31. package/dist_ts/opsserver/handlers/dns-record.handler.js +98 -0
  32. package/dist_ts/opsserver/handlers/domain.handler.d.ts +13 -0
  33. package/dist_ts/opsserver/handlers/domain.handler.js +124 -0
  34. package/dist_ts/opsserver/handlers/index.d.ts +3 -0
  35. package/dist_ts/opsserver/handlers/index.js +4 -1
  36. package/dist_ts_interfaces/data/dns-provider.d.ts +112 -0
  37. package/dist_ts_interfaces/data/dns-provider.js +27 -0
  38. package/dist_ts_interfaces/data/dns-record.d.ts +40 -0
  39. package/dist_ts_interfaces/data/dns-record.js +2 -0
  40. package/dist_ts_interfaces/data/domain.d.ts +34 -0
  41. package/dist_ts_interfaces/data/domain.js +2 -0
  42. package/dist_ts_interfaces/data/index.d.ts +3 -0
  43. package/dist_ts_interfaces/data/index.js +4 -1
  44. package/dist_ts_interfaces/data/route-management.d.ts +1 -1
  45. package/dist_ts_interfaces/requests/dns-providers.d.ts +117 -0
  46. package/dist_ts_interfaces/requests/dns-providers.js +2 -0
  47. package/dist_ts_interfaces/requests/dns-records.d.ts +89 -0
  48. package/dist_ts_interfaces/requests/dns-records.js +2 -0
  49. package/dist_ts_interfaces/requests/domains.d.ts +118 -0
  50. package/dist_ts_interfaces/requests/domains.js +2 -0
  51. package/dist_ts_interfaces/requests/index.d.ts +3 -0
  52. package/dist_ts_interfaces/requests/index.js +4 -1
  53. package/dist_ts_web/00_commitinfo_data.js +1 -1
  54. package/dist_ts_web/appstate.d.ts +72 -0
  55. package/dist_ts_web/appstate.js +308 -6
  56. package/dist_ts_web/elements/access/ops-view-apitokens.js +1 -1
  57. package/dist_ts_web/elements/access/ops-view-users.js +1 -1
  58. package/dist_ts_web/elements/domains/dns-provider-form.d.ts +58 -0
  59. package/dist_ts_web/elements/domains/dns-provider-form.js +268 -0
  60. package/dist_ts_web/elements/domains/index.d.ts +5 -0
  61. package/dist_ts_web/elements/domains/index.js +6 -0
  62. package/dist_ts_web/elements/{ops-view-certificates.d.ts → domains/ops-view-certificates.d.ts} +1 -1
  63. package/dist_ts_web/elements/{ops-view-certificates.js → domains/ops-view-certificates.js} +5 -5
  64. package/dist_ts_web/elements/domains/ops-view-dns.d.ts +17 -0
  65. package/dist_ts_web/elements/domains/ops-view-dns.js +304 -0
  66. package/dist_ts_web/elements/domains/ops-view-domains.d.ts +18 -0
  67. package/dist_ts_web/elements/domains/ops-view-domains.js +361 -0
  68. package/dist_ts_web/elements/domains/ops-view-providers.d.ts +21 -0
  69. package/dist_ts_web/elements/domains/ops-view-providers.js +316 -0
  70. package/dist_ts_web/elements/email/ops-view-email-security.js +1 -1
  71. package/dist_ts_web/elements/email/ops-view-emails.js +1 -1
  72. package/dist_ts_web/elements/index.d.ts +1 -1
  73. package/dist_ts_web/elements/index.js +2 -2
  74. package/dist_ts_web/elements/network/ops-view-network-activity.js +1 -1
  75. package/dist_ts_web/elements/network/ops-view-networktargets.js +1 -1
  76. package/dist_ts_web/elements/network/ops-view-remoteingress.js +1 -1
  77. package/dist_ts_web/elements/network/ops-view-routes.js +1 -1
  78. package/dist_ts_web/elements/network/ops-view-sourceprofiles.js +1 -1
  79. package/dist_ts_web/elements/network/ops-view-targetprofiles.js +1 -1
  80. package/dist_ts_web/elements/network/ops-view-vpn.js +1 -1
  81. package/dist_ts_web/elements/ops-dashboard.js +14 -5
  82. package/dist_ts_web/elements/ops-view-logs.js +1 -1
  83. package/dist_ts_web/elements/overview/ops-view-config.js +3 -3
  84. package/dist_ts_web/elements/overview/ops-view-overview.js +1 -1
  85. package/dist_ts_web/elements/security/ops-view-security-authentication.js +1 -1
  86. package/dist_ts_web/elements/security/ops-view-security-blocked.js +1 -1
  87. package/dist_ts_web/elements/security/ops-view-security-overview.js +1 -1
  88. package/dist_ts_web/router.d.ts +1 -1
  89. package/dist_ts_web/router.js +4 -2
  90. package/package.json +2 -2
  91. package/ts/00_commitinfo_data.ts +1 -1
  92. package/ts/classes.dcrouter.ts +46 -17
  93. package/ts/db/documents/classes.dns-provider.doc.ts +63 -0
  94. package/ts/db/documents/classes.dns-record.doc.ts +62 -0
  95. package/ts/db/documents/classes.domain.doc.ts +66 -0
  96. package/ts/db/documents/index.ts +5 -0
  97. package/ts/dns/index.ts +2 -0
  98. package/ts/dns/manager.dns.ts +869 -0
  99. package/ts/dns/providers/cloudflare.provider.ts +131 -0
  100. package/ts/dns/providers/factory.ts +48 -0
  101. package/ts/dns/providers/index.ts +3 -0
  102. package/ts/dns/providers/interfaces.ts +67 -0
  103. package/ts/opsserver/classes.opsserver.ts +6 -0
  104. package/ts/opsserver/handlers/config.handler.ts +10 -1
  105. package/ts/opsserver/handlers/dns-provider.handler.ts +159 -0
  106. package/ts/opsserver/handlers/dns-record.handler.ts +127 -0
  107. package/ts/opsserver/handlers/domain.handler.ts +161 -0
  108. package/ts/opsserver/handlers/index.ts +4 -1
  109. package/ts_web/00_commitinfo_data.ts +1 -1
  110. package/ts_web/appstate.ts +403 -5
  111. package/ts_web/elements/access/ops-view-apitokens.ts +1 -1
  112. package/ts_web/elements/access/ops-view-users.ts +1 -1
  113. package/ts_web/elements/domains/dns-provider-form.ts +216 -0
  114. package/ts_web/elements/domains/index.ts +5 -0
  115. package/ts_web/elements/{ops-view-certificates.ts → domains/ops-view-certificates.ts} +4 -4
  116. package/ts_web/elements/domains/ops-view-dns.ts +273 -0
  117. package/ts_web/elements/domains/ops-view-domains.ts +335 -0
  118. package/ts_web/elements/domains/ops-view-providers.ts +284 -0
  119. package/ts_web/elements/email/ops-view-email-security.ts +1 -1
  120. package/ts_web/elements/email/ops-view-emails.ts +1 -1
  121. package/ts_web/elements/index.ts +1 -1
  122. package/ts_web/elements/network/ops-view-network-activity.ts +1 -1
  123. package/ts_web/elements/network/ops-view-networktargets.ts +1 -1
  124. package/ts_web/elements/network/ops-view-remoteingress.ts +1 -1
  125. package/ts_web/elements/network/ops-view-routes.ts +1 -1
  126. package/ts_web/elements/network/ops-view-sourceprofiles.ts +1 -1
  127. package/ts_web/elements/network/ops-view-targetprofiles.ts +1 -1
  128. package/ts_web/elements/network/ops-view-vpn.ts +1 -1
  129. package/ts_web/elements/ops-dashboard.ts +14 -4
  130. package/ts_web/elements/ops-view-logs.ts +1 -1
  131. package/ts_web/elements/overview/ops-view-config.ts +2 -2
  132. package/ts_web/elements/overview/ops-view-overview.ts +1 -1
  133. package/ts_web/elements/security/ops-view-security-authentication.ts +1 -1
  134. package/ts_web/elements/security/ops-view-security-blocked.ts +1 -1
  135. package/ts_web/elements/security/ops-view-security-overview.ts +1 -1
  136. package/ts_web/router.ts +3 -1
@@ -0,0 +1,361 @@
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 { DeesElement, html, customElement, css, state, cssManager, } from '@design.estate/dees-element';
36
+ import * as appstate from '../../appstate.js';
37
+ import * as interfaces from '../../../dist_ts_interfaces/index.js';
38
+ import { viewHostCss } from '../shared/css.js';
39
+ import { appRouter } from '../../router.js';
40
+ let OpsViewDomains = (() => {
41
+ let _classDecorators = [customElement('ops-view-domains')];
42
+ let _classDescriptor;
43
+ let _classExtraInitializers = [];
44
+ let _classThis;
45
+ let _classSuper = DeesElement;
46
+ let _domainsState_decorators;
47
+ let _domainsState_initializers = [];
48
+ let _domainsState_extraInitializers = [];
49
+ var OpsViewDomains = class extends _classSuper {
50
+ static { _classThis = this; }
51
+ static {
52
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
53
+ _domainsState_decorators = [state()];
54
+ __esDecorate(this, null, _domainsState_decorators, { kind: "accessor", name: "domainsState", static: false, private: false, access: { has: obj => "domainsState" in obj, get: obj => obj.domainsState, set: (obj, value) => { obj.domainsState = value; } }, metadata: _metadata }, _domainsState_initializers, _domainsState_extraInitializers);
55
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
56
+ OpsViewDomains = _classThis = _classDescriptor.value;
57
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
58
+ }
59
+ #domainsState_accessor_storage = __runInitializers(this, _domainsState_initializers, appstate.domainsStatePart.getState());
60
+ get domainsState() { return this.#domainsState_accessor_storage; }
61
+ set domainsState(value) { this.#domainsState_accessor_storage = value; }
62
+ constructor() {
63
+ super();
64
+ __runInitializers(this, _domainsState_extraInitializers);
65
+ const sub = appstate.domainsStatePart.select().subscribe((newState) => {
66
+ this.domainsState = newState;
67
+ });
68
+ this.rxSubscriptions.push(sub);
69
+ }
70
+ async connectedCallback() {
71
+ await super.connectedCallback();
72
+ await appstate.domainsStatePart.dispatchAction(appstate.fetchDomainsAndProvidersAction, null);
73
+ }
74
+ static styles = [
75
+ cssManager.defaultStyles,
76
+ viewHostCss,
77
+ css `
78
+ .domainsContainer {
79
+ display: flex;
80
+ flex-direction: column;
81
+ gap: 24px;
82
+ }
83
+
84
+ .sourceBadge {
85
+ display: inline-flex;
86
+ align-items: center;
87
+ padding: 3px 8px;
88
+ border-radius: 4px;
89
+ font-size: 11px;
90
+ font-weight: 500;
91
+ }
92
+
93
+ .sourceBadge.manual {
94
+ background: ${cssManager.bdTheme('#e0e7ff', '#1e1b4b')};
95
+ color: ${cssManager.bdTheme('#3730a3', '#a5b4fc')};
96
+ }
97
+
98
+ .sourceBadge.provider {
99
+ background: ${cssManager.bdTheme('#fef3c7', '#451a03')};
100
+ color: ${cssManager.bdTheme('#92400e', '#fde047')};
101
+ }
102
+ `,
103
+ ];
104
+ render() {
105
+ const domains = this.domainsState.domains;
106
+ const providersById = new Map(this.domainsState.providers.map((p) => [p.id, p]));
107
+ return html `
108
+ <dees-heading level="3">Domains</dees-heading>
109
+ <div class="domainsContainer">
110
+ <dees-table
111
+ .heading1=${'Domains'}
112
+ .heading2=${'Domains under management — manual (authoritative) or imported from a provider'}
113
+ .data=${domains}
114
+ .showColumnFilters=${true}
115
+ .displayFunction=${(d) => ({
116
+ Name: d.name,
117
+ Source: this.renderSourceBadge(d, providersById),
118
+ Authoritative: d.authoritative ? 'yes' : 'no',
119
+ Nameservers: d.nameservers?.join(', ') || '-',
120
+ 'Last Synced': d.lastSyncedAt
121
+ ? new Date(d.lastSyncedAt).toLocaleString()
122
+ : '-',
123
+ })}
124
+ .dataActions=${[
125
+ {
126
+ name: 'Add Manual Domain',
127
+ iconName: 'lucide:plus',
128
+ type: ['header'],
129
+ actionFunc: async () => {
130
+ await this.showCreateManualDialog();
131
+ },
132
+ },
133
+ {
134
+ name: 'Import from Provider',
135
+ iconName: 'lucide:download',
136
+ type: ['header'],
137
+ actionFunc: async () => {
138
+ await this.showImportDialog();
139
+ },
140
+ },
141
+ {
142
+ name: 'Refresh',
143
+ iconName: 'lucide:rotateCw',
144
+ type: ['header'],
145
+ actionFunc: async () => {
146
+ await appstate.domainsStatePart.dispatchAction(appstate.fetchDomainsAndProvidersAction, null);
147
+ },
148
+ },
149
+ {
150
+ name: 'View Records',
151
+ iconName: 'lucide:list',
152
+ type: ['inRow', 'contextmenu'],
153
+ actionFunc: async (actionData) => {
154
+ const domain = actionData.item;
155
+ await appstate.domainsStatePart.dispatchAction(appstate.fetchDnsRecordsForDomainAction, { domainId: domain.id });
156
+ appRouter.navigateToView('domains', 'dns');
157
+ },
158
+ },
159
+ {
160
+ name: 'Sync Now',
161
+ iconName: 'lucide:rotateCw',
162
+ type: ['inRow', 'contextmenu'],
163
+ actionFunc: async (actionData) => {
164
+ const domain = actionData.item;
165
+ if (domain.source !== 'provider') {
166
+ const { DeesToast } = await import('@design.estate/dees-catalog');
167
+ DeesToast.show({
168
+ message: 'Sync only applies to provider-managed domains',
169
+ type: 'warning',
170
+ duration: 3000,
171
+ });
172
+ return;
173
+ }
174
+ await appstate.domainsStatePart.dispatchAction(appstate.syncDomainAction, {
175
+ id: domain.id,
176
+ });
177
+ },
178
+ },
179
+ {
180
+ name: 'Delete',
181
+ iconName: 'lucide:trash2',
182
+ type: ['inRow', 'contextmenu'],
183
+ actionFunc: async (actionData) => {
184
+ const domain = actionData.item;
185
+ await this.deleteDomain(domain);
186
+ },
187
+ },
188
+ ]}
189
+ ></dees-table>
190
+ </div>
191
+ `;
192
+ }
193
+ renderSourceBadge(d, providersById) {
194
+ if (d.source === 'manual') {
195
+ return html `<span class="sourceBadge manual">Manual</span>`;
196
+ }
197
+ const provider = d.providerId ? providersById.get(d.providerId) : undefined;
198
+ return html `<span class="sourceBadge provider">${provider?.name || 'Provider'}</span>`;
199
+ }
200
+ async showCreateManualDialog() {
201
+ const { DeesModal } = await import('@design.estate/dees-catalog');
202
+ DeesModal.createAndShow({
203
+ heading: 'Add Manual Domain',
204
+ content: html `
205
+ <dees-form>
206
+ <dees-input-text .key=${'name'} .label=${'FQDN (e.g. example.com)'} .required=${true}></dees-input-text>
207
+ <dees-input-text .key=${'description'} .label=${'Description (optional)'}></dees-input-text>
208
+ </dees-form>
209
+ <p style="margin-top: 12px; font-size: 12px; opacity: 0.7;">
210
+ dcrouter will become the authoritative DNS server for this domain. You'll need to
211
+ delegate the domain's nameservers to dcrouter to make this effective.
212
+ </p>
213
+ `,
214
+ menuOptions: [
215
+ { name: 'Cancel', action: async (modalArg) => modalArg.destroy() },
216
+ {
217
+ name: 'Create',
218
+ action: async (modalArg) => {
219
+ const form = modalArg.shadowRoot
220
+ ?.querySelector('.content')
221
+ ?.querySelector('dees-form');
222
+ if (!form)
223
+ return;
224
+ const data = await form.collectFormData();
225
+ await appstate.domainsStatePart.dispatchAction(appstate.createManualDomainAction, {
226
+ name: String(data.name),
227
+ description: data.description ? String(data.description) : undefined,
228
+ });
229
+ modalArg.destroy();
230
+ },
231
+ },
232
+ ],
233
+ });
234
+ }
235
+ async showImportDialog() {
236
+ const providers = this.domainsState.providers;
237
+ if (providers.length === 0) {
238
+ const { DeesToast } = await import('@design.estate/dees-catalog');
239
+ DeesToast.show({
240
+ message: 'Add a DNS provider first (Domains > Providers)',
241
+ type: 'warning',
242
+ duration: 3500,
243
+ });
244
+ return;
245
+ }
246
+ const { DeesModal, DeesToast } = await import('@design.estate/dees-catalog');
247
+ DeesModal.createAndShow({
248
+ heading: 'Import Domains from Provider',
249
+ content: html `
250
+ <dees-form>
251
+ <dees-input-dropdown
252
+ .key=${'providerId'}
253
+ .label=${'Provider'}
254
+ .options=${providers.map((p) => ({ option: p.name, key: p.id }))}
255
+ .required=${true}
256
+ ></dees-input-dropdown>
257
+ <dees-input-text
258
+ .key=${'domainNames'}
259
+ .label=${'Comma-separated FQDNs to import (e.g. example.com, foo.com)'}
260
+ .required=${true}
261
+ ></dees-input-text>
262
+ </dees-form>
263
+ <p style="margin-top: 12px; font-size: 12px; opacity: 0.7;">
264
+ Tip: use "List Provider Domains" to see what's available before typing.
265
+ </p>
266
+ `,
267
+ menuOptions: [
268
+ { name: 'Cancel', action: async (modalArg) => modalArg.destroy() },
269
+ {
270
+ name: 'List Provider Domains',
271
+ action: async (_modalArg) => {
272
+ const form = _modalArg.shadowRoot
273
+ ?.querySelector('.content')
274
+ ?.querySelector('dees-form');
275
+ if (!form)
276
+ return;
277
+ const data = await form.collectFormData();
278
+ const providerKey = data.providerId?.key ?? data.providerId;
279
+ if (!providerKey) {
280
+ DeesToast.show({ message: 'Pick a provider first', type: 'warning', duration: 2500 });
281
+ return;
282
+ }
283
+ const result = await appstate.fetchProviderDomains(String(providerKey));
284
+ if (!result.success) {
285
+ DeesToast.show({
286
+ message: result.message || 'Failed to fetch domains',
287
+ type: 'error',
288
+ duration: 4000,
289
+ });
290
+ return;
291
+ }
292
+ const list = (result.domains ?? []).map((d) => d.name).join(', ');
293
+ DeesToast.show({
294
+ message: `Provider has: ${list || '(none)'}`,
295
+ type: 'info',
296
+ duration: 8000,
297
+ });
298
+ },
299
+ },
300
+ {
301
+ name: 'Import',
302
+ action: async (modalArg) => {
303
+ const form = modalArg.shadowRoot
304
+ ?.querySelector('.content')
305
+ ?.querySelector('dees-form');
306
+ if (!form)
307
+ return;
308
+ const data = await form.collectFormData();
309
+ const providerKey = data.providerId?.key ?? data.providerId;
310
+ if (!providerKey) {
311
+ DeesToast.show({ message: 'Pick a provider', type: 'warning', duration: 2500 });
312
+ return;
313
+ }
314
+ const names = String(data.domainNames || '')
315
+ .split(',')
316
+ .map((s) => s.trim())
317
+ .filter(Boolean);
318
+ if (names.length === 0) {
319
+ DeesToast.show({ message: 'Enter at least one FQDN', type: 'warning', duration: 2500 });
320
+ return;
321
+ }
322
+ await appstate.domainsStatePart.dispatchAction(appstate.importDomainsFromProviderAction, { providerId: String(providerKey), domainNames: names });
323
+ modalArg.destroy();
324
+ },
325
+ },
326
+ ],
327
+ });
328
+ }
329
+ async deleteDomain(domain) {
330
+ const { DeesModal } = await import('@design.estate/dees-catalog');
331
+ DeesModal.createAndShow({
332
+ heading: `Delete domain ${domain.name}?`,
333
+ content: html `
334
+ <p>
335
+ ${domain.source === 'provider'
336
+ ? 'This removes the domain and its cached records from dcrouter only. The zone at the provider is NOT touched.'
337
+ : 'This removes the domain and all of its DNS records from dcrouter. dcrouter will no longer answer queries for this domain after the next restart.'}
338
+ </p>
339
+ `,
340
+ menuOptions: [
341
+ { name: 'Cancel', action: async (modalArg) => modalArg.destroy() },
342
+ {
343
+ name: 'Delete',
344
+ action: async (modalArg) => {
345
+ await appstate.domainsStatePart.dispatchAction(appstate.deleteDomainAction, {
346
+ id: domain.id,
347
+ });
348
+ modalArg.destroy();
349
+ },
350
+ },
351
+ ],
352
+ });
353
+ }
354
+ static {
355
+ __runInitializers(_classThis, _classExtraInitializers);
356
+ }
357
+ };
358
+ return OpsViewDomains = _classThis;
359
+ })();
360
+ export { OpsViewDomains };
361
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctZG9tYWlucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy9kb21haW5zL29wcy12aWV3LWRvbWFpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxXQUFXLEVBQ1gsSUFBSSxFQUNKLGFBQWEsRUFFYixHQUFHLEVBQ0gsS0FBSyxFQUNMLFVBQVUsR0FDWCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0lBUy9CLGNBQWM7NEJBRDFCLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQzs7OztzQkFDRSxXQUFXOzs7OzhCQUFuQixTQUFRLFdBQVc7Ozs7d0NBQzVDLEtBQUssRUFBRTtZQUNSLHlMQUFTLFlBQVksNkJBQVosWUFBWSxtR0FBaUU7WUFGeEYsNktBeVRDOzs7O1FBdlRDLHFGQUFnRCxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFHLEVBQUM7UUFBdEYsSUFBUyxZQUFZLGtEQUFpRTtRQUF0RixJQUFTLFlBQVksd0RBQWlFO1FBRXRGO1lBQ0UsS0FBSyxFQUFFLENBQUM7O1lBQ1IsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNwRSxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztZQUMvQixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2hDO1FBRUQsS0FBSyxDQUFDLGlCQUFpQjtZQUNyQixNQUFNLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sUUFBUSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEcsQ0FBQztRQUVNLE1BQU0sQ0FBQyxNQUFNLEdBQUc7WUFDckIsVUFBVSxDQUFDLGFBQWE7WUFDeEIsV0FBVztZQUNYLEdBQUcsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7c0JBaUJlLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQztpQkFDN0MsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDOzs7O3NCQUluQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7aUJBQzdDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQzs7S0FFcEQ7U0FDRixDQUFDO1FBRUssTUFBTTtZQUNYLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO1lBQzFDLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVqRixPQUFPLElBQUksQ0FBQTs7OztzQkFJTyxTQUFTO3NCQUNULCtFQUErRTtrQkFDbkYsT0FBTzsrQkFDTSxJQUFJOzZCQUNOLENBQUMsQ0FBMEIsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO2dCQUNaLE1BQU0sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQztnQkFDaEQsYUFBYSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDN0MsV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUc7Z0JBQzdDLGFBQWEsRUFBRSxDQUFDLENBQUMsWUFBWTtvQkFDM0IsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxjQUFjLEVBQUU7b0JBQzNDLENBQUMsQ0FBQyxHQUFHO2FBQ1IsQ0FBQzt5QkFDYTtnQkFDYjtvQkFDRSxJQUFJLEVBQUUsbUJBQW1CO29CQUN6QixRQUFRLEVBQUUsYUFBYTtvQkFDdkIsSUFBSSxFQUFFLENBQUMsUUFBaUIsQ0FBQztvQkFDekIsVUFBVSxFQUFFLEtBQUssSUFBSSxFQUFFO3dCQUNyQixNQUFNLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO29CQUN0QyxDQUFDO2lCQUNGO2dCQUNEO29CQUNFLElBQUksRUFBRSxzQkFBc0I7b0JBQzVCLFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLElBQUksRUFBRSxDQUFDLFFBQWlCLENBQUM7b0JBQ3pCLFVBQVUsRUFBRSxLQUFLLElBQUksRUFBRTt3QkFDckIsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDaEMsQ0FBQztpQkFDRjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsU0FBUztvQkFDZixRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixJQUFJLEVBQUUsQ0FBQyxRQUFpQixDQUFDO29CQUN6QixVQUFVLEVBQUUsS0FBSyxJQUFJLEVBQUU7d0JBQ3JCLE1BQU0sUUFBUSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FDNUMsUUFBUSxDQUFDLDhCQUE4QixFQUN2QyxJQUFJLENBQ0wsQ0FBQztvQkFDSixDQUFDO2lCQUNGO2dCQUNEO29CQUNFLElBQUksRUFBRSxjQUFjO29CQUNwQixRQUFRLEVBQUUsYUFBYTtvQkFDdkIsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBUTtvQkFDckMsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFlLEVBQUUsRUFBRTt3QkFDcEMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQStCLENBQUM7d0JBQzFELE1BQU0sUUFBUSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FDNUMsUUFBUSxDQUFDLDhCQUE4QixFQUN2QyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQ3hCLENBQUM7d0JBQ0YsU0FBUyxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQzdDLENBQUM7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQVE7b0JBQ3JDLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBZSxFQUFFLEVBQUU7d0JBQ3BDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUErQixDQUFDO3dCQUMxRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7NEJBQ2pDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDOzRCQUNsRSxTQUFTLENBQUMsSUFBSSxDQUFDO2dDQUNiLE9BQU8sRUFBRSwrQ0FBK0M7Z0NBQ3hELElBQUksRUFBRSxTQUFTO2dDQUNmLFFBQVEsRUFBRSxJQUFJOzZCQUNmLENBQUMsQ0FBQzs0QkFDSCxPQUFPO3dCQUNULENBQUM7d0JBQ0QsTUFBTSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTs0QkFDeEUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFO3lCQUNkLENBQUMsQ0FBQztvQkFDTCxDQUFDO2lCQUNGO2dCQUNEO29CQUNFLElBQUksRUFBRSxRQUFRO29CQUNkLFFBQVEsRUFBRSxlQUFlO29CQUN6QixJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFRO29CQUNyQyxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQWUsRUFBRSxFQUFFO3dCQUNwQyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBK0IsQ0FBQzt3QkFDMUQsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNsQyxDQUFDO2lCQUNGO2FBQ0Y7OztLQUdOLENBQUM7UUFDSixDQUFDO1FBRU8saUJBQWlCLENBQ3ZCLENBQTBCLEVBQzFCLGFBQThEO1lBRTlELElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxJQUFJLENBQUEsZ0RBQWdELENBQUM7WUFDOUQsQ0FBQztZQUNELE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDNUUsT0FBTyxJQUFJLENBQUEsc0NBQXNDLFFBQVEsRUFBRSxJQUFJLElBQUksVUFBVSxTQUFTLENBQUM7UUFDekYsQ0FBQztRQUVPLEtBQUssQ0FBQyxzQkFBc0I7WUFDbEMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7WUFDbEUsU0FBUyxDQUFDLGFBQWEsQ0FBQztnQkFDdEIsT0FBTyxFQUFFLG1CQUFtQjtnQkFDNUIsT0FBTyxFQUFFLElBQUksQ0FBQTs7a0NBRWUsTUFBTSxXQUFXLHlCQUF5QixjQUFjLElBQUk7a0NBQzVELGFBQWEsV0FBVyx3QkFBd0I7Ozs7OztPQU0zRTtnQkFDRCxXQUFXLEVBQUU7b0JBQ1gsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQ3ZFO3dCQUNFLElBQUksRUFBRSxRQUFRO3dCQUNkLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBYSxFQUFFLEVBQUU7NEJBQzlCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxVQUFVO2dDQUM5QixFQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUM7Z0NBQzNCLEVBQUUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDOzRCQUMvQixJQUFJLENBQUMsSUFBSTtnQ0FBRSxPQUFPOzRCQUNsQixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzs0QkFDMUMsTUFBTSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRTtnQ0FDaEYsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dDQUN2QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUzs2QkFDckUsQ0FBQyxDQUFDOzRCQUNILFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDckIsQ0FBQztxQkFDRjtpQkFDRjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFTyxLQUFLLENBQUMsZ0JBQWdCO1lBQzVCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO1lBQzlDLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7Z0JBQ2xFLFNBQVMsQ0FBQyxJQUFJLENBQUM7b0JBQ2IsT0FBTyxFQUFFLGdEQUFnRDtvQkFDekQsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsUUFBUSxFQUFFLElBQUk7aUJBQ2YsQ0FBQyxDQUFDO2dCQUNILE9BQU87WUFDVCxDQUFDO1lBRUQsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBQzdFLFNBQVMsQ0FBQyxhQUFhLENBQUM7Z0JBQ3RCLE9BQU8sRUFBRSw4QkFBOEI7Z0JBQ3ZDLE9BQU8sRUFBRSxJQUFJLENBQUE7OzttQkFHQSxZQUFZO3FCQUNWLFVBQVU7dUJBQ1IsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDcEQsSUFBSTs7O21CQUdULGFBQWE7cUJBQ1gsNkRBQTZEO3dCQUMxRCxJQUFJOzs7Ozs7T0FNckI7Z0JBQ0QsV0FBVyxFQUFFO29CQUNYLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQWEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUN2RTt3QkFDRSxJQUFJLEVBQUUsdUJBQXVCO3dCQUM3QixNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQWMsRUFBRSxFQUFFOzRCQUMvQixNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsVUFBVTtnQ0FDL0IsRUFBRSxhQUFhLENBQUMsVUFBVSxDQUFDO2dDQUMzQixFQUFFLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQzs0QkFDL0IsSUFBSSxDQUFDLElBQUk7Z0NBQUUsT0FBTzs0QkFDbEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7NEJBQzFDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUM7NEJBQzVELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQ0FDakIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dDQUN0RixPQUFPOzRCQUNULENBQUM7NEJBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7NEJBQ3hFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7Z0NBQ3BCLFNBQVMsQ0FBQyxJQUFJLENBQUM7b0NBQ2IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLElBQUkseUJBQXlCO29DQUNwRCxJQUFJLEVBQUUsT0FBTztvQ0FDYixRQUFRLEVBQUUsSUFBSTtpQ0FDZixDQUFDLENBQUM7Z0NBQ0gsT0FBTzs0QkFDVCxDQUFDOzRCQUNELE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ2xFLFNBQVMsQ0FBQyxJQUFJLENBQUM7Z0NBQ2IsT0FBTyxFQUFFLGlCQUFpQixJQUFJLElBQUksUUFBUSxFQUFFO2dDQUM1QyxJQUFJLEVBQUUsTUFBTTtnQ0FDWixRQUFRLEVBQUUsSUFBSTs2QkFDZixDQUFDLENBQUM7d0JBQ0wsQ0FBQztxQkFDRjtvQkFDRDt3QkFDRSxJQUFJLEVBQUUsUUFBUTt3QkFDZCxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQWEsRUFBRSxFQUFFOzRCQUM5QixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsVUFBVTtnQ0FDOUIsRUFBRSxhQUFhLENBQUMsVUFBVSxDQUFDO2dDQUMzQixFQUFFLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQzs0QkFDL0IsSUFBSSxDQUFDLElBQUk7Z0NBQUUsT0FBTzs0QkFDbEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7NEJBQzFDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUM7NEJBQzVELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQ0FDakIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dDQUNoRixPQUFPOzRCQUNULENBQUM7NEJBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO2lDQUN6QyxLQUFLLENBQUMsR0FBRyxDQUFDO2lDQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2lDQUNwQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7NEJBQ25CLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQ0FDdkIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dDQUN4RixPQUFPOzRCQUNULENBQUM7NEJBQ0QsTUFBTSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUM1QyxRQUFRLENBQUMsK0JBQStCLEVBQ3hDLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQ3hELENBQUM7NEJBQ0YsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUNyQixDQUFDO3FCQUNGO2lCQUNGO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVPLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBK0I7WUFDeEQsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7WUFDbEUsU0FBUyxDQUFDLGFBQWEsQ0FBQztnQkFDdEIsT0FBTyxFQUFFLGlCQUFpQixNQUFNLENBQUMsSUFBSSxHQUFHO2dCQUN4QyxPQUFPLEVBQUUsSUFBSSxDQUFBOztZQUVQLE1BQU0sQ0FBQyxNQUFNLEtBQUssVUFBVTtvQkFDNUIsQ0FBQyxDQUFDLDZHQUE2RztvQkFDL0csQ0FBQyxDQUFDLGtKQUFrSjs7T0FFeko7Z0JBQ0QsV0FBVyxFQUFFO29CQUNYLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQWEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUN2RTt3QkFDRSxJQUFJLEVBQUUsUUFBUTt3QkFDZCxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQWEsRUFBRSxFQUFFOzRCQUM5QixNQUFNLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFO2dDQUMxRSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7NkJBQ2QsQ0FBQyxDQUFDOzRCQUNILFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDckIsQ0FBQztxQkFDRjtpQkFDRjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7O1lBeFRVLHVEQUFjOzs7OztTQUFkLGNBQWMifQ==
@@ -0,0 +1,21 @@
1
+ import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
2
+ import * as appstate from '../../appstate.js';
3
+ import './dns-provider-form.js';
4
+ declare global {
5
+ interface HTMLElementTagNameMap {
6
+ 'ops-view-providers': OpsViewProviders;
7
+ }
8
+ }
9
+ export declare class OpsViewProviders extends DeesElement {
10
+ accessor domainsState: appstate.IDomainsState;
11
+ constructor();
12
+ connectedCallback(): Promise<void>;
13
+ static styles: import("@design.estate/dees-element").CSSResult[];
14
+ render(): TemplateResult;
15
+ private renderStatusBadge;
16
+ private providerTypeLabel;
17
+ private showCreateDialog;
18
+ private showEditDialog;
19
+ private testProvider;
20
+ private deleteProvider;
21
+ }