@serve.zone/dcrouter 11.12.4 → 11.14.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 (214) hide show
  1. package/dist_serve/bundle.js +705 -548
  2. package/dist_ts_interfaces/data/index.d.ts +1 -0
  3. package/dist_ts_interfaces/data/index.js +2 -1
  4. package/dist_ts_interfaces/data/remoteingress.d.ts +10 -1
  5. package/dist_ts_interfaces/data/vpn.d.ts +43 -0
  6. package/dist_ts_interfaces/data/vpn.js +2 -0
  7. package/dist_ts_interfaces/requests/index.d.ts +1 -0
  8. package/dist_ts_interfaces/requests/index.js +2 -1
  9. package/dist_ts_interfaces/requests/vpn.d.ts +135 -0
  10. package/dist_ts_interfaces/requests/vpn.js +3 -0
  11. package/package.json +2 -1
  12. package/readme.md +107 -3
  13. package/ts/00_commitinfo_data.ts +1 -1
  14. package/ts/classes.dcrouter.ts +126 -0
  15. package/ts/config/classes.route-config-manager.ts +20 -3
  16. package/ts/opsserver/classes.opsserver.ts +2 -0
  17. package/ts/opsserver/handlers/index.ts +2 -1
  18. package/ts/opsserver/handlers/vpn.handler.ts +257 -0
  19. package/ts/plugins.ts +2 -1
  20. package/ts/vpn/classes.vpn-manager.ts +378 -0
  21. package/ts/vpn/index.ts +1 -0
  22. package/ts_web/00_commitinfo_data.ts +1 -1
  23. package/ts_web/appstate.ts +164 -0
  24. package/ts_web/elements/index.ts +1 -0
  25. package/ts_web/elements/ops-dashboard.ts +6 -0
  26. package/ts_web/elements/ops-view-vpn.ts +330 -0
  27. package/ts_web/readme.md +17 -0
  28. package/ts_web/router.ts +1 -1
  29. package/dist_ts/00_commitinfo_data.d.ts +0 -8
  30. package/dist_ts/00_commitinfo_data.js +0 -9
  31. package/dist_ts/cache/classes.cache.cleaner.d.ts +0 -47
  32. package/dist_ts/cache/classes.cache.cleaner.js +0 -130
  33. package/dist_ts/cache/classes.cached.document.d.ts +0 -76
  34. package/dist_ts/cache/classes.cached.document.js +0 -100
  35. package/dist_ts/cache/classes.cachedb.d.ts +0 -60
  36. package/dist_ts/cache/classes.cachedb.js +0 -126
  37. package/dist_ts/cache/documents/classes.cached.email.d.ts +0 -125
  38. package/dist_ts/cache/documents/classes.cached.email.js +0 -337
  39. package/dist_ts/cache/documents/classes.cached.ip.reputation.d.ts +0 -119
  40. package/dist_ts/cache/documents/classes.cached.ip.reputation.js +0 -323
  41. package/dist_ts/cache/documents/index.d.ts +0 -2
  42. package/dist_ts/cache/documents/index.js +0 -3
  43. package/dist_ts/cache/index.d.ts +0 -4
  44. package/dist_ts/cache/index.js +0 -7
  45. package/dist_ts/classes.cert-provision-scheduler.d.ts +0 -54
  46. package/dist_ts/classes.cert-provision-scheduler.js +0 -118
  47. package/dist_ts/classes.dcrouter.d.ts +0 -356
  48. package/dist_ts/classes.dcrouter.js +0 -1592
  49. package/dist_ts/classes.storage-cert-manager.d.ts +0 -18
  50. package/dist_ts/classes.storage-cert-manager.js +0 -43
  51. package/dist_ts/config/classes.api-token-manager.d.ts +0 -46
  52. package/dist_ts/config/classes.api-token-manager.js +0 -150
  53. package/dist_ts/config/classes.route-config-manager.d.ts +0 -37
  54. package/dist_ts/config/classes.route-config-manager.js +0 -240
  55. package/dist_ts/config/index.d.ts +0 -3
  56. package/dist_ts/config/index.js +0 -5
  57. package/dist_ts/config/validator.d.ts +0 -104
  58. package/dist_ts/config/validator.js +0 -152
  59. package/dist_ts/errors/base.errors.d.ts +0 -224
  60. package/dist_ts/errors/base.errors.js +0 -320
  61. package/dist_ts/errors/error-handler.d.ts +0 -98
  62. package/dist_ts/errors/error-handler.js +0 -282
  63. package/dist_ts/errors/error.codes.d.ts +0 -115
  64. package/dist_ts/errors/error.codes.js +0 -136
  65. package/dist_ts/errors/index.d.ts +0 -54
  66. package/dist_ts/errors/index.js +0 -136
  67. package/dist_ts/errors/reputation.errors.d.ts +0 -183
  68. package/dist_ts/errors/reputation.errors.js +0 -292
  69. package/dist_ts/http3/http3-route-augmentation.d.ts +0 -50
  70. package/dist_ts/http3/http3-route-augmentation.js +0 -98
  71. package/dist_ts/http3/index.d.ts +0 -1
  72. package/dist_ts/http3/index.js +0 -2
  73. package/dist_ts/index.d.ts +0 -8
  74. package/dist_ts/index.js +0 -29
  75. package/dist_ts/logger.d.ts +0 -21
  76. package/dist_ts/logger.js +0 -81
  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/monitoring/classes.metricsmanager.d.ts +0 -184
  80. package/dist_ts/monitoring/classes.metricsmanager.js +0 -744
  81. package/dist_ts/monitoring/index.d.ts +0 -1
  82. package/dist_ts/monitoring/index.js +0 -2
  83. package/dist_ts/opsserver/classes.opsserver.d.ts +0 -37
  84. package/dist_ts/opsserver/classes.opsserver.js +0 -85
  85. package/dist_ts/opsserver/handlers/admin.handler.d.ts +0 -31
  86. package/dist_ts/opsserver/handlers/admin.handler.js +0 -180
  87. package/dist_ts/opsserver/handlers/api-token.handler.d.ts +0 -6
  88. package/dist_ts/opsserver/handlers/api-token.handler.js +0 -62
  89. package/dist_ts/opsserver/handlers/certificate.handler.d.ts +0 -32
  90. package/dist_ts/opsserver/handlers/certificate.handler.js +0 -421
  91. package/dist_ts/opsserver/handlers/config.handler.d.ts +0 -7
  92. package/dist_ts/opsserver/handlers/config.handler.js +0 -192
  93. package/dist_ts/opsserver/handlers/email-ops.handler.d.ts +0 -30
  94. package/dist_ts/opsserver/handlers/email-ops.handler.js +0 -227
  95. package/dist_ts/opsserver/handlers/index.d.ts +0 -11
  96. package/dist_ts/opsserver/handlers/index.js +0 -12
  97. package/dist_ts/opsserver/handlers/logs.handler.d.ts +0 -25
  98. package/dist_ts/opsserver/handlers/logs.handler.js +0 -256
  99. package/dist_ts/opsserver/handlers/radius.handler.d.ts +0 -6
  100. package/dist_ts/opsserver/handlers/radius.handler.js +0 -295
  101. package/dist_ts/opsserver/handlers/remoteingress.handler.d.ts +0 -6
  102. package/dist_ts/opsserver/handlers/remoteingress.handler.js +0 -156
  103. package/dist_ts/opsserver/handlers/route-management.handler.d.ts +0 -14
  104. package/dist_ts/opsserver/handlers/route-management.handler.js +0 -117
  105. package/dist_ts/opsserver/handlers/security.handler.d.ts +0 -9
  106. package/dist_ts/opsserver/handlers/security.handler.js +0 -233
  107. package/dist_ts/opsserver/handlers/stats.handler.d.ts +0 -11
  108. package/dist_ts/opsserver/handlers/stats.handler.js +0 -403
  109. package/dist_ts/opsserver/helpers/guards.d.ts +0 -27
  110. package/dist_ts/opsserver/helpers/guards.js +0 -43
  111. package/dist_ts/opsserver/index.d.ts +0 -1
  112. package/dist_ts/opsserver/index.js +0 -2
  113. package/dist_ts/paths.d.ts +0 -26
  114. package/dist_ts/paths.js +0 -45
  115. package/dist_ts/plugins.d.ts +0 -80
  116. package/dist_ts/plugins.js +0 -114
  117. package/dist_ts/radius/classes.accounting.manager.d.ts +0 -231
  118. package/dist_ts/radius/classes.accounting.manager.js +0 -462
  119. package/dist_ts/radius/classes.radius.server.d.ts +0 -171
  120. package/dist_ts/radius/classes.radius.server.js +0 -386
  121. package/dist_ts/radius/classes.vlan.manager.d.ts +0 -128
  122. package/dist_ts/radius/classes.vlan.manager.js +0 -279
  123. package/dist_ts/radius/index.d.ts +0 -13
  124. package/dist_ts/radius/index.js +0 -14
  125. package/dist_ts/remoteingress/classes.remoteingress-manager.d.ts +0 -94
  126. package/dist_ts/remoteingress/classes.remoteingress-manager.js +0 -271
  127. package/dist_ts/remoteingress/classes.tunnel-manager.d.ts +0 -59
  128. package/dist_ts/remoteingress/classes.tunnel-manager.js +0 -165
  129. package/dist_ts/remoteingress/index.d.ts +0 -2
  130. package/dist_ts/remoteingress/index.js +0 -3
  131. package/dist_ts/security/classes.contentscanner.d.ts +0 -164
  132. package/dist_ts/security/classes.contentscanner.js +0 -642
  133. package/dist_ts/security/classes.ipreputationchecker.d.ts +0 -160
  134. package/dist_ts/security/classes.ipreputationchecker.js +0 -537
  135. package/dist_ts/security/classes.securitylogger.d.ts +0 -144
  136. package/dist_ts/security/classes.securitylogger.js +0 -235
  137. package/dist_ts/security/index.d.ts +0 -3
  138. package/dist_ts/security/index.js +0 -4
  139. package/dist_ts/sms/classes.smsservice.d.ts +0 -15
  140. package/dist_ts/sms/classes.smsservice.js +0 -72
  141. package/dist_ts/sms/config/sms.config.d.ts +0 -93
  142. package/dist_ts/sms/config/sms.config.js +0 -2
  143. package/dist_ts/sms/config/sms.schema.d.ts +0 -5
  144. package/dist_ts/sms/config/sms.schema.js +0 -121
  145. package/dist_ts/sms/index.d.ts +0 -1
  146. package/dist_ts/sms/index.js +0 -2
  147. package/dist_ts/storage/classes.storagemanager.d.ts +0 -83
  148. package/dist_ts/storage/classes.storagemanager.js +0 -348
  149. package/dist_ts/storage/index.d.ts +0 -1
  150. package/dist_ts/storage/index.js +0 -3
  151. package/dist_ts_apiclient/classes.apitoken.d.ts +0 -41
  152. package/dist_ts_apiclient/classes.apitoken.js +0 -115
  153. package/dist_ts_apiclient/classes.certificate.d.ts +0 -57
  154. package/dist_ts_apiclient/classes.certificate.js +0 -69
  155. package/dist_ts_apiclient/classes.config.d.ts +0 -7
  156. package/dist_ts_apiclient/classes.config.js +0 -11
  157. package/dist_ts_apiclient/classes.dcrouterapiclient.d.ts +0 -41
  158. package/dist_ts_apiclient/classes.dcrouterapiclient.js +0 -81
  159. package/dist_ts_apiclient/classes.email.d.ts +0 -30
  160. package/dist_ts_apiclient/classes.email.js +0 -52
  161. package/dist_ts_apiclient/classes.logs.d.ts +0 -21
  162. package/dist_ts_apiclient/classes.logs.js +0 -14
  163. package/dist_ts_apiclient/classes.radius.d.ts +0 -59
  164. package/dist_ts_apiclient/classes.radius.js +0 -95
  165. package/dist_ts_apiclient/classes.remoteingress.d.ts +0 -54
  166. package/dist_ts_apiclient/classes.remoteingress.js +0 -136
  167. package/dist_ts_apiclient/classes.route.d.ts +0 -42
  168. package/dist_ts_apiclient/classes.route.js +0 -154
  169. package/dist_ts_apiclient/classes.stats.d.ts +0 -47
  170. package/dist_ts_apiclient/classes.stats.js +0 -38
  171. package/dist_ts_apiclient/index.d.ts +0 -10
  172. package/dist_ts_apiclient/index.js +0 -14
  173. package/dist_ts_apiclient/plugins.d.ts +0 -3
  174. package/dist_ts_apiclient/plugins.js +0 -5
  175. package/dist_ts_web/00_commitinfo_data.d.ts +0 -8
  176. package/dist_ts_web/00_commitinfo_data.js +0 -9
  177. package/dist_ts_web/appstate.d.ts +0 -216
  178. package/dist_ts_web/appstate.js +0 -1064
  179. package/dist_ts_web/elements/index.d.ts +0 -12
  180. package/dist_ts_web/elements/index.js +0 -13
  181. package/dist_ts_web/elements/ops-dashboard.d.ts +0 -23
  182. package/dist_ts_web/elements/ops-dashboard.js +0 -317
  183. package/dist_ts_web/elements/ops-view-apitokens.d.ts +0 -13
  184. package/dist_ts_web/elements/ops-view-apitokens.js +0 -371
  185. package/dist_ts_web/elements/ops-view-certificates.d.ts +0 -22
  186. package/dist_ts_web/elements/ops-view-certificates.js +0 -528
  187. package/dist_ts_web/elements/ops-view-config.d.ts +0 -19
  188. package/dist_ts_web/elements/ops-view-config.js +0 -339
  189. package/dist_ts_web/elements/ops-view-emails.d.ts +0 -21
  190. package/dist_ts_web/elements/ops-view-emails.js +0 -165
  191. package/dist_ts_web/elements/ops-view-logs.d.ts +0 -13
  192. package/dist_ts_web/elements/ops-view-logs.js +0 -159
  193. package/dist_ts_web/elements/ops-view-network.d.ts +0 -71
  194. package/dist_ts_web/elements/ops-view-network.js +0 -764
  195. package/dist_ts_web/elements/ops-view-overview.d.ts +0 -22
  196. package/dist_ts_web/elements/ops-view-overview.js +0 -456
  197. package/dist_ts_web/elements/ops-view-remoteingress.d.ts +0 -20
  198. package/dist_ts_web/elements/ops-view-remoteingress.js +0 -494
  199. package/dist_ts_web/elements/ops-view-routes.d.ts +0 -12
  200. package/dist_ts_web/elements/ops-view-routes.js +0 -404
  201. package/dist_ts_web/elements/ops-view-security.d.ts +0 -21
  202. package/dist_ts_web/elements/ops-view-security.js +0 -574
  203. package/dist_ts_web/elements/shared/css.d.ts +0 -1
  204. package/dist_ts_web/elements/shared/css.js +0 -10
  205. package/dist_ts_web/elements/shared/index.d.ts +0 -2
  206. package/dist_ts_web/elements/shared/index.js +0 -3
  207. package/dist_ts_web/elements/shared/ops-sectionheading.d.ts +0 -5
  208. package/dist_ts_web/elements/shared/ops-sectionheading.js +0 -82
  209. package/dist_ts_web/index.d.ts +0 -1
  210. package/dist_ts_web/index.js +0 -10
  211. package/dist_ts_web/plugins.d.ts +0 -6
  212. package/dist_ts_web/plugins.js +0 -11
  213. package/dist_ts_web/router.d.ts +0 -19
  214. package/dist_ts_web/router.js +0 -91
