@serve.zone/dcrouter 5.0.2 → 5.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/dist_serve/bundle.js +30539 -0
  2. package/dist_serve/bundle.js.map +7 -0
  3. package/dist_serve/index.html +1 -0
  4. package/dist_ts/00_commitinfo_data.d.ts +8 -0
  5. package/dist_ts/00_commitinfo_data.js +9 -0
  6. package/dist_ts/cache/classes.cache.cleaner.d.ts +47 -0
  7. package/dist_ts/cache/classes.cache.cleaner.js +130 -0
  8. package/dist_ts/cache/classes.cached.document.d.ts +76 -0
  9. package/dist_ts/cache/classes.cached.document.js +100 -0
  10. package/dist_ts/cache/classes.cachedb.d.ts +60 -0
  11. package/dist_ts/cache/classes.cachedb.js +126 -0
  12. package/dist_ts/cache/documents/classes.cached.email.d.ts +125 -0
  13. package/dist_ts/cache/documents/classes.cached.email.js +337 -0
  14. package/dist_ts/cache/documents/classes.cached.ip.reputation.d.ts +119 -0
  15. package/dist_ts/cache/documents/classes.cached.ip.reputation.js +323 -0
  16. package/dist_ts/cache/documents/index.d.ts +2 -0
  17. package/dist_ts/cache/documents/index.js +3 -0
  18. package/dist_ts/cache/index.d.ts +4 -0
  19. package/dist_ts/cache/index.js +7 -0
  20. package/dist_ts/classes.dcrouter.d.ts +276 -0
  21. package/dist_ts/classes.dcrouter.js +1033 -0
  22. package/dist_ts/config/index.d.ts +1 -0
  23. package/dist_ts/config/index.js +3 -0
  24. package/dist_ts/config/validator.d.ts +104 -0
  25. package/dist_ts/config/validator.js +152 -0
  26. package/dist_ts/errors/base.errors.d.ts +224 -0
  27. package/dist_ts/errors/base.errors.js +320 -0
  28. package/dist_ts/errors/error-handler.d.ts +98 -0
  29. package/dist_ts/errors/error-handler.js +282 -0
  30. package/dist_ts/errors/error.codes.d.ts +115 -0
  31. package/dist_ts/errors/error.codes.js +136 -0
  32. package/dist_ts/errors/index.d.ts +54 -0
  33. package/dist_ts/errors/index.js +136 -0
  34. package/dist_ts/errors/reputation.errors.d.ts +183 -0
  35. package/dist_ts/errors/reputation.errors.js +292 -0
  36. package/dist_ts/index.d.ts +6 -0
  37. package/dist_ts/index.js +9 -0
  38. package/dist_ts/logger.d.ts +17 -0
  39. package/dist_ts/logger.js +76 -0
  40. package/dist_ts/monitoring/classes.metricscache.d.ts +32 -0
  41. package/dist_ts/monitoring/classes.metricscache.js +63 -0
  42. package/dist_ts/monitoring/classes.metricsmanager.d.ts +112 -0
  43. package/dist_ts/monitoring/classes.metricsmanager.js +446 -0
  44. package/dist_ts/monitoring/index.d.ts +1 -0
  45. package/dist_ts/monitoring/index.js +2 -0
  46. package/dist_ts/opsserver/classes.opsserver.d.ts +22 -0
  47. package/dist_ts/opsserver/classes.opsserver.js +56 -0
  48. package/dist_ts/opsserver/handlers/admin.handler.d.ts +31 -0
  49. package/dist_ts/opsserver/handlers/admin.handler.js +180 -0
  50. package/dist_ts/opsserver/handlers/config.handler.d.ts +9 -0
  51. package/dist_ts/opsserver/handlers/config.handler.js +67 -0
  52. package/dist_ts/opsserver/handlers/email-ops.handler.d.ts +12 -0
  53. package/dist_ts/opsserver/handlers/email-ops.handler.js +219 -0
  54. package/dist_ts/opsserver/handlers/index.d.ts +7 -0
  55. package/dist_ts/opsserver/handlers/index.js +8 -0
  56. package/dist_ts/opsserver/handlers/logs.handler.d.ts +10 -0
  57. package/dist_ts/opsserver/handlers/logs.handler.js +122 -0
  58. package/dist_ts/opsserver/handlers/radius.handler.d.ts +8 -0
  59. package/dist_ts/opsserver/handlers/radius.handler.js +296 -0
  60. package/dist_ts/opsserver/handlers/security.handler.d.ts +11 -0
  61. package/dist_ts/opsserver/handlers/security.handler.js +217 -0
  62. package/dist_ts/opsserver/handlers/stats.handler.d.ts +13 -0
  63. package/dist_ts/opsserver/handlers/stats.handler.js +366 -0
  64. package/dist_ts/opsserver/helpers/guards.d.ts +25 -0
  65. package/dist_ts/opsserver/helpers/guards.js +41 -0
  66. package/dist_ts/opsserver/index.d.ts +1 -0
  67. package/dist_ts/opsserver/index.js +2 -0
  68. package/dist_ts/paths.d.ts +16 -0
  69. package/dist_ts/paths.js +43 -0
  70. package/dist_ts/plugins.d.ts +78 -0
  71. package/dist_ts/plugins.js +112 -0
  72. package/dist_ts/radius/classes.accounting.manager.d.ts +218 -0
  73. package/dist_ts/radius/classes.accounting.manager.js +417 -0
  74. package/dist_ts/radius/classes.radius.server.d.ts +171 -0
  75. package/dist_ts/radius/classes.radius.server.js +385 -0
  76. package/dist_ts/radius/classes.vlan.manager.d.ts +128 -0
  77. package/dist_ts/radius/classes.vlan.manager.js +272 -0
  78. package/dist_ts/radius/index.d.ts +13 -0
  79. package/dist_ts/radius/index.js +14 -0
  80. package/dist_ts/security/classes.contentscanner.d.ts +160 -0
  81. package/dist_ts/security/classes.contentscanner.js +637 -0
  82. package/dist_ts/security/classes.ipreputationchecker.d.ts +150 -0
  83. package/dist_ts/security/classes.ipreputationchecker.js +512 -0
  84. package/dist_ts/security/classes.securitylogger.d.ts +140 -0
  85. package/dist_ts/security/classes.securitylogger.js +235 -0
  86. package/dist_ts/security/index.d.ts +3 -0
  87. package/dist_ts/security/index.js +4 -0
  88. package/dist_ts/sms/classes.smsservice.d.ts +15 -0
  89. package/dist_ts/sms/classes.smsservice.js +72 -0
  90. package/dist_ts/sms/config/sms.config.d.ts +93 -0
  91. package/dist_ts/sms/config/sms.config.js +2 -0
  92. package/dist_ts/sms/config/sms.schema.d.ts +5 -0
  93. package/dist_ts/sms/config/sms.schema.js +121 -0
  94. package/dist_ts/sms/index.d.ts +1 -0
  95. package/dist_ts/sms/index.js +2 -0
  96. package/dist_ts/storage/classes.storagemanager.d.ts +82 -0
  97. package/dist_ts/storage/classes.storagemanager.js +344 -0
  98. package/dist_ts/storage/index.d.ts +1 -0
  99. package/dist_ts/storage/index.js +3 -0
  100. package/dist_ts_interfaces/data/auth.d.ts +8 -0
  101. package/dist_ts_interfaces/data/auth.js +2 -0
  102. package/dist_ts_interfaces/data/index.d.ts +2 -0
  103. package/dist_ts_interfaces/data/index.js +3 -0
  104. package/dist_ts_interfaces/data/stats.d.ts +120 -0
  105. package/dist_ts_interfaces/data/stats.js +2 -0
  106. package/{ts_interfaces/index.ts → dist_ts_interfaces/index.d.ts} +1 -5
  107. package/dist_ts_interfaces/index.js +8 -0
  108. package/{ts_interfaces/plugins.ts → dist_ts_interfaces/plugins.d.ts} +1 -5
  109. package/dist_ts_interfaces/plugins.js +4 -0
  110. package/dist_ts_interfaces/requests/admin.d.ts +31 -0
  111. package/dist_ts_interfaces/requests/admin.js +3 -0
  112. package/dist_ts_interfaces/requests/combined.stats.d.ts +24 -0
  113. package/dist_ts_interfaces/requests/combined.stats.js +2 -0
  114. package/dist_ts_interfaces/requests/config.d.ts +13 -0
  115. package/dist_ts_interfaces/requests/config.js +3 -0
  116. package/dist_ts_interfaces/requests/email-ops.d.ts +139 -0
  117. package/dist_ts_interfaces/requests/email-ops.js +3 -0
  118. package/{ts_interfaces/requests/index.ts → dist_ts_interfaces/requests/index.d.ts} +1 -1
  119. package/dist_ts_interfaces/requests/index.js +8 -0
  120. package/dist_ts_interfaces/requests/logs.d.ts +34 -0
  121. package/dist_ts_interfaces/requests/logs.js +4 -0
  122. package/dist_ts_interfaces/requests/radius.d.ts +268 -0
  123. package/dist_ts_interfaces/requests/radius.js +3 -0
  124. package/dist_ts_interfaces/requests/stats.d.ts +131 -0
  125. package/dist_ts_interfaces/requests/stats.js +4 -0
  126. package/dist_ts_web/00_commitinfo_data.d.ts +8 -0
  127. package/dist_ts_web/00_commitinfo_data.js +9 -0
  128. package/dist_ts_web/appstate.d.ts +96 -0
  129. package/dist_ts_web/appstate.js +587 -0
  130. package/dist_ts_web/elements/index.d.ts +8 -0
  131. package/dist_ts_web/elements/index.js +9 -0
  132. package/dist_ts_web/elements/ops-dashboard.d.ts +23 -0
  133. package/dist_ts_web/elements/ops-dashboard.js +271 -0
  134. package/dist_ts_web/elements/ops-view-config.d.ts +17 -0
  135. package/dist_ts_web/elements/ops-view-config.js +414 -0
  136. package/dist_ts_web/elements/ops-view-emails.d.ts +44 -0
  137. package/dist_ts_web/elements/ops-view-emails.js +880 -0
  138. package/dist_ts_web/elements/ops-view-logs.d.ts +13 -0
  139. package/dist_ts_web/elements/ops-view-logs.js +249 -0
  140. package/dist_ts_web/elements/ops-view-network.d.ts +65 -0
  141. package/dist_ts_web/elements/ops-view-network.js +579 -0
  142. package/dist_ts_web/elements/ops-view-overview.d.ts +14 -0
  143. package/dist_ts_web/elements/ops-view-overview.js +344 -0
  144. package/dist_ts_web/elements/ops-view-security.d.ts +21 -0
  145. package/dist_ts_web/elements/ops-view-security.js +568 -0
  146. package/dist_ts_web/elements/shared/css.d.ts +1 -0
  147. package/dist_ts_web/elements/shared/css.js +10 -0
  148. package/dist_ts_web/elements/shared/index.d.ts +2 -0
  149. package/dist_ts_web/elements/shared/index.js +3 -0
  150. package/dist_ts_web/elements/shared/ops-sectionheading.d.ts +5 -0
  151. package/dist_ts_web/elements/shared/ops-sectionheading.js +82 -0
  152. package/dist_ts_web/index.d.ts +1 -0
  153. package/dist_ts_web/index.js +10 -0
  154. package/dist_ts_web/plugins.d.ts +4 -0
  155. package/dist_ts_web/plugins.js +7 -0
  156. package/dist_ts_web/router.d.ts +25 -0
  157. package/dist_ts_web/router.js +165 -0
  158. package/package.json +22 -18
  159. package/readme.hints.md +3 -3
  160. package/readme.md +3 -3
  161. package/ts/00_commitinfo_data.ts +1 -1
  162. package/ts/cache/classes.cachedb.ts +3 -2
  163. package/ts/classes.dcrouter.ts +2 -2
  164. package/ts/paths.ts +11 -5
  165. package/ts_web/00_commitinfo_data.ts +1 -1
  166. package/.dockerignore +0 -1
  167. package/.gitea/workflows/docker_nottags.yaml +0 -71
  168. package/.gitea/workflows/docker_tags.yaml +0 -106
  169. package/.playwright-mcp/dcrouter-scrollbar-issue.png +0 -0
  170. package/.playwright-mcp/page-2026-02-01T23-10-23-737Z.png +0 -0
  171. package/.playwright-mcp/page-2026-02-01T23-11-19-449Z.png +0 -0
  172. package/.playwright-mcp/page-2026-02-01T23-12-03-126Z.png +0 -0
  173. package/.playwright-mcp/page-2026-02-01T23-12-15-576Z.png +0 -0
  174. package/.vscode/launch.json +0 -11
  175. package/.vscode/settings.json +0 -26
  176. package/Dockerfile +0 -46
  177. package/changelog.md +0 -350
  178. package/cli.child.js +0 -4
  179. package/cli.child.ts +0 -4
  180. package/cli.ts.js +0 -5
  181. package/html/index.html +0 -121
  182. package/test/readme.md +0 -443
  183. package/test/test.config.md +0 -175
  184. package/test/test.contentscanner.ts +0 -265
  185. package/test/test.dcrouter.email.ts +0 -159
  186. package/test/test.dns-server-config.ts +0 -140
  187. package/test/test.dns-socket-handler.ts +0 -148
  188. package/test/test.errors.ts +0 -274
  189. package/test/test.ipreputationchecker.ts +0 -179
  190. package/test/test.jwt-auth.ts +0 -131
  191. package/test/test.opsserver-api.ts +0 -84
  192. package/test/test.protected-endpoint.ts +0 -120
  193. package/test/test.storagemanager.ts +0 -289
  194. package/test_watch/devserver.ts +0 -35
  195. package/ts_interfaces/data/auth.ts +0 -8
  196. package/ts_interfaces/data/index.ts +0 -2
  197. package/ts_interfaces/data/stats.ts +0 -131
  198. package/ts_interfaces/readme.md +0 -205
  199. package/ts_interfaces/requests/admin.ts +0 -46
  200. package/ts_interfaces/requests/combined.stats.ts +0 -25
  201. package/ts_interfaces/requests/config.ts +0 -18
  202. package/ts_interfaces/requests/email-ops.ts +0 -239
  203. package/ts_interfaces/requests/logs.ts +0 -44
  204. package/ts_interfaces/requests/radius.ts +0 -329
  205. package/ts_interfaces/requests/stats.ts +0 -162
  206. package/ts_interfaces/tspublish.json +0 -3
  207. package/tsconfig.json +0 -12
