@serve.zone/dcrouter 13.0.4 → 13.0.6
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 +1059 -972
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.dcrouter.js +5 -2
- package/dist_ts/opsserver/handlers/certificate.handler.js +31 -23
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/ops-view-apitokens.js +1 -1
- package/dist_ts_web/elements/ops-view-certificates.js +1 -1
- package/dist_ts_web/elements/ops-view-config.js +1 -1
- package/dist_ts_web/elements/ops-view-emails.js +1 -1
- package/dist_ts_web/elements/ops-view-logs.js +1 -1
- package/dist_ts_web/elements/ops-view-network.js +1 -1
- package/dist_ts_web/elements/ops-view-networktargets.js +1 -1
- package/dist_ts_web/elements/ops-view-overview.js +1 -1
- package/dist_ts_web/elements/ops-view-remoteingress.js +1 -1
- package/dist_ts_web/elements/ops-view-routes.js +1 -1
- package/dist_ts_web/elements/ops-view-security.js +1 -1
- package/dist_ts_web/elements/ops-view-sourceprofiles.js +1 -1
- package/dist_ts_web/elements/ops-view-targetprofiles.d.ts +1 -0
- package/dist_ts_web/elements/ops-view-targetprofiles.js +51 -52
- package/dist_ts_web/elements/ops-view-vpn.js +1 -1
- package/dist_ts_web/elements/shared/index.d.ts +0 -1
- package/dist_ts_web/elements/shared/index.js +1 -2
- package/package.json +5 -5
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.dcrouter.ts +4 -1
- package/ts/opsserver/handlers/certificate.handler.ts +30 -22
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/ops-view-apitokens.ts +1 -1
- package/ts_web/elements/ops-view-certificates.ts +1 -1
- package/ts_web/elements/ops-view-config.ts +1 -1
- package/ts_web/elements/ops-view-emails.ts +1 -1
- package/ts_web/elements/ops-view-logs.ts +1 -1
- package/ts_web/elements/ops-view-network.ts +1 -1
- package/ts_web/elements/ops-view-networktargets.ts +1 -1
- package/ts_web/elements/ops-view-overview.ts +1 -1
- package/ts_web/elements/ops-view-remoteingress.ts +1 -1
- package/ts_web/elements/ops-view-routes.ts +1 -1
- package/ts_web/elements/ops-view-security.ts +1 -1
- package/ts_web/elements/ops-view-sourceprofiles.ts +1 -1
- package/ts_web/elements/ops-view-targetprofiles.ts +51 -48
- package/ts_web/elements/ops-view-vpn.ts +1 -1
- package/ts_web/elements/shared/index.ts +1 -2
- package/dist_ts_web/elements/shared/ops-sectionheading.d.ts +0 -5
- package/dist_ts_web/elements/shared/ops-sectionheading.js +0 -82
- package/ts_web/elements/shared/ops-sectionheading.ts +0 -38
|
@@ -115,7 +115,7 @@ let OpsViewEmails = (() => {
|
|
|
115
115
|
];
|
|
116
116
|
render() {
|
|
117
117
|
return html `
|
|
118
|
-
<
|
|
118
|
+
<dees-heading level="2">Email Operations</dees-heading>
|
|
119
119
|
<div class="viewContainer">
|
|
120
120
|
${this.currentView === 'detail' && this.selectedEmail
|
|
121
121
|
? html `
|
|
@@ -312,7 +312,7 @@ let OpsViewNetwork = (() => {
|
|
|
312
312
|
];
|
|
313
313
|
render() {
|
|
314
314
|
return html `
|
|
315
|
-
<
|
|
315
|
+
<dees-heading level="2">Network Activity</dees-heading>
|
|
316
316
|
|
|
317
317
|
<div class="networkContainer">
|
|
318
318
|
<!-- Stats Grid -->
|
|
@@ -96,7 +96,7 @@ let OpsViewNetworkTargets = (() => {
|
|
|
96
96
|
},
|
|
97
97
|
];
|
|
98
98
|
return html `
|
|
99
|
-
<
|
|
99
|
+
<dees-heading level="2">Network Targets</dees-heading>
|
|
100
100
|
<div class="targetsContainer">
|
|
101
101
|
<dees-statsgrid .tiles=${statsTiles}></dees-statsgrid>
|
|
102
102
|
<dees-table
|
|
@@ -137,7 +137,7 @@ let OpsViewOverview = (() => {
|
|
|
137
137
|
];
|
|
138
138
|
render() {
|
|
139
139
|
return html `
|
|
140
|
-
<
|
|
140
|
+
<dees-heading level="2">Overview</dees-heading>
|
|
141
141
|
|
|
142
142
|
${this.statsState.isLoading ? html `
|
|
143
143
|
<div class="loadingMessage">
|
|
@@ -206,7 +206,7 @@ let OpsViewRemoteIngress = (() => {
|
|
|
206
206
|
},
|
|
207
207
|
];
|
|
208
208
|
return html `
|
|
209
|
-
<
|
|
209
|
+
<dees-heading level="2">Remote Ingress</dees-heading>
|
|
210
210
|
|
|
211
211
|
${this.riState.newEdgeId ? html `
|
|
212
212
|
<div class="secretDialog">
|
|
@@ -96,7 +96,7 @@ let OpsViewSourceProfiles = (() => {
|
|
|
96
96
|
},
|
|
97
97
|
];
|
|
98
98
|
return html `
|
|
99
|
-
<
|
|
99
|
+
<dees-heading level="2">Source Profiles</dees-heading>
|
|
100
100
|
<div class="profilesContainer">
|
|
101
101
|
<dees-statsgrid .tiles=${statsTiles}></dees-statsgrid>
|
|
102
102
|
<dees-table
|
|
@@ -12,6 +12,7 @@ export declare class OpsViewTargetProfiles extends DeesElement {
|
|
|
12
12
|
connectedCallback(): Promise<void>;
|
|
13
13
|
static styles: plugins.deesElement.CSSResult[];
|
|
14
14
|
render(): TemplateResult;
|
|
15
|
+
private getRouteCandidates;
|
|
15
16
|
private showCreateProfileDialog;
|
|
16
17
|
private showEditProfileDialog;
|
|
17
18
|
private showDetailDialog;
|
|
@@ -109,7 +109,7 @@ let OpsViewTargetProfiles = (() => {
|
|
|
109
109
|
},
|
|
110
110
|
];
|
|
111
111
|
return html `
|
|
112
|
-
<
|
|
112
|
+
<dees-heading level="2">Target Profiles</dees-heading>
|
|
113
113
|
<div class="profilesContainer">
|
|
114
114
|
<dees-statsgrid .tiles=${statsTiles}></dees-statsgrid>
|
|
115
115
|
<dees-table
|
|
@@ -179,17 +179,25 @@ let OpsViewTargetProfiles = (() => {
|
|
|
179
179
|
</div>
|
|
180
180
|
`;
|
|
181
181
|
}
|
|
182
|
+
getRouteCandidates() {
|
|
183
|
+
const routeState = appstate.routeManagementStatePart.getState();
|
|
184
|
+
const routes = routeState?.mergedRoutes || [];
|
|
185
|
+
return routes
|
|
186
|
+
.filter((mr) => mr.route.name)
|
|
187
|
+
.map((mr) => ({ viewKey: mr.route.name }));
|
|
188
|
+
}
|
|
182
189
|
async showCreateProfileDialog() {
|
|
183
190
|
const { DeesModal } = await import('@design.estate/dees-catalog');
|
|
191
|
+
const routeCandidates = this.getRouteCandidates();
|
|
184
192
|
DeesModal.createAndShow({
|
|
185
193
|
heading: 'Create Target Profile',
|
|
186
194
|
content: html `
|
|
187
195
|
<dees-form>
|
|
188
196
|
<dees-input-text .key=${'name'} .label=${'Name'} .required=${true}></dees-input-text>
|
|
189
197
|
<dees-input-text .key=${'description'} .label=${'Description'}></dees-input-text>
|
|
190
|
-
<dees-input-
|
|
191
|
-
<dees-input-
|
|
192
|
-
<dees-input-
|
|
198
|
+
<dees-input-list .key=${'domains'} .label=${'Domains'} .placeholder=${'e.g. *.example.com'} .allowFreeform=${true}></dees-input-list>
|
|
199
|
+
<dees-input-list .key=${'targets'} .label=${'Targets (host:port)'} .placeholder=${'e.g. 10.0.0.1:443'} .allowFreeform=${true}></dees-input-list>
|
|
200
|
+
<dees-input-list .key=${'routeRefs'} .label=${'Route Refs'} .placeholder=${'Type to search routes...'} .candidates=${routeCandidates} .allowFreeform=${true}></dees-input-list>
|
|
193
201
|
</dees-form>
|
|
194
202
|
`,
|
|
195
203
|
menuOptions: [
|
|
@@ -204,30 +212,26 @@ let OpsViewTargetProfiles = (() => {
|
|
|
204
212
|
const data = await form.collectFormData();
|
|
205
213
|
if (!data.name)
|
|
206
214
|
return;
|
|
207
|
-
const domains = data.domains
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
: undefined;
|
|
222
|
-
const routeRefs = data.routeRefs
|
|
223
|
-
? String(data.routeRefs).split(',').map((s) => s.trim()).filter(Boolean)
|
|
224
|
-
: undefined;
|
|
215
|
+
const domains = Array.isArray(data.domains) ? data.domains : [];
|
|
216
|
+
const targetStrings = Array.isArray(data.targets) ? data.targets : [];
|
|
217
|
+
const targets = targetStrings
|
|
218
|
+
.map((s) => {
|
|
219
|
+
const lastColon = s.lastIndexOf(':');
|
|
220
|
+
if (lastColon === -1)
|
|
221
|
+
return null;
|
|
222
|
+
return {
|
|
223
|
+
host: s.substring(0, lastColon),
|
|
224
|
+
port: parseInt(s.substring(lastColon + 1), 10),
|
|
225
|
+
};
|
|
226
|
+
})
|
|
227
|
+
.filter((t) => t !== null && !isNaN(t.port));
|
|
228
|
+
const routeRefs = Array.isArray(data.routeRefs) ? data.routeRefs : [];
|
|
225
229
|
await appstate.targetProfilesStatePart.dispatchAction(appstate.createTargetProfileAction, {
|
|
226
230
|
name: String(data.name),
|
|
227
231
|
description: data.description ? String(data.description) : undefined,
|
|
228
|
-
domains,
|
|
229
|
-
targets,
|
|
230
|
-
routeRefs,
|
|
232
|
+
domains: domains.length > 0 ? domains : undefined,
|
|
233
|
+
targets: targets.length > 0 ? targets : undefined,
|
|
234
|
+
routeRefs: routeRefs.length > 0 ? routeRefs : undefined,
|
|
231
235
|
});
|
|
232
236
|
modalArg.destroy();
|
|
233
237
|
},
|
|
@@ -236,19 +240,20 @@ let OpsViewTargetProfiles = (() => {
|
|
|
236
240
|
});
|
|
237
241
|
}
|
|
238
242
|
async showEditProfileDialog(profile) {
|
|
239
|
-
const currentDomains = profile.domains
|
|
240
|
-
const currentTargets = profile.targets?.map(t => `${t.host}:${t.port}`)
|
|
241
|
-
const currentRouteRefs = profile.routeRefs
|
|
243
|
+
const currentDomains = profile.domains || [];
|
|
244
|
+
const currentTargets = profile.targets?.map(t => `${t.host}:${t.port}`) || [];
|
|
245
|
+
const currentRouteRefs = profile.routeRefs || [];
|
|
242
246
|
const { DeesModal } = await import('@design.estate/dees-catalog');
|
|
247
|
+
const routeCandidates = this.getRouteCandidates();
|
|
243
248
|
DeesModal.createAndShow({
|
|
244
249
|
heading: `Edit Profile: ${profile.name}`,
|
|
245
250
|
content: html `
|
|
246
251
|
<dees-form>
|
|
247
252
|
<dees-input-text .key=${'name'} .label=${'Name'} .value=${profile.name}></dees-input-text>
|
|
248
253
|
<dees-input-text .key=${'description'} .label=${'Description'} .value=${profile.description || ''}></dees-input-text>
|
|
249
|
-
<dees-input-
|
|
250
|
-
<dees-input-
|
|
251
|
-
<dees-input-
|
|
254
|
+
<dees-input-list .key=${'domains'} .label=${'Domains'} .placeholder=${'e.g. *.example.com'} .allowFreeform=${true} .value=${currentDomains}></dees-input-list>
|
|
255
|
+
<dees-input-list .key=${'targets'} .label=${'Targets (host:port)'} .placeholder=${'e.g. 10.0.0.1:443'} .allowFreeform=${true} .value=${currentTargets}></dees-input-list>
|
|
256
|
+
<dees-input-list .key=${'routeRefs'} .label=${'Route Refs'} .placeholder=${'Type to search routes...'} .candidates=${routeCandidates} .allowFreeform=${true} .value=${currentRouteRefs}></dees-input-list>
|
|
252
257
|
</dees-form>
|
|
253
258
|
`,
|
|
254
259
|
menuOptions: [
|
|
@@ -261,26 +266,20 @@ let OpsViewTargetProfiles = (() => {
|
|
|
261
266
|
if (!form)
|
|
262
267
|
return;
|
|
263
268
|
const data = await form.collectFormData();
|
|
264
|
-
const domains = data.domains
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
};
|
|
279
|
-
}).filter((t) => t !== null && !isNaN(t.port))
|
|
280
|
-
: [];
|
|
281
|
-
const routeRefs = data.routeRefs
|
|
282
|
-
? String(data.routeRefs).split(',').map((s) => s.trim()).filter(Boolean)
|
|
283
|
-
: [];
|
|
269
|
+
const domains = Array.isArray(data.domains) ? data.domains : [];
|
|
270
|
+
const targetStrings = Array.isArray(data.targets) ? data.targets : [];
|
|
271
|
+
const targets = targetStrings
|
|
272
|
+
.map((s) => {
|
|
273
|
+
const lastColon = s.lastIndexOf(':');
|
|
274
|
+
if (lastColon === -1)
|
|
275
|
+
return null;
|
|
276
|
+
return {
|
|
277
|
+
host: s.substring(0, lastColon),
|
|
278
|
+
port: parseInt(s.substring(lastColon + 1), 10),
|
|
279
|
+
};
|
|
280
|
+
})
|
|
281
|
+
.filter((t) => t !== null && !isNaN(t.port));
|
|
282
|
+
const routeRefs = Array.isArray(data.routeRefs) ? data.routeRefs : [];
|
|
284
283
|
await appstate.targetProfilesStatePart.dispatchAction(appstate.updateTargetProfileAction, {
|
|
285
284
|
id: profile.id,
|
|
286
285
|
name: String(data.name),
|
|
@@ -409,4 +408,4 @@ let OpsViewTargetProfiles = (() => {
|
|
|
409
408
|
return OpsViewTargetProfiles = _classThis;
|
|
410
409
|
})();
|
|
411
410
|
export { OpsViewTargetProfiles };
|
|
412
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctdGFyZ2V0cHJvZmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90c193ZWIvZWxlbWVudHMvb3BzLXZpZXctdGFyZ2V0cHJvZmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxXQUFXLEVBQ1gsSUFBSSxFQUNKLGFBQWEsRUFFYixHQUFHLEVBQ0gsS0FBSyxFQUNMLFVBQVUsR0FDWCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxLQUFLLFVBQVUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFtQixNQUFNLDZCQUE2QixDQUFDO0lBU2pELHFCQUFxQjs0QkFEakMsYUFBYSxDQUFDLHlCQUF5QixDQUFDOzs7O3NCQUNFLFdBQVc7Ozs7cUNBQW5CLFNBQVEsV0FBVzs7OzsrQ0FDbkQsS0FBSyxFQUFFO1lBQ1IsOE1BQVMsbUJBQW1CLDZCQUFuQixtQkFBbUIsaUhBQStFO1lBRjdHLDZLQW9XQzs7OztRQWxXQyxtR0FBOEQsUUFBUSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRyxFQUFDO1FBQTNHLElBQVMsbUJBQW1CLHlEQUErRTtRQUEzRyxJQUFTLG1CQUFtQiwrREFBK0U7UUFFM0c7WUFDRSxLQUFLLEVBQUUsQ0FBQzs7WUFDUixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsdUJBQXVCLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQzNFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxJ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
|
|
411
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctdGFyZ2V0cHJvZmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90c193ZWIvZWxlbWVudHMvb3BzLXZpZXctdGFyZ2V0cHJvZmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxXQUFXLEVBQ1gsSUFBSSxFQUNKLGFBQWEsRUFFYixHQUFHLEVBQ0gsS0FBSyxFQUNMLFVBQVUsR0FDWCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxLQUFLLFVBQVUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFtQixNQUFNLDZCQUE2QixDQUFDO0lBU2pELHFCQUFxQjs0QkFEakMsYUFBYSxDQUFDLHlCQUF5QixDQUFDOzs7O3NCQUNFLFdBQVc7Ozs7cUNBQW5CLFNBQVEsV0FBVzs7OzsrQ0FDbkQsS0FBSyxFQUFFO1lBQ1IsOE1BQVMsbUJBQW1CLDZCQUFuQixtQkFBbUIsaUhBQStFO1lBRjdHLDZLQXVXQzs7OztRQXJXQyxtR0FBOEQsUUFBUSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRyxFQUFDO1FBQTNHLElBQVMsbUJBQW1CLHlEQUErRTtRQUEzRyxJQUFTLG1CQUFtQiwrREFBK0U7UUFFM0c7WUFDRSxLQUFLLEVBQUUsQ0FBQzs7WUFDUixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsdUJBQXVCLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQzNFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxJ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
|
|
@@ -1,3 +1,2 @@
|
|
|
1
1
|
export * from './css.js';
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvc2hhcmVkL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMseUJBQXlCLENBQUMifQ==
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvc2hhcmVkL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsVUFBVSxDQUFDIn0=
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@serve.zone/dcrouter",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "13.0.
|
|
4
|
+
"version": "13.0.6",
|
|
5
5
|
"description": "A multifaceted routing service handling mail and SMS delivery functions.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"exports": {
|
|
@@ -35,14 +35,14 @@
|
|
|
35
35
|
"@api.global/typedserver": "^8.4.6",
|
|
36
36
|
"@api.global/typedsocket": "^4.1.2",
|
|
37
37
|
"@apiclient.xyz/cloudflare": "^7.1.0",
|
|
38
|
-
"@design.estate/dees-catalog": "^3.
|
|
38
|
+
"@design.estate/dees-catalog": "^3.61.1",
|
|
39
39
|
"@design.estate/dees-element": "^2.2.4",
|
|
40
40
|
"@push.rocks/lik": "^6.4.0",
|
|
41
41
|
"@push.rocks/projectinfo": "^5.1.0",
|
|
42
42
|
"@push.rocks/qenv": "^6.1.3",
|
|
43
|
-
"@push.rocks/smartacme": "^9.
|
|
44
|
-
"@push.rocks/smartdata": "^7.1.
|
|
45
|
-
"@push.rocks/smartdb": "^2.5.
|
|
43
|
+
"@push.rocks/smartacme": "^9.5.0",
|
|
44
|
+
"@push.rocks/smartdata": "^7.1.6",
|
|
45
|
+
"@push.rocks/smartdb": "^2.5.9",
|
|
46
46
|
"@push.rocks/smartdns": "^7.9.0",
|
|
47
47
|
"@push.rocks/smartfs": "^1.5.0",
|
|
48
48
|
"@push.rocks/smartguard": "^3.1.0",
|
package/ts/00_commitinfo_data.ts
CHANGED
package/ts/classes.dcrouter.ts
CHANGED
|
@@ -1076,7 +1076,10 @@ export class DcRouter {
|
|
|
1076
1076
|
if (!expiryDate) {
|
|
1077
1077
|
try {
|
|
1078
1078
|
const cleanDomain = entry.domain.replace(/^\*\.?/, '');
|
|
1079
|
-
const
|
|
1079
|
+
const domParts = cleanDomain.split('.');
|
|
1080
|
+
const baseDomain = domParts.length > 2 ? domParts.slice(-2).join('.') : cleanDomain;
|
|
1081
|
+
const certDoc = await AcmeCertDoc.findByDomain(baseDomain)
|
|
1082
|
+
|| (baseDomain !== cleanDomain ? await AcmeCertDoc.findByDomain(cleanDomain) : null);
|
|
1080
1083
|
if (certDoc?.validUntil) {
|
|
1081
1084
|
expiryDate = new Date(certDoc.validUntil).toISOString();
|
|
1082
1085
|
}
|
|
@@ -191,7 +191,11 @@ export class CertificateHandler {
|
|
|
191
191
|
// Check persisted cert data from smartdata document classes
|
|
192
192
|
if (status === 'unknown') {
|
|
193
193
|
const cleanDomain = domain.replace(/^\*\.?/, '');
|
|
194
|
-
|
|
194
|
+
// SmartAcme stores certs under the base domain (e.g. example.com for api.example.com)
|
|
195
|
+
const parts = cleanDomain.split('.');
|
|
196
|
+
const baseDomain = parts.length > 2 ? parts.slice(-2).join('.') : cleanDomain;
|
|
197
|
+
const acmeDoc = await AcmeCertDoc.findByDomain(baseDomain)
|
|
198
|
+
|| (baseDomain !== cleanDomain ? await AcmeCertDoc.findByDomain(cleanDomain) : null);
|
|
195
199
|
const proxyDoc = !acmeDoc ? await ProxyCertDoc.findByDomain(domain) : null;
|
|
196
200
|
|
|
197
201
|
if (acmeDoc?.validUntil) {
|
|
@@ -331,31 +335,32 @@ export class CertificateHandler {
|
|
|
331
335
|
await dcRouter.certProvisionScheduler.clearBackoff(domain);
|
|
332
336
|
}
|
|
333
337
|
|
|
334
|
-
//
|
|
335
|
-
dcRouter.
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
if (dcRouter.smartAcme) {
|
|
339
|
-
try {
|
|
340
|
-
await dcRouter.smartAcme.getCertificateForDomain(domain, { forceRenew: forceRenew ?? false });
|
|
341
|
-
return { success: true, message: forceRenew ? `Certificate force-renewed for domain '${domain}'` : `Certificate reprovisioning triggered for domain '${domain}'` };
|
|
342
|
-
} catch (err: unknown) {
|
|
343
|
-
return { success: false, message: (err as Error).message || `Failed to reprovision certificate for ${domain}` };
|
|
344
|
-
}
|
|
338
|
+
// Find routes matching this domain — needed to provision through SmartProxy
|
|
339
|
+
const routeNames = dcRouter.findRouteNamesForDomain(domain);
|
|
340
|
+
if (routeNames.length === 0) {
|
|
341
|
+
return { success: false, message: `No routes found for domain '${domain}'` };
|
|
345
342
|
}
|
|
346
343
|
|
|
347
|
-
//
|
|
348
|
-
|
|
349
|
-
if (routeNames.length > 0) {
|
|
344
|
+
// If forceRenew, invalidate SmartAcme's cache so the next provision gets a fresh cert
|
|
345
|
+
if (forceRenew && dcRouter.smartAcme) {
|
|
350
346
|
try {
|
|
351
|
-
await
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
return { success: false, message: (err as Error).message || `Failed to reprovision certificate for ${domain}` };
|
|
347
|
+
await dcRouter.smartAcme.getCertificateForDomain(domain, { forceRenew: true });
|
|
348
|
+
} catch {
|
|
349
|
+
// Cache invalidation failed — proceed with provisioning anyway
|
|
355
350
|
}
|
|
356
351
|
}
|
|
357
352
|
|
|
358
|
-
|
|
353
|
+
// Clear status map entry so it gets refreshed by the certificate-issued event
|
|
354
|
+
dcRouter.certificateStatusMap.delete(domain);
|
|
355
|
+
|
|
356
|
+
// Provision through SmartProxy — this triggers the full pipeline:
|
|
357
|
+
// certProvisionFunction → bridge.loadCertificate → certificate-issued event → status map updated
|
|
358
|
+
try {
|
|
359
|
+
await smartProxy.provisionCertificate(routeNames[0]);
|
|
360
|
+
return { success: true, message: forceRenew ? `Certificate force-renewed for domain '${domain}'` : `Certificate reprovisioning triggered for domain '${domain}'` };
|
|
361
|
+
} catch (err: unknown) {
|
|
362
|
+
return { success: false, message: (err as Error).message || `Failed to reprovision certificate for ${domain}` };
|
|
363
|
+
}
|
|
359
364
|
}
|
|
360
365
|
|
|
361
366
|
/**
|
|
@@ -364,9 +369,12 @@ export class CertificateHandler {
|
|
|
364
369
|
private async deleteCertificate(domain: string): Promise<{ success: boolean; message?: string }> {
|
|
365
370
|
const dcRouter = this.opsServerRef.dcRouterRef;
|
|
366
371
|
const cleanDomain = domain.replace(/^\*\.?/, '');
|
|
372
|
+
const parts = cleanDomain.split('.');
|
|
373
|
+
const baseDomain = parts.length > 2 ? parts.slice(-2).join('.') : cleanDomain;
|
|
367
374
|
|
|
368
|
-
// Delete from smartdata document classes
|
|
369
|
-
const acmeDoc = await AcmeCertDoc.findByDomain(
|
|
375
|
+
// Delete from smartdata document classes (try base domain first, then exact)
|
|
376
|
+
const acmeDoc = await AcmeCertDoc.findByDomain(baseDomain)
|
|
377
|
+
|| (baseDomain !== cleanDomain ? await AcmeCertDoc.findByDomain(cleanDomain) : null);
|
|
370
378
|
if (acmeDoc) {
|
|
371
379
|
await acmeDoc.delete();
|
|
372
380
|
}
|
|
@@ -100,7 +100,7 @@ export class OpsViewApiTokens extends DeesElement {
|
|
|
100
100
|
const { apiTokens } = this.routeState;
|
|
101
101
|
|
|
102
102
|
return html`
|
|
103
|
-
<
|
|
103
|
+
<dees-heading level="2">API Tokens</dees-heading>
|
|
104
104
|
|
|
105
105
|
<div class="apiTokensContainer">
|
|
106
106
|
<dees-table
|
|
@@ -159,7 +159,7 @@ export class OpsViewCertificates extends DeesElement {
|
|
|
159
159
|
const { summary } = this.certState;
|
|
160
160
|
|
|
161
161
|
return html`
|
|
162
|
-
<
|
|
162
|
+
<dees-heading level="2">Certificates</dees-heading>
|
|
163
163
|
|
|
164
164
|
<div class="certificatesContainer">
|
|
165
165
|
${this.renderStatsTiles(summary)}
|
|
@@ -60,7 +60,7 @@ export class OpsViewEmails extends DeesElement {
|
|
|
60
60
|
|
|
61
61
|
public render() {
|
|
62
62
|
return html`
|
|
63
|
-
<
|
|
63
|
+
<dees-heading level="2">Email Operations</dees-heading>
|
|
64
64
|
<div class="viewContainer">
|
|
65
65
|
${this.currentView === 'detail' && this.selectedEmail
|
|
66
66
|
? html`
|
|
@@ -285,7 +285,7 @@ export class OpsViewNetwork extends DeesElement {
|
|
|
285
285
|
|
|
286
286
|
public render() {
|
|
287
287
|
return html`
|
|
288
|
-
<
|
|
288
|
+
<dees-heading level="2">Network Activity</dees-heading>
|
|
289
289
|
|
|
290
290
|
<div class="networkContainer">
|
|
291
291
|
<!-- Stats Grid -->
|
|
@@ -64,7 +64,7 @@ export class OpsViewNetworkTargets extends DeesElement {
|
|
|
64
64
|
];
|
|
65
65
|
|
|
66
66
|
return html`
|
|
67
|
-
<
|
|
67
|
+
<dees-heading level="2">Network Targets</dees-heading>
|
|
68
68
|
<div class="targetsContainer">
|
|
69
69
|
<dees-statsgrid .tiles=${statsTiles}></dees-statsgrid>
|
|
70
70
|
<dees-table
|
|
@@ -94,7 +94,7 @@ export class OpsViewOverview extends DeesElement {
|
|
|
94
94
|
|
|
95
95
|
public render() {
|
|
96
96
|
return html`
|
|
97
|
-
<
|
|
97
|
+
<dees-heading level="2">Overview</dees-heading>
|
|
98
98
|
|
|
99
99
|
${this.statsState.isLoading ? html`
|
|
100
100
|
<div class="loadingMessage">
|
|
@@ -174,7 +174,7 @@ export class OpsViewRemoteIngress extends DeesElement {
|
|
|
174
174
|
];
|
|
175
175
|
|
|
176
176
|
return html`
|
|
177
|
-
<
|
|
177
|
+
<dees-heading level="2">Remote Ingress</dees-heading>
|
|
178
178
|
|
|
179
179
|
${this.riState.newEdgeId ? html`
|
|
180
180
|
<div class="secretDialog">
|
|
@@ -200,7 +200,7 @@ export class OpsViewRoutes extends DeesElement {
|
|
|
200
200
|
});
|
|
201
201
|
|
|
202
202
|
return html`
|
|
203
|
-
<
|
|
203
|
+
<dees-heading level="2">Route Management</dees-heading>
|
|
204
204
|
|
|
205
205
|
<div class="routesContainer">
|
|
206
206
|
<dees-statsgrid
|