@serve.zone/dcrouter 8.0.0 → 9.1.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 (88) hide show
  1. package/dist_serve/bundle.js +2420 -1227
  2. package/dist_ts/00_commitinfo_data.js +1 -1
  3. package/dist_ts/classes.dcrouter.d.ts +9 -0
  4. package/dist_ts/classes.dcrouter.js +27 -1
  5. package/dist_ts/config/classes.api-token-manager.d.ts +38 -0
  6. package/dist_ts/config/classes.api-token-manager.js +134 -0
  7. package/dist_ts/config/classes.route-config-manager.d.ts +35 -0
  8. package/dist_ts/config/classes.route-config-manager.js +231 -0
  9. package/dist_ts/config/index.d.ts +2 -0
  10. package/dist_ts/config/index.js +3 -1
  11. package/dist_ts/opsserver/classes.opsserver.d.ts +2 -0
  12. package/dist_ts/opsserver/classes.opsserver.js +5 -1
  13. package/dist_ts/opsserver/handlers/{config.handler.d.ts → api-token.handler.d.ts} +5 -2
  14. package/dist_ts/opsserver/handlers/api-token.handler.js +66 -0
  15. package/dist_ts/opsserver/handlers/index.d.ts +2 -0
  16. package/dist_ts/opsserver/handlers/index.js +3 -1
  17. package/dist_ts/opsserver/handlers/route-management.handler.d.ts +13 -0
  18. package/dist_ts/opsserver/handlers/route-management.handler.js +117 -0
  19. package/dist_ts_interfaces/data/index.d.ts +1 -0
  20. package/dist_ts_interfaces/data/index.js +2 -1
  21. package/dist_ts_interfaces/data/route-management.d.ts +68 -0
  22. package/dist_ts_interfaces/data/route-management.js +2 -0
  23. package/dist_ts_interfaces/requests/api-tokens.d.ts +63 -0
  24. package/dist_ts_interfaces/requests/api-tokens.js +2 -0
  25. package/dist_ts_interfaces/requests/config.d.ts +77 -1
  26. package/dist_ts_interfaces/requests/index.d.ts +2 -0
  27. package/dist_ts_interfaces/requests/index.js +3 -1
  28. package/dist_ts_interfaces/requests/route-management.d.ts +114 -0
  29. package/dist_ts_interfaces/requests/route-management.js +2 -0
  30. package/dist_ts_web/00_commitinfo_data.js +1 -1
  31. package/dist_ts_web/appstate.d.ts +37 -1
  32. package/dist_ts_web/appstate.js +220 -2
  33. package/dist_ts_web/elements/index.d.ts +2 -0
  34. package/dist_ts_web/elements/index.js +3 -1
  35. package/dist_ts_web/elements/ops-dashboard.js +23 -3
  36. package/dist_ts_web/elements/ops-view-apitokens.d.ts +12 -0
  37. package/dist_ts_web/elements/ops-view-apitokens.js +310 -0
  38. package/dist_ts_web/elements/ops-view-config.d.ts +10 -8
  39. package/dist_ts_web/elements/ops-view-config.js +215 -297
  40. package/dist_ts_web/elements/ops-view-routes.d.ts +12 -0
  41. package/dist_ts_web/elements/ops-view-routes.js +404 -0
  42. package/dist_ts_web/router.d.ts +1 -1
  43. package/dist_ts_web/router.js +2 -2
  44. package/package.json +2 -2
  45. package/ts/00_commitinfo_data.ts +1 -1
  46. package/ts/classes.dcrouter.ts +37 -1
  47. package/ts/config/classes.api-token-manager.ts +155 -0
  48. package/ts/config/classes.route-config-manager.ts +271 -0
  49. package/ts/config/index.ts +3 -1
  50. package/ts/opsserver/classes.opsserver.ts +4 -0
  51. package/ts/opsserver/handlers/api-token.handler.ts +96 -0
  52. package/ts/opsserver/handlers/config.handler.ts +154 -72
  53. package/ts/opsserver/handlers/index.ts +3 -1
  54. package/ts/opsserver/handlers/route-management.handler.ts +163 -0
  55. package/ts_web/00_commitinfo_data.ts +1 -1
  56. package/ts_web/appstate.ts +309 -2
  57. package/ts_web/elements/index.ts +2 -0
  58. package/ts_web/elements/ops-dashboard.ts +22 -2
  59. package/ts_web/elements/ops-view-apitokens.ts +285 -0
  60. package/ts_web/elements/ops-view-config.ts +237 -299
  61. package/ts_web/elements/ops-view-routes.ts +389 -0
  62. package/ts_web/router.ts +1 -1
  63. package/dist_ts/cache/classes.cache.cleaner.d.ts +0 -47
  64. package/dist_ts/cache/classes.cache.cleaner.js +0 -130
  65. package/dist_ts/cache/classes.cached.document.d.ts +0 -76
  66. package/dist_ts/cache/classes.cached.document.js +0 -100
  67. package/dist_ts/cache/classes.cachedb.d.ts +0 -60
  68. package/dist_ts/cache/classes.cachedb.js +0 -126
  69. package/dist_ts/cache/documents/classes.cached.email.d.ts +0 -125
  70. package/dist_ts/cache/documents/classes.cached.email.js +0 -337
  71. package/dist_ts/cache/documents/classes.cached.ip.reputation.d.ts +0 -119
  72. package/dist_ts/cache/documents/classes.cached.ip.reputation.js +0 -323
  73. package/dist_ts/cache/documents/index.d.ts +0 -2
  74. package/dist_ts/cache/documents/index.js +0 -3
  75. package/dist_ts/cache/index.d.ts +0 -4
  76. package/dist_ts/cache/index.js +0 -7
  77. package/dist_ts/monitoring/classes.metricscache.d.ts +0 -32
  78. package/dist_ts/monitoring/classes.metricscache.js +0 -63
  79. package/dist_ts/opsserver/handlers/admin.handler.d.ts +0 -31
  80. package/dist_ts/opsserver/handlers/admin.handler.js +0 -180
  81. package/dist_ts/opsserver/handlers/config.handler.js +0 -67
  82. package/dist_ts/opsserver/handlers/logs.handler.d.ts +0 -17
  83. package/dist_ts/opsserver/handlers/logs.handler.js +0 -215
  84. package/dist_ts/security/classes.securitylogger.js +0 -235
  85. package/dist_ts/storage/classes.storagemanager.d.ts +0 -82
  86. package/dist_ts/storage/classes.storagemanager.js +0 -344
  87. package/dist_ts/storage/index.d.ts +0 -1
  88. package/dist_ts/storage/index.js +0 -3
