@serve.zone/dcrouter 13.15.1 → 13.16.1
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 +510 -517
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.dcrouter.d.ts +3 -6
- package/dist_ts/classes.dcrouter.js +39 -53
- package/dist_ts/config/classes.reference-resolver.d.ts +8 -8
- package/dist_ts/config/classes.reference-resolver.js +6 -6
- package/dist_ts/config/classes.route-config-manager.d.ts +13 -13
- package/dist_ts/config/classes.route-config-manager.js +117 -144
- package/dist_ts/config/classes.target-profile-manager.d.ts +2 -2
- package/dist_ts/config/classes.target-profile-manager.js +7 -18
- package/dist_ts/db/documents/{classes.stored-route.doc.d.ts → classes.route.doc.d.ts} +6 -3
- package/dist_ts/db/documents/{classes.stored-route.doc.js → classes.route.doc.js} +21 -9
- package/dist_ts/db/documents/index.d.ts +1 -2
- package/dist_ts/db/documents/index.js +2 -3
- package/dist_ts/opsserver/handlers/network-target.handler.js +3 -3
- package/dist_ts/opsserver/handlers/route-management.handler.js +3 -23
- package/dist_ts/opsserver/handlers/source-profile.handler.js +3 -3
- package/dist_ts_apiclient/classes.route.d.ts +2 -5
- package/dist_ts_apiclient/classes.route.js +13 -42
- package/dist_ts_interfaces/data/route-management.d.ts +8 -17
- package/dist_ts_interfaces/requests/route-management.d.ts +6 -37
- package/dist_ts_migrations/index.js +23 -1
- package/dist_ts_oci_container/plugins.d.ts +3 -0
- package/dist_ts_oci_container/plugins.js +4 -0
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/appstate.d.ts +0 -5
- package/dist_ts_web/appstate.js +1 -38
- package/dist_ts_web/elements/network/ops-view-routes.js +60 -110
- package/package.json +1 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.dcrouter.ts +45 -55
- package/ts/config/classes.reference-resolver.ts +13 -13
- package/ts/config/classes.route-config-manager.ts +128 -146
- package/ts/config/classes.target-profile-manager.ts +7 -20
- package/ts/db/documents/{classes.stored-route.doc.ts → classes.route.doc.ts} +16 -5
- package/ts/db/documents/index.ts +1 -2
- package/ts/opsserver/handlers/network-target.handler.ts +2 -2
- package/ts/opsserver/handlers/route-management.handler.ts +2 -34
- package/ts/opsserver/handlers/source-profile.handler.ts +2 -2
- package/ts_apiclient/classes.route.ts +12 -49
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/appstate.ts +0 -52
- package/ts_web/elements/network/ops-view-routes.ts +65 -123
- package/dist_ts/db/documents/classes.route-override.doc.d.ts +0 -10
- package/dist_ts/db/documents/classes.route-override.doc.js +0 -91
- package/ts/db/documents/classes.route-override.doc.ts +0 -32
|
@@ -185,9 +185,9 @@ let OpsViewRoutes = (() => {
|
|
|
185
185
|
];
|
|
186
186
|
render() {
|
|
187
187
|
const { mergedRoutes, warnings } = this.routeState;
|
|
188
|
-
const hardcodedCount = mergedRoutes.filter((mr) => mr.source === 'hardcoded').length;
|
|
189
|
-
const programmaticCount = mergedRoutes.filter((mr) => mr.source === 'programmatic').length;
|
|
190
188
|
const disabledCount = mergedRoutes.filter((mr) => !mr.enabled).length;
|
|
189
|
+
const configCount = mergedRoutes.filter((mr) => mr.origin !== 'api').length;
|
|
190
|
+
const apiCount = mergedRoutes.filter((mr) => mr.origin === 'api').length;
|
|
191
191
|
const statsTiles = [
|
|
192
192
|
{
|
|
193
193
|
id: 'totalRoutes',
|
|
@@ -199,19 +199,19 @@ let OpsViewRoutes = (() => {
|
|
|
199
199
|
color: '#3b82f6',
|
|
200
200
|
},
|
|
201
201
|
{
|
|
202
|
-
id: '
|
|
203
|
-
title: '
|
|
202
|
+
id: 'configRoutes',
|
|
203
|
+
title: 'From Config',
|
|
204
204
|
type: 'number',
|
|
205
|
-
value:
|
|
206
|
-
icon: 'lucide:
|
|
207
|
-
description: '
|
|
205
|
+
value: configCount,
|
|
206
|
+
icon: 'lucide:settings',
|
|
207
|
+
description: 'Seeded from config/email/DNS',
|
|
208
208
|
color: '#8b5cf6',
|
|
209
209
|
},
|
|
210
210
|
{
|
|
211
|
-
id: '
|
|
212
|
-
title: '
|
|
211
|
+
id: 'apiRoutes',
|
|
212
|
+
title: 'API Created',
|
|
213
213
|
type: 'number',
|
|
214
|
-
value:
|
|
214
|
+
value: apiCount,
|
|
215
215
|
icon: 'lucide:code',
|
|
216
216
|
description: 'Routes added via API',
|
|
217
217
|
color: '#0ea5e9',
|
|
@@ -229,16 +229,14 @@ let OpsViewRoutes = (() => {
|
|
|
229
229
|
// Map merged routes to sz-route-list-view format
|
|
230
230
|
const szRoutes = mergedRoutes.map((mr) => {
|
|
231
231
|
const tags = [...(mr.route.tags || [])];
|
|
232
|
-
tags.push(mr.
|
|
232
|
+
tags.push(mr.origin);
|
|
233
233
|
if (!mr.enabled)
|
|
234
234
|
tags.push('disabled');
|
|
235
|
-
if (mr.overridden)
|
|
236
|
-
tags.push('overridden');
|
|
237
235
|
return {
|
|
238
236
|
...mr.route,
|
|
239
237
|
enabled: mr.enabled,
|
|
240
238
|
tags,
|
|
241
|
-
id: mr.
|
|
239
|
+
id: mr.id || mr.route.name || undefined,
|
|
242
240
|
metadata: mr.metadata,
|
|
243
241
|
};
|
|
244
242
|
});
|
|
@@ -279,7 +277,6 @@ let OpsViewRoutes = (() => {
|
|
|
279
277
|
? html `
|
|
280
278
|
<sz-route-list-view
|
|
281
279
|
.routes=${szRoutes}
|
|
282
|
-
.showActionsFilter=${(route) => route.tags?.includes('programmatic') ?? false}
|
|
283
280
|
@route-click=${(e) => this.handleRouteClick(e)}
|
|
284
281
|
@route-edit=${(e) => this.handleRouteEdit(e)}
|
|
285
282
|
@route-delete=${(e) => this.handleRouteDelete(e)}
|
|
@@ -288,7 +285,7 @@ let OpsViewRoutes = (() => {
|
|
|
288
285
|
: html `
|
|
289
286
|
<div class="empty-state">
|
|
290
287
|
<p>No routes configured</p>
|
|
291
|
-
<p>Add a
|
|
288
|
+
<p>Add a route to get started.</p>
|
|
292
289
|
</div>
|
|
293
290
|
`}
|
|
294
291
|
</div>
|
|
@@ -303,104 +300,57 @@ let OpsViewRoutes = (() => {
|
|
|
303
300
|
if (!merged)
|
|
304
301
|
return;
|
|
305
302
|
const { DeesModal } = await import('@design.estate/dees-catalog');
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
name: 'Enable Route',
|
|
326
|
-
iconName: 'lucide:play',
|
|
327
|
-
action: async (modalArg) => {
|
|
328
|
-
await appstate.routeManagementStatePart.dispatchAction(appstate.setRouteOverrideAction, { routeName: merged.route.name, enabled: true });
|
|
329
|
-
await modalArg.destroy();
|
|
330
|
-
},
|
|
331
|
-
},
|
|
332
|
-
{
|
|
333
|
-
name: 'Remove Override',
|
|
334
|
-
iconName: 'lucide:undo',
|
|
335
|
-
action: async (modalArg) => {
|
|
336
|
-
await appstate.routeManagementStatePart.dispatchAction(appstate.removeRouteOverrideAction, merged.route.name);
|
|
337
|
-
await modalArg.destroy();
|
|
338
|
-
},
|
|
339
|
-
},
|
|
340
|
-
{
|
|
341
|
-
name: 'Close',
|
|
342
|
-
iconName: 'lucide:x',
|
|
343
|
-
action: async (modalArg) => await modalArg.destroy(),
|
|
344
|
-
},
|
|
345
|
-
];
|
|
346
|
-
await DeesModal.createAndShow({
|
|
347
|
-
heading: `Route: ${merged.route.name}`,
|
|
348
|
-
content: html `
|
|
349
|
-
<div style="color: #ccc; padding: 8px 0;">
|
|
350
|
-
<p>Source: <strong style="color: #88f;">hardcoded</strong></p>
|
|
351
|
-
<p>Status: <strong>${merged.enabled ? 'Enabled' : 'Disabled (overridden)'}</strong></p>
|
|
352
|
-
<p style="color: #888; font-size: 13px;">Hardcoded routes cannot be edited or deleted, but they can be disabled via an override.</p>
|
|
353
|
-
</div>
|
|
354
|
-
`,
|
|
355
|
-
menuOptions,
|
|
356
|
-
});
|
|
357
|
-
}
|
|
358
|
-
else {
|
|
359
|
-
// Programmatic route
|
|
360
|
-
const meta = merged.metadata;
|
|
361
|
-
await DeesModal.createAndShow({
|
|
362
|
-
heading: `Route: ${merged.route.name}`,
|
|
363
|
-
content: html `
|
|
364
|
-
<div style="color: #ccc; padding: 8px 0;">
|
|
365
|
-
<p>Source: <strong style="color: #0af;">programmatic</strong></p>
|
|
366
|
-
<p>Status: <strong>${merged.enabled ? 'Enabled' : 'Disabled'}</strong></p>
|
|
367
|
-
<p>ID: <code style="color: #888;">${merged.storedRouteId}</code></p>
|
|
368
|
-
${meta?.sourceProfileName ? html `<p>Source Profile: <strong style="color: #a78bfa;">${meta.sourceProfileName}</strong></p>` : ''}
|
|
369
|
-
${meta?.networkTargetName ? html `<p>Network Target: <strong style="color: #a78bfa;">${meta.networkTargetName}</strong></p>` : ''}
|
|
370
|
-
</div>
|
|
371
|
-
`,
|
|
372
|
-
menuOptions: [
|
|
373
|
-
{
|
|
374
|
-
name: merged.enabled ? 'Disable' : 'Enable',
|
|
375
|
-
iconName: merged.enabled ? 'lucide:pause' : 'lucide:play',
|
|
376
|
-
action: async (modalArg) => {
|
|
377
|
-
await appstate.routeManagementStatePart.dispatchAction(appstate.toggleRouteAction, { id: merged.storedRouteId, enabled: !merged.enabled });
|
|
378
|
-
await modalArg.destroy();
|
|
379
|
-
},
|
|
303
|
+
const meta = merged.metadata;
|
|
304
|
+
await DeesModal.createAndShow({
|
|
305
|
+
heading: `Route: ${merged.route.name}`,
|
|
306
|
+
content: html `
|
|
307
|
+
<div style="color: #ccc; padding: 8px 0;">
|
|
308
|
+
<p>Origin: <strong style="color: #0af;">${merged.origin}</strong></p>
|
|
309
|
+
<p>Status: <strong>${merged.enabled ? 'Enabled' : 'Disabled'}</strong></p>
|
|
310
|
+
<p>ID: <code style="color: #888;">${merged.id}</code></p>
|
|
311
|
+
${meta?.sourceProfileName ? html `<p>Source Profile: <strong style="color: #a78bfa;">${meta.sourceProfileName}</strong></p>` : ''}
|
|
312
|
+
${meta?.networkTargetName ? html `<p>Network Target: <strong style="color: #a78bfa;">${meta.networkTargetName}</strong></p>` : ''}
|
|
313
|
+
</div>
|
|
314
|
+
`,
|
|
315
|
+
menuOptions: [
|
|
316
|
+
{
|
|
317
|
+
name: merged.enabled ? 'Disable' : 'Enable',
|
|
318
|
+
iconName: merged.enabled ? 'lucide:pause' : 'lucide:play',
|
|
319
|
+
action: async (modalArg) => {
|
|
320
|
+
await appstate.routeManagementStatePart.dispatchAction(appstate.toggleRouteAction, { id: merged.id, enabled: !merged.enabled });
|
|
321
|
+
await modalArg.destroy();
|
|
380
322
|
},
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
name: 'Edit',
|
|
326
|
+
iconName: 'lucide:pencil',
|
|
327
|
+
action: async (modalArg) => {
|
|
328
|
+
await modalArg.destroy();
|
|
329
|
+
this.showEditRouteDialog(merged);
|
|
388
330
|
},
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
name: 'Delete',
|
|
334
|
+
iconName: 'lucide:trash-2',
|
|
335
|
+
action: async (modalArg) => {
|
|
336
|
+
await appstate.routeManagementStatePart.dispatchAction(appstate.deleteRouteAction, merged.id);
|
|
337
|
+
await modalArg.destroy();
|
|
393
338
|
},
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
name: 'Close',
|
|
342
|
+
iconName: 'lucide:x',
|
|
343
|
+
action: async (modalArg) => await modalArg.destroy(),
|
|
344
|
+
},
|
|
345
|
+
],
|
|
346
|
+
});
|
|
397
347
|
}
|
|
398
348
|
async handleRouteEdit(e) {
|
|
399
349
|
const clickedRoute = e.detail;
|
|
400
350
|
if (!clickedRoute)
|
|
401
351
|
return;
|
|
402
352
|
const merged = this.routeState.mergedRoutes.find((mr) => mr.route.name === clickedRoute.name);
|
|
403
|
-
if (!merged
|
|
353
|
+
if (!merged)
|
|
404
354
|
return;
|
|
405
355
|
this.showEditRouteDialog(merged);
|
|
406
356
|
}
|
|
@@ -409,7 +359,7 @@ let OpsViewRoutes = (() => {
|
|
|
409
359
|
if (!clickedRoute)
|
|
410
360
|
return;
|
|
411
361
|
const merged = this.routeState.mergedRoutes.find((mr) => mr.route.name === clickedRoute.name);
|
|
412
|
-
if (!merged
|
|
362
|
+
if (!merged)
|
|
413
363
|
return;
|
|
414
364
|
const { DeesModal } = await import('@design.estate/dees-catalog');
|
|
415
365
|
await DeesModal.createAndShow({
|
|
@@ -429,7 +379,7 @@ let OpsViewRoutes = (() => {
|
|
|
429
379
|
name: 'Delete',
|
|
430
380
|
iconName: 'lucide:trash-2',
|
|
431
381
|
action: async (modalArg) => {
|
|
432
|
-
await appstate.routeManagementStatePart.dispatchAction(appstate.deleteRouteAction, merged.
|
|
382
|
+
await appstate.routeManagementStatePart.dispatchAction(appstate.deleteRouteAction, merged.id);
|
|
433
383
|
await modalArg.destroy();
|
|
434
384
|
},
|
|
435
385
|
},
|
|
@@ -568,7 +518,7 @@ let OpsViewRoutes = (() => {
|
|
|
568
518
|
metadata.networkTargetRef = targetKey;
|
|
569
519
|
}
|
|
570
520
|
await appstate.routeManagementStatePart.dispatchAction(appstate.updateRouteAction, {
|
|
571
|
-
id: merged.
|
|
521
|
+
id: merged.id,
|
|
572
522
|
route: updatedRoute,
|
|
573
523
|
metadata: Object.keys(metadata).length > 0 ? metadata : undefined,
|
|
574
524
|
});
|
|
@@ -604,7 +554,7 @@ let OpsViewRoutes = (() => {
|
|
|
604
554
|
})),
|
|
605
555
|
];
|
|
606
556
|
const createModal = await DeesModal.createAndShow({
|
|
607
|
-
heading: 'Add
|
|
557
|
+
heading: 'Add Route',
|
|
608
558
|
content: html `
|
|
609
559
|
<dees-form>
|
|
610
560
|
<dees-input-text .key=${'name'} .label=${'Route Name'} .required=${true}></dees-input-text>
|
|
@@ -721,4 +671,4 @@ let OpsViewRoutes = (() => {
|
|
|
721
671
|
return OpsViewRoutes = _classThis;
|
|
722
672
|
})();
|
|
723
673
|
export { OpsViewRoutes };
|
|
724
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctcm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzL25ldHdvcmsvb3BzLXZpZXctcm91dGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxVQUFVLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBbUIsTUFBTSw2QkFBNkIsQ0FBQztBQUU5RCxPQUFPLEVBQ0wsV0FBVyxFQUNYLEdBQUcsRUFDSCxVQUFVLEVBQ1YsYUFBYSxFQUNiLElBQUksRUFDSixLQUFLLEdBRU4sTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyx5REFBeUQ7QUFDekQsTUFBTSxjQUFjLEdBQUc7SUFDckIsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRTtJQUMxQyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRTtJQUM3QyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRTtJQUN6QyxFQUFFLEdBQUcsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLEVBQUUsd0JBQXdCLEVBQUU7Q0FDckUsQ0FBQztBQUNGLE1BQU0sY0FBYyxHQUFHO0lBQ3JCLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsNEJBQTRCLEVBQUU7SUFDckQsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRTtDQUNoRCxDQUFDO0FBRUY7O0dBRUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLE1BQVc7SUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLElBQUksRUFBRTtRQUNs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
|
|
674
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctcm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzL25ldHdvcmsvb3BzLXZpZXctcm91dGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxVQUFVLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBbUIsTUFBTSw2QkFBNkIsQ0FBQztBQUU5RCxPQUFPLEVBQ0wsV0FBVyxFQUNYLEdBQUcsRUFDSCxVQUFVLEVBQ1YsYUFBYSxFQUNiLElBQUksRUFDSixLQUFLLEdBRU4sTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyx5REFBeUQ7QUFDekQsTUFBTSxjQUFjLEdBQUc7SUFDckIsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRTtJQUMxQyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRTtJQUM3QyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRTtJQUN6QyxFQUFFLEdBQUcsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLEVBQUUsd0JBQXdCLEVBQUU7Q0FDckUsQ0FBQztBQUNGLE1BQU0sY0FBYyxHQUFHO0lBQ3JCLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsNEJBQTRCLEVBQUU7SUFDckQsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRTtDQUNoRCxDQUFDO0FBRUY7O0dBRUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLE1BQVc7SUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLElBQUksRUFBRTtRQUNs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
|
package/package.json
CHANGED
package/ts/00_commitinfo_data.ts
CHANGED
package/ts/classes.dcrouter.ts
CHANGED
|
@@ -312,8 +312,10 @@ export class DcRouter {
|
|
|
312
312
|
// TypedRouter for API endpoints
|
|
313
313
|
public typedrouter = new plugins.typedrequest.TypedRouter();
|
|
314
314
|
|
|
315
|
-
//
|
|
316
|
-
private
|
|
315
|
+
// Seed routes assembled during setupSmartProxy, passed to RouteConfigManager for DB seeding
|
|
316
|
+
private seedConfigRoutes: plugins.smartproxy.IRouteConfig[] = [];
|
|
317
|
+
private seedEmailRoutes: plugins.smartproxy.IRouteConfig[] = [];
|
|
318
|
+
private seedDnsRoutes: plugins.smartproxy.IRouteConfig[] = [];
|
|
317
319
|
|
|
318
320
|
// Environment access
|
|
319
321
|
private qenv = new plugins.qenv.Qenv('./', '.nogit/');
|
|
@@ -549,7 +551,6 @@ export class DcRouter {
|
|
|
549
551
|
await this.targetProfileManager.initialize();
|
|
550
552
|
|
|
551
553
|
this.routeConfigManager = new RouteConfigManager(
|
|
552
|
-
() => this.getConstructorRoutes(),
|
|
553
554
|
() => this.smartProxy,
|
|
554
555
|
() => this.options.http3,
|
|
555
556
|
this.options.vpnConfig?.enabled
|
|
@@ -564,7 +565,7 @@ export class DcRouter {
|
|
|
564
565
|
}
|
|
565
566
|
: undefined,
|
|
566
567
|
this.referenceResolver,
|
|
567
|
-
// Sync
|
|
568
|
+
// Sync routes to RemoteIngressManager whenever routes change,
|
|
568
569
|
// then push updated derived ports to the Rust hub binary
|
|
569
570
|
(routes) => {
|
|
570
571
|
if (this.remoteIngressManager) {
|
|
@@ -577,7 +578,11 @@ export class DcRouter {
|
|
|
577
578
|
);
|
|
578
579
|
this.apiTokenManager = new ApiTokenManager();
|
|
579
580
|
await this.apiTokenManager.initialize();
|
|
580
|
-
await this.routeConfigManager.initialize(
|
|
581
|
+
await this.routeConfigManager.initialize(
|
|
582
|
+
this.seedConfigRoutes as import('../ts_interfaces/data/remoteingress.js').IDcRouterRouteConfig[],
|
|
583
|
+
this.seedEmailRoutes as import('../ts_interfaces/data/remoteingress.js').IDcRouterRouteConfig[],
|
|
584
|
+
this.seedDnsRoutes as import('../ts_interfaces/data/remoteingress.js').IDcRouterRouteConfig[],
|
|
585
|
+
);
|
|
581
586
|
|
|
582
587
|
// Seed default profiles/targets if DB is empty and seeding is enabled
|
|
583
588
|
const seeder = new DbSeeder(this.referenceResolver);
|
|
@@ -881,31 +886,30 @@ export class DcRouter {
|
|
|
881
886
|
this.smartProxy = undefined;
|
|
882
887
|
}
|
|
883
888
|
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
// AcmeConfigManager on first boot. The live ACME config always comes
|
|
889
|
-
// from the DB via `this.acmeConfigManager.getConfig()`.
|
|
890
|
-
if (this.options.smartProxyConfig) {
|
|
891
|
-
routes = this.options.smartProxyConfig.routes || [];
|
|
892
|
-
logger.log('info', `Found ${routes.length} routes in config`);
|
|
893
|
-
}
|
|
889
|
+
// Assemble seed routes from constructor config — these will be seeded into DB
|
|
890
|
+
// by RouteConfigManager.initialize() when the ConfigManagers service starts.
|
|
891
|
+
this.seedConfigRoutes = (this.options.smartProxyConfig?.routes || []) as plugins.smartproxy.IRouteConfig[];
|
|
892
|
+
logger.log('info', `Found ${this.seedConfigRoutes.length} routes in config`);
|
|
894
893
|
|
|
895
|
-
|
|
894
|
+
this.seedEmailRoutes = [];
|
|
896
895
|
if (this.options.emailConfig) {
|
|
897
|
-
|
|
898
|
-
logger.log('debug', 'Email routes generated', { routes: JSON.stringify(
|
|
899
|
-
routes = [...routes, ...emailRoutes]; // Enable email routing through SmartProxy
|
|
896
|
+
this.seedEmailRoutes = this.generateEmailRoutes(this.options.emailConfig);
|
|
897
|
+
logger.log('debug', 'Email routes generated', { routes: JSON.stringify(this.seedEmailRoutes) });
|
|
900
898
|
}
|
|
901
899
|
|
|
902
|
-
|
|
900
|
+
this.seedDnsRoutes = [];
|
|
903
901
|
if (this.options.dnsNsDomains && this.options.dnsNsDomains.length > 0) {
|
|
904
|
-
|
|
905
|
-
logger.log('debug', `DNS routes for nameservers ${this.options.dnsNsDomains.join(', ')}`, { routes: JSON.stringify(
|
|
906
|
-
routes = [...routes, ...dnsRoutes];
|
|
902
|
+
this.seedDnsRoutes = this.generateDnsRoutes();
|
|
903
|
+
logger.log('debug', `DNS routes for nameservers ${this.options.dnsNsDomains.join(', ')}`, { routes: JSON.stringify(this.seedDnsRoutes) });
|
|
907
904
|
}
|
|
908
905
|
|
|
906
|
+
// Combined routes for SmartProxy bootstrap (before DB routes are loaded)
|
|
907
|
+
let routes: plugins.smartproxy.IRouteConfig[] = [
|
|
908
|
+
...this.seedConfigRoutes,
|
|
909
|
+
...this.seedEmailRoutes,
|
|
910
|
+
...this.seedDnsRoutes,
|
|
911
|
+
];
|
|
912
|
+
|
|
909
913
|
// Build the ACME options for SmartProxy from the DB-backed AcmeConfigManager.
|
|
910
914
|
// If no config exists or it's disabled, SmartProxy's own ACME is turned off
|
|
911
915
|
// and dcrouter's SmartAcme / certProvisionFunction are not wired.
|
|
@@ -952,10 +956,6 @@ export class DcRouter {
|
|
|
952
956
|
logger.log('info', 'HTTP/3: Augmented qualifying HTTPS routes with QUIC/H3 configuration');
|
|
953
957
|
}
|
|
954
958
|
|
|
955
|
-
// Cache constructor routes for RouteConfigManager (without VPN security baked in —
|
|
956
|
-
// applyRoutes() injects VPN security dynamically so it stays current with client changes)
|
|
957
|
-
this.constructorRoutes = [...routes];
|
|
958
|
-
|
|
959
959
|
// If we have routes or need a basic SmartProxy instance, create it
|
|
960
960
|
if (routes.length > 0 || this.options.smartProxyConfig) {
|
|
961
961
|
logger.log('info', 'Setting up SmartProxy with combined configuration');
|
|
@@ -1406,14 +1406,6 @@ export class DcRouter {
|
|
|
1406
1406
|
return names;
|
|
1407
1407
|
}
|
|
1408
1408
|
|
|
1409
|
-
/**
|
|
1410
|
-
* Get the routes derived from constructor config (smartProxy + email + DNS).
|
|
1411
|
-
* Used by RouteConfigManager as the "hardcoded" base.
|
|
1412
|
-
*/
|
|
1413
|
-
public getConstructorRoutes(): plugins.smartproxy.IRouteConfig[] {
|
|
1414
|
-
return this.constructorRoutes;
|
|
1415
|
-
}
|
|
1416
|
-
|
|
1417
1409
|
public async stop() {
|
|
1418
1410
|
logger.log('info', 'Stopping DcRouter services...');
|
|
1419
1411
|
|
|
@@ -1457,17 +1449,16 @@ export class DcRouter {
|
|
|
1457
1449
|
// Update configuration
|
|
1458
1450
|
this.options.smartProxyConfig = config;
|
|
1459
1451
|
|
|
1460
|
-
//
|
|
1461
|
-
if (this.remoteIngressManager && config.routes) {
|
|
1462
|
-
this.remoteIngressManager.setRoutes(config.routes as any[]);
|
|
1463
|
-
}
|
|
1464
|
-
|
|
1465
|
-
// Start new SmartProxy with updated configuration (will include email routes if configured)
|
|
1452
|
+
// Start new SmartProxy with updated configuration (rebuilds seed routes)
|
|
1466
1453
|
await this.setupSmartProxy();
|
|
1467
1454
|
|
|
1468
|
-
// Re-apply
|
|
1455
|
+
// Re-seed and re-apply all routes after SmartProxy restart
|
|
1469
1456
|
if (this.routeConfigManager) {
|
|
1470
|
-
await this.routeConfigManager.initialize(
|
|
1457
|
+
await this.routeConfigManager.initialize(
|
|
1458
|
+
this.seedConfigRoutes as import('../ts_interfaces/data/remoteingress.js').IDcRouterRouteConfig[],
|
|
1459
|
+
this.seedEmailRoutes as import('../ts_interfaces/data/remoteingress.js').IDcRouterRouteConfig[],
|
|
1460
|
+
this.seedDnsRoutes as import('../ts_interfaces/data/remoteingress.js').IDcRouterRouteConfig[],
|
|
1461
|
+
);
|
|
1471
1462
|
}
|
|
1472
1463
|
|
|
1473
1464
|
logger.log('info', 'SmartProxy configuration updated');
|
|
@@ -2185,13 +2176,14 @@ export class DcRouter {
|
|
|
2185
2176
|
this.remoteIngressManager = new RemoteIngressManager();
|
|
2186
2177
|
await this.remoteIngressManager.initialize();
|
|
2187
2178
|
|
|
2188
|
-
// Pass current routes so the manager can derive edge ports
|
|
2189
|
-
|
|
2190
|
-
|
|
2179
|
+
// Pass current bootstrap routes so the manager can derive edge ports initially.
|
|
2180
|
+
// Once RouteConfigManager applies the full DB set, the onRoutesApplied callback
|
|
2181
|
+
// will push the complete merged routes here.
|
|
2182
|
+
const bootstrapRoutes = [...this.seedConfigRoutes, ...this.seedEmailRoutes, ...this.seedDnsRoutes];
|
|
2183
|
+
this.remoteIngressManager.setRoutes(bootstrapRoutes as any[]);
|
|
2191
2184
|
|
|
2192
|
-
//
|
|
2193
|
-
// so the callback delivers the full
|
|
2194
|
-
// to our newly-created remoteIngressManager.
|
|
2185
|
+
// If ConfigManagers finished before us, re-apply routes
|
|
2186
|
+
// so the callback delivers the full DB set to our newly-created remoteIngressManager.
|
|
2195
2187
|
if (this.routeConfigManager) {
|
|
2196
2188
|
await this.routeConfigManager.applyRoutes();
|
|
2197
2189
|
}
|
|
@@ -2278,11 +2270,10 @@ export class DcRouter {
|
|
|
2278
2270
|
|
|
2279
2271
|
if (!this.targetProfileManager) return [...ips];
|
|
2280
2272
|
|
|
2281
|
-
const
|
|
2282
|
-
const storedRoutes = this.routeConfigManager?.getStoredRoutes() || new Map();
|
|
2273
|
+
const allRoutes = this.routeConfigManager?.getRoutes() || new Map();
|
|
2283
2274
|
|
|
2284
2275
|
const { domains, targetIps } = this.targetProfileManager.getClientAccessSpec(
|
|
2285
|
-
targetProfileIds,
|
|
2276
|
+
targetProfileIds, allRoutes,
|
|
2286
2277
|
);
|
|
2287
2278
|
|
|
2288
2279
|
// Add target IPs directly
|
|
@@ -2305,9 +2296,8 @@ export class DcRouter {
|
|
|
2305
2296
|
|
|
2306
2297
|
await this.vpnManager.start();
|
|
2307
2298
|
|
|
2308
|
-
// Re-apply routes now that VPN clients are loaded — ensures
|
|
2309
|
-
// get correct profile-based ipAllowLists
|
|
2310
|
-
// VPN server wasn't ready yet)
|
|
2299
|
+
// Re-apply routes now that VPN clients are loaded — ensures vpnOnly routes
|
|
2300
|
+
// get correct profile-based ipAllowLists
|
|
2311
2301
|
await this.routeConfigManager?.applyRoutes();
|
|
2312
2302
|
}
|
|
2313
2303
|
|