@matter-server/dashboard 0.5.6 → 0.5.8

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.
Files changed (28) hide show
  1. package/dist/esm/components/dialogs/acl/model.d.ts +1 -1
  2. package/dist/esm/components/dialogs/acl/model.d.ts.map +1 -1
  3. package/dist/esm/components/dialogs/binding/model.d.ts +1 -1
  4. package/dist/esm/components/dialogs/binding/model.d.ts.map +1 -1
  5. package/dist/esm/components/dialogs/binding/model.js +4 -5
  6. package/dist/esm/components/dialogs/binding/model.js.map +1 -1
  7. package/dist/esm/components/dialogs/binding/node-binding-dialog.d.ts +0 -2
  8. package/dist/esm/components/dialogs/binding/node-binding-dialog.d.ts.map +1 -1
  9. package/dist/esm/components/dialogs/binding/node-binding-dialog.js +30 -21
  10. package/dist/esm/components/dialogs/binding/node-binding-dialog.js.map +1 -1
  11. package/dist/esm/pages/network/device-panel.d.ts +1 -1
  12. package/dist/esm/pages/network/device-panel.d.ts.map +1 -1
  13. package/dist/esm/pages/network/device-panel.js.map +1 -1
  14. package/dist/web/js/{commission-node-dialog-BHKkNVcj.js → commission-node-dialog-B8btRo-u.js} +4 -4
  15. package/dist/web/js/{commission-node-existing-Bh-9N-xZ.js → commission-node-existing-DV3Mdryb.js} +2 -2
  16. package/dist/web/js/{commission-node-thread-DxT2sLWw.js → commission-node-thread-CRmXG-l7.js} +2 -2
  17. package/dist/web/js/{commission-node-wifi-R6LeozCS.js → commission-node-wifi-B9czrkgM.js} +2 -2
  18. package/dist/web/js/{dialog-box-yU3Oc-AR.js → dialog-box-D1T172PR.js} +1 -1
  19. package/dist/web/js/{fire_event-ZsNu_mOn.js → fire_event-CpzR8zJR.js} +1 -1
  20. package/dist/web/js/{log-level-dialog-Bpt-9T42.js → log-level-dialog-Dlvacuei.js} +1 -1
  21. package/dist/web/js/main.js +7 -4
  22. package/dist/web/js/{matter-dashboard-app-D9iOhimm.js → matter-dashboard-app-CJAvDfru.js} +4 -4
  23. package/dist/web/js/{node-binding-dialog-DnwW3RpY.js → node-binding-dialog-CTsnRoFC.js} +38 -29
  24. package/package.json +7 -7
  25. package/src/components/dialogs/acl/model.ts +1 -1
  26. package/src/components/dialogs/binding/model.ts +7 -6
  27. package/src/components/dialogs/binding/node-binding-dialog.ts +41 -31
  28. package/src/pages/network/device-panel.ts +2 -2
@@ -11,7 +11,7 @@ export type AccessControlTargetStruct = {
11
11
  export type AccessControlEntryRawInput = {
12
12
  "1": number;
13
13
  "2": number;
14
- "3": number[];
14
+ "3": (number | bigint)[];
15
15
  "4": AccessControlTargetStruct[] | undefined;
16
16
  "254": number;
17
17
  };
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../../../src/components/dialogs/acl/model.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,yBAAyB,GAAG;IACpC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,GAAG,EAAE,yBAAyB,EAAE,GAAG,SAAS,CAAC;IAC7C,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC9B,OAAO,EAAE,yBAAyB,EAAE,GAAG,SAAS,CAAC;IACjD,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,qBAAa,8BAA8B;IACvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAMjC;WAEY,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,yBAAyB;CAoBjE;AAED,qBAAa,iCAAiC;IAC1C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAQjC;WAEY,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,wBAAwB;CAkChE"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../../../src/components/dialogs/acl/model.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,yBAAyB,GAAG;IACpC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACzB,GAAG,EAAE,yBAAyB,EAAE,GAAG,SAAS,CAAC;IAC7C,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC9B,OAAO,EAAE,yBAAyB,EAAE,GAAG,SAAS,CAAC;IACjD,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,qBAAa,8BAA8B;IACvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAMjC;WAEY,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,yBAAyB;CAoBjE;AAED,qBAAa,iCAAiC;IAC1C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAQjC;WAEY,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,wBAAwB;CAkChE"}
@@ -7,7 +7,7 @@ export type InputType = {
7
7
  [key: string]: number | number[] | undefined;
8
8
  };
9
9
  export interface BindingEntryStruct {
10
- node: number | undefined;
10
+ node: number | bigint | undefined;
11
11
  group: number | undefined;
12
12
  endpoint: number | undefined;
13
13
  cluster: number | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../../../src/components/dialogs/binding/model.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,SAAS,GAAG;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;CAChD,CAAC;AAEF,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,qBAAa,2BAA2B;IACpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAOjC;WAEY,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,kBAAkB;CA6B1D"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../../../src/components/dialogs/binding/model.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,SAAS,GAAG;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;CAChD,CAAC;AAEF,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAClC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,qBAAa,2BAA2B;IACpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAQjC;WAEY,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,kBAAkB;CA6B1D"}
