@serve.zone/dcrouter 11.14.0 → 11.15.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 (207) hide show
  1. package/dist_serve/bundle.js +4 -4
  2. package/dist_ts/00_commitinfo_data.d.ts +8 -0
  3. package/dist_ts/00_commitinfo_data.js +9 -0
  4. package/dist_ts/cache/classes.cache.cleaner.d.ts +47 -0
  5. package/dist_ts/cache/classes.cache.cleaner.js +130 -0
  6. package/dist_ts/cache/classes.cached.document.d.ts +76 -0
  7. package/dist_ts/cache/classes.cached.document.js +100 -0
  8. package/dist_ts/cache/classes.cachedb.d.ts +60 -0
  9. package/dist_ts/cache/classes.cachedb.js +126 -0
  10. package/dist_ts/cache/documents/classes.cached.email.d.ts +125 -0
  11. package/dist_ts/cache/documents/classes.cached.email.js +337 -0
  12. package/dist_ts/cache/documents/classes.cached.ip.reputation.d.ts +119 -0
  13. package/dist_ts/cache/documents/classes.cached.ip.reputation.js +323 -0
  14. package/dist_ts/cache/documents/index.d.ts +2 -0
  15. package/dist_ts/cache/documents/index.js +3 -0
  16. package/dist_ts/cache/index.d.ts +4 -0
  17. package/dist_ts/cache/index.js +7 -0
  18. package/dist_ts/classes.cert-provision-scheduler.d.ts +54 -0
  19. package/dist_ts/classes.cert-provision-scheduler.js +118 -0
  20. package/dist_ts/classes.dcrouter.d.ts +392 -0
  21. package/dist_ts/classes.dcrouter.js +1703 -0
  22. package/dist_ts/classes.storage-cert-manager.d.ts +18 -0
  23. package/dist_ts/classes.storage-cert-manager.js +43 -0
  24. package/dist_ts/config/classes.api-token-manager.d.ts +46 -0
  25. package/dist_ts/config/classes.api-token-manager.js +150 -0
  26. package/dist_ts/config/classes.route-config-manager.d.ts +38 -0
  27. package/dist_ts/config/classes.route-config-manager.js +257 -0
  28. package/dist_ts/config/index.d.ts +3 -0
  29. package/dist_ts/config/index.js +5 -0
  30. package/dist_ts/config/validator.d.ts +104 -0
  31. package/dist_ts/config/validator.js +152 -0
  32. package/dist_ts/errors/base.errors.d.ts +224 -0
  33. package/dist_ts/errors/base.errors.js +320 -0
  34. package/dist_ts/errors/error-handler.d.ts +98 -0
  35. package/dist_ts/errors/error-handler.js +282 -0
  36. package/dist_ts/errors/error.codes.d.ts +115 -0
  37. package/dist_ts/errors/error.codes.js +136 -0
  38. package/dist_ts/errors/index.d.ts +54 -0
  39. package/dist_ts/errors/index.js +136 -0
  40. package/dist_ts/errors/reputation.errors.d.ts +183 -0
  41. package/dist_ts/errors/reputation.errors.js +292 -0
  42. package/dist_ts/http3/http3-route-augmentation.d.ts +50 -0
  43. package/dist_ts/http3/http3-route-augmentation.js +98 -0
  44. package/dist_ts/http3/index.d.ts +1 -0
  45. package/dist_ts/http3/index.js +2 -0
  46. package/dist_ts/index.d.ts +8 -0
  47. package/dist_ts/index.js +29 -0
  48. package/dist_ts/logger.d.ts +21 -0
  49. package/dist_ts/logger.js +81 -0
  50. package/dist_ts/monitoring/classes.metricscache.d.ts +32 -0
  51. package/dist_ts/monitoring/classes.metricscache.js +63 -0
  52. package/dist_ts/monitoring/classes.metricsmanager.d.ts +184 -0
  53. package/dist_ts/monitoring/classes.metricsmanager.js +744 -0
  54. package/dist_ts/monitoring/index.d.ts +1 -0
  55. package/dist_ts/monitoring/index.js +2 -0
  56. package/dist_ts/opsserver/classes.opsserver.d.ts +38 -0
  57. package/dist_ts/opsserver/classes.opsserver.js +87 -0
  58. package/dist_ts/opsserver/handlers/admin.handler.d.ts +31 -0
  59. package/dist_ts/opsserver/handlers/admin.handler.js +180 -0
  60. package/dist_ts/opsserver/handlers/api-token.handler.d.ts +6 -0
  61. package/dist_ts/opsserver/handlers/api-token.handler.js +62 -0
  62. package/dist_ts/opsserver/handlers/certificate.handler.d.ts +32 -0
  63. package/dist_ts/opsserver/handlers/certificate.handler.js +421 -0
  64. package/dist_ts/opsserver/handlers/config.handler.d.ts +7 -0
  65. package/dist_ts/opsserver/handlers/config.handler.js +192 -0
  66. package/dist_ts/opsserver/handlers/email-ops.handler.d.ts +30 -0
  67. package/dist_ts/opsserver/handlers/email-ops.handler.js +227 -0
  68. package/dist_ts/opsserver/handlers/index.d.ts +12 -0
  69. package/dist_ts/opsserver/handlers/index.js +13 -0
  70. package/dist_ts/opsserver/handlers/logs.handler.d.ts +25 -0
  71. package/dist_ts/opsserver/handlers/logs.handler.js +256 -0
  72. package/dist_ts/opsserver/handlers/radius.handler.d.ts +6 -0
  73. package/dist_ts/opsserver/handlers/radius.handler.js +295 -0
  74. package/dist_ts/opsserver/handlers/remoteingress.handler.d.ts +6 -0
  75. package/dist_ts/opsserver/handlers/remoteingress.handler.js +156 -0
  76. package/dist_ts/opsserver/handlers/route-management.handler.d.ts +14 -0
  77. package/dist_ts/opsserver/handlers/route-management.handler.js +117 -0
  78. package/dist_ts/opsserver/handlers/security.handler.d.ts +9 -0
  79. package/dist_ts/opsserver/handlers/security.handler.js +233 -0
  80. package/dist_ts/opsserver/handlers/stats.handler.d.ts +11 -0
  81. package/dist_ts/opsserver/handlers/stats.handler.js +403 -0
  82. package/dist_ts/opsserver/handlers/vpn.handler.d.ts +6 -0
  83. package/dist_ts/opsserver/handlers/vpn.handler.js +199 -0
  84. package/dist_ts/opsserver/helpers/guards.d.ts +27 -0
  85. package/dist_ts/opsserver/helpers/guards.js +43 -0
  86. package/dist_ts/opsserver/index.d.ts +1 -0
  87. package/dist_ts/opsserver/index.js +2 -0
  88. package/dist_ts/paths.d.ts +26 -0
  89. package/dist_ts/paths.js +45 -0
  90. package/dist_ts/plugins.d.ts +81 -0
  91. package/dist_ts/plugins.js +115 -0
  92. package/dist_ts/radius/classes.accounting.manager.d.ts +231 -0
  93. package/dist_ts/radius/classes.accounting.manager.js +462 -0
  94. package/dist_ts/radius/classes.radius.server.d.ts +171 -0
  95. package/dist_ts/radius/classes.radius.server.js +386 -0
  96. package/dist_ts/radius/classes.vlan.manager.d.ts +128 -0
  97. package/dist_ts/radius/classes.vlan.manager.js +279 -0
  98. package/dist_ts/radius/index.d.ts +13 -0
  99. package/dist_ts/radius/index.js +14 -0
  100. package/dist_ts/remoteingress/classes.remoteingress-manager.d.ts +94 -0
  101. package/dist_ts/remoteingress/classes.remoteingress-manager.js +271 -0
  102. package/dist_ts/remoteingress/classes.tunnel-manager.d.ts +59 -0
  103. package/dist_ts/remoteingress/classes.tunnel-manager.js +165 -0
  104. package/dist_ts/remoteingress/index.d.ts +2 -0
  105. package/dist_ts/remoteingress/index.js +3 -0
  106. package/dist_ts/security/classes.contentscanner.d.ts +164 -0
  107. package/dist_ts/security/classes.contentscanner.js +642 -0
  108. package/dist_ts/security/classes.ipreputationchecker.d.ts +160 -0
  109. package/dist_ts/security/classes.ipreputationchecker.js +537 -0
  110. package/dist_ts/security/classes.securitylogger.d.ts +144 -0
  111. package/dist_ts/security/classes.securitylogger.js +235 -0
  112. package/dist_ts/security/index.d.ts +3 -0
  113. package/dist_ts/security/index.js +4 -0
  114. package/dist_ts/sms/classes.smsservice.d.ts +15 -0
  115. package/dist_ts/sms/classes.smsservice.js +72 -0
  116. package/dist_ts/sms/config/sms.config.d.ts +93 -0
  117. package/dist_ts/sms/config/sms.config.js +2 -0
  118. package/dist_ts/sms/config/sms.schema.d.ts +5 -0
  119. package/dist_ts/sms/config/sms.schema.js +121 -0
  120. package/dist_ts/sms/index.d.ts +1 -0
  121. package/dist_ts/sms/index.js +2 -0
  122. package/dist_ts/storage/classes.storagemanager.d.ts +83 -0
  123. package/dist_ts/storage/classes.storagemanager.js +348 -0
  124. package/dist_ts/storage/index.d.ts +1 -0
  125. package/dist_ts/storage/index.js +3 -0
  126. package/dist_ts/vpn/classes.vpn-manager.d.ts +127 -0
  127. package/dist_ts/vpn/classes.vpn-manager.js +335 -0
  128. package/dist_ts/vpn/index.d.ts +1 -0
  129. package/dist_ts/vpn/index.js +2 -0
  130. package/dist_ts_apiclient/classes.apitoken.d.ts +41 -0
  131. package/dist_ts_apiclient/classes.apitoken.js +115 -0
  132. package/dist_ts_apiclient/classes.certificate.d.ts +57 -0
  133. package/dist_ts_apiclient/classes.certificate.js +69 -0
  134. package/dist_ts_apiclient/classes.config.d.ts +7 -0
  135. package/dist_ts_apiclient/classes.config.js +11 -0
  136. package/dist_ts_apiclient/classes.dcrouterapiclient.d.ts +41 -0
  137. package/dist_ts_apiclient/classes.dcrouterapiclient.js +81 -0
  138. package/dist_ts_apiclient/classes.email.d.ts +30 -0
  139. package/dist_ts_apiclient/classes.email.js +52 -0
  140. package/dist_ts_apiclient/classes.logs.d.ts +21 -0
  141. package/dist_ts_apiclient/classes.logs.js +14 -0
  142. package/dist_ts_apiclient/classes.radius.d.ts +59 -0
  143. package/dist_ts_apiclient/classes.radius.js +95 -0
  144. package/dist_ts_apiclient/classes.remoteingress.d.ts +54 -0
  145. package/dist_ts_apiclient/classes.remoteingress.js +136 -0
  146. package/dist_ts_apiclient/classes.route.d.ts +42 -0
  147. package/dist_ts_apiclient/classes.route.js +154 -0
  148. package/dist_ts_apiclient/classes.stats.d.ts +47 -0
  149. package/dist_ts_apiclient/classes.stats.js +38 -0
  150. package/dist_ts_apiclient/index.d.ts +10 -0
  151. package/dist_ts_apiclient/index.js +14 -0
  152. package/dist_ts_apiclient/plugins.d.ts +3 -0
  153. package/dist_ts_apiclient/plugins.js +5 -0
  154. package/dist_ts_interfaces/data/remoteingress.d.ts +2 -0
  155. package/dist_ts_interfaces/data/vpn.d.ts +1 -1
  156. package/dist_ts_interfaces/requests/vpn.d.ts +1 -1
  157. package/dist_ts_web/00_commitinfo_data.d.ts +8 -0
  158. package/dist_ts_web/00_commitinfo_data.js +9 -0
  159. package/dist_ts_web/appstate.d.ts +238 -0
  160. package/dist_ts_web/appstate.js +1174 -0
  161. package/dist_ts_web/elements/index.d.ts +13 -0
  162. package/dist_ts_web/elements/index.js +14 -0
  163. package/dist_ts_web/elements/ops-dashboard.d.ts +23 -0
  164. package/dist_ts_web/elements/ops-dashboard.js +323 -0
  165. package/dist_ts_web/elements/ops-view-apitokens.d.ts +13 -0
  166. package/dist_ts_web/elements/ops-view-apitokens.js +371 -0
  167. package/dist_ts_web/elements/ops-view-certificates.d.ts +22 -0
  168. package/dist_ts_web/elements/ops-view-certificates.js +528 -0
  169. package/dist_ts_web/elements/ops-view-config.d.ts +19 -0
  170. package/dist_ts_web/elements/ops-view-config.js +339 -0
  171. package/dist_ts_web/elements/ops-view-emails.d.ts +21 -0
  172. package/dist_ts_web/elements/ops-view-emails.js +165 -0
  173. package/dist_ts_web/elements/ops-view-logs.d.ts +13 -0
  174. package/dist_ts_web/elements/ops-view-logs.js +159 -0
  175. package/dist_ts_web/elements/ops-view-network.d.ts +71 -0
  176. package/dist_ts_web/elements/ops-view-network.js +764 -0
  177. package/dist_ts_web/elements/ops-view-overview.d.ts +22 -0
  178. package/dist_ts_web/elements/ops-view-overview.js +456 -0
  179. package/dist_ts_web/elements/ops-view-remoteingress.d.ts +20 -0
  180. package/dist_ts_web/elements/ops-view-remoteingress.js +494 -0
  181. package/dist_ts_web/elements/ops-view-routes.d.ts +12 -0
  182. package/dist_ts_web/elements/ops-view-routes.js +404 -0
  183. package/dist_ts_web/elements/ops-view-security.d.ts +21 -0
  184. package/dist_ts_web/elements/ops-view-security.js +574 -0
  185. package/dist_ts_web/elements/ops-view-vpn.d.ts +14 -0
  186. package/dist_ts_web/elements/ops-view-vpn.js +369 -0
  187. package/dist_ts_web/elements/shared/css.d.ts +1 -0
  188. package/dist_ts_web/elements/shared/css.js +10 -0
  189. package/dist_ts_web/elements/shared/index.d.ts +2 -0
  190. package/dist_ts_web/elements/shared/index.js +3 -0
  191. package/dist_ts_web/elements/shared/ops-sectionheading.d.ts +5 -0
  192. package/dist_ts_web/elements/shared/ops-sectionheading.js +82 -0
  193. package/dist_ts_web/index.d.ts +1 -0
  194. package/dist_ts_web/index.js +10 -0
  195. package/dist_ts_web/plugins.d.ts +6 -0
  196. package/dist_ts_web/plugins.js +11 -0
  197. package/dist_ts_web/router.d.ts +19 -0
  198. package/dist_ts_web/router.js +91 -0
  199. package/package.json +2 -2
  200. package/ts/00_commitinfo_data.ts +1 -1
  201. package/ts/classes.dcrouter.ts +33 -3
  202. package/ts/config/classes.route-config-manager.ts +7 -6
  203. package/ts/opsserver/handlers/vpn.handler.ts +3 -3
  204. package/ts/vpn/classes.vpn-manager.ts +56 -5
  205. package/ts_web/00_commitinfo_data.ts +1 -1
  206. package/ts_web/appstate.ts +2 -2
  207. package/ts_web/elements/ops-view-vpn.ts +4 -4
