@serve.zone/dcrouter 6.2.4 → 6.4.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.
- package/dist_serve/bundle.js +559 -452
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.dcrouter.d.ts +26 -0
- package/dist_ts/classes.dcrouter.js +49 -5
- package/dist_ts/index.d.ts +1 -0
- package/dist_ts/index.js +3 -1
- package/dist_ts/opsserver/classes.opsserver.d.ts +1 -0
- package/dist_ts/opsserver/classes.opsserver.js +3 -1
- package/dist_ts/opsserver/handlers/index.d.ts +1 -0
- package/dist_ts/opsserver/handlers/index.js +2 -1
- package/dist_ts/opsserver/handlers/remoteingress.handler.d.ts +8 -0
- package/dist_ts/opsserver/handlers/remoteingress.handler.js +107 -0
- package/dist_ts/paths.d.ts +19 -9
- package/dist_ts/paths.js +30 -28
- package/dist_ts/plugins.d.ts +2 -1
- package/dist_ts/plugins.js +3 -2
- package/dist_ts/remoteingress/classes.remoteingress-manager.d.ts +56 -0
- package/dist_ts/remoteingress/classes.remoteingress-manager.js +133 -0
- package/dist_ts/remoteingress/classes.tunnel-manager.d.ts +45 -0
- package/dist_ts/remoteingress/classes.tunnel-manager.js +107 -0
- package/dist_ts/remoteingress/index.d.ts +2 -0
- package/dist_ts/remoteingress/index.js +3 -0
- package/dist_ts/security/classes.contentscanner.js +1 -2
- package/dist_ts_interfaces/data/index.d.ts +1 -0
- package/dist_ts_interfaces/data/index.js +2 -1
- package/dist_ts_interfaces/data/remoteingress.d.ts +24 -0
- package/dist_ts_interfaces/data/remoteingress.js +2 -0
- package/dist_ts_interfaces/requests/index.d.ts +1 -0
- package/dist_ts_interfaces/requests/index.js +2 -1
- package/dist_ts_interfaces/requests/remoteingress.d.ts +89 -0
- package/dist_ts_interfaces/requests/remoteingress.js +3 -0
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/appstate.d.ts +19 -0
- package/dist_ts_web/appstate.js +124 -2
- package/dist_ts_web/elements/index.d.ts +1 -0
- package/dist_ts_web/elements/index.js +2 -1
- package/dist_ts_web/elements/ops-dashboard.js +6 -1
- package/dist_ts_web/elements/ops-view-remoteingress.d.ts +20 -0
- package/dist_ts_web/elements/ops-view-remoteingress.js +317 -0
- package/dist_ts_web/router.d.ts +1 -1
- package/dist_ts_web/router.js +2 -2
- package/package.json +2 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.dcrouter.ts +79 -6
- package/ts/index.ts +3 -0
- package/ts/opsserver/classes.opsserver.ts +2 -0
- package/ts/opsserver/handlers/index.ts +2 -1
- package/ts/opsserver/handlers/remoteingress.handler.ts +163 -0
- package/ts/paths.ts +32 -31
- package/ts/plugins.ts +3 -1
- package/ts/remoteingress/classes.remoteingress-manager.ts +160 -0
- package/ts/remoteingress/classes.tunnel-manager.ts +126 -0
- package/ts/remoteingress/index.ts +2 -0
- package/ts/security/classes.contentscanner.ts +0 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/appstate.ts +180 -1
- package/ts_web/elements/index.ts +1 -0
- package/ts_web/elements/ops-dashboard.ts +5 -0
- package/ts_web/elements/ops-view-remoteingress.ts +290 -0
- package/ts_web/router.ts +1 -1
|
@@ -44,6 +44,7 @@ import { OpsViewLogs } from './ops-view-logs.js';
|
|
|
44
44
|
import { OpsViewConfig } from './ops-view-config.js';
|
|
45
45
|
import { OpsViewSecurity } from './ops-view-security.js';
|
|
46
46
|
import { OpsViewCertificates } from './ops-view-certificates.js';
|
|
47
|
+
import { OpsViewRemoteIngress } from './ops-view-remoteingress.js';
|
|
47
48
|
let OpsDashboard = (() => {
|
|
48
49
|
let _classDecorators = [customElement('ops-dashboard')];
|
|
49
50
|
let _classDescriptor;
|
|
@@ -113,6 +114,10 @@ let OpsDashboard = (() => {
|
|
|
113
114
|
name: 'Certificates',
|
|
114
115
|
element: OpsViewCertificates,
|
|
115
116
|
},
|
|
117
|
+
{
|
|
118
|
+
name: 'RemoteIngress',
|
|
119
|
+
element: OpsViewRemoteIngress,
|
|
120
|
+
},
|
|
116
121
|
]);
|
|
117
122
|
/**
|
|
118
123
|
* Get the current view tab based on the UI state's activeView.
|
|
@@ -273,4 +278,4 @@ let OpsDashboard = (() => {
|
|
|
273
278
|
return OpsDashboard = _classThis;
|
|
274
279
|
})();
|
|
275
280
|
export { OpsDashboard };
|
|
276
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
281
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLWRhc2hib2FyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9lbGVtZW50cy9vcHMtZGFzaGJvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEtBQUssUUFBUSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFekMsT0FBTyxFQUNMLFdBQVcsRUFDWCxHQUFHLEVBQ0gsVUFBVSxFQUNWLGFBQWEsRUFDYixJQUFJLEVBQ0osS0FBSyxFQUVOLE1BQU0sNkJBQTZCLENBQUM7QUFFckMseUJBQXlCO0FBQ3pCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0lBR3RELFlBQVk7NEJBRHhCLGFBQWEsQ0FBQyxlQUFlLENBQUM7Ozs7c0JBQ0csV0FBVzs7Ozs7Ozs0QkFBbkIsU0FBUSxXQUFXOzs7O3NDQUMxQyxLQUFLLEVBQUU7bUNBS1AsS0FBSyxFQUFFO1lBTEMsbUxBQVMsVUFBVSw2QkFBVixVQUFVLCtGQUcxQjtZQUVPLDBLQUFTLE9BQU8sNkJBQVAs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
|
|
@@ -0,0 +1,20 @@
|
|
|
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-remoteingress': OpsViewRemoteIngress;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export declare class OpsViewRemoteIngress extends DeesElement {
|
|
9
|
+
accessor riState: appstate.IRemoteIngressState;
|
|
10
|
+
constructor();
|
|
11
|
+
connectedCallback(): Promise<void>;
|
|
12
|
+
static styles: import("@design.estate/dees-element").CSSResult[];
|
|
13
|
+
render(): TemplateResult;
|
|
14
|
+
private getEdgeStatus;
|
|
15
|
+
private getEdgeStatusHtml;
|
|
16
|
+
private getEdgePublicIp;
|
|
17
|
+
private getPortsHtml;
|
|
18
|
+
private getEdgeTunnelCount;
|
|
19
|
+
private getLastHeartbeat;
|
|
20
|
+
}
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
2
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
3
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
4
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
5
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
6
|
+
var _, done = false;
|
|
7
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
8
|
+
var context = {};
|
|
9
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
10
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
11
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
12
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
13
|
+
if (kind === "accessor") {
|
|
14
|
+
if (result === void 0) continue;
|
|
15
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
16
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
17
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
18
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
19
|
+
}
|
|
20
|
+
else if (_ = accept(result)) {
|
|
21
|
+
if (kind === "field") initializers.unshift(_);
|
|
22
|
+
else descriptor[key] = _;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
26
|
+
done = true;
|
|
27
|
+
};
|
|
28
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
29
|
+
var useValue = arguments.length > 2;
|
|
30
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
31
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
32
|
+
}
|
|
33
|
+
return useValue ? value : void 0;
|
|
34
|
+
};
|
|
35
|
+
import { DeesElement, html, customElement, css, state, cssManager, } from '@design.estate/dees-element';
|
|
36
|
+
import * as appstate from '../appstate.js';
|
|
37
|
+
import * as interfaces from '../../dist_ts_interfaces/index.js';
|
|
38
|
+
import { viewHostCss } from './shared/css.js';
|
|
39
|
+
import {} from '@design.estate/dees-catalog';
|
|
40
|
+
let OpsViewRemoteIngress = (() => {
|
|
41
|
+
let _classDecorators = [customElement('ops-view-remoteingress')];
|
|
42
|
+
let _classDescriptor;
|
|
43
|
+
let _classExtraInitializers = [];
|
|
44
|
+
let _classThis;
|
|
45
|
+
let _classSuper = DeesElement;
|
|
46
|
+
let _riState_decorators;
|
|
47
|
+
let _riState_initializers = [];
|
|
48
|
+
let _riState_extraInitializers = [];
|
|
49
|
+
var OpsViewRemoteIngress = 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
|
+
_riState_decorators = [state()];
|
|
54
|
+
__esDecorate(this, null, _riState_decorators, { kind: "accessor", name: "riState", static: false, private: false, access: { has: obj => "riState" in obj, get: obj => obj.riState, set: (obj, value) => { obj.riState = value; } }, metadata: _metadata }, _riState_initializers, _riState_extraInitializers);
|
|
55
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
56
|
+
OpsViewRemoteIngress = _classThis = _classDescriptor.value;
|
|
57
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
58
|
+
}
|
|
59
|
+
#riState_accessor_storage = __runInitializers(this, _riState_initializers, appstate.remoteIngressStatePart.getState());
|
|
60
|
+
get riState() { return this.#riState_accessor_storage; }
|
|
61
|
+
set riState(value) { this.#riState_accessor_storage = value; }
|
|
62
|
+
constructor() {
|
|
63
|
+
super();
|
|
64
|
+
__runInitializers(this, _riState_extraInitializers);
|
|
65
|
+
const sub = appstate.remoteIngressStatePart.state.subscribe((newState) => {
|
|
66
|
+
this.riState = newState;
|
|
67
|
+
});
|
|
68
|
+
this.rxSubscriptions.push(sub);
|
|
69
|
+
}
|
|
70
|
+
async connectedCallback() {
|
|
71
|
+
await super.connectedCallback();
|
|
72
|
+
await appstate.remoteIngressStatePart.dispatchAction(appstate.fetchRemoteIngressAction, null);
|
|
73
|
+
}
|
|
74
|
+
static styles = [
|
|
75
|
+
cssManager.defaultStyles,
|
|
76
|
+
viewHostCss,
|
|
77
|
+
css `
|
|
78
|
+
.remoteIngressContainer {
|
|
79
|
+
display: flex;
|
|
80
|
+
flex-direction: column;
|
|
81
|
+
gap: 24px;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.statusBadge {
|
|
85
|
+
display: inline-flex;
|
|
86
|
+
align-items: center;
|
|
87
|
+
padding: 3px 10px;
|
|
88
|
+
border-radius: 12px;
|
|
89
|
+
font-size: 12px;
|
|
90
|
+
font-weight: 600;
|
|
91
|
+
letter-spacing: 0.02em;
|
|
92
|
+
text-transform: uppercase;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.statusBadge.connected {
|
|
96
|
+
background: ${cssManager.bdTheme('#dcfce7', '#14532d')};
|
|
97
|
+
color: ${cssManager.bdTheme('#166534', '#4ade80')};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.statusBadge.disconnected {
|
|
101
|
+
background: ${cssManager.bdTheme('#fef2f2', '#450a0a')};
|
|
102
|
+
color: ${cssManager.bdTheme('#991b1b', '#f87171')};
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.statusBadge.disabled {
|
|
106
|
+
background: ${cssManager.bdTheme('#f3f4f6', '#374151')};
|
|
107
|
+
color: ${cssManager.bdTheme('#6b7280', '#9ca3af')};
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.secretDialog {
|
|
111
|
+
padding: 16px;
|
|
112
|
+
background: ${cssManager.bdTheme('#fffbeb', '#1c1917')};
|
|
113
|
+
border: 1px solid ${cssManager.bdTheme('#fbbf24', '#92400e')};
|
|
114
|
+
border-radius: 8px;
|
|
115
|
+
margin-bottom: 16px;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.secretDialog code {
|
|
119
|
+
display: block;
|
|
120
|
+
padding: 8px 12px;
|
|
121
|
+
background: ${cssManager.bdTheme('#1f2937', '#111827')};
|
|
122
|
+
color: #10b981;
|
|
123
|
+
border-radius: 4px;
|
|
124
|
+
font-family: monospace;
|
|
125
|
+
font-size: 13px;
|
|
126
|
+
word-break: break-all;
|
|
127
|
+
margin: 8px 0;
|
|
128
|
+
user-select: all;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.secretDialog .warning {
|
|
132
|
+
font-size: 12px;
|
|
133
|
+
color: ${cssManager.bdTheme('#92400e', '#fbbf24')};
|
|
134
|
+
margin-top: 8px;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.portsDisplay {
|
|
138
|
+
display: flex;
|
|
139
|
+
gap: 4px;
|
|
140
|
+
flex-wrap: wrap;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.portBadge {
|
|
144
|
+
display: inline-flex;
|
|
145
|
+
padding: 2px 8px;
|
|
146
|
+
border-radius: 4px;
|
|
147
|
+
font-size: 12px;
|
|
148
|
+
font-weight: 500;
|
|
149
|
+
background: ${cssManager.bdTheme('#eff6ff', '#172554')};
|
|
150
|
+
color: ${cssManager.bdTheme('#1e40af', '#60a5fa')};
|
|
151
|
+
}
|
|
152
|
+
`,
|
|
153
|
+
];
|
|
154
|
+
render() {
|
|
155
|
+
const totalEdges = this.riState.edges.length;
|
|
156
|
+
const connectedEdges = this.riState.statuses.filter(s => s.connected).length;
|
|
157
|
+
const disconnectedEdges = totalEdges - connectedEdges;
|
|
158
|
+
const activeTunnels = this.riState.statuses.reduce((sum, s) => sum + s.activeTunnels, 0);
|
|
159
|
+
const statsTiles = [
|
|
160
|
+
{
|
|
161
|
+
id: 'totalEdges',
|
|
162
|
+
title: 'Total Edges',
|
|
163
|
+
type: 'number',
|
|
164
|
+
value: totalEdges,
|
|
165
|
+
icon: 'lucide:server',
|
|
166
|
+
description: 'Registered edge nodes',
|
|
167
|
+
color: '#3b82f6',
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
id: 'connectedEdges',
|
|
171
|
+
title: 'Connected',
|
|
172
|
+
type: 'number',
|
|
173
|
+
value: connectedEdges,
|
|
174
|
+
icon: 'lucide:link',
|
|
175
|
+
description: 'Currently connected edges',
|
|
176
|
+
color: '#10b981',
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
id: 'disconnectedEdges',
|
|
180
|
+
title: 'Disconnected',
|
|
181
|
+
type: 'number',
|
|
182
|
+
value: disconnectedEdges,
|
|
183
|
+
icon: 'lucide:unlink',
|
|
184
|
+
description: 'Offline edge nodes',
|
|
185
|
+
color: disconnectedEdges > 0 ? '#ef4444' : '#6b7280',
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
id: 'activeTunnels',
|
|
189
|
+
title: 'Active Tunnels',
|
|
190
|
+
type: 'number',
|
|
191
|
+
value: activeTunnels,
|
|
192
|
+
icon: 'lucide:cable',
|
|
193
|
+
description: 'Active client connections',
|
|
194
|
+
color: '#8b5cf6',
|
|
195
|
+
},
|
|
196
|
+
];
|
|
197
|
+
return html `
|
|
198
|
+
<ops-sectionheading>Remote Ingress</ops-sectionheading>
|
|
199
|
+
|
|
200
|
+
${this.riState.newEdgeSecret ? html `
|
|
201
|
+
<div class="secretDialog">
|
|
202
|
+
<strong>Edge Secret (copy now - shown only once):</strong>
|
|
203
|
+
<code>${this.riState.newEdgeSecret}</code>
|
|
204
|
+
<div class="warning">This secret will not be shown again. Save it securely.</div>
|
|
205
|
+
<dees-button
|
|
206
|
+
@click=${() => appstate.remoteIngressStatePart.dispatchAction(appstate.clearNewEdgeSecretAction, null)}
|
|
207
|
+
>Dismiss</dees-button>
|
|
208
|
+
</div>
|
|
209
|
+
` : ''}
|
|
210
|
+
|
|
211
|
+
<div class="remoteIngressContainer">
|
|
212
|
+
<dees-statsgrid .tiles=${statsTiles}></dees-statsgrid>
|
|
213
|
+
|
|
214
|
+
<dees-table
|
|
215
|
+
.heading1=${'Edge Nodes'}
|
|
216
|
+
.heading2=${'Manage remote ingress edge registrations'}
|
|
217
|
+
.data=${this.riState.edges}
|
|
218
|
+
.displayFunction=${(edge) => ({
|
|
219
|
+
name: edge.name,
|
|
220
|
+
status: this.getEdgeStatusHtml(edge),
|
|
221
|
+
publicIp: this.getEdgePublicIp(edge.id),
|
|
222
|
+
ports: this.getPortsHtml(edge.listenPorts),
|
|
223
|
+
tunnels: this.getEdgeTunnelCount(edge.id),
|
|
224
|
+
lastHeartbeat: this.getLastHeartbeat(edge.id),
|
|
225
|
+
})}
|
|
226
|
+
.dataActions=${[
|
|
227
|
+
{
|
|
228
|
+
name: 'Regenerate Secret',
|
|
229
|
+
iconName: 'lucide:key',
|
|
230
|
+
action: async (edge) => {
|
|
231
|
+
await appstate.remoteIngressStatePart.dispatchAction(appstate.regenerateRemoteIngressSecretAction, edge.id);
|
|
232
|
+
},
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
name: 'Delete',
|
|
236
|
+
iconName: 'lucide:trash2',
|
|
237
|
+
action: async (edge) => {
|
|
238
|
+
await appstate.remoteIngressStatePart.dispatchAction(appstate.deleteRemoteIngressAction, edge.id);
|
|
239
|
+
},
|
|
240
|
+
},
|
|
241
|
+
]}
|
|
242
|
+
.createNewAction=${async () => {
|
|
243
|
+
const { DeesModal } = await import('@design.estate/dees-catalog');
|
|
244
|
+
const result = await DeesModal.createAndShow({
|
|
245
|
+
heading: 'Create Edge Node',
|
|
246
|
+
content: html `
|
|
247
|
+
<dees-form>
|
|
248
|
+
<dees-input-text .key=${'name'} .label=${'Name'} .required=${true}></dees-input-text>
|
|
249
|
+
<dees-input-text .key=${'listenPorts'} .label=${'Listen Ports (comma-separated)'} .required=${true} .value=${'443,25'}></dees-input-text>
|
|
250
|
+
<dees-input-text .key=${'tags'} .label=${'Tags (comma-separated, optional)'}></dees-input-text>
|
|
251
|
+
</dees-form>
|
|
252
|
+
`,
|
|
253
|
+
menuOptions: [],
|
|
254
|
+
});
|
|
255
|
+
if (result) {
|
|
256
|
+
const formData = result;
|
|
257
|
+
const ports = (formData.name ? formData.listenPorts : '443')
|
|
258
|
+
.split(',')
|
|
259
|
+
.map((p) => parseInt(p.trim(), 10))
|
|
260
|
+
.filter((p) => !isNaN(p));
|
|
261
|
+
const tags = formData.tags
|
|
262
|
+
? formData.tags.split(',').map((t) => t.trim()).filter(Boolean)
|
|
263
|
+
: undefined;
|
|
264
|
+
await appstate.remoteIngressStatePart.dispatchAction(appstate.createRemoteIngressAction, {
|
|
265
|
+
name: formData.name,
|
|
266
|
+
listenPorts: ports,
|
|
267
|
+
tags,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}}
|
|
271
|
+
></dees-table>
|
|
272
|
+
</div>
|
|
273
|
+
`;
|
|
274
|
+
}
|
|
275
|
+
getEdgeStatus(edgeId) {
|
|
276
|
+
return this.riState.statuses.find(s => s.edgeId === edgeId);
|
|
277
|
+
}
|
|
278
|
+
getEdgeStatusHtml(edge) {
|
|
279
|
+
if (!edge.enabled) {
|
|
280
|
+
return html `<span class="statusBadge disabled">Disabled</span>`;
|
|
281
|
+
}
|
|
282
|
+
const status = this.getEdgeStatus(edge.id);
|
|
283
|
+
if (status?.connected) {
|
|
284
|
+
return html `<span class="statusBadge connected">Connected</span>`;
|
|
285
|
+
}
|
|
286
|
+
return html `<span class="statusBadge disconnected">Disconnected</span>`;
|
|
287
|
+
}
|
|
288
|
+
getEdgePublicIp(edgeId) {
|
|
289
|
+
const status = this.getEdgeStatus(edgeId);
|
|
290
|
+
return status?.publicIp || '-';
|
|
291
|
+
}
|
|
292
|
+
getPortsHtml(ports) {
|
|
293
|
+
return html `<div class="portsDisplay">${ports.map(p => html `<span class="portBadge">${p}</span>`)}</div>`;
|
|
294
|
+
}
|
|
295
|
+
getEdgeTunnelCount(edgeId) {
|
|
296
|
+
const status = this.getEdgeStatus(edgeId);
|
|
297
|
+
return status?.activeTunnels || 0;
|
|
298
|
+
}
|
|
299
|
+
getLastHeartbeat(edgeId) {
|
|
300
|
+
const status = this.getEdgeStatus(edgeId);
|
|
301
|
+
if (!status?.lastHeartbeat)
|
|
302
|
+
return '-';
|
|
303
|
+
const ago = Date.now() - status.lastHeartbeat;
|
|
304
|
+
if (ago < 60000)
|
|
305
|
+
return `${Math.floor(ago / 1000)}s ago`;
|
|
306
|
+
if (ago < 3600000)
|
|
307
|
+
return `${Math.floor(ago / 60000)}m ago`;
|
|
308
|
+
return `${Math.floor(ago / 3600000)}h ago`;
|
|
309
|
+
}
|
|
310
|
+
static {
|
|
311
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
return OpsViewRemoteIngress = _classThis;
|
|
315
|
+
})();
|
|
316
|
+
export { OpsViewRemoteIngress };
|
|
317
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctcmVtb3RlaW5ncmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9lbGVtZW50cy9vcHMtdmlldy1yZW1vdGVpbmdyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUNYLElBQUksRUFDSixhQUFhLEVBRWIsR0FBRyxFQUNILEtBQUssRUFDTCxVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEtBQUssUUFBUSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sS0FBSyxVQUFVLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBbUIsTUFBTSw2QkFBNkIsQ0FBQztJQVNqRCxvQkFBb0I7NEJBRGhDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQzs7OztzQkFDRSxXQUFXOzs7O29DQUFuQixTQUFRLFdBQVc7Ozs7bUNBQ2xELEtBQUssRUFBRTtZQUNSLDBLQUFTLE9BQU8sNkJBQVAsT0FBTyx5RkFBNEU7WUFGOUYsNktBNFFDOzs7O1FBMVFDLDJFQUFpRCxRQUFRLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLEVBQUM7UUFBNUYsSUFBUyxPQUFPLDZDQUE0RTtRQUE1RixJQUFTLE9BQU8sbURBQTRFO1FBRTVGO1lBQ0UsS0FBSyxFQUFFLENBQUM7O1lBQ1IsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDdkUsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNoQztRQUVELEtB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
|
package/dist_ts_web/router.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const validViews: readonly ["overview", "network", "emails", "logs", "configuration", "security", "certificates"];
|
|
1
|
+
export declare const validViews: readonly ["overview", "network", "emails", "logs", "configuration", "security", "certificates", "remoteingress"];
|
|
2
2
|
export declare const validEmailFolders: readonly ["queued", "sent", "failed", "security"];
|
|
3
3
|
export type TValidView = typeof validViews[number];
|
|
4
4
|
export type TValidEmailFolder = typeof validEmailFolders[number];
|
package/dist_ts_web/router.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
2
|
import * as appstate from './appstate.js';
|
|
3
3
|
const SmartRouter = plugins.domtools.plugins.smartrouter.SmartRouter;
|
|
4
|
-
export const validViews = ['overview', 'network', 'emails', 'logs', 'configuration', 'security', 'certificates'];
|
|
4
|
+
export const validViews = ['overview', 'network', 'emails', 'logs', 'configuration', 'security', 'certificates', 'remoteingress'];
|
|
5
5
|
export const validEmailFolders = ['queued', 'sent', 'failed', 'security'];
|
|
6
6
|
class AppRouter {
|
|
7
7
|
router;
|
|
@@ -162,4 +162,4 @@ class AppRouter {
|
|
|
162
162
|
}
|
|
163
163
|
}
|
|
164
164
|
export const appRouter = new AppRouter();
|
|
165
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEtBQUssUUFBUSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO0FBRXJFLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxlQUFlLENBQVUsQ0FBQztBQUMzSSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBVSxDQUFDO0FBS25GLE1BQU0sU0FBUztJQUNMLE1BQU0sQ0FBbUM7SUFDekMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUNwQixtQkFBbUIsR0FBRyxLQUFLLENBQUM7SUFFcEM7UUFDRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVNLElBQUk7UUFDVCxJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFFTyxXQUFXO1FBQ2pCLGFBQWE7UUFDYixLQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzlCLElBQUksSUFBSSxLQUFLLFFB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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@serve.zone/dcrouter",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "6.
|
|
4
|
+
"version": "6.4.0",
|
|
5
5
|
"description": "A multifaceted routing service handling mail and SMS delivery functions.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"exports": {
|
|
@@ -56,6 +56,7 @@
|
|
|
56
56
|
"@push.rocks/smartstate": "^2.0.30",
|
|
57
57
|
"@push.rocks/smartunique": "^3.0.9",
|
|
58
58
|
"@serve.zone/interfaces": "^5.3.0",
|
|
59
|
+
"@serve.zone/remoteingress": "^3.0.1",
|
|
59
60
|
"@tsclass/tsclass": "^9.3.0",
|
|
60
61
|
"lru-cache": "^11.2.6",
|
|
61
62
|
"uuid": "^13.0.0"
|
package/ts/00_commitinfo_data.ts
CHANGED
package/ts/classes.dcrouter.ts
CHANGED
|
@@ -21,11 +21,15 @@ import { CacheDb, CacheCleaner, type ICacheDbOptions } from './cache/index.js';
|
|
|
21
21
|
import { OpsServer } from './opsserver/index.js';
|
|
22
22
|
import { MetricsManager } from './monitoring/index.js';
|
|
23
23
|
import { RadiusServer, type IRadiusServerConfig } from './radius/index.js';
|
|
24
|
+
import { RemoteIngressManager, TunnelManager } from './remoteingress/index.js';
|
|
24
25
|
|
|
25
26
|
export interface IDcRouterOptions {
|
|
26
|
-
/**
|
|
27
|
+
/** Base directory for all dcrouter data. Defaults to ~/.serve.zone/dcrouter */
|
|
28
|
+
baseDir?: string;
|
|
29
|
+
|
|
30
|
+
/**
|
|
27
31
|
* Direct SmartProxy configuration - gives full control over HTTP/HTTPS and TCP/SNI traffic
|
|
28
|
-
* This is the preferred way to configure HTTP/HTTPS and general TCP/SNI traffic
|
|
32
|
+
* This is the preferred way to configure HTTP/HTTPS and general TCP/SNI traffic
|
|
29
33
|
*/
|
|
30
34
|
smartProxyConfig?: plugins.smartproxy.ISmartProxyOptions;
|
|
31
35
|
|
|
@@ -152,6 +156,22 @@ export interface IDcRouterOptions {
|
|
|
152
156
|
* Enables MAC Authentication Bypass (MAB) and VLAN assignment
|
|
153
157
|
*/
|
|
154
158
|
radiusConfig?: IRadiusServerConfig;
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Remote Ingress configuration for edge tunnel nodes
|
|
162
|
+
* Enables edge nodes to accept incoming connections and tunnel them to this DcRouter
|
|
163
|
+
*/
|
|
164
|
+
remoteIngressConfig?: {
|
|
165
|
+
/** Enable remote ingress hub (default: false) */
|
|
166
|
+
enabled?: boolean;
|
|
167
|
+
/** Port for tunnel connections from edge nodes (default: 8443) */
|
|
168
|
+
tunnelPort?: number;
|
|
169
|
+
/** TLS configuration for the tunnel server */
|
|
170
|
+
tls?: {
|
|
171
|
+
certPath?: string;
|
|
172
|
+
keyPath?: string;
|
|
173
|
+
};
|
|
174
|
+
};
|
|
155
175
|
}
|
|
156
176
|
|
|
157
177
|
/**
|
|
@@ -170,6 +190,7 @@ export interface PortProxyRuleContext {
|
|
|
170
190
|
|
|
171
191
|
export class DcRouter {
|
|
172
192
|
public options: IDcRouterOptions;
|
|
193
|
+
public resolvedPaths: ReturnType<typeof paths.resolvePaths>;
|
|
173
194
|
|
|
174
195
|
// Core services
|
|
175
196
|
public smartProxy?: plugins.smartproxy.SmartProxy;
|
|
@@ -185,6 +206,10 @@ export class DcRouter {
|
|
|
185
206
|
public cacheDb?: CacheDb;
|
|
186
207
|
public cacheCleaner?: CacheCleaner;
|
|
187
208
|
|
|
209
|
+
// Remote Ingress
|
|
210
|
+
public remoteIngressManager?: RemoteIngressManager;
|
|
211
|
+
public tunnelManager?: TunnelManager;
|
|
212
|
+
|
|
188
213
|
// Certificate status tracking from SmartProxy events (keyed by domain)
|
|
189
214
|
public certificateStatusMap = new Map<string, {
|
|
190
215
|
status: 'valid' | 'failed';
|
|
@@ -210,10 +235,13 @@ export class DcRouter {
|
|
|
210
235
|
...optionsArg
|
|
211
236
|
};
|
|
212
237
|
|
|
238
|
+
// Resolve all data paths from baseDir
|
|
239
|
+
this.resolvedPaths = paths.resolvePaths(this.options.baseDir);
|
|
240
|
+
|
|
213
241
|
// Default storage to filesystem if not configured
|
|
214
242
|
if (!this.options.storage) {
|
|
215
243
|
this.options.storage = {
|
|
216
|
-
fsPath:
|
|
244
|
+
fsPath: this.resolvedPaths.defaultStoragePath,
|
|
217
245
|
};
|
|
218
246
|
}
|
|
219
247
|
|
|
@@ -259,6 +287,11 @@ export class DcRouter {
|
|
|
259
287
|
await this.setupRadiusServer();
|
|
260
288
|
}
|
|
261
289
|
|
|
290
|
+
// Set up Remote Ingress hub if configured
|
|
291
|
+
if (this.options.remoteIngressConfig?.enabled) {
|
|
292
|
+
await this.setupRemoteIngress();
|
|
293
|
+
}
|
|
294
|
+
|
|
262
295
|
this.logStartupSummary();
|
|
263
296
|
} catch (error) {
|
|
264
297
|
console.error('❌ Error starting DcRouter:', error);
|
|
@@ -345,6 +378,16 @@ export class DcRouter {
|
|
|
345
378
|
console.log(` └─ Accounting: ${this.options.radiusConfig.accounting?.enabled ? 'Enabled' : 'Disabled'}`);
|
|
346
379
|
}
|
|
347
380
|
|
|
381
|
+
// Remote Ingress summary
|
|
382
|
+
if (this.tunnelManager && this.options.remoteIngressConfig?.enabled) {
|
|
383
|
+
console.log('\n🌐 Remote Ingress:');
|
|
384
|
+
console.log(` ├─ Tunnel Port: ${this.options.remoteIngressConfig.tunnelPort || 8443}`);
|
|
385
|
+
const edgeCount = this.remoteIngressManager?.getAllEdges().length || 0;
|
|
386
|
+
const connectedCount = this.tunnelManager.getConnectedCount();
|
|
387
|
+
console.log(` ├─ Registered Edges: ${edgeCount}`);
|
|
388
|
+
console.log(` └─ Connected Edges: ${connectedCount}`);
|
|
389
|
+
}
|
|
390
|
+
|
|
348
391
|
// Storage summary
|
|
349
392
|
if (this.storageManager && this.options.storage) {
|
|
350
393
|
console.log('\n💾 Storage:');
|
|
@@ -372,7 +415,7 @@ export class DcRouter {
|
|
|
372
415
|
|
|
373
416
|
// Initialize CacheDb singleton
|
|
374
417
|
this.cacheDb = CacheDb.getInstance({
|
|
375
|
-
storagePath: cacheConfig.storagePath ||
|
|
418
|
+
storagePath: cacheConfig.storagePath || this.resolvedPaths.defaultTsmDbPath,
|
|
376
419
|
dbName: cacheConfig.dbName || 'dcrouter',
|
|
377
420
|
debug: false,
|
|
378
421
|
});
|
|
@@ -879,6 +922,11 @@ export class DcRouter {
|
|
|
879
922
|
// Stop RADIUS server if running
|
|
880
923
|
this.radiusServer ?
|
|
881
924
|
this.radiusServer.stop().catch(err => console.error('Error stopping RADIUS server:', err)) :
|
|
925
|
+
Promise.resolve(),
|
|
926
|
+
|
|
927
|
+
// Stop Remote Ingress tunnel manager if running
|
|
928
|
+
this.tunnelManager ?
|
|
929
|
+
this.tunnelManager.stop().catch(err => console.error('Error stopping TunnelManager:', err)) :
|
|
882
930
|
Promise.resolve()
|
|
883
931
|
]);
|
|
884
932
|
|
|
@@ -1306,7 +1354,7 @@ export class DcRouter {
|
|
|
1306
1354
|
|
|
1307
1355
|
try {
|
|
1308
1356
|
// Ensure paths are imported
|
|
1309
|
-
const dnsDir =
|
|
1357
|
+
const dnsDir = this.resolvedPaths.dnsRecordsDir;
|
|
1310
1358
|
|
|
1311
1359
|
// Check if directory exists
|
|
1312
1360
|
if (!plugins.fs.existsSync(dnsDir)) {
|
|
@@ -1370,7 +1418,7 @@ export class DcRouter {
|
|
|
1370
1418
|
}
|
|
1371
1419
|
|
|
1372
1420
|
// Ensure necessary directories exist
|
|
1373
|
-
paths.
|
|
1421
|
+
paths.ensureDataDirectories(this.resolvedPaths);
|
|
1374
1422
|
|
|
1375
1423
|
// Generate DKIM keys for each email domain
|
|
1376
1424
|
for (const domainConfig of this.options.emailConfig.domains) {
|
|
@@ -1525,6 +1573,31 @@ export class DcRouter {
|
|
|
1525
1573
|
}
|
|
1526
1574
|
}
|
|
1527
1575
|
|
|
1576
|
+
/**
|
|
1577
|
+
* Set up Remote Ingress hub for edge tunnel connections
|
|
1578
|
+
*/
|
|
1579
|
+
private async setupRemoteIngress(): Promise<void> {
|
|
1580
|
+
if (!this.options.remoteIngressConfig?.enabled) {
|
|
1581
|
+
return;
|
|
1582
|
+
}
|
|
1583
|
+
|
|
1584
|
+
logger.log('info', 'Setting up Remote Ingress hub...');
|
|
1585
|
+
|
|
1586
|
+
// Initialize the edge registration manager
|
|
1587
|
+
this.remoteIngressManager = new RemoteIngressManager(this.storageManager);
|
|
1588
|
+
await this.remoteIngressManager.initialize();
|
|
1589
|
+
|
|
1590
|
+
// Create and start the tunnel manager
|
|
1591
|
+
this.tunnelManager = new TunnelManager(this.remoteIngressManager, {
|
|
1592
|
+
tunnelPort: this.options.remoteIngressConfig.tunnelPort ?? 8443,
|
|
1593
|
+
targetHost: '127.0.0.1',
|
|
1594
|
+
});
|
|
1595
|
+
await this.tunnelManager.start();
|
|
1596
|
+
|
|
1597
|
+
const edgeCount = this.remoteIngressManager.getAllEdges().length;
|
|
1598
|
+
logger.log('info', `Remote Ingress hub started on port ${this.options.remoteIngressConfig.tunnelPort || 8443} with ${edgeCount} registered edge(s)`);
|
|
1599
|
+
}
|
|
1600
|
+
|
|
1528
1601
|
/**
|
|
1529
1602
|
* Set up RADIUS server for network authentication
|
|
1530
1603
|
*/
|