@@ -1,371 +0,0 @@
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: 'Roll',
188
- iconName: 'lucide:rotateCw',
189
- type: ['inRow', 'contextmenu'],
190
- actionFunc: async (actionData) => {
191
- const token = actionData.item;
192
- await this.showRollTokenDialog(token);
193
- },
194
- },
195
- {
196
- name: 'Revoke',
197
- iconName: 'lucide:trash2',
198
- type: ['inRow', 'contextmenu'],
199
- actionFunc: async (actionData) => {
200
- const token = actionData.item;
201
- await appstate.routeManagementStatePart.dispatchAction(appstate.revokeApiTokenAction, token.id);
202
- },
203
- },
204
- ]}
205
- ></dees-table>
206
- </div>
207
- `;
208
- }
209
- renderScopePills(scopes) {
210
- return html `<div style="display: flex; flex-wrap: wrap; gap: 2px;">${scopes.map((s) => html `<span class="scopePill">${s}</span>`)}</div>`;
211
- }
212
- renderStatusBadge(token) {
213
- if (!token.enabled) {
214
- return html `<span class="statusBadge disabled">Disabled</span>`;
215
- }
216
- if (token.expiresAt && token.expiresAt < Date.now()) {
217
- return html `<span class="statusBadge expired">Expired</span>`;
218
- }
219
- return html `<span class="statusBadge active">Active</span>`;
220
- }
221
- async showCreateTokenDialog() {
222
- const { DeesModal } = await import('@design.estate/dees-catalog');
223
- const allScopes = [
224
- 'routes:read',
225
- 'routes:write',
226
- 'config:read',
227
- 'tokens:read',
228
- 'tokens:manage',
229
- ];
230
- await DeesModal.createAndShow({
231
- heading: 'Create API Token',
232
- content: html `
233
- <div style="color: #888; margin-bottom: 12px; font-size: 13px;">
234
- The token value will be shown once after creation. Copy it immediately.
235
- </div>
236
- <dees-form>
237
- <dees-input-text .key=${'name'} .label=${'Token Name'} .required=${true}></dees-input-text>
238
- <dees-input-tags
239
- .key=${'scopes'}
240
- .label=${'Token Scopes'}
241
- .value=${['routes:read', 'routes:write']}
242
- .suggestions=${allScopes}
243
- .required=${true}
244
- ></dees-input-tags>
245
- <dees-input-text .key=${'expiresInDays'} .label=${'Expires in (days, blank = never)'}></dees-input-text>
246
- </dees-form>
247
- `,
248
- menuOptions: [
249
- {
250
- name: 'Cancel',
251
- iconName: 'lucide:x',
252
- action: async (modalArg) => await modalArg.destroy(),
253
- },
254
- {
255
- name: 'Create',
256
- iconName: 'lucide:key',
257
- action: async (modalArg) => {
258
- const contentEl = modalArg.shadowRoot?.querySelector('.content');
259
- const form = contentEl?.querySelector('dees-form');
260
- if (!form)
261
- return;
262
- const formData = await form.collectFormData();
263
- if (!formData.name)
264
- return;
265
- // dees-input-tags is not in dees-form's FORM_INPUT_TYPES, so collectFormData() won't
266
- // include it. Query the tags input directly and call getValue().
267
- const tagsInput = form.querySelector('dees-input-tags');
268
- const rawScopes = tagsInput?.getValue?.() || tagsInput?.value || formData.scopes || [];
269
- const scopes = rawScopes
270
- .filter((s) => allScopes.includes(s));
271
- const expiresInDays = formData.expiresInDays
272
- ? parseInt(formData.expiresInDays, 10)
273
- : null;
274
- await modalArg.destroy();
275
- try {
276
- const response = await appstate.createApiToken(formData.name, scopes, expiresInDays);
277
- if (response.success && response.tokenValue) {
278
- // Refresh the list first so it's ready when user dismisses the modal
279
- await appstate.routeManagementStatePart.dispatchAction(appstate.fetchApiTokensAction, null);
280
- // Show the token value in a new modal
281
- await DeesModal.createAndShow({
282
- heading: 'Token Created',
283
- content: html `
284
- <div style="color: #ccc; padding: 8px 0;">
285
- <p>Copy this token now. It will not be shown again.</p>
286
- <div style="background: #111; padding: 12px; border-radius: 6px; margin-top: 8px;">
287
- <code style="color: #0f8; word-break: break-all; font-size: 13px;">${response.tokenValue}</code>
288
- </div>
289
- </div>
290
- `,
291
- menuOptions: [
292
- {
293
- name: 'Done',
294
- iconName: 'lucide:check',
295
- action: async (m) => await m.destroy(),
296
- },
297
- ],
298
- });
299
- }
300
- }
301
- catch (error) {
302
- console.error('Failed to create token:', error);
303
- }
304
- },
305
- },
306
- ],
307
- });
308
- }
309
- async showRollTokenDialog(token) {
310
- const { DeesModal } = await import('@design.estate/dees-catalog');
311
- await DeesModal.createAndShow({
312
- heading: 'Roll Token Secret',
313
- content: html `
314
- <div style="color: #ccc; padding: 8px 0;">
315
- <p>This will regenerate the secret for <strong>${token.name}</strong>. The old token value will stop working immediately.</p>
316
- </div>
317
- `,
318
- menuOptions: [
319
- {
320
- name: 'Cancel',
321
- iconName: 'lucide:x',
322
- action: async (modalArg) => await modalArg.destroy(),
323
- },
324
- {
325
- name: 'Roll Token',
326
- iconName: 'lucide:rotateCw',
327
- action: async (modalArg) => {
328
- await modalArg.destroy();
329
- try {
330
- const response = await appstate.rollApiToken(token.id);
331
- if (response.success && response.tokenValue) {
332
- await appstate.routeManagementStatePart.dispatchAction(appstate.fetchApiTokensAction, null);
333
- await DeesModal.createAndShow({
334
- heading: 'Token Rolled',
335
- content: html `
336
- <div style="color: #ccc; padding: 8px 0;">
337
- <p>Copy this token now. It will not be shown again.</p>
338
- <div style="background: #111; padding: 12px; border-radius: 6px; margin-top: 8px;">
339
- <code style="color: #0f8; word-break: break-all; font-size: 13px;">${response.tokenValue}</code>
340
- </div>
341
- </div>
342
- `,
343
- menuOptions: [
344
- {
345
- name: 'Done',
346
- iconName: 'lucide:check',
347
- action: async (m) => await m.destroy(),
348
- },
349
- ],
350
- });
351
- }
352
- }
353
- catch (error) {
354
- console.error('Failed to roll token:', error);
355
- }
356
- },
357
- },
358
- ],
359
- });
360
- }
361
- async firstUpdated() {
362
- await appstate.routeManagementStatePart.dispatchAction(appstate.fetchApiTokensAction, null);
363
- }
364
- static {
365
- __runInitializers(_classThis, _classExtraInitializers);
366
- }
367
- };
368
- return OpsViewApiTokens = _classThis;
369
- })();
370
- export { OpsViewApiTokens };
371
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctYXBpdG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViL2VsZW1lbnRzL29wcy12aWV3LWFwaXRva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEtBQUssVUFBVSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5QyxPQUFPLEVBQ0wsV0FBVyxFQUNYLEdBQUcsRUFDSCxVQUFVLEVBQ1YsYUFBYSxFQUNiLElBQUksRUFDSixLQUFLLEdBRU4sTUFBTSw2QkFBNkIsQ0FBQztJQUt4QixnQkFBZ0I7NEJBRDVCLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQzs7OztzQkFDRSxXQUFXOzs7O2dDQUFuQixTQUFRLFdBQVc7Ozs7c0NBQzlDLEtBQUssRUFBRTtZQUFDLG1MQUFTLFVBQVUsNkJBQVYsVUFBVSwrRkFPMUI7WUFSSiw2S0EwVUM7Ozs7UUF6VVUsaUZBQXNEO1lBQzdELFlBQVksRUFBRSxFQUFFO1lBQ2hCLFFBQVEsRUFBRSxFQUFFO1lBQ1osU0FBUyxFQUFFLEVBQUU7WUFDYixTQUFTLEVBQUUsS0FBSztZQUNoQixLQUFLLEVBQUUsSUFBSTtZQUNYLFdBQVcsRUFBRSxDQUFDO1NBQ2YsRUFBQztRQVBPLElBQVMsVUFBVSxnREFPMUI7UUFQTyxJQUFTLFVBQVUsc0RBTzFCO1FBRUY7WUFDRSxLQUFLLEVBQUUsQ0FBQzs7WUFDUixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsd0JBQXdCO2lCQUMxQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDaEIsU0FBUyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcs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
@@ -1,22 +0,0 @@
1
- import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
2
- import * as appstate from '../appstate.js';
3
- declare global {
4
- interface HTMLElementTagNameMap {
5
- 'ops-view-certificates': OpsViewCertificates;
6
- }
7
- }
8
- export declare class OpsViewCertificates extends DeesElement {
9
- accessor certState: appstate.ICertificateState;
10
- constructor();
11
- connectedCallback(): Promise<void>;
12
- static styles: import("@design.estate/dees-element").CSSResult[];
13
- render(): TemplateResult;
14
- private renderStatsTiles;
15
- private renderCertificateTable;
16
- private downloadJsonFile;
17
- private renderRoutePills;
18
- private renderStatusBadge;
19
- private renderSourceBadge;
20
- private renderExpiry;
21
- private formatRetryTime;
22
- }