@@ -0,0 +1,271 @@
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 appstate from '../appstate.js';
37
+ import { appRouter } from '../router.js';
38
+ import { DeesElement, css, cssManager, customElement, html, state } from '@design.estate/dees-element';
39
+ // Import view components
40
+ import { OpsViewOverview } from './ops-view-overview.js';
41
+ import { OpsViewNetwork } from './ops-view-network.js';
42
+ import { OpsViewEmails } from './ops-view-emails.js';
43
+ import { OpsViewLogs } from './ops-view-logs.js';
44
+ import { OpsViewConfig } from './ops-view-config.js';
45
+ import { OpsViewSecurity } from './ops-view-security.js';
46
+ let OpsDashboard = (() => {
47
+ let _classDecorators = [customElement('ops-dashboard')];
48
+ let _classDescriptor;
49
+ let _classExtraInitializers = [];
50
+ let _classThis;
51
+ let _classSuper = DeesElement;
52
+ let _loginState_decorators;
53
+ let _loginState_initializers = [];
54
+ let _loginState_extraInitializers = [];
55
+ let _uiState_decorators;
56
+ let _uiState_initializers = [];
57
+ let _uiState_extraInitializers = [];
58
+ var OpsDashboard = 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
+ _loginState_decorators = [state()];
63
+ _uiState_decorators = [state()];
64
+ __esDecorate(this, null, _loginState_decorators, { kind: "accessor", name: "loginState", static: false, private: false, access: { has: obj => "loginState" in obj, get: obj => obj.loginState, set: (obj, value) => { obj.loginState = value; } }, metadata: _metadata }, _loginState_initializers, _loginState_extraInitializers);
65
+ __esDecorate(this, null, _uiState_decorators, { kind: "accessor", name: "uiState", static: false, private: false, access: { has: obj => "uiState" in obj, get: obj => obj.uiState, set: (obj, value) => { obj.uiState = value; } }, metadata: _metadata }, _uiState_initializers, _uiState_extraInitializers);
66
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
67
+ OpsDashboard = _classThis = _classDescriptor.value;
68
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
69
+ }
70
+ #loginState_accessor_storage = __runInitializers(this, _loginState_initializers, {
71
+ identity: null,
72
+ isLoggedIn: false,
73
+ });
74
+ get loginState() { return this.#loginState_accessor_storage; }
75
+ set loginState(value) { this.#loginState_accessor_storage = value; }
76
+ #uiState_accessor_storage = (__runInitializers(this, _loginState_extraInitializers), __runInitializers(this, _uiState_initializers, {
77
+ activeView: 'overview',
78
+ sidebarCollapsed: false,
79
+ autoRefresh: true,
80
+ refreshInterval: 1000,
81
+ theme: 'light',
82
+ }));
83
+ get uiState() { return this.#uiState_accessor_storage; }
84
+ set uiState(value) { this.#uiState_accessor_storage = value; }
85
+ // Store viewTabs as a property to maintain object references
86
+ viewTabs = (__runInitializers(this, _uiState_extraInitializers), [
87
+ {
88
+ name: 'Overview',
89
+ element: OpsViewOverview,
90
+ },
91
+ {
92
+ name: 'Network',
93
+ element: OpsViewNetwork,
94
+ },
95
+ {
96
+ name: 'Emails',
97
+ element: OpsViewEmails,
98
+ },
99
+ {
100
+ name: 'Logs',
101
+ element: OpsViewLogs,
102
+ },
103
+ {
104
+ name: 'Configuration',
105
+ element: OpsViewConfig,
106
+ },
107
+ {
108
+ name: 'Security',
109
+ element: OpsViewSecurity,
110
+ },
111
+ ]);
112
+ /**
113
+ * Get the current view tab based on the UI state's activeView.
114
+ * Used to pass the correct selectedView to dees-simple-appdash on initial render.
115
+ */
116
+ get currentViewTab() {
117
+ return this.viewTabs.find(t => t.name.toLowerCase() === this.uiState.activeView) || this.viewTabs[0];
118
+ }
119
+ constructor() {
120
+ super();
121
+ document.title = 'DCRouter OpsServer';
122
+ // Subscribe to login state
123
+ const loginSubscription = appstate.loginStatePart
124
+ .select((stateArg) => stateArg)
125
+ .subscribe((loginState) => {
126
+ this.loginState = loginState;
127
+ // Trigger data fetch when logged in
128
+ if (loginState.isLoggedIn) {
129
+ appstate.statsStatePart.dispatchAction(appstate.fetchAllStatsAction, null);
130
+ appstate.configStatePart.dispatchAction(appstate.fetchConfigurationAction, null);
131
+ }
132
+ });
133
+ this.rxSubscriptions.push(loginSubscription);
134
+ // Subscribe to UI state
135
+ const uiSubscription = appstate.uiStatePart
136
+ .select((stateArg) => stateArg)
137
+ .subscribe((uiState) => {
138
+ this.uiState = uiState;
139
+ // Sync appdash view when state changes (e.g., from URL navigation)
140
+ this.syncAppdashView(uiState.activeView);
141
+ });
142
+ this.rxSubscriptions.push(uiSubscription);
143
+ }
144
+ /**
145
+ * Sync the dees-simple-appdash view selection with the current state.
146
+ * This is needed when the URL changes and we need to update the UI.
147
+ */
148
+ syncAppdashView(viewName) {
149
+ const appDash = this.shadowRoot?.querySelector('dees-simple-appdash');
150
+ if (!appDash)
151
+ return;
152
+ const targetTab = this.viewTabs.find(t => t.name.toLowerCase() === viewName);
153
+ if (!targetTab)
154
+ return;
155
+ // Check if we need to switch (avoid unnecessary updates)
156
+ if (appDash.selectedView === targetTab)
157
+ return;
158
+ // Update the selected view programmatically
159
+ appDash.selectedView = targetTab;
160
+ // Update the displayed content
161
+ const content = appDash.shadowRoot?.querySelector('.appcontent');
162
+ if (content) {
163
+ if (appDash.currentView) {
164
+ appDash.currentView.remove();
165
+ }
166
+ const view = new targetTab.element();
167
+ content.appendChild(view);
168
+ appDash.currentView = view;
169
+ }
170
+ }
171
+ static styles = [
172
+ cssManager.defaultStyles,
173
+ css `
174
+ :host {
175
+ display: block;
176
+ width: 100%;
177
+ height: 100vh;
178
+ overflow: hidden;
179
+ }
180
+
181
+ .maincontainer {
182
+ position: relative;
183
+ width: 100%;
184
+ height: 100%;
185
+ }
186
+ `,
187
+ ];
188
+ render() {
189
+ return html `
190
+ <div class="maincontainer">
191
+ <dees-simple-login
192
+ name="DCRouter OpsServer"
193
+ >
194
+ <dees-simple-appdash
195
+ name="DCRouter OpsServer"
196
+ .viewTabs=${this.viewTabs}
197
+ .selectedView=${this.currentViewTab}
198
+ >
199
+ </dees-simple-appdash>
200
+ </dees-simple-login>
201
+ </div>
202
+ `;
203
+ }
204
+ async firstUpdated() {
205
+ const simpleLogin = this.shadowRoot.querySelector('dees-simple-login');
206
+ simpleLogin.addEventListener('login', (e) => {
207
+ // Handle logout event
208
+ this.login(e.detail.data.username, e.detail.data.password);
209
+ });
210
+ // Handle view changes
211
+ const appDash = this.shadowRoot.querySelector('dees-simple-appdash');
212
+ if (appDash) {
213
+ appDash.addEventListener('view-select', (e) => {
214
+ const viewName = e.detail.view.name.toLowerCase();
215
+ // Use router for navigation instead of direct state update
216
+ appRouter.navigateToView(viewName);
217
+ });
218
+ // Handle logout event
219
+ appDash.addEventListener('logout', async () => {
220
+ await appstate.loginStatePart.dispatchAction(appstate.logoutAction, null);
221
+ });
222
+ }
223
+ // Handle initial state - check if we have a stored session that's still valid
224
+ const loginState = appstate.loginStatePart.getState();
225
+ if (loginState.identity?.jwt) {
226
+ // Verify JWT hasn't expired
227
+ if (loginState.identity.expiresAt > Date.now()) {
228
+ // JWT still valid, restore logged-in state
229
+ this.loginState = loginState;
230
+ await simpleLogin.switchToSlottedContent();
231
+ await appstate.statsStatePart.dispatchAction(appstate.fetchAllStatsAction, null);
232
+ await appstate.configStatePart.dispatchAction(appstate.fetchConfigurationAction, null);
233
+ }
234
+ else {
235
+ // JWT expired, clear the stored state
236
+ await appstate.loginStatePart.dispatchAction(appstate.logoutAction, null);
237
+ }
238
+ }
239
+ }
240
+ async login(username, password) {
241
+ const domtools = await this.domtoolsPromise;
242
+ console.log(`Attempting to login...`);
243
+ const simpleLogin = this.shadowRoot.querySelector('dees-simple-login');
244
+ const form = simpleLogin.shadowRoot.querySelector('dees-form');
245
+ form.setStatus('pending', 'Logging in...');
246
+ const state = await appstate.loginStatePart.dispatchAction(appstate.loginAction, {
247
+ username,
248
+ password,
249
+ });
250
+ if (state.identity) {
251
+ console.log('Login successful');
252
+ this.loginState = state;
253
+ form.setStatus('success', 'Logged in!');
254
+ await simpleLogin.switchToSlottedContent();
255
+ await appstate.statsStatePart.dispatchAction(appstate.fetchAllStatsAction, null);
256
+ await appstate.configStatePart.dispatchAction(appstate.fetchConfigurationAction, null);
257
+ }
258
+ else {
259
+ form.setStatus('error', 'Login failed!');
260
+ await domtools.convenience.smartdelay.delayFor(2000);
261
+ form.reset();
262
+ }
263
+ }
264
+ static {
265
+ __runInitializers(_classThis, _classExtraInitializers);
266
+ }
267
+ };
268
+ return OpsDashboard = _classThis;
269
+ })();
270
+ export { OpsDashboard };
271
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLWRhc2hib2FyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9lbGVtZW50cy9vcHMtZGFzaGJvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEtBQUssUUFBUSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFekMsT0FBTyxFQUNMLFdBQVcsRUFDWCxHQUFHLEVBQ0gsVUFBVSxFQUNWLGFBQWEsRUFDYixJQUFJLEVBQ0osS0FBSyxFQUVOLE1BQU0sNkJBQTZCLENBQUM7QUFFckMseUJBQXlCO0FBQ3pCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0lBRzVDLFlBQVk7NEJBRHhCLGFBQWEsQ0FBQyxlQUFlLENBQUM7Ozs7c0JBQ0csV0FBVzs7Ozs7Ozs0QkFBbkIsU0FBUSxXQUFXOzs7O3NDQUMxQyxLQUFLLEVBQUU7bUNBS1AsS0FBSyxFQUFFO1lBTEMsbUxBQVMsVUFBVSw2QkFBVixVQUFVLCtGQUcxQjtZQUVPLDBLQUFTLE9BQU8sNkJBQVAsT0FBTyx5RkFNdkI7WUFaSiw2S0E4TUM7Ozs7UUE3TVUsaUZBQTRDO1lBQ25ELFFBQVEsRUFBRSxJQUFJO1lBQ2QsVUFBVSxFQUFFLEtBQUs7U0FDbEIsRUFB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
@@ -0,0 +1,17 @@
1
+ import * as plugins from '../plugins.js';
2
+ import * as appstate from '../appstate.js';
3
+ import { DeesElement } from '@design.estate/dees-element';
4
+ export declare class OpsViewConfig extends DeesElement {
5
+ accessor configState: appstate.IConfigState;
6
+ constructor();
7
+ static styles: plugins.deesElement.CSSResult[];
8
+ render(): plugins.deesElement.TemplateResult<1>;
9
+ private renderConfigSection;
10
+ private renderStatusBadge;
11
+ private renderConfigFields;
12
+ private renderArrayValue;
13
+ private getArrayItemLabel;
14
+ private formatFieldName;
15
+ private formatValue;
16
+ private formatBytes;
17
+ }