@@ -7,6 +7,7 @@ class BindingEntryDataTransformer {
7
7
  static {
8
8
  this.KEY_MAPPING = {
9
9
  "1": "node",
10
+ "2": "group",
10
11
  "3": "endpoint",
11
12
  "4": "cluster",
12
13
  "254": "fabricIndex"
@@ -26,12 +27,10 @@ class BindingEntryDataTransformer {
26
27
  if (value === void 0) {
27
28
  continue;
28
29
  }
29
- if (mappedKey === "fabricIndex") {
30
- result[mappedKey] = value === void 0 ? void 0 : Number(value);
31
- } else if (mappedKey === "node" || mappedKey === "endpoint") {
32
- result[mappedKey] = Number(value);
33
- } else {
30
+ if (mappedKey === "node") {
34
31
  result[mappedKey] = value;
32
+ } else {
33
+ result[mappedKey] = Number(value);
35
34
  }
36
35
  }
37
36
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/components/dialogs/binding/model.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAkBO,MAAM,4BAA4B;AAAA,EACrC;AAAA,SAAwB,cAEpB;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACX;AAAA;AAAA,EAEA,OAAc,UAAU,OAAgC;AACpD,QAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACrC,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACvD;AAEA,UAAM,SAAsC,CAAC;AAC7C,UAAM,aAAa,4BAA4B;AAE/C,eAAW,OAAO,OAAO;AACrB,UAAI,OAAO,YAAY;AACnB,cAAM,YAAY,WAAW,GAAG;AAChC,YAAI,WAAW;AACX,gBAAM,QAAQ,MAAM,GAAG;AACvB,cAAI,UAAU,QAAW;AACrB;AAAA,UACJ;AACA,cAAI,cAAc,eAAe;AAC7B,mBAAO,SAAS,IAAI,UAAU,SAAY,SAAY,OAAO,KAAK;AAAA,UACtE,WAAW,cAAc,UAAU,cAAc,YAAY;AACzD,mBAAO,SAAS,IAAI,OAAO,KAAK;AAAA,UACpC,OAAO;AACH,mBAAO,SAAS,IAAI;AAAA,UACxB;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AACJ;",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAkBO,MAAM,4BAA4B;AAAA,EACrC;AAAA,SAAwB,cAEpB;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACX;AAAA;AAAA,EAEA,OAAc,UAAU,OAAgC;AACpD,QAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACrC,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACvD;AAEA,UAAM,SAAsC,CAAC;AAC7C,UAAM,aAAa,4BAA4B;AAE/C,eAAW,OAAO,OAAO;AACrB,UAAI,OAAO,YAAY;AACnB,cAAM,YAAY,WAAW,GAAG;AAChC,YAAI,WAAW;AACX,gBAAM,QAAQ,MAAM,GAAG;AACvB,cAAI,UAAU,QAAW;AACrB;AAAA,UACJ;AACA,cAAI,cAAc,QAAQ;AAEtB,mBAAO,SAAS,IAAI;AAAA,UACxB,OAAO;AAEH,mBAAO,SAAS,IAAI,OAAO,KAAK;AAAA,UACpC;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AACJ;",
5
5
  "names": []
6
6
  }
@@ -21,8 +21,6 @@ export declare class NodeBindingDialog extends LitElement {
21
21
  private fetchBindingEntry;
22
22
  private fetchACLEntry;
23
23
  private deleteBindingHandler;
24
- /** Helper to convert node_id (number | bigint) to number for API calls */
25
- private getNodeIdAsNumber;
26
24
  private removeNodeAtACLEntry;
27
25
  private removeEntryAtACL;
28
26
  private removeBindingAtIndex;
@@ -1 +1 @@
1
- {"version":3,"file":"node-binding-dialog.d.ts","sourceRoot":"","sources":["../../../../../src/components/dialogs/binding/node-binding-dialog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,kCAAkC,CAAC;AAC1C,OAAO,6BAA6B,CAAC;AAErC,OAAO,yBAAyB,CAAC;AACjC,OAAO,8BAA8B,CAAC;AACtC,OAAO,6CAA6C,CAAC;AAErD,OAAO,iCAAiC,CAAC;AAEzC,OAAO,EAAqC,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACvG,OAAO,EAAa,UAAU,EAAW,MAAM,KAAK,CAAC;AAarD,qBACa,iBAAkB,SAAQ,UAAU;IAGtC,MAAM,EAAG,YAAY,CAAC;IAGtB,IAAI,CAAC,EAAE,UAAU,CAAC;IAGzB,QAAQ,EAAG,MAAM,CAAC;IAGlB,OAAO,CAAC,aAAa,CAAuB;IAG5C,OAAO,CAAC,eAAe,CAAuB;IAG9C,OAAO,CAAC,cAAc,CAAuB;IAE7C,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,aAAa;YAQP,oBAAoB;IAclC,0EAA0E;IAC1E,OAAO,CAAC,iBAAiB;YAKX,oBAAoB;IAgBlC,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,oBAAoB;YAId,kBAAkB;IAgBhC,OAAO,CAAC,0BAA0B;YAKpB,cAAc;IA8B5B,kFAAkF;IAClF,OAAO,CAAC,eAAe;IASvB,6FAA6F;IAC7F,OAAO,CAAC,oBAAoB;YAcd,YAAY;IAyBpB,iBAAiB;IA2EvB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,QAAQ;cAcG,MAAM;IAqFzB,OAAgB,MAAM,0BAsCpB;CACL;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,qBAAqB,EAAE,iBAAiB,CAAC;KAC5C;CACJ"}
1
+ {"version":3,"file":"node-binding-dialog.d.ts","sourceRoot":"","sources":["../../../../../src/components/dialogs/binding/node-binding-dialog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,kCAAkC,CAAC;AAC1C,OAAO,6BAA6B,CAAC;AAErC,OAAO,yBAAyB,CAAC;AACjC,OAAO,8BAA8B,CAAC;AACtC,OAAO,6CAA6C,CAAC;AAErD,OAAO,iCAAiC,CAAC;AAEzC,OAAO,EAAqC,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACvG,OAAO,EAAa,UAAU,EAAW,MAAM,KAAK,CAAC;AAarD,qBACa,iBAAkB,SAAQ,UAAU;IAGtC,MAAM,EAAG,YAAY,CAAC;IAGtB,IAAI,CAAC,EAAE,UAAU,CAAC;IAGzB,QAAQ,EAAG,MAAM,CAAC;IAGlB,OAAO,CAAC,aAAa,CAAuB;IAG5C,OAAO,CAAC,eAAe,CAAuB;IAG9C,OAAO,CAAC,cAAc,CAAuB;IAE7C,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,aAAa;YAUP,oBAAoB;YAcpB,oBAAoB;IAgBlC,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,oBAAoB;YAId,kBAAkB;IAgBhC,OAAO,CAAC,0BAA0B;YAKpB,cAAc;IAiC5B,kFAAkF;IAClF,OAAO,CAAC,eAAe;IASvB,6FAA6F;IAC7F,OAAO,CAAC,oBAAoB;YAcd,YAAY;IAyBpB,iBAAiB;IAkFvB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,QAAQ;cAmBG,MAAM;IAoFzB,OAAgB,MAAM,0BAsCpB;CACL;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,qBAAqB,EAAE,iBAAiB,CAAC;KAC5C;CACJ"}
@@ -37,7 +37,7 @@ let NodeBindingDialog = class extends LitElement {
37
37
  return Object.values(bindings_raw).map((value) => BindingEntryDataTransformer.transform(value));
38
38
  }
39
39
  fetchACLEntry(targetNodeId) {
40
- const acl_cluster_raw = this.client.nodes[targetNodeId]?.attributes["0/31/0"];
40
+ const acl_cluster_raw = this.client.nodes[String(targetNodeId)]?.attributes["0/31/0"];
41
41
  if (!acl_cluster_raw) return [];
42
42
  return Object.values(acl_cluster_raw).map(
43
43
  (value) => AccessControlEntryDataTransformer.transform(value)
@@ -49,18 +49,13 @@ let NodeBindingDialog = class extends LitElement {
49
49
  const targetNodeId = rawBindings[index].node;
50
50
  const endpoint = rawBindings[index].endpoint;
51
51
  if (targetNodeId === void 0 || endpoint === void 0) return;
52
- await this.removeNodeAtACLEntry(this.getNodeIdAsNumber(), endpoint, targetNodeId);
52
+ await this.removeNodeAtACLEntry(this.node.node_id, endpoint, targetNodeId);
53
53
  const updatedBindings = this.removeBindingAtIndex(rawBindings, index);
54
54
  await this.syncBindingUpdates(updatedBindings, index);
55
55
  } catch (error) {
56
56
  this.handleBindingDeletionError(error);
57
57
  }
58
58
  }
59
- /** Helper to convert node_id (number | bigint) to number for API calls */
60
- getNodeIdAsNumber() {
61
- const nodeId = this.node.node_id;
62
- return typeof nodeId === "bigint" ? Number(nodeId) : nodeId;
63
- }
64
59
  async removeNodeAtACLEntry(sourceNodeId, sourceEndpoint, targetNodeId) {
65
60
  const aclEntries = this.fetchACLEntry(targetNodeId);
66
61
  const updatedACLEntries = aclEntries.map((entry) => this.removeEntryAtACL(sourceNodeId, sourceEndpoint, entry)).filter((entry) => entry !== void 0);
@@ -78,7 +73,7 @@ let NodeBindingDialog = class extends LitElement {
78
73
  }
79
74
  async syncBindingUpdates(updatedBindings, index) {
80
75
  const apiBindings = updatedBindings.map((b) => this.toBindingTarget(b));
81
- await this.client.setNodeBinding(this.getNodeIdAsNumber(), this.endpoint, apiBindings);
76
+ await this.client.setNodeBinding(this.node.node_id, this.endpoint, apiBindings);
82
77
  const attributePath = `${this.endpoint}/30/0`;
83
78
  const currentBindings = this.node.attributes[attributePath];
84
79
  const updatedAttributes = {
@@ -94,7 +89,7 @@ let NodeBindingDialog = class extends LitElement {
94
89
  }
95
90
  async add_target_acl(targetNodeId, entry) {
96
91
  try {
97
- const rawEntries = this.client.nodes[targetNodeId]?.attributes["0/31/0"];
92
+ const rawEntries = this.client.nodes[String(targetNodeId)]?.attributes["0/31/0"];
98
93
  const entries = rawEntries ? Object.values(rawEntries).map((v) => AccessControlEntryDataTransformer.transform(v)) : [];
99
94
  entries.push(entry);
100
95
  const apiEntries = entries.map((e) => this.toAccessControlEntry(e));
@@ -142,7 +137,7 @@ let NodeBindingDialog = class extends LitElement {
142
137
  bindings.push(bindingEntry);
143
138
  try {
144
139
  const apiBindings = bindings.map((b) => this.toBindingTarget(b));
145
- const results = await this.client.setNodeBinding(this.getNodeIdAsNumber(), endpoint, apiBindings);
140
+ const results = await this.client.setNodeBinding(this.node.node_id, endpoint, apiBindings);
146
141
  const batchResult = analyzeBatchResults(results);
147
142
  if (batchResult.outcome !== "all_success") {
148
143
  console.error(`Set binding: ${batchResult.message}`);
@@ -160,10 +155,18 @@ let NodeBindingDialog = class extends LitElement {
160
155
  }
161
156
  }
162
157
  async addBindingHandler() {
163
- const targetNodeId = this._targetNodeId.value ? parseInt(this._targetNodeId.value, 10) : void 0;
158
+ let targetNodeId;
159
+ const rawNodeId = this._targetNodeId.value?.trim();
160
+ if (rawNodeId) {
161
+ if (!/^\d+$/.test(rawNodeId)) {
162
+ alert("Please enter a valid target node ID");
163
+ return;
164
+ }
165
+ targetNodeId = BigInt(rawNodeId);
166
+ }
164
167
  const targetEndpoint = this._targetEndpoint.value ? parseInt(this._targetEndpoint.value, 10) : void 0;
165
168
  const targetCluster = this._targetCluster.value ? parseInt(this._targetCluster.value, 10) : void 0;
166
- if (targetNodeId === void 0 || targetNodeId <= 0 || targetNodeId > 65535) {
169
+ if (targetNodeId === void 0 || targetNodeId <= 0n) {
167
170
  alert("Please enter a valid target node ID");
168
171
  return;
169
172
  }
@@ -185,7 +188,7 @@ let NodeBindingDialog = class extends LitElement {
185
188
  const acl_entry = {
186
189
  privilege: 5,
187
190
  authMode: 2,
188
- subjects: [this.getNodeIdAsNumber()],
191
+ subjects: [this.node.node_id],
189
192
  targets: [targets],
190
193
  fabricIndex: 0
191
194
  // Placeholder - server will use correct fabric index
@@ -232,12 +235,19 @@ ${bindingResult.message}`);
232
235
  }
233
236
  onChange(e) {
234
237
  const textfield = e.target;
235
- const value = parseInt(textfield.value, 10);
236
- if (parseInt(textfield.max, 10) < value || value < parseInt(textfield.min, 10)) {
237
- textfield.error = true;
238
- textfield.errorText = "value error";
238
+ if (textfield.type === "number" && textfield.max && textfield.min) {
239
+ const value = parseInt(textfield.value, 10);
240
+ if (parseInt(textfield.max, 10) < value || value < parseInt(textfield.min, 10)) {
241
+ textfield.error = true;
242
+ textfield.errorText = "value error";
243
+ } else {
244
+ textfield.error = false;
245
+ }
239
246
  } else {
240
- textfield.error = false;
247
+ textfield.error = textfield.value !== "" && !/^[0-9]+$/.test(textfield.value);
248
+ if (textfield.error) {
249
+ textfield.errorText = "must be a numeric value";
250
+ }
241
251
  }
242
252
  }
243
253
  render() {
@@ -274,9 +284,8 @@ ${bindingResult.message}`);
274
284
  <md-outlined-text-field
275
285
  label="node id"
276
286
  name="NodeId"
277
- type="number"
278
- min="0"
279
- max="65535"
287
+ type="text"
288
+ pattern="[0-9]+"
280
289
  class="target-item"
281
290
  @change=${this.onChange}
282
291
  supporting-text="required"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/components/dialogs/binding/node-binding-dialog.ts"],
4
- "mappings": ";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,OAAO;AACP,OAAO;AACP,SAAS,eAAe;AACxB,OAAO;AACP,OAAO;AACP,OAAO;AAEP,OAAO;AAGP,SAAS,KAAK,MAAM,YAAY,eAAe;AAC/C,SAAS,eAAe,UAAU,aAAa;AAC/C,SAAS,qBAAqB;AAC9B,SAAS,mBAAmB;AAC5B,SAAS,2BAAmD;AAC5D,SAAS,sBAAsB;AAC/B;AAAA,EACI;AAAA,OAGG;AACP,SAAS,mCAAkE;AAGpE,IAAM,oBAAN,cAAgC,WAAW;AAAA,EAoBtC,oBAA0C;AAC9C,UAAM,eAAe,KAAK,KAAM,WAAW,KAAK,WAAW,OAAO;AAClE,QAAI,CAAC,aAAc,QAAO,CAAC;AAC3B,WAAO,OAAO,OAAO,YAAY,EAAE,IAAI,WAAS,4BAA4B,UAAU,KAAK,CAAC;AAAA,EAChG;AAAA,EAEQ,cAAc,cAAkD;AACpE,UAAM,kBAAkB,KAAK,OAAO,MAAM,YAAY,GAAG,WAAW,QAAQ;AAC5E,QAAI,CAAC,gBAAiB,QAAO,CAAC;AAC9B,WAAO,OAAO,OAAO,eAAe,EAAE;AAAA,MAAI,CAAC,UACvC,kCAAkC,UAAU,KAAK;AAAA,IACrD;AAAA,EACJ;AAAA,EAEA,MAAc,qBAAqB,OAA8B;AAC7D,UAAM,cAAc,KAAK,kBAAkB;AAC3C,QAAI;AACA,YAAM,eAAe,YAAY,KAAK,EAAE;AACxC,YAAM,WAAW,YAAY,KAAK,EAAE;AACpC,UAAI,iBAAiB,UAAa,aAAa,OAAW;AAC1D,YAAM,KAAK,qBAAqB,KAAK,kBAAkB,GAAG,UAAU,YAAY;AAChF,YAAM,kBAAkB,KAAK,qBAAqB,aAAa,KAAK;AACpE,YAAM,KAAK,mBAAmB,iBAAiB,KAAK;AAAA,IACxD,SAAS,OAAO;AACZ,WAAK,2BAA2B,KAAK;AAAA,IACzC;AAAA,EACJ;AAAA;AAAA,EAGQ,oBAA4B;AAChC,UAAM,SAAS,KAAK,KAAM;AAC1B,WAAO,OAAO,WAAW,WAAW,OAAO,MAAM,IAAI;AAAA,EACzD;AAAA,EAEA,MAAc,qBACV,cACA,gBACA,cACa;AACb,UAAM,aAAa,KAAK,cAAc,YAAY;AAElD,UAAM,oBAAoB,WACrB,IAAI,WAAS,KAAK,iBAAiB,cAAc,gBAAgB,KAAK,CAAC,EACvE,OAAO,CAAC,UAA6C,UAAU,MAAS;AAG7E,UAAM,aAAa,kBAAkB,IAAI,OAAK,KAAK,qBAAqB,CAAC,CAAC;AAC1E,UAAM,KAAK,OAAO,YAAY,cAAc,UAAU;AAAA,EAC1D;AAAA,EAEQ,iBACJ,QACA,gBACA,OACoC;AACpC,UAAM,aAAa,MAAM,SAAS,SAAS,MAAM;AACjD,QAAI,CAAC,WAAY,QAAO;AAExB,UAAM,YAAY,MAAM,QAAS,OAAO,UAAQ,KAAK,aAAa,cAAc;AAChF,WAAO,UAAU,SAAS,IAAI,SAAY;AAAA,EAC9C;AAAA,EAEQ,qBAAqB,UAAgC,OAAqC;AAC9F,WAAO,CAAC,GAAG,SAAS,MAAM,GAAG,KAAK,GAAG,GAAG,SAAS,MAAM,QAAQ,CAAC,CAAC;AAAA,EACrE;AAAA,EAEA,MAAc,mBAAmB,iBAAuC,OAA8B;AAElG,UAAM,cAAc,gBAAgB,IAAI,OAAK,KAAK,gBAAgB,CAAC,CAAC;AACpE,UAAM,KAAK,OAAO,eAAe,KAAK,kBAAkB,GAAG,KAAK,UAAU,WAAW;AAErF,UAAM,gBAAgB,GAAG,KAAK,QAAQ;AACtC,UAAM,kBAAkB,KAAK,KAAM,WAAW,aAAa;AAC3D,UAAM,oBAAoB;AAAA,MACtB,GAAG,KAAK,KAAM;AAAA,MACd,CAAC,aAAa,GAAG,kBAAkB,KAAK,qBAAqB,iBAAiB,KAAK,IAAI,CAAC;AAAA,IAC5F;AAEA,SAAK,KAAM,aAAa;AACxB,SAAK,cAAc;AAAA,EACvB;AAAA,EAEQ,2BAA2B,OAAsB;AACrD,UAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC1E,YAAQ,MAAM,4BAA4B,YAAY,EAAE;AAAA,EAC5D;AAAA,EAEA,MAAc,eAAe,cAAsB,OAA6D;AAC5G,QAAI;AAEA,YAAM,aAAa,KAAK,OAAO,MAAM,YAAY,GAAG,WAAW,QAAQ;AACvE,YAAM,UAAU,aACV,OAAO,OAAO,UAAU,EAAE,IAAI,OAAK,kCAAkC,UAAU,CAAC,CAAC,IACjF,CAAC;AACP,cAAQ,KAAK,KAAK;AAGlB,YAAM,aAAa,QAAQ,IAAI,OAAK,KAAK,qBAAqB,CAAC,CAAC;AAChE,YAAM,UAAU,MAAM,KAAK,OAAO,YAAY,cAAc,UAAU;AAEtE,YAAM,cAAc,oBAAoB,OAAO;AAC/C,UAAI,YAAY,YAAY,eAAe;AACvC,gBAAQ,MAAM,kBAAkB,YAAY,OAAO,EAAE;AAAA,MACzD;AACA,aAAO;AAAA,IACX,SAAS,KAAK;AACV,cAAQ,MAAM,kBAAkB,GAAG;AACnC,aAAO;AAAA,QACH,SAAS;AAAA,QACT,cAAc;AAAA,QACd,cAAc;AAAA,QACd,aAAa,EAAE,GAAG,EAAE;AAAA,QACpB,SAAS,cAAc,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,MAC3E;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA,EAGQ,gBAAgB,OAA0C;AAC9D,WAAO;AAAA,MACH,MAAM,MAAM,QAAQ;AAAA,MACpB,OAAO,MAAM,SAAS;AAAA,MACtB,UAAU,MAAM,YAAY;AAAA,MAC5B,SAAS,MAAM,WAAW;AAAA,IAC9B;AAAA,EACJ;AAAA;AAAA,EAGQ,qBAAqB,OAAqD;AAC9E,WAAO;AAAA,MACH,WAAW,MAAM;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,UAAU,MAAM,YAAY;AAAA,MAC5B,SACI,MAAM,SAAS,IAAI,QAAM;AAAA,QACrB,SAAS,EAAE,WAAW;AAAA,QACtB,UAAU,EAAE,YAAY;AAAA,QACxB,aAAa,EAAE,cAAc;AAAA,MACjC,EAAE,KAAK;AAAA,IACf;AAAA,EACJ;AAAA,EAEA,MAAc,aAAa,UAAkB,cAA8D;AACvG,UAAM,WAAW,KAAK,kBAAkB;AACxC,aAAS,KAAK,YAAY;AAC1B,QAAI;AAEA,YAAM,cAAc,SAAS,IAAI,OAAK,KAAK,gBAAgB,CAAC,CAAC;AAC7D,YAAM,UAAU,MAAM,KAAK,OAAO,eAAe,KAAK,kBAAkB,GAAG,UAAU,WAAW;AAEhG,YAAM,cAAc,oBAAoB,OAAO;AAC/C,UAAI,YAAY,YAAY,eAAe;AACvC,gBAAQ,MAAM,gBAAgB,YAAY,OAAO,EAAE;AAAA,MACvD;AACA,aAAO;AAAA,IACX,SAAS,KAAK;AACV,cAAQ,MAAM,uBAAuB,GAAG;AACxC,aAAO;AAAA,QACH,SAAS;AAAA,QACT,cAAc;AAAA,QACd,cAAc;AAAA,QACd,aAAa,EAAE,GAAG,EAAE;AAAA,QACpB,SAAS,cAAc,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,MAC3E;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,oBAAoB;AACtB,UAAM,eAAe,KAAK,cAAc,QAAQ,SAAS,KAAK,cAAc,OAAO,EAAE,IAAI;AACzF,UAAM,iBAAiB,KAAK,gBAAgB,QAAQ,SAAS,KAAK,gBAAgB,OAAO,EAAE,IAAI;AAC/F,UAAM,gBAAgB,KAAK,eAAe,QAAQ,SAAS,KAAK,eAAe,OAAO,EAAE,IAAI;AAG5F,QAAI,iBAAiB,UAAa,gBAAgB,KAAK,eAAe,OAAO;AACzE,YAAM,qCAAqC;AAC3C;AAAA,IACJ;AAEA,QAAI,mBAAmB,UAAa,kBAAkB,KAAK,iBAAiB,OAAQ;AAChF,YAAM,sCAAsC;AAC5C;AAAA,IACJ;AAGA,QAAI,kBAAkB,QAAW;AAE7B,UAAI,gBAAgB,KAAK,gBAAgB,OAAQ;AAC7C,cAAM,qCAAqC;AAC3C;AAAA,MACJ;AAAA,IACJ;AAEA,UAAM,UAAqC;AAAA,MACvC,UAAU;AAAA,MACV,SAAS;AAAA,MACT,YAAY;AAAA,IAChB;AAGA,UAAM,YAAsC;AAAA,MACxC,WAAW;AAAA,MACX,UAAU;AAAA,MACV,UAAU,CAAC,KAAK,kBAAkB,CAAC;AAAA,MACnC,SAAS,CAAC,OAAO;AAAA,MACjB,aAAa;AAAA;AAAA,IACjB;AAEA,UAAM,YAAY,MAAM,KAAK,eAAe,cAAc,SAAS;AACnE,QAAI,UAAU,YAAY,cAAc;AACpC,YAAM;AAAA,EAA6B,UAAU,OAAO,EAAE;AACtD;AAAA,IACJ;AACA,QAAI,UAAU,YAAY,WAAW;AACjC,YAAM;AAAA,EAAgC,UAAU,OAAO,EAAE;AAAA,IAE7D;AAEA,UAAM,WAAW,KAAK;AAEtB,UAAM,eAAmC;AAAA,MACrC,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,MACP,SAAS;AAAA,MACT,aAAa;AAAA;AAAA,IACjB;AAEA,UAAM,gBAAgB,MAAM,KAAK,aAAa,UAAU,YAAY;AAEpE,QAAI,cAAc,YAAY,eAAe;AACzC,WAAK,cAAc,QAAQ;AAC3B,WAAK,gBAAgB,QAAQ;AAC7B,WAAK,eAAe,QAAQ;AAC5B,WAAK,cAAc;AAAA,IACvB,WAAW,cAAc,YAAY,WAAW;AAC5C,YAAM;AAAA,EAA8B,cAAc,OAAO,EAAE;AAC3D,WAAK,cAAc;AAAA,IACvB,OAAO;AACH,YAAM;AAAA,EAA2B,cAAc,OAAO,EAAE;AAAA,IAC5D;AAAA,EACJ;AAAA,EAEQ,SAAS;AACb,SAAK,WAAY,cAAwB,WAAW,EAAG,MAAM;AAAA,EACjE;AAAA,EAEQ,gBAAgB;AACpB,SAAK,WAAY,YAAY,IAAI;AAAA,EACrC;AAAA,EAEQ,SAAS,GAAU;AACvB,UAAM,YAAY,EAAE;AACpB,UAAM,QAAQ,SAAS,UAAU,OAAO,EAAE;AAE1C,QAAI,SAAS,UAAU,KAAK,EAAE,IAAI,SAAS,QAAQ,SAAS,UAAU,KAAK,EAAE,GAAG;AAC5E,gBAAU,QAAQ;AAClB,gBAAU,YAAY;AAAA,IAC1B,OAAO;AACH,gBAAU,QAAQ;AAAA,IACtB;AAAA,EAGJ;AAAA,EAEmB,SAAS;AACxB,UAAM,cAAc,KAAK,KAAM,WAAW,KAAK,WAAW,OAAO;AACjE,UAAM,WAAW,cACX,OAAO,OAAO,WAAW,EAAE,IAAI,WAAS,4BAA4B,UAAU,KAAK,CAAC,IACpF,CAAC;AAEP,WAAO;AAAA,sCACuB,cAAc,YAAY,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAOpD,OAAO,OAAO,QAAQ,EAAE;AAAA,MACtB,CAAC,OAAO,UAAU;AAAA;AAAA;AAAA,oCAGd,MAAM,MAAM,CAAC;AAAA,wCACT,MAAM,UAAU,CAAC;AAAA,0BAC/B,MAAM,SAAS,IAAI,qBAAqB,MAAM,SAAS,CAAC,YAAY,OAAO;AAAA;AAAA;AAAA;AAAA,iCAIpE,YAAY,MAAM,KAAK,qBAAqB,KAAK,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKxD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CAYiB,KAAK,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CASb,KAAK,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CAUb,KAAK,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6CAkBd,YAAY,MAAM,KAAK,kBAAkB,CAAC,CAAC;AAAA,6CAC3C,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA,EAIpD;AAyCJ;AAxZa,kBAiXO,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA9WlB;AAAA,EAFN,QAAQ,EAAE,SAAS,eAAe,WAAW,KAAK,CAAC;AAAA,EACnD,SAAS,EAAE,WAAW,MAAM,CAAC;AAAA,GAFrB,kBAGF;AAGA;AAAA,EADN,SAAS;AAAA,GALD,kBAMF;AAGP;AAAA,EADC,SAAS,EAAE,WAAW,MAAM,CAAC;AAAA,GARrB,kBAST;AAGQ;AAAA,EADP,MAAM,uCAAuC;AAAA,GAXrC,kBAYD;AAGA;AAAA,EADP,MAAM,yCAAyC;AAAA,GAdvC,kBAeD;AAGA;AAAA,EADP,MAAM,wCAAwC;AAAA,GAjBtC,kBAkBD;AAlBC,oBAAN;AAAA,EADN,cAAc,qBAAqB;AAAA,GACvB;",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -16,7 +16,7 @@ declare global {
16
16
  export type PanelType = "wifi" | "ethernet" | "bridges";
17
17
  export declare class DevicePanel extends LitElement {
18
18
  type: PanelType;
19
- nodeIds: number[];
19
+ nodeIds: (number | bigint)[];
20
20
  nodes: Record<string, MatterNode>;
21
21
  expanded: boolean;
22
22
  private _isExpanded;
@@ -1 +1 @@
1
- {"version":3,"file":"device-panel.d.ts","sourceRoot":"","sources":["../../../../src/pages/network/device-panel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,yBAAyB,CAAC;AACjC,OAAO,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAa,OAAO,EAAE,MAAM,KAAK,CAAC;AAErD,OAAO,8BAA8B,CAAC;AAGtC,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,cAAc,EAAE,WAAW,CAAC;KAC/B;CACJ;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AAExD,qBACa,WAAY,SAAQ,UAAU;IAEhC,IAAI,EAAE,SAAS,CAAU;IAGzB,OAAO,EAAE,MAAM,EAAE,CAAM;IAGvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAM;IAGvC,QAAQ,UAAQ;IAGvB,OAAO,CAAC,WAAW,CAAQ;IAElB,UAAU,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAMlE,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,gBAAgB;IAUf,MAAM;IAwCf,OAAgB,MAAM,0BA0DpB;CACL"}
1
+ {"version":3,"file":"device-panel.d.ts","sourceRoot":"","sources":["../../../../src/pages/network/device-panel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,yBAAyB,CAAC;AACjC,OAAO,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAa,OAAO,EAAE,MAAM,KAAK,CAAC;AAErD,OAAO,8BAA8B,CAAC;AAGtC,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,cAAc,EAAE,WAAW,CAAC;KAC/B;CACJ;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AAExD,qBACa,WAAY,SAAQ,UAAU;IAEhC,IAAI,EAAE,SAAS,CAAU;IAGzB,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAM;IAGlC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAM;IAGvC,QAAQ,UAAQ;IAGvB,OAAO,CAAC,WAAW,CAAQ;IAElB,UAAU,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAMlE,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,gBAAgB;IAUf,MAAM;IAwCf,OAAgB,MAAM,0BA0DpB;CACL"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/pages/network/device-panel.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -1,4 +1,4 @@
1
- import { r, n, t, i, j as b } from './matter-dashboard-app-D9iOhimm.js';
1
+ import { r, n, t, i, j as b } from './matter-dashboard-app-CJAvDfru.js';
2
2
  import { p as preventDefault } from './prevent_default-D-ohDGsN.js';
3
3
  import './main.js';
4
4
 
@@ -50,18 +50,18 @@ let ComissionNodeDialog = class extends i {
50
50
  if (!this.client.serverInfo.bluetooth_enabled) {
51
51
  return;
52
52
  }
53
- import('./commission-node-wifi-R6LeozCS.js');
53
+ import('./commission-node-wifi-B9czrkgM.js');
54
54
  this._mode = "wifi";
55
55
  }
56
56
  _commissionThread() {
57
57
  if (!this.client.serverInfo.bluetooth_enabled) {
58
58
  return;
59
59
  }
60
- import('./commission-node-thread-DxT2sLWw.js');
60
+ import('./commission-node-thread-CRmXG-l7.js');
61
61
  this._mode = "thread";
62
62
  }
63
63
  _commissionExisting() {
64
- import('./commission-node-existing-Bh-9N-xZ.js');
64
+ import('./commission-node-existing-DV3Mdryb.js');
65
65
  this._mode = "existing";
66
66
  }
67
67
  _nodeCommissioned(ev) {
@@ -1,5 +1,5 @@
1
- import { r, G as c, H as clientContext, n, a as e, t, i, A, F as handleAsync, j as b } from './matter-dashboard-app-D9iOhimm.js';
2
- import { f as fireEvent } from './fire_event-ZsNu_mOn.js';
1
+ import { r, G as c, H as clientContext, n, a as e, t, i, A, F as handleAsync, j as b } from './matter-dashboard-app-CJAvDfru.js';
2
+ import { f as fireEvent } from './fire_event-CpzR8zJR.js';
3
3
  import './main.js';
4
4
 
5
5
  var __defProp = Object.defineProperty;
@@ -1,5 +1,5 @@
1
- import { r, G as c, H as clientContext, n, a as e, t, i, A, F as handleAsync, j as b } from './matter-dashboard-app-D9iOhimm.js';
2
- import { f as fireEvent } from './fire_event-ZsNu_mOn.js';
1
+ import { r, G as c, H as clientContext, n, a as e, t, i, A, F as handleAsync, j as b } from './matter-dashboard-app-CJAvDfru.js';
2
+ import { f as fireEvent } from './fire_event-CpzR8zJR.js';
3
3
  import './main.js';
4
4
 
5
5
  var __defProp = Object.defineProperty;
@@ -1,5 +1,5 @@
1
- import { r, G as c, H as clientContext, n, a as e, t, i, A, F as handleAsync, j as b } from './matter-dashboard-app-D9iOhimm.js';
2
- import { f as fireEvent } from './fire_event-ZsNu_mOn.js';
1
+ import { r, G as c, H as clientContext, n, a as e, t, i, A, F as handleAsync, j as b } from './matter-dashboard-app-CJAvDfru.js';
2
+ import { f as fireEvent } from './fire_event-CpzR8zJR.js';
3
3
  import './main.js';
4
4
 
5
5
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- import { n, t, i, j as b } from './matter-dashboard-app-D9iOhimm.js';
1
+ import { n, t, i, j as b } from './matter-dashboard-app-CJAvDfru.js';
2
2
  import { p as preventDefault } from './prevent_default-D-ohDGsN.js';
3
3
  import './main.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { m as mixinDelegatesAria, i, _ as __decorate, n, A, f as e, j as b, k as i$1, t } from './matter-dashboard-app-D9iOhimm.js';
1
+ import { m as mixinDelegatesAria, i, _ as __decorate, n, A, f as e, j as b, k as i$1, t } from './matter-dashboard-app-CJAvDfru.js';
2
2
 
3
3
  /**
4
4
  * @license
@@ -1,4 +1,4 @@
1
- import { e, N as NavigableKeys, _ as __decorate, a as e$1, n as n$1, o, r, i, c as createAnimationSignal, L as ListController, g as getActiveItem, b as getLastActivatableItem, d as getFirstActivatableItem, A, f as e$2, h as o$1, j as b, E as EASING, k as i$1, t, V as Validator, D, m as mixinDelegatesAria, l as mixinOnReportValidity, p as mixinConstraintValidation, q as mixinFormAssociated, s as mixinElementInternals, u as onReportValidity, v as u, w as redispatchEvent, x as getFormValue, y as createValidator, z as getValidityAnchor, B as i$2, C as fireAndForget, F as handleAsync } from './matter-dashboard-app-D9iOhimm.js';
1
+ import { e, N as NavigableKeys, _ as __decorate, a as e$1, n as n$1, o, r, i, c as createAnimationSignal, L as ListController, g as getActiveItem, b as getLastActivatableItem, d as getFirstActivatableItem, A, f as e$2, h as o$1, j as b, E as EASING, k as i$1, t, V as Validator, D, m as mixinDelegatesAria, l as mixinOnReportValidity, p as mixinConstraintValidation, q as mixinFormAssociated, s as mixinElementInternals, u as onReportValidity, v as u, w as redispatchEvent, x as getFormValue, y as createValidator, z as getValidityAnchor, B as i$2, C as fireAndForget, F as handleAsync } from './matter-dashboard-app-CJAvDfru.js';
2
2
  import { p as preventDefault } from './prevent_default-D-ohDGsN.js';
3
3
  import './main.js';
4
4
 
@@ -318,10 +318,11 @@ class MatterClient {
318
318
  };
319
319
  }
320
320
  async commissionWithCode(code, networkOnly = true, timeout) {
321
- return await this.sendCommand("commission_with_code", 0, {
321
+ const data = await this.sendCommand("commission_with_code", 0, {
322
322
  code,
323
323
  network_only: networkOnly
324
324
  }, timeout);
325
+ return new MatterNode(data);
325
326
  }
326
327
  async setWifiCredentials(ssid, credentials, timeout) {
327
328
  await this.sendCommand("set_wifi_credentials", 0, {
@@ -433,14 +434,16 @@ class MatterClient {
433
434
  }, timeout);
434
435
  }
435
436
  async getNodes(onlyAvailable = false, timeout) {
436
- return await this.sendCommand("get_nodes", 0, {
437
+ const data = await this.sendCommand("get_nodes", 0, {
437
438
  only_available: onlyAvailable
438
439
  }, timeout);
440
+ return data.map(n => new MatterNode(n));
439
441
  }
440
442
  async getNode(nodeId, timeout) {
441
- return await this.sendCommand("get_node", 0, {
443
+ const data = await this.sendCommand("get_node", 0, {
442
444
  node_id: nodeId
443
445
  }, timeout);
446
+ return new MatterNode(data);
444
447
  }
445
448
  async getVendorNames(filterVendors, timeout) {
446
449
  return await this.sendCommand("get_vendor_names", 0, {
@@ -748,7 +751,7 @@ const ThemeService = new ThemeServiceImpl();
748
751
  * SPDX-License-Identifier: Apache-2.0
749
752
  */
750
753
  async function main() {
751
- import('./matter-dashboard-app-D9iOhimm.js').then(function (n) { return n.I; });
754
+ import('./matter-dashboard-app-CJAvDfru.js').then(function (n) { return n.I; });
752
755
  let url = "";
753
756
  const isProductionServer = window.__MATTERJS_PRODUCTION_MODE__ === true || location.origin.includes(":5580") || location.href.includes("hassio_ingress") || location.href.includes("/api/ingress/");
754
757
  if (!isProductionServer) {
@@ -4026,7 +4026,7 @@ MdListItem = __decorate([t$1('md-list-item')], MdListItem);
4026
4026
  */
4027
4027
  const showLogLevelDialog = async client => {
4028
4028
  var _document$querySelect;
4029
- await import('./log-level-dialog-Bpt-9T42.js');
4029
+ await import('./log-level-dialog-Dlvacuei.js');
4030
4030
  const dialog = document.createElement("log-level-dialog");
4031
4031
  dialog.client = client;
4032
4032
  (_document$querySelect = document.querySelector("matter-dashboard-app")) === null || _document$querySelect === void 0 || _document$querySelect.renderRoot.appendChild(dialog);
@@ -15728,7 +15728,7 @@ const clusters = {
15728
15728
  * SPDX-License-Identifier: Apache-2.0
15729
15729
  */
15730
15730
  const showDialogBox = async (type, dialogParams) => {
15731
- await import('./dialog-box-yU3Oc-AR.js');
15731
+ await import('./dialog-box-D1T172PR.js');
15732
15732
  return new Promise(resolve => {
15733
15733
  const dialog = document.createElement("dialog-box");
15734
15734
  dialog.params = dialogParams;
@@ -15902,7 +15902,7 @@ MdTextButton = __decorate([t$1('md-text-button')], MdTextButton);
15902
15902
  */
15903
15903
  const showNodeBindingDialog = async (client, node, endpoint) => {
15904
15904
  var _document$querySelect;
15905
- await import('./node-binding-dialog-DnwW3RpY.js');
15905
+ await import('./node-binding-dialog-CTsnRoFC.js');
15906
15906
  const dialog = document.createElement("node-binding-dialog");
15907
15907
  dialog.client = client;
15908
15908
  dialog.node = node;
@@ -31693,7 +31693,7 @@ MatterNodeView = __decorateClass$3([t$1("matter-node-view")], MatterNodeView);
31693
31693
  */
31694
31694
  const showCommissionNodeDialog = async client => {
31695
31695
  var _document$querySelect;
31696
- await import('./commission-node-dialog-BHKkNVcj.js');
31696
+ await import('./commission-node-dialog-B8btRo-u.js');
31697
31697
  const dialog = document.createElement("commission-node-dialog");
31698
31698
  dialog.client = client;
31699
31699
  (_document$querySelect = document.querySelector("matter-dashboard-app")) === null || _document$querySelect === void 0 || _document$querySelect.renderRoot.appendChild(dialog);
@@ -1,4 +1,4 @@
1
- import { k as i, G as c, H as clientContext, n, a as e, i as i$1, A, j as b, F as handleAsync, t } from './matter-dashboard-app-D9iOhimm.js';
1
+ import { k as i, G as c, H as clientContext, n, a as e, i as i$1, A, j as b, F as handleAsync, t } from './matter-dashboard-app-CJAvDfru.js';
2
2
  import { p as preventDefault } from './prevent_default-D-ohDGsN.js';
3
3
  import './main.js';
4
4
 
@@ -193,12 +193,10 @@ class BindingEntryDataTransformer {
193
193
  if (value === void 0) {
194
194
  continue;
195
195
  }
196
- if (mappedKey === "fabricIndex") {
197
- result[mappedKey] = value === void 0 ? void 0 : Number(value);
198
- } else if (mappedKey === "node" || mappedKey === "endpoint") {
199
- result[mappedKey] = Number(value);
200
- } else {
196
+ if (mappedKey === "node") {
201
197
  result[mappedKey] = value;
198
+ } else {
199
+ result[mappedKey] = Number(value);
202
200
  }
203
201
  }
204
202
  }
@@ -207,6 +205,7 @@ class BindingEntryDataTransformer {
207
205
  }
208
206
  static #_ = _staticBlock = () => this.KEY_MAPPING = {
209
207
  "1": "node",
208
+ "2": "group",
210
209
  "3": "endpoint",
211
210
  "4": "cluster",
212
211
  "254": "fabricIndex"
@@ -229,8 +228,8 @@ let NodeBindingDialog = class extends i$1 {
229
228
  return Object.values(bindings_raw).map(value => BindingEntryDataTransformer.transform(value));
230
229
  }
231
230
  fetchACLEntry(targetNodeId) {
232
- var _this$client$nodes$ta;
233
- const acl_cluster_raw = (_this$client$nodes$ta = this.client.nodes[targetNodeId]) === null || _this$client$nodes$ta === void 0 ? void 0 : _this$client$nodes$ta.attributes["0/31/0"];
231
+ var _this$client$nodes$St;
232
+ const acl_cluster_raw = (_this$client$nodes$St = this.client.nodes[String(targetNodeId)]) === null || _this$client$nodes$St === void 0 ? void 0 : _this$client$nodes$St.attributes["0/31/0"];
234
233
  if (!acl_cluster_raw) return [];
235
234
  return Object.values(acl_cluster_raw).map(value => AccessControlEntryDataTransformer.transform(value));
236
235
  }
@@ -240,18 +239,13 @@ let NodeBindingDialog = class extends i$1 {
240
239
  const targetNodeId = rawBindings[index].node;
241
240
  const endpoint = rawBindings[index].endpoint;
242
241
  if (targetNodeId === void 0 || endpoint === void 0) return;
243
- await this.removeNodeAtACLEntry(this.getNodeIdAsNumber(), endpoint, targetNodeId);
242
+ await this.removeNodeAtACLEntry(this.node.node_id, endpoint, targetNodeId);
244
243
  const updatedBindings = this.removeBindingAtIndex(rawBindings, index);
245
244
  await this.syncBindingUpdates(updatedBindings, index);
246
245
  } catch (error) {
247
246
  this.handleBindingDeletionError(error);
248
247
  }
249
248
  }
250
- /** Helper to convert node_id (number | bigint) to number for API calls */
251
- getNodeIdAsNumber() {
252
- const nodeId = this.node.node_id;
253
- return typeof nodeId === "bigint" ? Number(nodeId) : nodeId;
254
- }
255
249
  async removeNodeAtACLEntry(sourceNodeId, sourceEndpoint, targetNodeId) {
256
250
  const aclEntries = this.fetchACLEntry(targetNodeId);
257
251
  const updatedACLEntries = aclEntries.map(entry => this.removeEntryAtACL(sourceNodeId, sourceEndpoint, entry)).filter(entry => entry !== void 0);
@@ -269,7 +263,7 @@ let NodeBindingDialog = class extends i$1 {
269
263
  }
270
264
  async syncBindingUpdates(updatedBindings, index) {
271
265
  const apiBindings = updatedBindings.map(b => this.toBindingTarget(b));
272
- await this.client.setNodeBinding(this.getNodeIdAsNumber(), this.endpoint, apiBindings);
266
+ await this.client.setNodeBinding(this.node.node_id, this.endpoint, apiBindings);
273
267
  const attributePath = `${this.endpoint}/30/0`;
274
268
  const currentBindings = this.node.attributes[attributePath];
275
269
  const updatedAttributes = {
@@ -285,8 +279,8 @@ let NodeBindingDialog = class extends i$1 {
285
279
  }
286
280
  async add_target_acl(targetNodeId, entry) {
287
281
  try {
288
- var _this$client$nodes$ta2;
289
- const rawEntries = (_this$client$nodes$ta2 = this.client.nodes[targetNodeId]) === null || _this$client$nodes$ta2 === void 0 ? void 0 : _this$client$nodes$ta2.attributes["0/31/0"];
282
+ var _this$client$nodes$St2;
283
+ const rawEntries = (_this$client$nodes$St2 = this.client.nodes[String(targetNodeId)]) === null || _this$client$nodes$St2 === void 0 ? void 0 : _this$client$nodes$St2.attributes["0/31/0"];
290
284
  const entries = rawEntries ? Object.values(rawEntries).map(v => AccessControlEntryDataTransformer.transform(v)) : [];
291
285
  entries.push(entry);
292
286
  const apiEntries = entries.map(e => this.toAccessControlEntry(e));
@@ -337,7 +331,7 @@ let NodeBindingDialog = class extends i$1 {
337
331
  bindings.push(bindingEntry);
338
332
  try {
339
333
  const apiBindings = bindings.map(b => this.toBindingTarget(b));
340
- const results = await this.client.setNodeBinding(this.getNodeIdAsNumber(), endpoint, apiBindings);
334
+ const results = await this.client.setNodeBinding(this.node.node_id, endpoint, apiBindings);
341
335
  const batchResult = analyzeBatchResults(results);
342
336
  if (batchResult.outcome !== "all_success") {
343
337
  console.error(`Set binding: ${batchResult.message}`);
@@ -357,10 +351,19 @@ let NodeBindingDialog = class extends i$1 {
357
351
  }
358
352
  }
359
353
  async addBindingHandler() {
360
- const targetNodeId = this._targetNodeId.value ? parseInt(this._targetNodeId.value, 10) : void 0;
354
+ var _this$_targetNodeId$v;
355
+ let targetNodeId;
356
+ const rawNodeId = (_this$_targetNodeId$v = this._targetNodeId.value) === null || _this$_targetNodeId$v === void 0 ? void 0 : _this$_targetNodeId$v.trim();
357
+ if (rawNodeId) {
358
+ if (!/^\d+$/.test(rawNodeId)) {
359
+ alert("Please enter a valid target node ID");
360
+ return;
361
+ }
362
+ targetNodeId = BigInt(rawNodeId);
363
+ }
361
364
  const targetEndpoint = this._targetEndpoint.value ? parseInt(this._targetEndpoint.value, 10) : void 0;
362
365
  const targetCluster = this._targetCluster.value ? parseInt(this._targetCluster.value, 10) : void 0;
363
- if (targetNodeId === void 0 || targetNodeId <= 0 || targetNodeId > 65535) {
366
+ if (targetNodeId === void 0 || targetNodeId <= 0n) {
364
367
  alert("Please enter a valid target node ID");
365
368
  return;
366
369
  }
@@ -382,7 +385,7 @@ let NodeBindingDialog = class extends i$1 {
382
385
  const acl_entry = {
383
386
  privilege: 5,
384
387
  authMode: 2,
385
- subjects: [this.getNodeIdAsNumber()],
388
+ subjects: [this.node.node_id],
386
389
  targets: [targets],
387
390
  fabricIndex: 0
388
391
  // Placeholder - server will use correct fabric index
@@ -429,12 +432,19 @@ ${bindingResult.message}`);
429
432
  }
430
433
  onChange(e) {
431
434
  const textfield = e.target;
432
- const value = parseInt(textfield.value, 10);
433
- if (parseInt(textfield.max, 10) < value || value < parseInt(textfield.min, 10)) {
434
- textfield.error = true;
435
- textfield.errorText = "value error";
435
+ if (textfield.type === "number" && textfield.max && textfield.min) {
436
+ const value = parseInt(textfield.value, 10);
437
+ if (parseInt(textfield.max, 10) < value || value < parseInt(textfield.min, 10)) {
438
+ textfield.error = true;
439
+ textfield.errorText = "value error";
440
+ } else {
441
+ textfield.error = false;
442
+ }
436
443
  } else {
437
- textfield.error = false;
444
+ textfield.error = textfield.value !== "" && !/^[0-9]+$/.test(textfield.value);
445
+ if (textfield.error) {
446
+ textfield.errorText = "must be a numeric value";
447
+ }
438
448
  }
439
449
  }
440
450
  render() {
@@ -469,9 +479,8 @@ ${bindingResult.message}`);
469
479
  <md-outlined-text-field
470
480
  label="node id"
471
481
  name="NodeId"
472
- type="number"
473
- min="0"
474
- max="65535"
482
+ type="text"
483
+ pattern="[0-9]+"
475
484
  class="target-item"
476
485
  @change=${this.onChange}
477
486
  supporting-text="required"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter-server/dashboard",
3
- "version": "0.5.6",
3
+ "version": "0.5.8",
4
4
  "description": "Dashboard for OHF Matter Server",
5
5
  "bugs": {
6
6
  "url": "https://github.com/matter-js/matterjs-server/issues"
@@ -22,23 +22,23 @@
22
22
  "bundle": "rollup -c"
23
23
  },
24
24
  "devDependencies": {
25
- "@babel/preset-env": "^7.29.0",
26
- "@matter/main": "0.17.0-alpha.0-20260312-920b3a4ec",
25
+ "@babel/preset-env": "^7.29.2",
26
+ "@matter/main": "0.17.0-alpha.0-20260326-42b6f59b7",
27
27
  "@rollup/plugin-babel": "^7.0.0",
28
28
  "@rollup/plugin-commonjs": "^29.0.2",
29
29
  "rollup-plugin-copy": "^3.5.0",
30
30
  "@rollup/plugin-json": "^6.1.0",
31
31
  "@rollup/plugin-node-resolve": "^16.0.3",
32
- "@rollup/plugin-terser": "^0.4.4",
32
+ "@rollup/plugin-terser": "^1.0.0",
33
33
  "@rollup/plugin-typescript": "^12.3.0",
34
- "rollup": "^4.59.0",
34
+ "rollup": "^4.60.0",
35
35
  "serve": "^14.2.6"
36
36
  },
37
37
  "dependencies": {
38
38
  "@lit/context": "^1.1.6",
39
39
  "@material/web": "^2.4.1",
40
- "@matter-server/ws-client": "0.5.6",
41
- "@matter-server/custom-clusters": "0.5.6",
40
+ "@matter-server/ws-client": "0.5.8",
41
+ "@matter-server/custom-clusters": "0.5.8",
42
42
  "@mdi/js": "^7.4.47",
43
43
  "lit": "^3.3.2",
44
44
  "tslib": "^2.8.1",
@@ -13,7 +13,7 @@ export type AccessControlTargetStruct = {
13
13
  export type AccessControlEntryRawInput = {
14
14
  "1": number;
15
15
  "2": number;
16
- "3": number[];
16
+ "3": (number | bigint)[];
17
17
  "4": AccessControlTargetStruct[] | undefined;
18
18
  "254": number;
19
19
  };
@@ -9,7 +9,7 @@ export type InputType = {
9
9
  };
10
10
 
11
11
  export interface BindingEntryStruct {
12
- node: number | undefined;
12
+ node: number | bigint | undefined;
13
13
  group: number | undefined;
14
14
  endpoint: number | undefined;
15
15
  cluster: number | undefined;
@@ -21,6 +21,7 @@ export class BindingEntryDataTransformer {
21
21
  [inputKey: string]: keyof BindingEntryStruct;
22
22
  } = {
23
23
  "1": "node",
24
+ "2": "group",
24
25
  "3": "endpoint",
25
26
  "4": "cluster",
26
27
  "254": "fabricIndex",
@@ -42,12 +43,12 @@ export class BindingEntryDataTransformer {
42
43
  if (value === undefined) {
43
44
  continue;
44
45
  }
45
- if (mappedKey === "fabricIndex") {
46
- result[mappedKey] = value === undefined ? undefined : Number(value);
47
- } else if (mappedKey === "node" || mappedKey === "endpoint") {
48
- result[mappedKey] = Number(value);
46
+ if (mappedKey === "node") {
47
+ // Node IDs can be bigint - preserve the original type
48
+ result[mappedKey] = value;
49
49
  } else {
50
- result[mappedKey] = value as BindingEntryStruct[typeof mappedKey];
50
+ // group, endpoint, cluster, fabricIndex are all numeric
51
+ result[mappedKey] = Number(value);
51
52
  }
52
53
  }
53
54
  }
@@ -54,8 +54,10 @@ export class NodeBindingDialog extends LitElement {
54
54
  return Object.values(bindings_raw).map(value => BindingEntryDataTransformer.transform(value));
55
55
  }
56
56
 
57
- private fetchACLEntry(targetNodeId: number): AccessControlEntryStruct[] {
58
- const acl_cluster_raw = this.client.nodes[targetNodeId]?.attributes["0/31/0"] as InputType[] | undefined;
57
+ private fetchACLEntry(targetNodeId: number | bigint): AccessControlEntryStruct[] {
58
+ const acl_cluster_raw = this.client.nodes[String(targetNodeId)]?.attributes["0/31/0"] as
59
+ | InputType[]
60
+ | undefined;
59
61
  if (!acl_cluster_raw) return [];
60
62
  return Object.values(acl_cluster_raw).map((value: InputType) =>
61
63
  AccessControlEntryDataTransformer.transform(value),
@@ -68,7 +70,7 @@ export class NodeBindingDialog extends LitElement {
68
70
  const targetNodeId = rawBindings[index].node;
69
71
  const endpoint = rawBindings[index].endpoint;
70
72
  if (targetNodeId === undefined || endpoint === undefined) return;
71
- await this.removeNodeAtACLEntry(this.getNodeIdAsNumber(), endpoint, targetNodeId);
73
+ await this.removeNodeAtACLEntry(this.node!.node_id, endpoint, targetNodeId);
72
74
  const updatedBindings = this.removeBindingAtIndex(rawBindings, index);
73
75
  await this.syncBindingUpdates(updatedBindings, index);
74
76
  } catch (error) {
@@ -76,16 +78,10 @@ export class NodeBindingDialog extends LitElement {
76
78
  }
77
79
  }
78
80
 
79
- /** Helper to convert node_id (number | bigint) to number for API calls */
80
- private getNodeIdAsNumber(): number {
81
- const nodeId = this.node!.node_id;
82
- return typeof nodeId === "bigint" ? Number(nodeId) : nodeId;
83
- }
84
-
85
81
  private async removeNodeAtACLEntry(
86
- sourceNodeId: number,
82
+ sourceNodeId: number | bigint,
87
83
  sourceEndpoint: number,
88
- targetNodeId: number,
84
+ targetNodeId: number | bigint,
89
85
  ): Promise<void> {
90
86
  const aclEntries = this.fetchACLEntry(targetNodeId);
91
87
 
@@ -99,7 +95,7 @@ export class NodeBindingDialog extends LitElement {
99
95
  }
100
96
 
101
97
  private removeEntryAtACL(
102
- nodeId: number,
98
+ nodeId: number | bigint,
103
99
  sourceEndpoint: number,
104
100
  entry: AccessControlEntryStruct,
105
101
  ): AccessControlEntryStruct | undefined {
@@ -117,7 +113,7 @@ export class NodeBindingDialog extends LitElement {
117
113
  private async syncBindingUpdates(updatedBindings: BindingEntryStruct[], index: number): Promise<void> {
118
114
  // Convert to API format (without fabricIndex - server handles it)
119
115
  const apiBindings = updatedBindings.map(b => this.toBindingTarget(b));
120
- await this.client.setNodeBinding(this.getNodeIdAsNumber(), this.endpoint, apiBindings);
116
+ await this.client.setNodeBinding(this.node!.node_id, this.endpoint, apiBindings);
121
117
 
122
118
  const attributePath = `${this.endpoint}/30/0`;
123
119
  const currentBindings = this.node!.attributes[attributePath] as BindingEntryStruct[] | undefined;
@@ -135,10 +131,13 @@ export class NodeBindingDialog extends LitElement {
135
131
  console.error(`Binding deletion failed: ${errorMessage}`);
136
132
  }
137
133
 
138
- private async add_target_acl(targetNodeId: number, entry: AccessControlEntryStruct): Promise<MatterBatchResult> {
134
+ private async add_target_acl(
135
+ targetNodeId: number | bigint,
136
+ entry: AccessControlEntryStruct,
137
+ ): Promise<MatterBatchResult> {
139
138
  try {
140
139
  // Fetch existing ACL entries and transform to local struct format
141
- const rawEntries = this.client.nodes[targetNodeId]?.attributes["0/31/0"] as InputType[] | undefined;
140
+ const rawEntries = this.client.nodes[String(targetNodeId)]?.attributes["0/31/0"] as InputType[] | undefined;
142
141
  const entries = rawEntries
143
142
  ? Object.values(rawEntries).map(v => AccessControlEntryDataTransformer.transform(v))
144
143
  : [];
@@ -196,7 +195,7 @@ export class NodeBindingDialog extends LitElement {
196
195
  try {
197
196
  // Convert to API format (without fabricIndex - server handles it)
198
197
  const apiBindings = bindings.map(b => this.toBindingTarget(b));
199
- const results = await this.client.setNodeBinding(this.getNodeIdAsNumber(), endpoint, apiBindings);
198
+ const results = await this.client.setNodeBinding(this.node!.node_id, endpoint, apiBindings);
200
199
 
201
200
  const batchResult = analyzeBatchResults(results);
202
201
  if (batchResult.outcome !== "all_success") {
@@ -216,12 +215,19 @@ export class NodeBindingDialog extends LitElement {
216
215
  }
217
216
 
218
217
  async addBindingHandler() {
219
- const targetNodeId = this._targetNodeId.value ? parseInt(this._targetNodeId.value, 10) : undefined;
218
+ let targetNodeId: bigint | undefined;
219
+ const rawNodeId = this._targetNodeId.value?.trim();
220
+ if (rawNodeId) {
221
+ if (!/^\d+$/.test(rawNodeId)) {
222
+ alert("Please enter a valid target node ID");
223
+ return;
224
+ }
225
+ targetNodeId = BigInt(rawNodeId);
226
+ }
220
227
  const targetEndpoint = this._targetEndpoint.value ? parseInt(this._targetEndpoint.value, 10) : undefined;
221
228
  const targetCluster = this._targetCluster.value ? parseInt(this._targetCluster.value, 10) : undefined;
222
229
 
223
- // Matter Server does not use random NodeIds, so this is ok for now, but needs to be adjusted later
224
- if (targetNodeId === undefined || targetNodeId <= 0 || targetNodeId > 65535) {
230
+ if (targetNodeId === undefined || targetNodeId <= 0n) {
225
231
  alert("Please enter a valid target node ID");
226
232
  return;
227
233
  }
@@ -250,7 +256,7 @@ export class NodeBindingDialog extends LitElement {
250
256
  const acl_entry: AccessControlEntryStruct = {
251
257
  privilege: 5,
252
258
  authMode: 2,
253
- subjects: [this.getNodeIdAsNumber()],
259
+ subjects: [this.node!.node_id],
254
260
  targets: [targets],
255
261
  fabricIndex: 0, // Placeholder - server will use correct fabric index
256
262
  };
@@ -300,16 +306,21 @@ export class NodeBindingDialog extends LitElement {
300
306
 
301
307
  private onChange(e: Event) {
302
308
  const textfield = e.target as MdOutlinedTextField;
303
- const value = parseInt(textfield.value, 10);
304
-
305
- if (parseInt(textfield.max, 10) < value || value < parseInt(textfield.min, 10)) {
306
- textfield.error = true;
307
- textfield.errorText = "value error";
309
+ if (textfield.type === "number" && textfield.max && textfield.min) {
310
+ const value = parseInt(textfield.value, 10);
311
+ if (parseInt(textfield.max, 10) < value || value < parseInt(textfield.min, 10)) {
312
+ textfield.error = true;
313
+ textfield.errorText = "value error";
314
+ } else {
315
+ textfield.error = false;
316
+ }
308
317
  } else {
309
- textfield.error = false;
318
+ // Text field with pattern validation (e.g. node ID)
319
+ textfield.error = textfield.value !== "" && !/^[0-9]+$/.test(textfield.value);
320
+ if (textfield.error) {
321
+ textfield.errorText = "must be a numeric value";
322
+ }
310
323
  }
311
-
312
- // console.log(`value: ${value} error: ${textfield.error}`);
313
324
  }
314
325
 
315
326
  protected override render() {
@@ -349,9 +360,8 @@ export class NodeBindingDialog extends LitElement {
349
360
  <md-outlined-text-field
350
361
  label="node id"
351
362
  name="NodeId"
352
- type="number"
353
- min="0"
354
- max="65535"
363
+ type="text"
364
+ pattern="[0-9]+"
355
365
  class="target-item"
356
366
  @change=${this.onChange}
357
367
  supporting-text="required"
@@ -27,7 +27,7 @@ export class DevicePanel extends LitElement {
27
27
  public type: PanelType = "wifi";
28
28
 
29
29
  @property({ type: Array })
30
- public nodeIds: number[] = [];
30
+ public nodeIds: (number | bigint)[] = [];
31
31
 
32
32
  @property({ type: Object })
33
33
  public nodes: Record<string, MatterNode> = {};
@@ -70,7 +70,7 @@ export class DevicePanel extends LitElement {
70
70
  this._isExpanded = !this._isExpanded;
71
71
  }
72
72
 
73
- private _handleNodeClick(nodeId: number): void {
73
+ private _handleNodeClick(nodeId: number | bigint): void {
74
74
  this.dispatchEvent(
75
75
  new CustomEvent("node-selected", {
76
76
  detail: { nodeId },