diff --git a/changelog.md b/changelog.md
index f1fb367..de9c054 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,13 @@
# Changelog
+## 2026-02-16 - 6.5.0 - feat(ops-view-remoteingress)
+add 'Create Edge Node' header action to remote ingress table and remove duplicate createNewAction
+
+- Add a 'Create Edge Node' header action in dataActions that opens DeesModal to collect name, listenPorts and tags
+- Parse comma-separated listenPorts into integer array and normalize optional tags
+- Dispatch appstate.createRemoteIngressAction with the collected payload
+- Remove the previously duplicated createNewAction prop from the dees-table
+
## 2026-02-16 - 6.4.5 - fix(remoteingress)
mark remote ingress data actions as row actions and bump @design.estate/dees-catalog dependency
diff --git a/package.json b/package.json
index d8dcd1f..3c69909 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "@serve.zone/dcrouter",
"private": false,
- "version": "6.4.5",
+ "version": "6.5.0",
"description": "A multifaceted routing service handling mail and SMS delivery functions.",
"type": "module",
"exports": {
diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts
index 31ed328..b133585 100644
--- a/ts/00_commitinfo_data.ts
+++ b/ts/00_commitinfo_data.ts
@@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@serve.zone/dcrouter',
- version: '6.4.5',
+ version: '6.5.0',
description: 'A multifaceted routing service handling mail and SMS delivery functions.'
}
diff --git a/ts_web/00_commitinfo_data.ts b/ts_web/00_commitinfo_data.ts
index 31ed328..b133585 100644
--- a/ts_web/00_commitinfo_data.ts
+++ b/ts_web/00_commitinfo_data.ts
@@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@serve.zone/dcrouter',
- version: '6.4.5',
+ version: '6.5.0',
description: 'A multifaceted routing service handling mail and SMS delivery functions.'
}
diff --git a/ts_web/elements/ops-view-remoteingress.ts b/ts_web/elements/ops-view-remoteingress.ts
index 0978b9b..14db9b0 100644
--- a/ts_web/elements/ops-view-remoteingress.ts
+++ b/ts_web/elements/ops-view-remoteingress.ts
@@ -192,6 +192,43 @@ export class OpsViewRemoteIngress extends DeesElement {
lastHeartbeat: this.getLastHeartbeat(edge.id),
})}
.dataActions=${[
+ {
+ name: 'Create Edge Node',
+ iconName: 'lucide:plus',
+ type: ['header'],
+ actionFunc: async () => {
+ const { DeesModal } = await import('@design.estate/dees-catalog');
+ const result = await DeesModal.createAndShow({
+ heading: 'Create Edge Node',
+ content: html`
+
+
+
+
+
+ `,
+ menuOptions: [],
+ });
+ if (result) {
+ const formData = result as any;
+ const ports = (formData.name ? formData.listenPorts : '443')
+ .split(',')
+ .map((p: string) => parseInt(p.trim(), 10))
+ .filter((p: number) => !isNaN(p));
+ const tags = formData.tags
+ ? formData.tags.split(',').map((t: string) => t.trim()).filter(Boolean)
+ : undefined;
+ await appstate.remoteIngressStatePart.dispatchAction(
+ appstate.createRemoteIngressAction,
+ {
+ name: formData.name,
+ listenPorts: ports,
+ tags,
+ },
+ );
+ }
+ },
+ },
{
name: 'Regenerate Secret',
iconName: 'lucide:key',
@@ -215,38 +252,6 @@ export class OpsViewRemoteIngress extends DeesElement {
},
},
]}
- .createNewAction=${async () => {
- const { DeesModal } = await import('@design.estate/dees-catalog');
- const result = await DeesModal.createAndShow({
- heading: 'Create Edge Node',
- content: html`
-
-
-
-
-
- `,
- menuOptions: [],
- });
- if (result) {
- const formData = result as any;
- const ports = (formData.name ? formData.listenPorts : '443')
- .split(',')
- .map((p: string) => parseInt(p.trim(), 10))
- .filter((p: number) => !isNaN(p));
- const tags = formData.tags
- ? formData.tags.split(',').map((t: string) => t.trim()).filter(Boolean)
- : undefined;
- await appstate.remoteIngressStatePart.dispatchAction(
- appstate.createRemoteIngressAction,
- {
- name: formData.name,
- listenPorts: ports,
- tags,
- },
- );
- }
- }}
>
`;