@@ -0,0 +1,339 @@
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 * as shared from './shared/index.js';
37
+ import * as appstate from '../appstate.js';
38
+ import { appRouter } from '../router.js';
39
+ import { DeesElement, customElement, html, state, css, cssManager, } from '@design.estate/dees-element';
40
+ let OpsViewConfig = (() => {
41
+ let _classDecorators = [customElement('ops-view-config')];
42
+ let _classDescriptor;
43
+ let _classExtraInitializers = [];
44
+ let _classThis;
45
+ let _classSuper = DeesElement;
46
+ let _configState_decorators;
47
+ let _configState_initializers = [];
48
+ let _configState_extraInitializers = [];
49
+ var OpsViewConfig = 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
+ _configState_decorators = [state()];
54
+ __esDecorate(this, null, _configState_decorators, { kind: "accessor", name: "configState", static: false, private: false, access: { has: obj => "configState" in obj, get: obj => obj.configState, set: (obj, value) => { obj.configState = value; } }, metadata: _metadata }, _configState_initializers, _configState_extraInitializers);
55
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
56
+ OpsViewConfig = _classThis = _classDescriptor.value;
57
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
58
+ }
59
+ #configState_accessor_storage = __runInitializers(this, _configState_initializers, {
60
+ config: null,
61
+ isLoading: false,
62
+ error: null,
63
+ });
64
+ get configState() { return this.#configState_accessor_storage; }
65
+ set configState(value) { this.#configState_accessor_storage = value; }
66
+ constructor() {
67
+ super();
68
+ __runInitializers(this, _configState_extraInitializers);
69
+ const subscription = appstate.configStatePart
70
+ .select((stateArg) => stateArg)
71
+ .subscribe((configState) => {
72
+ this.configState = configState;
73
+ });
74
+ this.rxSubscriptions.push(subscription);
75
+ }
76
+ static styles = [
77
+ cssManager.defaultStyles,
78
+ shared.viewHostCss,
79
+ css `
80
+ .loadingMessage {
81
+ text-align: center;
82
+ padding: 40px;
83
+ color: ${cssManager.bdTheme('#71717a', '#a1a1aa')};
84
+ }
85
+
86
+ .errorMessage {
87
+ background: ${cssManager.bdTheme('#fee2e2', 'rgba(239,68,68,0.1)')};
88
+ border: 1px solid ${cssManager.bdTheme('#fecaca', 'rgba(239,68,68,0.3)')};
89
+ border-radius: 8px;
90
+ padding: 16px;
91
+ color: ${cssManager.bdTheme('#dc2626', '#ef4444')};
92
+ margin: 16px 0;
93
+ }
94
+ `,
95
+ ];
96
+ render() {
97
+ return html `
98
+ <ops-sectionheading>Configuration</ops-sectionheading>
99
+
100
+ ${this.configState.isLoading
101
+ ? html `
102
+ <div class="loadingMessage">
103
+ <dees-spinner></dees-spinner>
104
+ <p>Loading configuration...</p>
105
+ </div>
106
+ `
107
+ : this.configState.error
108
+ ? html `
109
+ <div class="errorMessage">
110
+ Error loading configuration: ${this.configState.error}
111
+ </div>
112
+ `
113
+ : this.configState.config
114
+ ? this.renderConfig()
115
+ : html `<div class="errorMessage">No configuration loaded</div>`}
116
+ `;
117
+ }
118
+ renderConfig() {
119
+ const cfg = this.configState.config;
120
+ return html `
121
+ <sz-config-overview
122
+ infoText="This view displays the current running configuration. DcRouter is configured through code or remote management."
123
+ @navigate=${(e) => {
124
+ if (e.detail?.view) {
125
+ appRouter.navigateToView(e.detail.view);
126
+ }
127
+ }}
128
+ >
129
+ ${this.renderSystemSection(cfg.system)}
130
+ ${this.renderSmartProxySection(cfg.smartProxy)}
131
+ ${this.renderEmailSection(cfg.email)}
132
+ ${this.renderDnsSection(cfg.dns)}
133
+ ${this.renderTlsSection(cfg.tls)}
134
+ ${this.renderCacheSection(cfg.cache)}
135
+ ${this.renderRadiusSection(cfg.radius)}
136
+ ${this.renderRemoteIngressSection(cfg.remoteIngress)}
137
+ </sz-config-overview>
138
+ `;
139
+ }
140
+ renderSystemSection(sys) {
141
+ // Annotate proxy IPs with source hint when Remote Ingress is active
142
+ const ri = this.configState.config?.remoteIngress;
143
+ let proxyIpValues = sys.proxyIps.length > 0 ? [...sys.proxyIps] : null;
144
+ if (proxyIpValues && ri?.enabled && proxyIpValues.includes('127.0.0.1')) {
145
+ proxyIpValues = proxyIpValues.map(ip => ip === '127.0.0.1' ? '127.0.0.1 (Remote Ingress)' : ip);
146
+ }
147
+ const fields = [
148
+ { key: 'Base Directory', value: sys.baseDir },
149
+ { key: 'Data Directory', value: sys.dataDir },
150
+ { key: 'Public IP', value: sys.publicIp },
151
+ { key: 'Proxy IPs', value: proxyIpValues, type: 'pills' },
152
+ { key: 'Uptime', value: this.formatUptime(sys.uptime) },
153
+ { key: 'Storage Backend', value: sys.storageBackend, type: 'badge' },
154
+ { key: 'Storage Path', value: sys.storagePath },
155
+ ];
156
+ return html `
157
+ <sz-config-section
158
+ title="System"
159
+ subtitle="Base paths and infrastructure"
160
+ icon="lucide:server"
161
+ status="enabled"
162
+ .fields=${fields}
163
+ ></sz-config-section>
164
+ `;
165
+ }
166
+ renderSmartProxySection(proxy) {
167
+ const fields = [
168
+ { key: 'Route Count', value: proxy.routeCount },
169
+ ];
170
+ if (proxy.acme) {
171
+ fields.push({ key: 'ACME Enabled', value: proxy.acme.enabled, type: 'boolean' }, { key: 'Account Email', value: proxy.acme.accountEmail || null }, { key: 'Use Production', value: proxy.acme.useProduction, type: 'boolean' }, { key: 'Auto Renew', value: proxy.acme.autoRenew, type: 'boolean' }, { key: 'Renew Threshold', value: `${proxy.acme.renewThresholdDays} days` });
172
+ }
173
+ const actions = [
174
+ { label: 'View Routes', icon: 'lucide:arrow-right', event: 'navigate', detail: { view: 'routes' } },
175
+ ];
176
+ return html `
177
+ <sz-config-section
178
+ title="SmartProxy"
179
+ subtitle="HTTP/HTTPS and TCP/SNI reverse proxy"
180
+ icon="lucide:network"
181
+ .status=${proxy.enabled ? 'enabled' : 'disabled'}
182
+ .fields=${fields}
183
+ .actions=${actions}
184
+ ></sz-config-section>
185
+ `;
186
+ }
187
+ renderEmailSection(email) {
188
+ const fields = [
189
+ { key: 'Ports', value: email.ports.length > 0 ? email.ports.map(String) : null, type: 'pills' },
190
+ { key: 'Hostname', value: email.hostname },
191
+ { key: 'Domains', value: email.domains.length > 0 ? email.domains : null, type: 'pills' },
192
+ { key: 'Email Routes', value: email.emailRouteCount },
193
+ { key: 'Received Emails Path', value: email.receivedEmailsPath },
194
+ ];
195
+ if (email.portMapping) {
196
+ const mappingStr = Object.entries(email.portMapping)
197
+ .map(([ext, int]) => `${ext} → ${int}`)
198
+ .join(', ');
199
+ fields.splice(1, 0, { key: 'Port Mapping', value: mappingStr, type: 'code' });
200
+ }
201
+ const actions = [
202
+ { label: 'View Emails', icon: 'lucide:arrow-right', event: 'navigate', detail: { view: 'emails' } },
203
+ ];
204
+ return html `
205
+ <sz-config-section
206
+ title="Email Server"
207
+ subtitle="SMTP email handling with smartmta"
208
+ icon="lucide:mail"
209
+ .status=${email.enabled ? 'enabled' : 'disabled'}
210
+ .fields=${fields}
211
+ .actions=${actions}
212
+ ></sz-config-section>
213
+ `;
214
+ }
215
+ renderDnsSection(dns) {
216
+ const fields = [
217
+ { key: 'Port', value: dns.port },
218
+ { key: 'NS Domains', value: dns.nsDomains.length > 0 ? dns.nsDomains : null, type: 'pills' },
219
+ { key: 'Scopes', value: dns.scopes.length > 0 ? dns.scopes : null, type: 'pills' },
220
+ { key: 'Record Count', value: dns.recordCount },
221
+ { key: 'DNS Challenge', value: dns.dnsChallenge, type: 'boolean' },
222
+ ];
223
+ return html `
224
+ <sz-config-section
225
+ title="DNS Server"
226
+ subtitle="Authoritative DNS with smartdns"
227
+ icon="lucide:globe"
228
+ .status=${dns.enabled ? 'enabled' : 'disabled'}
229
+ .fields=${fields}
230
+ ></sz-config-section>
231
+ `;
232
+ }
233
+ renderTlsSection(tls) {
234
+ const fields = [
235
+ { key: 'Contact Email', value: tls.contactEmail },
236
+ { key: 'Domain', value: tls.domain },
237
+ { key: 'Source', value: tls.source, type: 'badge' },
238
+ { key: 'Certificate Path', value: tls.certPath },
239
+ { key: 'Key Path', value: tls.keyPath },
240
+ ];
241
+ const status = tls.source === 'none' ? 'not-configured' : 'enabled';
242
+ const actions = [
243
+ { label: 'View Certificates', icon: 'lucide:arrow-right', event: 'navigate', detail: { view: 'certificates' } },
244
+ ];
245
+ return html `
246
+ <sz-config-section
247
+ title="TLS / Certificates"
248
+ subtitle="Certificate management and ACME"
249
+ icon="lucide:shield-check"
250
+ .status=${status}
251
+ .fields=${fields}
252
+ .actions=${actions}
253
+ ></sz-config-section>
254
+ `;
255
+ }
256
+ renderCacheSection(cache) {
257
+ const fields = [
258
+ { key: 'Storage Path', value: cache.storagePath },
259
+ { key: 'DB Name', value: cache.dbName },
260
+ { key: 'Default TTL', value: `${cache.defaultTTLDays} days` },
261
+ { key: 'Cleanup Interval', value: `${cache.cleanupIntervalHours} hours` },
262
+ ];
263
+ if (cache.ttlConfig && Object.keys(cache.ttlConfig).length > 0) {
264
+ for (const [key, val] of Object.entries(cache.ttlConfig)) {
265
+ fields.push({ key: `TTL: ${key}`, value: `${val} days` });
266
+ }
267
+ }
268
+ return html `
269
+ <sz-config-section
270
+ title="Cache Database"
271
+ subtitle="Persistent caching with smartdata"
272
+ icon="lucide:database"
273
+ .status=${cache.enabled ? 'enabled' : 'disabled'}
274
+ .fields=${fields}
275
+ ></sz-config-section>
276
+ `;
277
+ }
278
+ renderRadiusSection(radius) {
279
+ const fields = [
280
+ { key: 'Auth Port', value: radius.authPort },
281
+ { key: 'Accounting Port', value: radius.acctPort },
282
+ { key: 'Bind Address', value: radius.bindAddress },
283
+ { key: 'Client Count', value: radius.clientCount },
284
+ ];
285
+ if (radius.vlanDefaultVlan !== null) {
286
+ fields.push({ key: 'Default VLAN', value: radius.vlanDefaultVlan }, { key: 'Allow Unknown MACs', value: radius.vlanAllowUnknownMacs, type: 'boolean' }, { key: 'VLAN Mappings', value: radius.vlanMappingCount });
287
+ }
288
+ const status = radius.enabled ? 'enabled' : 'not-configured';
289
+ return html `
290
+ <sz-config-section
291
+ title="RADIUS Server"
292
+ subtitle="Network authentication and VLAN assignment"
293
+ icon="lucide:wifi"
294
+ .status=${status}
295
+ .fields=${fields}
296
+ ></sz-config-section>
297
+ `;
298
+ }
299
+ renderRemoteIngressSection(ri) {
300
+ const fields = [
301
+ { key: 'Tunnel Port', value: ri.tunnelPort },
302
+ { key: 'Hub Domain', value: ri.hubDomain },
303
+ { key: 'TLS Mode', value: ri.tlsMode, type: 'badge' },
304
+ { key: 'Connected Edge IPs', value: ri.connectedEdgeIps?.length > 0 ? ri.connectedEdgeIps : null, type: 'pills' },
305
+ ];
306
+ const actions = [
307
+ { label: 'View Remote Ingress', icon: 'lucide:arrow-right', event: 'navigate', detail: { view: 'remoteingress' } },
308
+ ];
309
+ return html `
310
+ <sz-config-section
311
+ title="Remote Ingress"
312
+ subtitle="Edge tunnel nodes"
313
+ icon="lucide:cloud"
314
+ .status=${ri.enabled ? 'enabled' : 'disabled'}
315
+ .fields=${fields}
316
+ .actions=${actions}
317
+ ></sz-config-section>
318
+ `;
319
+ }
320
+ formatUptime(seconds) {
321
+ const days = Math.floor(seconds / 86400);
322
+ const hours = Math.floor((seconds % 86400) / 3600);
323
+ const mins = Math.floor((seconds % 3600) / 60);
324
+ const parts = [];
325
+ if (days > 0)
326
+ parts.push(`${days}d`);
327
+ if (hours > 0)
328
+ parts.push(`${hours}h`);
329
+ parts.push(`${mins}m`);
330
+ return parts.join(' ');
331
+ }
332
+ static {
333
+ __runInitializers(_classThis, _classExtraInitializers);
334
+ }
335
+ };
336
+ return OpsViewConfig = _classThis;
337
+ })();
338
+ export { OpsViewConfig };
339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViL2VsZW1lbnRzL29wcy12aWV3LWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEtBQUssUUFBUSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFekMsT0FBTyxFQUNMLFdBQVcsRUFDWCxhQUFhLEVBQ2IsSUFBSSxFQUNKLEtBQUssRUFDTCxHQUFHLEVBQ0gsVUFBVSxHQUVYLE1BQU0sNkJBQTZCLENBQUM7SUFLeEIsYUFBYTs0QkFEekIsYUFBYSxDQUFDLGlCQUFpQixDQUFDOzs7O3NCQUNFLFdBQVc7Ozs7NkJBQW5CLFNBQVEsV0FBVzs7Ozt1Q0FDM0MsS0FBSyxFQUFFO1lBQ1Isc0xBQVMsV0FBVyw2QkFBWCxXQUFXLGlHQUlsQjtZQU5KLDZLQTJUQzs7OztRQXpUQyxtRkFBOEM7WUFDNUMsTUFBTSxFQUFFLElBQUk7WUFDWixTQUFTLEVBQUUsS0FBSztZQUNoQixLQUFLLEVBQUUsSUFBSTtTQUNaLEVBQUM7UUFKRixJQUFTLFdBQVcsaURBSWxCO1FBSkYsSUFBUyxXQUFXLHVEQUlsQjtRQUVGO1lBQ0UsS0FBSyxFQUFFLENBQUM7O1lBQ1IsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGVBQWU7aUJBQzFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDO2lCQUM5QixTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7WUFDTCxJ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
@@ -0,0 +1,21 @@
1
+ import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
2
+ import * as plugins from '../plugins.js';
3
+ import * as interfaces from '../../dist_ts_interfaces/index.js';
4
+ declare global {
5
+ interface HTMLElementTagNameMap {
6
+ 'ops-view-emails': OpsViewEmails;
7
+ }
8
+ }
9
+ export declare class OpsViewEmails extends DeesElement {
10
+ accessor emails: interfaces.requests.IEmail[];
11
+ accessor selectedEmail: interfaces.requests.IEmailDetail | null;
12
+ accessor currentView: 'list' | 'detail';
13
+ accessor isLoading: boolean;
14
+ private stateSubscription;
15
+ connectedCallback(): Promise<void>;
16
+ disconnectedCallback(): Promise<void>;
17
+ static styles: plugins.deesElement.CSSResult[];
18
+ render(): TemplateResult<1>;
19
+ private handleEmailClick;
20
+ private handleBack;
21
+ }
@@ -0,0 +1,165 @@
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, property, html, customElement, css, state, cssManager } from '@design.estate/dees-element';
36
+ import * as plugins from '../plugins.js';
37
+ import * as appstate from '../appstate.js';
38
+ import * as shared from './shared/index.js';
39
+ import * as interfaces from '../../dist_ts_interfaces/index.js';
40
+ let OpsViewEmails = (() => {
41
+ let _classDecorators = [customElement('ops-view-emails')];
42
+ let _classDescriptor;
43
+ let _classExtraInitializers = [];
44
+ let _classThis;
45
+ let _classSuper = DeesElement;
46
+ let _emails_decorators;
47
+ let _emails_initializers = [];
48
+ let _emails_extraInitializers = [];
49
+ let _selectedEmail_decorators;
50
+ let _selectedEmail_initializers = [];
51
+ let _selectedEmail_extraInitializers = [];
52
+ let _currentView_decorators;
53
+ let _currentView_initializers = [];
54
+ let _currentView_extraInitializers = [];
55
+ let _isLoading_decorators;
56
+ let _isLoading_initializers = [];
57
+ let _isLoading_extraInitializers = [];
58
+ var OpsViewEmails = class extends _classSuper {
59
+ static { _classThis = this; }
60
+ static {
61
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
62
+ _emails_decorators = [state()];
63
+ _selectedEmail_decorators = [state()];
64
+ _currentView_decorators = [state()];
65
+ _isLoading_decorators = [state()];
66
+ __esDecorate(this, null, _emails_decorators, { kind: "accessor", name: "emails", static: false, private: false, access: { has: obj => "emails" in obj, get: obj => obj.emails, set: (obj, value) => { obj.emails = value; } }, metadata: _metadata }, _emails_initializers, _emails_extraInitializers);
67
+ __esDecorate(this, null, _selectedEmail_decorators, { kind: "accessor", name: "selectedEmail", static: false, private: false, access: { has: obj => "selectedEmail" in obj, get: obj => obj.selectedEmail, set: (obj, value) => { obj.selectedEmail = value; } }, metadata: _metadata }, _selectedEmail_initializers, _selectedEmail_extraInitializers);
68
+ __esDecorate(this, null, _currentView_decorators, { kind: "accessor", name: "currentView", static: false, private: false, access: { has: obj => "currentView" in obj, get: obj => obj.currentView, set: (obj, value) => { obj.currentView = value; } }, metadata: _metadata }, _currentView_initializers, _currentView_extraInitializers);
69
+ __esDecorate(this, null, _isLoading_decorators, { kind: "accessor", name: "isLoading", static: false, private: false, access: { has: obj => "isLoading" in obj, get: obj => obj.isLoading, set: (obj, value) => { obj.isLoading = value; } }, metadata: _metadata }, _isLoading_initializers, _isLoading_extraInitializers);
70
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
71
+ OpsViewEmails = _classThis = _classDescriptor.value;
72
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
73
+ }
74
+ #emails_accessor_storage = __runInitializers(this, _emails_initializers, []);
75
+ get emails() { return this.#emails_accessor_storage; }
76
+ set emails(value) { this.#emails_accessor_storage = value; }
77
+ #selectedEmail_accessor_storage = (__runInitializers(this, _emails_extraInitializers), __runInitializers(this, _selectedEmail_initializers, null));
78
+ get selectedEmail() { return this.#selectedEmail_accessor_storage; }
79
+ set selectedEmail(value) { this.#selectedEmail_accessor_storage = value; }
80
+ #currentView_accessor_storage = (__runInitializers(this, _selectedEmail_extraInitializers), __runInitializers(this, _currentView_initializers, 'list'));
81
+ get currentView() { return this.#currentView_accessor_storage; }
82
+ set currentView(value) { this.#currentView_accessor_storage = value; }
83
+ #isLoading_accessor_storage = (__runInitializers(this, _currentView_extraInitializers), __runInitializers(this, _isLoading_initializers, false));
84
+ get isLoading() { return this.#isLoading_accessor_storage; }
85
+ set isLoading(value) { this.#isLoading_accessor_storage = value; }
86
+ stateSubscription = __runInitializers(this, _isLoading_extraInitializers);
87
+ async connectedCallback() {
88
+ await super.connectedCallback();
89
+ this.stateSubscription = appstate.emailOpsStatePart.select().subscribe((state) => {
90
+ this.emails = state.emails;
91
+ this.isLoading = state.isLoading;
92
+ });
93
+ // Initial fetch
94
+ await appstate.emailOpsStatePart.dispatchAction(appstate.fetchAllEmailsAction, null);
95
+ }
96
+ async disconnectedCallback() {
97
+ await super.disconnectedCallback();
98
+ if (this.stateSubscription) {
99
+ this.stateSubscription.unsubscribe();
100
+ }
101
+ }
102
+ static styles = [
103
+ cssManager.defaultStyles,
104
+ shared.viewHostCss,
105
+ css `
106
+ :host {
107
+ display: block;
108
+ height: 100%;
109
+ }
110
+
111
+ .viewContainer {
112
+ height: 100%;
113
+ }
114
+ `,
115
+ ];
116
+ render() {
117
+ return html `
118
+ <ops-sectionheading>Email Operations</ops-sectionheading>
119
+ <div class="viewContainer">
120
+ ${this.currentView === 'detail' && this.selectedEmail
121
+ ? html `
122
+ <sz-mta-detail-view
123
+ .email=${this.selectedEmail}
124
+ @back=${this.handleBack}
125
+ ></sz-mta-detail-view>
126
+ `
127
+ : html `
128
+ <sz-mta-list-view
129
+ .emails=${this.emails}
130
+ @email-click=${this.handleEmailClick}
131
+ ></sz-mta-list-view>
132
+ `}
133
+ </div>
134
+ `;
135
+ }
136
+ async handleEmailClick(e) {
137
+ const emailSummary = e.detail;
138
+ try {
139
+ const context = appstate.loginStatePart.getState();
140
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'getEmailDetail');
141
+ const response = await request.fire({
142
+ identity: context.identity,
143
+ emailId: emailSummary.id,
144
+ });
145
+ if (response.email) {
146
+ this.selectedEmail = response.email;
147
+ this.currentView = 'detail';
148
+ }
149
+ }
150
+ catch (error) {
151
+ console.error('Failed to fetch email detail:', error);
152
+ }
153
+ }
154
+ handleBack() {
155
+ this.selectedEmail = null;
156
+ this.currentView = 'list';
157
+ }
158
+ static {
159
+ __runInitializers(_classThis, _classExtraInitializers);
160
+ }
161
+ };
162
+ return OpsViewEmails = _classThis;
163
+ })();
164
+ export { OpsViewEmails };
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctZW1haWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViL2VsZW1lbnRzL29wcy12aWV3LWVtYWlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBdUIsR0FBRyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0SSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEtBQUssUUFBUSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sS0FBSyxNQUFNLE1BQU0sbUJBQW1CLENBQUM7QUFDNUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxtQ0FBbUMsQ0FBQztJQVNuRCxhQUFhOzRCQUR6QixhQUFhLENBQUMsaUJBQWlCLENBQUM7Ozs7c0JBQ0UsV0FBVzs7Ozs7Ozs7Ozs7Ozs2QkFBbkIsU0FBUSxXQUFXOzs7O2tDQUMzQyxLQUFLLEVBQUU7eUNBR1AsS0FBSyxFQUFFO3VDQUdQLEtBQUssRUFBRTtxQ0FHUCxLQUFLLEVBQUU7WUFSUix1S0FBUyxNQUFNLDZCQUFOLE1BQU0sdUZBQW9DO1lBR25ELDRMQUFTLGFBQWEsNkJBQWIsYUFBYSxxR0FBaUQ7WUFHdkUsc0xBQVMsV0FBVyw2QkFBWCxXQUFXLGlHQUE2QjtZQUdqRCxnTEFBUyxTQUFTLDZCQUFULFNBQVMsNkZBQVM7WUFYN0IsNktBK0ZDOzs7O1FBN0ZDLHlFQUFnRCxFQUFFLEVBQUM7UUFBbkQsSUFBUyxNQUFNLDRDQUFvQztRQUFuRCxJQUFTLE1BQU0sa0RBQW9DO1FBR25ELDRJQUFrRSxJQUFJLEdBQUM7UUFBdkUsSUFBUyxhQUFhLG1EQUFpRDtRQUF2RSxJQUFTLGFBQWEseURBQWlEO1FBR3ZFLCtJQUEwQyxNQUFNLEdBQUM7UUFBakQsSUFBUyxX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
@@ -0,0 +1,13 @@
1
+ import * as appstate from '../appstate.js';
2
+ import { DeesElement } from '@design.estate/dees-element';
3
+ export declare class OpsViewLogs extends DeesElement {
4
+ accessor logState: appstate.ILogState;
5
+ private lastPushedCount;
6
+ constructor();
7
+ static styles: import("@design.estate/dees-element").CSSResult[];
8
+ render(): import("@design.estate/dees-element").TemplateResult<1>;
9
+ connectedCallback(): Promise<void>;
10
+ updated(changedProperties: Map<string, any>): Promise<void>;
11
+ private pushLogsToChart;
12
+ private getMappedLogEntries;
13
+ }