@matter-server/dashboard 0.5.7 → 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.
- package/dist/esm/components/dialogs/acl/model.d.ts +1 -1
- package/dist/esm/components/dialogs/acl/model.d.ts.map +1 -1
- package/dist/esm/components/dialogs/binding/model.d.ts +1 -1
- package/dist/esm/components/dialogs/binding/model.d.ts.map +1 -1
- package/dist/esm/components/dialogs/binding/model.js +4 -5
- package/dist/esm/components/dialogs/binding/model.js.map +1 -1
- package/dist/esm/components/dialogs/binding/node-binding-dialog.d.ts +0 -2
- package/dist/esm/components/dialogs/binding/node-binding-dialog.d.ts.map +1 -1
- package/dist/esm/components/dialogs/binding/node-binding-dialog.js +30 -21
- package/dist/esm/components/dialogs/binding/node-binding-dialog.js.map +1 -1
- package/dist/esm/pages/network/device-panel.d.ts +1 -1
- package/dist/esm/pages/network/device-panel.d.ts.map +1 -1
- package/dist/esm/pages/network/device-panel.js.map +1 -1
- package/dist/web/js/{commission-node-dialog-BHKkNVcj.js → commission-node-dialog-B8btRo-u.js} +4 -4
- package/dist/web/js/{commission-node-existing-Bh-9N-xZ.js → commission-node-existing-DV3Mdryb.js} +2 -2
- package/dist/web/js/{commission-node-thread-DxT2sLWw.js → commission-node-thread-CRmXG-l7.js} +2 -2
- package/dist/web/js/{commission-node-wifi-R6LeozCS.js → commission-node-wifi-B9czrkgM.js} +2 -2
- package/dist/web/js/{dialog-box-yU3Oc-AR.js → dialog-box-D1T172PR.js} +1 -1
- package/dist/web/js/{fire_event-ZsNu_mOn.js → fire_event-CpzR8zJR.js} +1 -1
- package/dist/web/js/{log-level-dialog-Bpt-9T42.js → log-level-dialog-Dlvacuei.js} +1 -1
- package/dist/web/js/main.js +7 -4
- package/dist/web/js/{matter-dashboard-app-D9iOhimm.js → matter-dashboard-app-CJAvDfru.js} +4 -4
- package/dist/web/js/{node-binding-dialog-DnwW3RpY.js → node-binding-dialog-CTsnRoFC.js} +38 -29
- package/package.json +7 -7
- package/src/components/dialogs/acl/model.ts +1 -1
- package/src/components/dialogs/binding/model.ts +7 -6
- package/src/components/dialogs/binding/node-binding-dialog.ts +41 -31
- package/src/pages/network/device-panel.ts +2 -2
|
@@ -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;
|
|
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;
|
|
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 === "
|
|
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,
|
|
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;
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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 <=
|
|
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.
|
|
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
|
-
|
|
236
|
-
|
|
237
|
-
textfield.
|
|
238
|
-
|
|
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 =
|
|
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="
|
|
278
|
-
|
|
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,
|
|
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,cAA2D;AAC7E,UAAM,kBAAkB,KAAK,OAAO,MAAM,OAAO,YAAY,CAAC,GAAG,WAAW,QAAQ;AAGpF,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,KAAM,SAAS,UAAU,YAAY;AAC1E,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,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,KAAM,SAAS,KAAK,UAAU,WAAW;AAE/E,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,eACV,cACA,OAC0B;AAC1B,QAAI;AAEA,YAAM,aAAa,KAAK,OAAO,MAAM,OAAO,YAAY,CAAC,GAAG,WAAW,QAAQ;AAC/E,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,KAAM,SAAS,UAAU,WAAW;AAE1F,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,QAAI;AACJ,UAAM,YAAY,KAAK,cAAc,OAAO,KAAK;AACjD,QAAI,WAAW;AACX,UAAI,CAAC,QAAQ,KAAK,SAAS,GAAG;AAC1B,cAAM,qCAAqC;AAC3C;AAAA,MACJ;AACA,qBAAe,OAAO,SAAS;AAAA,IACnC;AACA,UAAM,iBAAiB,KAAK,gBAAgB,QAAQ,SAAS,KAAK,gBAAgB,OAAO,EAAE,IAAI;AAC/F,UAAM,gBAAgB,KAAK,eAAe,QAAQ,SAAS,KAAK,eAAe,OAAO,EAAE,IAAI;AAE5F,QAAI,iBAAiB,UAAa,gBAAgB,IAAI;AAClD,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,KAAM,OAAO;AAAA,MAC7B,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,QAAI,UAAU,SAAS,YAAY,UAAU,OAAO,UAAU,KAAK;AAC/D,YAAM,QAAQ,SAAS,UAAU,OAAO,EAAE;AAC1C,UAAI,SAAS,UAAU,KAAK,EAAE,IAAI,SAAS,QAAQ,SAAS,UAAU,KAAK,EAAE,GAAG;AAC5E,kBAAU,QAAQ;AAClB,kBAAU,YAAY;AAAA,MAC1B,OAAO;AACH,kBAAU,QAAQ;AAAA,MACtB;AAAA,IACJ,OAAO;AAEH,gBAAU,QAAQ,UAAU,UAAU,MAAM,CAAC,WAAW,KAAK,UAAU,KAAK;AAC5E,UAAI,UAAU,OAAO;AACjB,kBAAU,YAAY;AAAA,MAC1B;AAAA,IACJ;AAAA,EACJ;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,8CAWiB,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;AAlaa,kBA2XO,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;AAxXlB;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;",
|
|
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;
|
|
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": ";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,OAAO;AACP,OAAO;AAEP,SAAS,gBAAgB,iBAAiB,aAAa,WAAW,eAAe;AACjF,SAAS,YAAY,KAAK,MAAM,eAAe;AAC/C,SAAS,eAAe,UAAU,aAAa;AAC/C,OAAO;AACP,SAAS,qBAAqB;AAWvB,IAAM,cAAN,cAA0B,WAAW;AAAA,EAArC;AAAA;AAEH,SAAO,OAAkB;AAGzB,SAAO,
|
|
4
|
+
"mappings": ";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,OAAO;AACP,OAAO;AAEP,SAAS,gBAAgB,iBAAiB,aAAa,WAAW,eAAe;AACjF,SAAS,YAAY,KAAK,MAAM,eAAe;AAC/C,SAAS,eAAe,UAAU,aAAa;AAC/C,OAAO;AACP,SAAS,qBAAqB;AAWvB,IAAM,cAAN,cAA0B,WAAW;AAAA,EAArC;AAAA;AAEH,SAAO,OAAkB;AAGzB,SAAO,UAA+B,CAAC;AAGvC,SAAO,QAAoC,CAAC;AAG5C,SAAO,WAAW;AAGlB,SAAQ,cAAc;AAAA;AAAA,EAEb,WAAW,mBAA+C;AAC/D,QAAI,kBAAkB,IAAI,UAAU,GAAG;AACnC,WAAK,cAAc,KAAK;AAAA,IAC5B;AAAA,EACJ;AAAA,EAEQ,WAAmB;AACvB,YAAQ,KAAK,MAAM;AAAA,MACf,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,IACf;AAAA,EACJ;AAAA,EAEQ,YAAoB;AACxB,YAAQ,KAAK,MAAM;AAAA,MACf,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,IACf;AAAA,EACJ;AAAA,EAEQ,kBAAwB;AAC5B,SAAK,cAAc,CAAC,KAAK;AAAA,EAC7B;AAAA,EAEQ,iBAAiB,QAA+B;AACpD,SAAK;AAAA,MACD,IAAI,YAAY,iBAAiB;AAAA,QAC7B,QAAQ,EAAE,OAAO;AAAA,QACjB,SAAS;AAAA,QACT,UAAU;AAAA,MACd,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EAES,SAAS;AACd,QAAI,KAAK,QAAQ,WAAW,GAAG;AAC3B,aAAO;AAAA,IACX;AAEA,WAAO;AAAA;AAAA,6CAE8B,KAAK,eAAe;AAAA,yCACxB,KAAK,SAAS,CAAC;AAAA,0CACd,KAAK,UAAU,CAAC;AAAA,2CACf,KAAK,QAAQ,MAAM;AAAA;AAAA,gCAE9B,KAAK,cAAc,iBAAiB,eAAe;AAAA;AAAA;AAAA;AAAA,kBAK/D,KAAK,cACC;AAAA;AAAA,gCAEM,KAAK,QAAQ,IAAI,YAAU;AACzB,YAAM,OAAO,KAAK,MAAM,OAAO,SAAS,CAAC;AACzC,UAAI,CAAC,KAAM,QAAO;AAElB,aAAO;AAAA,2EACkC,MAAM,KAAK,iBAAiB,MAAM,CAAC;AAAA,sEACxC,MAAM;AAAA,wEACJ,cAAc,IAAI,CAAC;AAAA,0EACjB,eAAe;AAAA;AAAA;AAAA,IAG3D,CAAC,CAAC;AAAA;AAAA,0BAGN,OACV;AAAA;AAAA;AAAA,EAGZ;AA6DJ;AA7Ja,YAkGO,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhGlB;AAAA,EADN,SAAS;AAAA,GADD,YAEF;AAGA;AAAA,EADN,SAAS,EAAE,MAAM,MAAM,CAAC;AAAA,GAJhB,YAKF;AAGA;AAAA,EADN,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAPjB,YAQF;AAGA;AAAA,EADN,SAAS,EAAE,MAAM,QAAQ,CAAC;AAAA,GAVlB,YAWF;AAGC;AAAA,EADP,MAAM;AAAA,GAbE,YAcD;AAdC,cAAN;AAAA,EADN,cAAc,cAAc;AAAA,GAChB;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/dist/web/js/{commission-node-dialog-BHKkNVcj.js → commission-node-dialog-B8btRo-u.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r, n, t, i, j as b } from './matter-dashboard-app-
|
|
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-
|
|
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-
|
|
60
|
+
import('./commission-node-thread-CRmXG-l7.js');
|
|
61
61
|
this._mode = "thread";
|
|
62
62
|
}
|
|
63
63
|
_commissionExisting() {
|
|
64
|
-
import('./commission-node-existing-
|
|
64
|
+
import('./commission-node-existing-DV3Mdryb.js');
|
|
65
65
|
this._mode = "existing";
|
|
66
66
|
}
|
|
67
67
|
_nodeCommissioned(ev) {
|
package/dist/web/js/{commission-node-existing-Bh-9N-xZ.js → commission-node-existing-DV3Mdryb.js}
RENAMED
|
@@ -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-
|
|
2
|
-
import { f as fireEvent } from './fire_event-
|
|
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;
|
package/dist/web/js/{commission-node-thread-DxT2sLWw.js → commission-node-thread-CRmXG-l7.js}
RENAMED
|
@@ -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-
|
|
2
|
-
import { f as fireEvent } from './fire_event-
|
|
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-
|
|
2
|
-
import { f as fireEvent } from './fire_event-
|
|
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 { m as mixinDelegatesAria, i, _ as __decorate, n, A, f as e, j as b, k as i$1, t } from './matter-dashboard-app-
|
|
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-
|
|
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
|
|
package/dist/web/js/main.js
CHANGED
|
@@ -318,10 +318,11 @@ class MatterClient {
|
|
|
318
318
|
};
|
|
319
319
|
}
|
|
320
320
|
async commissionWithCode(code, networkOnly = true, timeout) {
|
|
321
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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 === "
|
|
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$
|
|
233
|
-
const acl_cluster_raw = (_this$client$nodes$
|
|
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.
|
|
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.
|
|
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$
|
|
289
|
-
const rawEntries = (_this$client$nodes$
|
|
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.
|
|
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
|
-
|
|
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 <=
|
|
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.
|
|
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
|
-
|
|
433
|
-
|
|
434
|
-
textfield.
|
|
435
|
-
|
|
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 =
|
|
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="
|
|
473
|
-
|
|
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.
|
|
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.
|
|
26
|
-
"@matter/main": "0.17.0-alpha.0-
|
|
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.
|
|
32
|
+
"@rollup/plugin-terser": "^1.0.0",
|
|
33
33
|
"@rollup/plugin-typescript": "^12.3.0",
|
|
34
|
-
"rollup": "^4.
|
|
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.
|
|
41
|
-
"@matter-server/custom-clusters": "0.5.
|
|
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",
|
|
@@ -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 === "
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
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
|
|
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.
|
|
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.
|
|
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(
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
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
|
-
|
|
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="
|
|
353
|
-
|
|
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 },
|