@serve.zone/dcrouter 13.19.0 → 13.20.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.
@@ -39,15 +39,81 @@ import {} from '@design.estate/dees-catalog';
39
39
  import { DeesElement, css, cssManager, customElement, html, state, } from '@design.estate/dees-element';
40
40
  // TLS dropdown options shared by create and edit dialogs
41
41
  const tlsModeOptions = [
42
- { key: 'none', option: '(none — no TLS)' },
43
- { key: 'passthrough', option: 'Passthrough' },
44
- { key: 'terminate', option: 'Terminate' },
45
- { key: 'terminate-and-reencrypt', option: 'Terminate & Re-encrypt' },
42
+ { key: 'none', option: '(none — plain TCP/HTTP, use for SSH)' },
43
+ { key: 'passthrough', option: 'Passthrough (TLS only)' },
44
+ { key: 'terminate', option: 'Terminate TLS' },
45
+ { key: 'terminate-and-reencrypt', option: 'Terminate & Re-encrypt TLS' },
46
46
  ];
47
47
  const tlsCertOptions = [
48
48
  { key: 'auto', option: 'Auto (ACME/Let\'s Encrypt)' },
49
49
  { key: 'custom', option: 'Custom certificate' },
50
50
  ];
51
+ function getDropdownKey(value) {
52
+ return typeof value === 'string' ? value : value?.key || '';
53
+ }
54
+ function parseTargetPort(value) {
55
+ const parsed = typeof value === 'number'
56
+ ? value
57
+ : typeof value === 'string'
58
+ ? parseInt(value.trim(), 10)
59
+ : Number.NaN;
60
+ if (!Number.isInteger(parsed) || parsed < 1 || parsed > 65535) {
61
+ return undefined;
62
+ }
63
+ return parsed;
64
+ }
65
+ function getRouteTargetInputs(formEl) {
66
+ const textInputs = Array.from(formEl.querySelectorAll('dees-input-text'));
67
+ const checkboxInputs = Array.from(formEl.querySelectorAll('dees-input-checkbox'));
68
+ return {
69
+ hostInput: textInputs.find((input) => input.key === 'targetHost'),
70
+ portInput: textInputs.find((input) => input.key === 'targetPort'),
71
+ preservePortInput: checkboxInputs.find((input) => input.key === 'preserveMatchPort'),
72
+ };
73
+ }
74
+ function setupTargetInputState(formEl) {
75
+ const updateState = async () => {
76
+ const data = await formEl.collectFormData();
77
+ const contentEl = formEl.closest('.content') || formEl.parentElement;
78
+ const usesNetworkTarget = !!getDropdownKey(data.networkTargetRef);
79
+ const preserveMatchPort = !usesNetworkTarget && Boolean(data.preserveMatchPort);
80
+ const { hostInput, portInput, preservePortInput } = getRouteTargetInputs(formEl);
81
+ const hostDescription = usesNetworkTarget
82
+ ? 'Controlled by the selected network target'
83
+ : 'Used when no network target is selected';
84
+ const portDescription = usesNetworkTarget
85
+ ? 'Controlled by the selected network target'
86
+ : preserveMatchPort
87
+ ? 'Forwarded to the backend on the same port the client matched'
88
+ : 'Used when no network target is selected';
89
+ if (hostInput) {
90
+ hostInput.disabled = usesNetworkTarget;
91
+ hostInput.required = !usesNetworkTarget;
92
+ hostInput.description = hostDescription;
93
+ }
94
+ if (portInput) {
95
+ portInput.disabled = usesNetworkTarget || preserveMatchPort;
96
+ portInput.required = !usesNetworkTarget && !preserveMatchPort;
97
+ portInput.description = portDescription;
98
+ }
99
+ if (preservePortInput) {
100
+ preservePortInput.disabled = usesNetworkTarget;
101
+ preservePortInput.description = usesNetworkTarget
102
+ ? 'Unavailable when a network target is selected'
103
+ : 'Forward to the backend using the same port that matched this route';
104
+ if (usesNetworkTarget) {
105
+ preservePortInput.value = false;
106
+ }
107
+ }
108
+ const remoteIngressGroup = contentEl?.querySelector('.remoteIngressGroup');
109
+ if (remoteIngressGroup) {
110
+ remoteIngressGroup.style.display = Boolean(data.remoteIngressEnabled) ? 'flex' : 'none';
111
+ }
112
+ await formEl.updateRequiredStatus?.();
113
+ };
114
+ formEl.changeSubject.subscribe(() => updateState());
115
+ updateState();
116
+ }
51
117
  /**
52
118
  * Toggle TLS form field visibility based on selected TLS mode and certificate type.
53
119
  */