@@ -0,0 +1,310 @@
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 appstate from '../appstate.js';
36
+ import * as interfaces from '../../dist_ts_interfaces/index.js';
37
+ import { viewHostCss } from './shared/css.js';
38
+ import { DeesElement, css, cssManager, customElement, html, state, } from '@design.estate/dees-element';
39
+ let OpsViewApiTokens = (() => {
40
+ let _classDecorators = [customElement('ops-view-apitokens')];
41
+ let _classDescriptor;
42
+ let _classExtraInitializers = [];
43
+ let _classThis;
44
+ let _classSuper = DeesElement;
45
+ let _routeState_decorators;
46
+ let _routeState_initializers = [];
47
+ let _routeState_extraInitializers = [];
48
+ var OpsViewApiTokens = class extends _classSuper {
49
+ static { _classThis = this; }
50
+ static {
51
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
52
+ _routeState_decorators = [state()];
53
+ __esDecorate(this, null, _routeState_decorators, { kind: "accessor", name: "routeState", static: false, private: false, access: { has: obj => "routeState" in obj, get: obj => obj.routeState, set: (obj, value) => { obj.routeState = value; } }, metadata: _metadata }, _routeState_initializers, _routeState_extraInitializers);
54
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
55
+ OpsViewApiTokens = _classThis = _classDescriptor.value;
56
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
57
+ }
58
+ #routeState_accessor_storage = __runInitializers(this, _routeState_initializers, {
59
+ mergedRoutes: [],
60
+ warnings: [],
61
+ apiTokens: [],
62
+ isLoading: false,
63
+ error: null,
64
+ lastUpdated: 0,
65
+ });
66
+ get routeState() { return this.#routeState_accessor_storage; }
67
+ set routeState(value) { this.#routeState_accessor_storage = value; }
68
+ constructor() {
69
+ super();
70
+ __runInitializers(this, _routeState_extraInitializers);
71
+ const sub = appstate.routeManagementStatePart
72
+ .select((s) => s)
73
+ .subscribe((routeState) => {
74
+ this.routeState = routeState;
75
+ });
76
+ this.rxSubscriptions.push(sub);
77
+ // Re-fetch tokens when user logs in (fixes race condition where
78
+ // the view is created before authentication completes)
79
+ const loginSub = appstate.loginStatePart
80
+ .select((s) => s.isLoggedIn)
81
+ .subscribe((isLoggedIn) => {
82
+ if (isLoggedIn) {
83
+ appstate.routeManagementStatePart.dispatchAction(appstate.fetchApiTokensAction, null);
84
+ }
85
+ });
86
+ this.rxSubscriptions.push(loginSub);
87
+ }
88
+ static styles = [
89
+ cssManager.defaultStyles,
90
+ viewHostCss,
91
+ css `
92
+ .apiTokensContainer {
93
+ display: flex;
94
+ flex-direction: column;
95
+ gap: 24px;
96
+ }
97
+
98
+ .scopePill {
99
+ display: inline-flex;
100
+ align-items: center;
101
+ padding: 2px 6px;
102
+ border-radius: 3px;
103
+ font-size: 11px;
104
+ background: ${cssManager.bdTheme('rgba(0, 130, 200, 0.1)', 'rgba(0, 170, 255, 0.1)')};
105
+ color: ${cssManager.bdTheme('#0369a1', '#0af')};
106
+ margin-right: 4px;
107
+ margin-bottom: 2px;
108
+ }
109
+
110
+ .statusBadge {
111
+ display: inline-flex;
112
+ align-items: center;
113
+ padding: 3px 10px;
114
+ border-radius: 12px;
115
+ font-size: 12px;
116
+ font-weight: 600;
117
+ letter-spacing: 0.02em;
118
+ text-transform: uppercase;
119
+ }
120
+
121
+ .statusBadge.active {
122
+ background: ${cssManager.bdTheme('#dcfce7', '#14532d')};
123
+ color: ${cssManager.bdTheme('#166534', '#4ade80')};
124
+ }
125
+
126
+ .statusBadge.disabled {
127
+ background: ${cssManager.bdTheme('#fef2f2', '#450a0a')};
128
+ color: ${cssManager.bdTheme('#991b1b', '#f87171')};
129
+ }
130
+
131
+ .statusBadge.expired {
132
+ background: ${cssManager.bdTheme('#f3f4f6', '#374151')};
133
+ color: ${cssManager.bdTheme('#6b7280', '#9ca3af')};
134
+ }
135
+ `,
136
+ ];
137
+ render() {
138
+ const { apiTokens } = this.routeState;
139
+ return html `
140
+ <ops-sectionheading>API Tokens</ops-sectionheading>
141
+
142
+ <div class="apiTokensContainer">
143
+ <dees-table
144
+ .heading1=${'API Tokens'}
145
+ .heading2=${'Manage programmatic access tokens'}
146
+ .data=${apiTokens}
147
+ .dataName=${'token'}
148
+ .searchable=${true}
149
+ .displayFunction=${(token) => ({
150
+ name: token.name,
151
+ scopes: this.renderScopePills(token.scopes),
152
+ status: this.renderStatusBadge(token),
153
+ created: new Date(token.createdAt).toLocaleDateString(),
154
+ expires: token.expiresAt ? new Date(token.expiresAt).toLocaleDateString() : 'Never',
155
+ lastUsed: token.lastUsedAt ? new Date(token.lastUsedAt).toLocaleDateString() : 'Never',
156
+ })}
157
+ .dataActions=${[
158
+ {
159
+ name: 'Create Token',
160
+ iconName: 'lucide:plus',
161
+ type: ['header'],
162
+ actionFunc: async () => {
163
+ await this.showCreateTokenDialog();
164
+ },
165
+ },
166
+ {
167
+ name: 'Enable',
168
+ iconName: 'lucide:play',
169
+ type: ['inRow', 'contextmenu'],
170
+ actionRelevancyCheckFunc: (actionData) => !actionData.item.enabled,
171
+ actionFunc: async (actionData) => {
172
+ const token = actionData.item;
173
+ await appstate.routeManagementStatePart.dispatchAction(appstate.toggleApiTokenAction, { id: token.id, enabled: true });
174
+ },
175
+ },
176
+ {
177
+ name: 'Disable',
178
+ iconName: 'lucide:pause',
179
+ type: ['inRow', 'contextmenu'],
180
+ actionRelevancyCheckFunc: (actionData) => actionData.item.enabled,
181
+ actionFunc: async (actionData) => {
182
+ const token = actionData.item;
183
+ await appstate.routeManagementStatePart.dispatchAction(appstate.toggleApiTokenAction, { id: token.id, enabled: false });
184
+ },
185
+ },
186
+ {
187
+ name: 'Revoke',
188
+ iconName: 'lucide:trash2',
189
+ type: ['inRow', 'contextmenu'],
190
+ actionFunc: async (actionData) => {
191
+ const token = actionData.item;
192
+ await appstate.routeManagementStatePart.dispatchAction(appstate.revokeApiTokenAction, token.id);
193
+ },
194
+ },
195
+ ]}
196
+ ></dees-table>
197
+ </div>
198
+ `;
199
+ }
200
+ renderScopePills(scopes) {
201
+ return html `<div style="display: flex; flex-wrap: wrap; gap: 2px;">${scopes.map((s) => html `<span class="scopePill">${s}</span>`)}</div>`;
202
+ }
203
+ renderStatusBadge(token) {
204
+ if (!token.enabled) {
205
+ return html `<span class="statusBadge disabled">Disabled</span>`;
206
+ }
207
+ if (token.expiresAt && token.expiresAt < Date.now()) {
208
+ return html `<span class="statusBadge expired">Expired</span>`;
209
+ }
210
+ return html `<span class="statusBadge active">Active</span>`;
211
+ }
212
+ async showCreateTokenDialog() {
213
+ const { DeesModal } = await import('@design.estate/dees-catalog');
214
+ const allScopes = [
215
+ 'routes:read',
216
+ 'routes:write',
217
+ 'config:read',
218
+ 'tokens:read',
219
+ 'tokens:manage',
220
+ ];
221
+ await DeesModal.createAndShow({
222
+ heading: 'Create API Token',
223
+ content: html `
224
+ <div style="color: #888; margin-bottom: 12px; font-size: 13px;">
225
+ The token value will be shown once after creation. Copy it immediately.
226
+ </div>
227
+ <dees-form>
228
+ <dees-input-text .key=${'name'} .label=${'Token Name'} .required=${true}></dees-input-text>
229
+ <dees-input-tags
230
+ .key=${'scopes'}
231
+ .label=${'Token Scopes'}
232
+ .value=${['routes:read', 'routes:write']}
233
+ .suggestions=${allScopes}
234
+ .required=${true}
235
+ ></dees-input-tags>
236
+ <dees-input-text .key=${'expiresInDays'} .label=${'Expires in (days, blank = never)'}></dees-input-text>
237
+ </dees-form>
238
+ `,
239
+ menuOptions: [
240
+ {
241
+ name: 'Cancel',
242
+ iconName: 'lucide:x',
243
+ action: async (modalArg) => await modalArg.destroy(),
244
+ },
245
+ {
246
+ name: 'Create',
247
+ iconName: 'lucide:key',
248
+ action: async (modalArg) => {
249
+ const contentEl = modalArg.shadowRoot?.querySelector('.content');
250
+ const form = contentEl?.querySelector('dees-form');
251
+ if (!form)
252
+ return;
253
+ const formData = await form.collectFormData();
254
+ if (!formData.name)
255
+ return;
256
+ // dees-input-tags is not in dees-form's FORM_INPUT_TYPES, so collectFormData() won't
257
+ // include it. Query the tags input directly and call getValue().
258
+ const tagsInput = form.querySelector('dees-input-tags');
259
+ const rawScopes = tagsInput?.getValue?.() || tagsInput?.value || formData.scopes || [];
260
+ const scopes = rawScopes
261
+ .filter((s) => allScopes.includes(s));
262
+ const expiresInDays = formData.expiresInDays
263
+ ? parseInt(formData.expiresInDays, 10)
264
+ : null;
265
+ await modalArg.destroy();
266
+ try {
267
+ const response = await appstate.createApiToken(formData.name, scopes, expiresInDays);
268
+ if (response.success && response.tokenValue) {
269
+ // Refresh the list first so it's ready when user dismisses the modal
270
+ await appstate.routeManagementStatePart.dispatchAction(appstate.fetchApiTokensAction, null);
271
+ // Show the token value in a new modal
272
+ await DeesModal.createAndShow({
273
+ heading: 'Token Created',
274
+ content: html `
275
+ <div style="color: #ccc; padding: 8px 0;">
276
+ <p>Copy this token now. It will not be shown again.</p>
277
+ <div style="background: #111; padding: 12px; border-radius: 6px; margin-top: 8px;">
278
+ <code style="color: #0f8; word-break: break-all; font-size: 13px;">${response.tokenValue}</code>
279
+ </div>
280
+ </div>
281
+ `,
282
+ menuOptions: [
283
+ {
284
+ name: 'Done',
285
+ iconName: 'lucide:check',
286
+ action: async (m) => await m.destroy(),
287
+ },
288
+ ],
289
+ });
290
+ }
291
+ }
292
+ catch (error) {
293
+ console.error('Failed to create token:', error);
294
+ }
295
+ },
296
+ },
297
+ ],
298
+ });
299
+ }
300
+ async firstUpdated() {
301
+ await appstate.routeManagementStatePart.dispatchAction(appstate.fetchApiTokensAction, null);
302
+ }
303
+ static {
304
+ __runInitializers(_classThis, _classExtraInitializers);
305
+ }
306
+ };
307
+ return OpsViewApiTokens = _classThis;
308
+ })();
309
+ export { OpsViewApiTokens };
310
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctYXBpdG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViL2VsZW1lbnRzL29wcy12aWV3LWFwaXRva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEtBQUssVUFBVSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5QyxPQUFPLEVBQ0wsV0FBVyxFQUNYLEdBQUcsRUFDSCxVQUFVLEVBQ1YsYUFBYSxFQUNiLElBQUksRUFDSixLQUFLLEdBRU4sTUFBTSw2QkFBNkIsQ0FBQztJQUt4QixnQkFBZ0I7NEJBRDVCLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQzs7OztzQkFDRSxXQUFXOzs7O2dDQUFuQixTQUFRLFdBQVc7Ozs7c0NBQzlDLEtBQUssRUFBRTtZQUFDLG1MQUFTLFVBQVUsNkJBQVYsVUFBVSwrRkFPMUI7WUFSSiw2S0EyUUM7Ozs7UUExUVUsaUZBQXNEO1lBQzdELFlBQVksRUFBRSxFQUFFO1lBQ2hCLFFBQVEsRUFBRSxFQUFFO1lBQ1osU0FBUyxFQUFFLEVBQUU7WUFDYixTQUFTLEVBQUUsS0FBSztZQUNoQixLQUFLLEVBQUUsSUFBSTtZQUNYLFdBQVcsRUFBRSxDQUFDO1NBQ2YsRUFBQztRQVBPLElBQVMsVUFBVSxnREFPMUI7UUFQTyxJQUFTLFVBQVUsc0RBTzFCO1FBRUY7WUFDRSxLQUFLLEVBQUUsQ0FBQzs7WUFDUixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsd0JBQXdCO2lCQUMxQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDaEIsU0FBUyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcs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
@@ -6,12 +6,14 @@ export declare class OpsViewConfig extends DeesElement {
6
6
  constructor();
7
7
  static styles: plugins.deesElement.CSSResult[];
8
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;
9
+ private renderConfig;
10
+ private renderSystemSection;
11
+ private renderSmartProxySection;
12
+ private renderEmailSection;
13
+ private renderDnsSection;
14
+ private renderTlsSection;
15
+ private renderCacheSection;
16
+ private renderRadiusSection;
17
+ private renderRemoteIngressSection;
18
+ private formatUptime;
17
19
  }