@@ -440,10 +506,13 @@ let OpsViewRoutes = (() => {
440
506
  ? (Array.isArray(route.match.domains) ? route.match.domains : [route.match.domains])
441
507
  : [];
442
508
  const firstTarget = route.action.targets?.[0];
509
+ const currentPreserveMatchPort = firstTarget?.port === 'preserve';
443
510
  const currentTargetHost = firstTarget
444
511
  ? (Array.isArray(firstTarget.host) ? firstTarget.host[0] : firstTarget.host)
445
512
  : '';
446
- const currentTargetPort = firstTarget?.port != null ? String(firstTarget.port) : '';
513
+ const currentTargetPort = typeof firstTarget?.port === 'number' ? String(firstTarget.port) : '';
514
+ const currentRemoteIngressEnabled = route.remoteIngress?.enabled === true;
515
+ const currentEdgeFilter = route.remoteIngress?.edgeFilter || [];
447
516
  // Compute current TLS state for pre-population
448
517
  const currentTls = route.action.tls;
449
518
  const currentTlsMode = currentTls?.mode || 'none';
@@ -466,6 +535,11 @@ let OpsViewRoutes = (() => {
466
535
  <dees-input-dropdown .key=${'networkTargetRef'} .label=${'Network Target'} .options=${targetOptions} .selectedOption=${targetOptions.find((o) => o.key === (merged.metadata?.networkTargetRef || '')) || null}></dees-input-dropdown>
467
536
  <dees-input-text .key=${'targetHost'} .label=${'Target Host'} .description=${'Used when no network target is selected'} .value=${currentTargetHost}></dees-input-text>
468
537
  <dees-input-text .key=${'targetPort'} .label=${'Target Port'} .description=${'Used when no network target is selected'} .value=${currentTargetPort}></dees-input-text>
538
+ <dees-input-checkbox .key=${'preserveMatchPort'} .label=${'Preserve incoming port'} .value=${currentPreserveMatchPort}></dees-input-checkbox>
539
+ <dees-input-checkbox .key=${'remoteIngressEnabled'} .label=${'Enable Remote Ingress'} .value=${currentRemoteIngressEnabled}></dees-input-checkbox>
540
+ <div class="remoteIngressGroup" style="display: ${currentRemoteIngressEnabled ? 'flex' : 'none'}; flex-direction: column; gap: 16px;">
541
+ <dees-input-list .key=${'remoteIngressEdgeFilter'} .label=${'Edge Filter'} .description=${'Optional edge IDs or tags. Leave empty to allow all edges.'} .placeholder=${'Add edge ID or tag...'} .value=${currentEdgeFilter}></dees-input-list>
542
+ </div>
469
543
  <dees-input-dropdown .key=${'tlsMode'} .label=${'TLS Mode'} .options=${tlsModeOptions} .selectedOption=${tlsModeOptions.find((o) => o.key === currentTlsMode) || tlsModeOptions[0]}></dees-input-dropdown>
470
544
  <div class="tlsCertificateGroup" style="display: ${needsCert ? 'flex' : 'none'}; flex-direction: column; gap: 16px;">
471
545
  <dees-input-dropdown .key=${'tlsCertificate'} .label=${'Certificate'} .options=${tlsCertOptions} .selectedOption=${tlsCertOptions.find((o) => o.key === currentTlsCert) || tlsCertOptions[0]}></dees-input-dropdown>
@@ -497,6 +571,21 @@ let OpsViewRoutes = (() => {
497
571
  ? formData.domains.filter(Boolean)
498
572
  : [];
499
573
  const priority = formData.priority ? parseInt(formData.priority, 10) : undefined;
574
+ const profileKey = getDropdownKey(formData.sourceProfileRef);
575
+ const targetKey = getDropdownKey(formData.networkTargetRef);
576
+ const preserveMatchPort = !targetKey && Boolean(formData.preserveMatchPort);
577
+ const targetPort = preserveMatchPort
578
+ ? 'preserve'
579
+ : parseTargetPort(formData.targetPort)
580
+ ?? (targetKey ? parseTargetPort(currentTargetPort) ?? ports[0] : undefined);
581
+ if (targetPort === undefined) {
582
+ alert('Target Port must be a valid port number when no network target is selected.');
583
+ return;
584
+ }
585
+ const remoteIngressEnabled = Boolean(formData.remoteIngressEnabled);
586
+ const remoteIngressEdgeFilter = Array.isArray(formData.remoteIngressEdgeFilter)
587
+ ? formData.remoteIngressEdgeFilter.filter(Boolean)
588
+ : [];
500
589
  const updatedRoute = {
501
590
  name: formData.name,
502
591
  match: {
@@ -507,11 +596,17 @@ let OpsViewRoutes = (() => {
507
596
  type: 'forward',
508
597
  targets: [
509
598
  {
510
- host: formData.targetHost || 'localhost',
511
- port: parseInt(formData.targetPort, 10) || 443,
599
+ host: formData.targetHost || currentTargetHost || 'localhost',
600
+ port: targetPort,
512
601
  },
513
602
  ],
514
603
  },
604
+ remoteIngress: remoteIngressEnabled
605
+ ? {
606
+ enabled: true,
607
+ ...(remoteIngressEdgeFilter.length > 0 ? { edgeFilter: remoteIngressEdgeFilter } : {}),
608
+ }
609
+ : null,
515
610
  ...(priority != null && !isNaN(priority) ? { priority } : {}),
516
611
  };
517
612
  // Build TLS config from form
@@ -535,16 +630,20 @@ let OpsViewRoutes = (() => {
535
630
  updatedRoute.action.tls = null; // explicit removal
536
631
  }
537
632
  const metadata = {};
538
- const profileRefValue = formData.sourceProfileRef;
539
- const profileKey = typeof profileRefValue === 'string' ? profileRefValue : profileRefValue?.key;
540
633
  if (profileKey) {
541
634
  metadata.sourceProfileRef = profileKey;
542
635
  }
543
- const targetRefValue = formData.networkTargetRef;
544
- const targetKey = typeof targetRefValue === 'string' ? targetRefValue : targetRefValue?.key;
636
+ else if (merged.metadata?.sourceProfileRef) {
637
+ metadata.sourceProfileRef = '';
638
+ metadata.sourceProfileName = '';
639
+ }
545
640
  if (targetKey) {
546
641
  metadata.networkTargetRef = targetKey;
547
642
  }
643
+ else if (merged.metadata?.networkTargetRef) {
644
+ metadata.networkTargetRef = '';
645
+ metadata.networkTargetName = '';
646
+ }
548
647
  await appstate.routeManagementStatePart.dispatchAction(appstate.updateRouteAction, {
549
648
  id: merged.id,
550
649
  route: updatedRoute,
@@ -560,6 +659,7 @@ let OpsViewRoutes = (() => {
560
659
  if (editForm) {
561
660
  await editForm.updateComplete;
562
661
  setupTlsVisibility(editForm);
662
+ setupTargetInputState(editForm);
563
663
  }
564
664
  }
565
665
  async showCreateRouteDialog() {
@@ -593,6 +693,11 @@ let OpsViewRoutes = (() => {
593
693
  <dees-input-dropdown .key=${'networkTargetRef'} .label=${'Network Target'} .options=${targetOptions}></dees-input-dropdown>
594
694
  <dees-input-text .key=${'targetHost'} .label=${'Target Host'} .description=${'Used when no network target is selected'} .value=${'localhost'}></dees-input-text>
595
695
  <dees-input-text .key=${'targetPort'} .label=${'Target Port'} .description=${'Used when no network target is selected'}></dees-input-text>
696
+ <dees-input-checkbox .key=${'preserveMatchPort'} .label=${'Preserve incoming port'} .value=${false}></dees-input-checkbox>
697
+ <dees-input-checkbox .key=${'remoteIngressEnabled'} .label=${'Enable Remote Ingress'} .value=${false}></dees-input-checkbox>
698
+ <div class="remoteIngressGroup" style="display: none; flex-direction: column; gap: 16px;">
699
+ <dees-input-list .key=${'remoteIngressEdgeFilter'} .label=${'Edge Filter'} .description=${'Optional edge IDs or tags. Leave empty to allow all edges.'} .placeholder=${'Add edge ID or tag...'}></dees-input-list>
700
+ </div>
596
701
  <dees-input-dropdown .key=${'tlsMode'} .label=${'TLS Mode'} .options=${tlsModeOptions} .selectedOption=${tlsModeOptions[0]}></dees-input-dropdown>
597
702
  <div class="tlsCertificateGroup" style="display: none; flex-direction: column; gap: 16px;">
598
703
  <dees-input-dropdown .key=${'tlsCertificate'} .label=${'Certificate'} .options=${tlsCertOptions} .selectedOption=${tlsCertOptions[0]}></dees-input-dropdown>
@@ -624,6 +729,21 @@ let OpsViewRoutes = (() => {
624
729
  ? formData.domains.filter(Boolean)
625
730
  : [];
626
731
  const priority = formData.priority ? parseInt(formData.priority, 10) : undefined;
732
+ const profileKey = getDropdownKey(formData.sourceProfileRef);
733
+ const targetKey = getDropdownKey(formData.networkTargetRef);
734
+ const preserveMatchPort = !targetKey && Boolean(formData.preserveMatchPort);
735
+ const targetPort = preserveMatchPort
736
+ ? 'preserve'
737
+ : parseTargetPort(formData.targetPort)
738
+ ?? (targetKey ? ports[0] : undefined);
739
+ if (targetPort === undefined) {
740
+ alert('Target Port must be a valid port number when no network target is selected.');
741
+ return;
742
+ }
743
+ const remoteIngressEnabled = Boolean(formData.remoteIngressEnabled);
744
+ const remoteIngressEdgeFilter = Array.isArray(formData.remoteIngressEdgeFilter)
745
+ ? formData.remoteIngressEdgeFilter.filter(Boolean)
746
+ : [];
627
747
  const route = {
628
748
  name: formData.name,
629
749
  match: {
@@ -635,10 +755,18 @@ let OpsViewRoutes = (() => {
635
755
  targets: [
636
756
  {
637
757
  host: formData.targetHost || 'localhost',
638
- port: parseInt(formData.targetPort, 10) || 443,
758
+ port: targetPort,
639
759
  },
640
760
  ],
641
761
  },
762
+ ...(remoteIngressEnabled
763
+ ? {
764
+ remoteIngress: {
765
+ enabled: true,
766
+ ...(remoteIngressEdgeFilter.length > 0 ? { edgeFilter: remoteIngressEdgeFilter } : {}),
767
+ },
768
+ }
769
+ : {}),
642
770
  ...(priority != null && !isNaN(priority) ? { priority } : {}),
643
771
  };
644
772
  // Build TLS config from form
@@ -660,13 +788,9 @@ let OpsViewRoutes = (() => {
660
788
  }
661
789
  // Build metadata if profile/target selected
662
790
  const metadata = {};
663
- const profileRefValue = formData.sourceProfileRef;
664
- const profileKey = typeof profileRefValue === 'string' ? profileRefValue : profileRefValue?.key;
665
791
  if (profileKey) {
666
792
  metadata.sourceProfileRef = profileKey;
667
793
  }
668
- const targetRefValue = formData.networkTargetRef;
669
- const targetKey = typeof targetRefValue === 'string' ? targetRefValue : targetRefValue?.key;
670
794
  if (targetKey) {
671
795
  metadata.networkTargetRef = targetKey;
672
796
  }
@@ -684,6 +808,7 @@ let OpsViewRoutes = (() => {
684
808
  if (createForm) {
685
809
  await createForm.updateComplete;
686
810
  setupTlsVisibility(createForm);
811
+ setupTargetInputState(createForm);
687
812
  }
688
813
  }
689
814
  refreshData() {
@@ -720,4 +845,4 @@ let OpsViewRoutes = (() => {
720
845
  return OpsViewRoutes = _classThis;
721
846
  })();
722
847
  export { OpsViewRoutes };
723
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctcm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzL25ldHdvcmsvb3BzLXZpZXctcm91dGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxVQUFVLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBbUIsTUFBTSw2QkFBNkIsQ0FBQztBQUU5RCxPQUFPLEVBQ0wsV0FBVyxFQUNYLEdBQUcsRUFDSCxVQUFVLEVBQ1YsYUFBYSxFQUNiLElBQUksRUFDSixLQUFLLEdBRU4sTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyx5REFBeUQ7QUFDekQsTUFBTSxjQUFjLEdBQUc7SUFDckIsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRTtJQUMxQyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRTtJQUM3QyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRTtJQUN6QyxFQUFFLEdBQUcsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLEVBQUUsd0JBQXdCLEVBQUU7Q0FDckUsQ0FBQztBQUNGLE1BQU0sY0FBYyxHQUFHO0lBQ3JCLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsNEJBQTRCLEVBQUU7SUFDckQsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRTtDQUNoRCxDQUFDO0FBRUY7O0dBRUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLE1BQVc7SUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLElBQUksRUFBRTtRQUNs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
848
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctcm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzL25ldHdvcmsvb3BzLXZpZXctcm91dGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxVQUFVLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBbUIsTUFBTSw2QkFBNkIsQ0FBQztBQUU5RCxPQUFPLEVBQ0wsV0FBVyxFQUNYLEdBQUcsRUFDSCxVQUFVLEVBQ1YsYUFBYSxFQUNiLElBQUksRUFDSixLQUFLLEdBRU4sTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyx5REFBeUQ7QUFDekQsTUFBTSxjQUFjLEdBQUc7SUFDckIsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxzQ0FBc0MsRUFBRTtJQUMvRCxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLHdCQUF3QixFQUFFO0lBQ3hELEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFO0lBQzdDLEVBQUUsR0FBRyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sRUFBRSw0QkFBNEIsRUFBRTtDQUN6RSxDQUFDO0FBQ0YsTUFBTSxjQUFjLEdBQUc7SUFDckIsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSw0QkFBNEIsRUFBRTtJQUNyRCxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFO0NBQ2hELENBQUM7QUFFRixTQUFTLGNBQWMsQ0FBQyxLQUFVO0lBQ2hDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENB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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": "13.19.0",
4
+ "version": "13.20.0",
5
5
  "description": "A multifaceted routing service handling mail and SMS delivery functions.",
6
6
  "type": "module",
7
7
  "exports": {
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '13.19.0',
6
+ version: '13.20.0',
7
7
  description: 'A multifaceted routing service handling mail and SMS delivery functions.'
8
8
  }
@@ -133,11 +133,11 @@ export class RouteConfigManager {
133
133
  }
134
134
 
135
135
  // Resolve references if metadata has refs and resolver is available
136
- let resolvedMetadata = metadata;
137
- if (metadata && this.referenceResolver) {
138
- const resolved = this.referenceResolver.resolveRoute(route, metadata);
136
+ let resolvedMetadata = this.normalizeRouteMetadata(metadata);
137
+ if (resolvedMetadata && this.referenceResolver) {
138
+ const resolved = this.referenceResolver.resolveRoute(route, resolvedMetadata);
139
139
  route = resolved.route;
140
- resolvedMetadata = resolved.metadata;
140
+ resolvedMetadata = this.normalizeRouteMetadata(resolved.metadata);
141
141
  }
142
142
 
143
143
  const stored: IRoute = {
@@ -192,20 +192,32 @@ export class RouteConfigManager {
192
192
  }
193
193
  }
194
194
  }
195
- stored.route = { ...stored.route, ...patch.route, action: mergedAction } as IDcRouterRouteConfig;
195
+ const mergedRoute = { ...stored.route, ...patch.route, action: mergedAction } as IDcRouterRouteConfig;
196
+
197
+ // Handle explicit null to remove optional top-level route properties (e.g., remoteIngress: null)
198
+ for (const [key, val] of Object.entries(patch.route)) {
199
+ if (val === null && key !== 'action' && key !== 'match') {
200
+ delete (mergedRoute as any)[key];
201
+ }
202
+ }
203
+
204
+ stored.route = mergedRoute;
196
205
  }
197
206
  if (patch.enabled !== undefined) {
198
207
  stored.enabled = patch.enabled;
199
208
  }
200
209
  if (patch.metadata !== undefined) {
201
- stored.metadata = { ...stored.metadata, ...patch.metadata };
210
+ stored.metadata = this.normalizeRouteMetadata({
211
+ ...stored.metadata,
212
+ ...patch.metadata,
213
+ });
202
214
  }
203
215
 
204
216
  // Re-resolve if metadata refs exist and resolver is available
205
217
  if (stored.metadata && this.referenceResolver) {
206
218
  const resolved = this.referenceResolver.resolveRoute(stored.route, stored.metadata);
207
219
  stored.route = resolved.route;
208
- stored.metadata = resolved.metadata;
220
+ stored.metadata = this.normalizeRouteMetadata(resolved.metadata);
209
221
  }
210
222
 
211
223
  stored.updatedAt = Date.now();
@@ -368,7 +380,7 @@ export class RouteConfigManager {
368
380
  createdBy: doc.createdBy,
369
381
  origin: doc.origin || 'api',
370
382
  systemKey: doc.systemKey,
371
- metadata: doc.metadata,
383
+ metadata: this.normalizeRouteMetadata(doc.metadata),
372
384
  };
373
385
 
374
386
  this.routes.set(doc.id, storedRoute);
@@ -404,6 +416,46 @@ export class RouteConfigManager {
404
416
  }
405
417
  }
406
418
 
419
+ private normalizeRouteMetadata(metadata?: Partial<IRouteMetadata>): IRouteMetadata | undefined {
420
+ if (!metadata) {
421
+ return undefined;
422
+ }
423
+
424
+ const normalizeString = (value?: string): string | undefined => {
425
+ if (typeof value !== 'string') {
426
+ return undefined;
427
+ }
428
+ const trimmed = value.trim();
429
+ return trimmed.length > 0 ? trimmed : undefined;
430
+ };
431
+
432
+ const normalized: IRouteMetadata = {
433
+ sourceProfileRef: normalizeString(metadata.sourceProfileRef),
434
+ networkTargetRef: normalizeString(metadata.networkTargetRef),
435
+ sourceProfileName: normalizeString(metadata.sourceProfileName),
436
+ networkTargetName: normalizeString(metadata.networkTargetName),
437
+ lastResolvedAt: typeof metadata.lastResolvedAt === 'number' && Number.isFinite(metadata.lastResolvedAt)
438
+ ? metadata.lastResolvedAt
439
+ : undefined,
440
+ };
441
+
442
+ if (!normalized.sourceProfileRef) {
443
+ normalized.sourceProfileName = undefined;
444
+ }
445
+ if (!normalized.networkTargetRef) {
446
+ normalized.networkTargetName = undefined;
447
+ }
448
+ if (!normalized.sourceProfileRef && !normalized.networkTargetRef) {
449
+ normalized.lastResolvedAt = undefined;
450
+ }
451
+
452
+ if (Object.values(normalized).every((value) => value === undefined)) {
453
+ return undefined;
454
+ }
455
+
456
+ return normalized;
457
+ }
458
+
407
459
  // =========================================================================
408
460
  // Private: warnings
409
461
  // =========================================================================
@@ -446,7 +498,7 @@ export class RouteConfigManager {
446
498
 
447
499
  const resolved = this.referenceResolver.resolveRoute(stored.route, stored.metadata);
448
500
  stored.route = resolved.route;
449
- stored.metadata = resolved.metadata;
501
+ stored.metadata = this.normalizeRouteMetadata(resolved.metadata);
450
502
  stored.updatedAt = Date.now();
451
503
  await this.persistRoute(stored);
452
504
  }
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '13.19.0',
6
+ version: '13.20.0',
7
7
  description: 'A multifaceted routing service handling mail and SMS delivery functions.'
8
8
  }