@matter/node 0.14.0 → 0.14.1-alpha.0-20250606-a9bcd03f9

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 (178) hide show
  1. package/dist/cjs/behavior/Behavior.d.ts +2 -1
  2. package/dist/cjs/behavior/Behavior.d.ts.map +1 -1
  3. package/dist/cjs/behavior/Behavior.js +1 -1
  4. package/dist/cjs/behavior/Behavior.js.map +1 -1
  5. package/dist/cjs/behavior/Transitions.js +2 -2
  6. package/dist/cjs/behavior/Transitions.js.map +1 -1
  7. package/dist/cjs/behavior/context/server/OnlineContext.d.ts +3 -3
  8. package/dist/cjs/behavior/context/server/OnlineContext.d.ts.map +1 -1
  9. package/dist/cjs/behavior/context/server/OnlineContext.js +12 -9
  10. package/dist/cjs/behavior/context/server/OnlineContext.js.map +1 -1
  11. package/dist/cjs/behavior/internal/ClientBehaviorBacking.d.ts +2 -1
  12. package/dist/cjs/behavior/internal/ClientBehaviorBacking.d.ts.map +1 -1
  13. package/dist/cjs/behavior/internal/ClientBehaviorBacking.js.map +1 -1
  14. package/dist/cjs/behavior/system/network/NetworkBehavior.d.ts.map +1 -1
  15. package/dist/cjs/behavior/system/network/NetworkBehavior.js +2 -1
  16. package/dist/cjs/behavior/system/network/NetworkBehavior.js.map +1 -1
  17. package/dist/cjs/behavior/system/network/ServerGroupNetworking.d.ts +18 -0
  18. package/dist/cjs/behavior/system/network/ServerGroupNetworking.d.ts.map +1 -0
  19. package/dist/cjs/behavior/system/network/ServerGroupNetworking.js +150 -0
  20. package/dist/cjs/behavior/system/network/ServerGroupNetworking.js.map +6 -0
  21. package/dist/cjs/behavior/system/network/ServerNetworkRuntime.d.ts.map +1 -1
  22. package/dist/cjs/behavior/system/network/ServerNetworkRuntime.js +25 -7
  23. package/dist/cjs/behavior/system/network/ServerNetworkRuntime.js.map +1 -1
  24. package/dist/cjs/behavior/system/sessions/SessionsBehavior.d.ts.map +1 -1
  25. package/dist/cjs/behavior/system/sessions/SessionsBehavior.js.map +1 -1
  26. package/dist/cjs/behaviors/access-control/AccessControlServer.d.ts.map +1 -1
  27. package/dist/cjs/behaviors/access-control/AccessControlServer.js +18 -12
  28. package/dist/cjs/behaviors/access-control/AccessControlServer.js.map +1 -1
  29. package/dist/cjs/behaviors/color-control/ColorControlServer.d.ts +4 -4
  30. package/dist/cjs/behaviors/color-control/ColorControlServer.d.ts.map +1 -1
  31. package/dist/cjs/behaviors/color-control/ColorControlServer.js +3 -3
  32. package/dist/cjs/behaviors/color-control/ColorControlServer.js.map +1 -1
  33. package/dist/cjs/behaviors/general-commissioning/GeneralCommissioningServer.d.ts.map +1 -1
  34. package/dist/cjs/behaviors/general-commissioning/GeneralCommissioningServer.js +5 -4
  35. package/dist/cjs/behaviors/general-commissioning/GeneralCommissioningServer.js.map +1 -1
  36. package/dist/cjs/behaviors/general-commissioning/ServerNodeFailsafeContext.d.ts +1 -1
  37. package/dist/cjs/behaviors/general-commissioning/ServerNodeFailsafeContext.d.ts.map +1 -1
  38. package/dist/cjs/behaviors/group-key-management/GroupKeyManagementServer.d.ts +27 -4
  39. package/dist/cjs/behaviors/group-key-management/GroupKeyManagementServer.d.ts.map +1 -1
  40. package/dist/cjs/behaviors/group-key-management/GroupKeyManagementServer.js +340 -21
  41. package/dist/cjs/behaviors/group-key-management/GroupKeyManagementServer.js.map +2 -2
  42. package/dist/cjs/behaviors/groups/GroupsServer.d.ts +19 -3
  43. package/dist/cjs/behaviors/groups/GroupsServer.d.ts.map +1 -1
  44. package/dist/cjs/behaviors/groups/GroupsServer.js +138 -1
  45. package/dist/cjs/behaviors/groups/GroupsServer.js.map +2 -2
  46. package/dist/cjs/behaviors/level-control/LevelControlServer.d.ts +5 -5
  47. package/dist/cjs/behaviors/level-control/LevelControlServer.d.ts.map +1 -1
  48. package/dist/cjs/behaviors/level-control/LevelControlServer.js +3 -3
  49. package/dist/cjs/behaviors/level-control/LevelControlServer.js.map +1 -1
  50. package/dist/cjs/behaviors/mode-select/ModeSelectServer.d.ts.map +1 -1
  51. package/dist/cjs/behaviors/mode-select/ModeSelectServer.js +3 -3
  52. package/dist/cjs/behaviors/mode-select/ModeSelectServer.js.map +1 -1
  53. package/dist/cjs/behaviors/on-off/OnOffServer.d.ts.map +1 -1
  54. package/dist/cjs/behaviors/on-off/OnOffServer.js +3 -3
  55. package/dist/cjs/behaviors/on-off/OnOffServer.js.map +1 -1
  56. package/dist/cjs/behaviors/operational-credentials/OperationalCredentialsServer.d.ts.map +1 -1
  57. package/dist/cjs/behaviors/operational-credentials/OperationalCredentialsServer.js +14 -8
  58. package/dist/cjs/behaviors/operational-credentials/OperationalCredentialsServer.js.map +1 -1
  59. package/dist/cjs/endpoint/Endpoint.js +1 -1
  60. package/dist/cjs/endpoint/Endpoint.js.map +1 -1
  61. package/dist/cjs/node/Node.d.ts +1 -1
  62. package/dist/cjs/node/Node.d.ts.map +1 -1
  63. package/dist/cjs/node/Node.js +2 -2
  64. package/dist/cjs/node/Node.js.map +1 -1
  65. package/dist/cjs/node/ServerNode.d.ts +1 -1
  66. package/dist/cjs/node/ServerNode.d.ts.map +1 -1
  67. package/dist/cjs/node/ServerNode.js +2 -2
  68. package/dist/cjs/node/ServerNode.js.map +1 -1
  69. package/dist/cjs/node/client/NodePeerAddressStore.d.ts +1 -1
  70. package/dist/cjs/node/client/NodePeerAddressStore.d.ts.map +1 -1
  71. package/dist/cjs/node/server/InteractionServer.d.ts +2 -2
  72. package/dist/cjs/node/server/InteractionServer.d.ts.map +1 -1
  73. package/dist/cjs/node/server/InteractionServer.js +1 -1
  74. package/dist/cjs/node/server/InteractionServer.js.map +1 -1
  75. package/dist/cjs/node/server/ServerSubscription.d.ts +4 -4
  76. package/dist/cjs/node/server/ServerSubscription.d.ts.map +1 -1
  77. package/dist/cjs/node/server/ServerSubscription.js.map +1 -1
  78. package/dist/esm/behavior/Behavior.d.ts +2 -1
  79. package/dist/esm/behavior/Behavior.d.ts.map +1 -1
  80. package/dist/esm/behavior/Behavior.js +2 -2
  81. package/dist/esm/behavior/Behavior.js.map +1 -1
  82. package/dist/esm/behavior/Transitions.js +1 -1
  83. package/dist/esm/behavior/context/server/OnlineContext.d.ts +3 -3
  84. package/dist/esm/behavior/context/server/OnlineContext.d.ts.map +1 -1
  85. package/dist/esm/behavior/context/server/OnlineContext.js +13 -10
  86. package/dist/esm/behavior/context/server/OnlineContext.js.map +1 -1
  87. package/dist/esm/behavior/internal/ClientBehaviorBacking.d.ts +2 -1
  88. package/dist/esm/behavior/internal/ClientBehaviorBacking.d.ts.map +1 -1
  89. package/dist/esm/behavior/internal/ClientBehaviorBacking.js.map +1 -1
  90. package/dist/esm/behavior/system/network/NetworkBehavior.d.ts.map +1 -1
  91. package/dist/esm/behavior/system/network/NetworkBehavior.js +2 -1
  92. package/dist/esm/behavior/system/network/NetworkBehavior.js.map +1 -1
  93. package/dist/esm/behavior/system/network/ServerGroupNetworking.d.ts +18 -0
  94. package/dist/esm/behavior/system/network/ServerGroupNetworking.d.ts.map +1 -0
  95. package/dist/esm/behavior/system/network/ServerGroupNetworking.js +130 -0
  96. package/dist/esm/behavior/system/network/ServerGroupNetworking.js.map +6 -0
  97. package/dist/esm/behavior/system/network/ServerNetworkRuntime.d.ts.map +1 -1
  98. package/dist/esm/behavior/system/network/ServerNetworkRuntime.js +23 -5
  99. package/dist/esm/behavior/system/network/ServerNetworkRuntime.js.map +1 -1
  100. package/dist/esm/behavior/system/sessions/SessionsBehavior.d.ts.map +1 -1
  101. package/dist/esm/behavior/system/sessions/SessionsBehavior.js.map +1 -1
  102. package/dist/esm/behaviors/access-control/AccessControlServer.d.ts.map +1 -1
  103. package/dist/esm/behaviors/access-control/AccessControlServer.js +20 -13
  104. package/dist/esm/behaviors/access-control/AccessControlServer.js.map +1 -1
  105. package/dist/esm/behaviors/color-control/ColorControlServer.d.ts +4 -4
  106. package/dist/esm/behaviors/color-control/ColorControlServer.d.ts.map +1 -1
  107. package/dist/esm/behaviors/color-control/ColorControlServer.js +3 -3
  108. package/dist/esm/behaviors/color-control/ColorControlServer.js.map +1 -1
  109. package/dist/esm/behaviors/general-commissioning/GeneralCommissioningServer.d.ts.map +1 -1
  110. package/dist/esm/behaviors/general-commissioning/GeneralCommissioningServer.js +6 -5
  111. package/dist/esm/behaviors/general-commissioning/GeneralCommissioningServer.js.map +1 -1
  112. package/dist/esm/behaviors/general-commissioning/ServerNodeFailsafeContext.d.ts +1 -1
  113. package/dist/esm/behaviors/general-commissioning/ServerNodeFailsafeContext.d.ts.map +1 -1
  114. package/dist/esm/behaviors/group-key-management/GroupKeyManagementServer.d.ts +27 -4
  115. package/dist/esm/behaviors/group-key-management/GroupKeyManagementServer.d.ts.map +1 -1
  116. package/dist/esm/behaviors/group-key-management/GroupKeyManagementServer.js +342 -23
  117. package/dist/esm/behaviors/group-key-management/GroupKeyManagementServer.js.map +2 -2
  118. package/dist/esm/behaviors/groups/GroupsServer.d.ts +19 -3
  119. package/dist/esm/behaviors/groups/GroupsServer.d.ts.map +1 -1
  120. package/dist/esm/behaviors/groups/GroupsServer.js +147 -1
  121. package/dist/esm/behaviors/groups/GroupsServer.js.map +1 -1
  122. package/dist/esm/behaviors/level-control/LevelControlServer.d.ts +5 -5
  123. package/dist/esm/behaviors/level-control/LevelControlServer.d.ts.map +1 -1
  124. package/dist/esm/behaviors/level-control/LevelControlServer.js +3 -3
  125. package/dist/esm/behaviors/level-control/LevelControlServer.js.map +1 -1
  126. package/dist/esm/behaviors/mode-select/ModeSelectServer.d.ts.map +1 -1
  127. package/dist/esm/behaviors/mode-select/ModeSelectServer.js +3 -3
  128. package/dist/esm/behaviors/mode-select/ModeSelectServer.js.map +1 -1
  129. package/dist/esm/behaviors/on-off/OnOffServer.d.ts.map +1 -1
  130. package/dist/esm/behaviors/on-off/OnOffServer.js +3 -3
  131. package/dist/esm/behaviors/on-off/OnOffServer.js.map +1 -1
  132. package/dist/esm/behaviors/operational-credentials/OperationalCredentialsServer.d.ts.map +1 -1
  133. package/dist/esm/behaviors/operational-credentials/OperationalCredentialsServer.js +15 -9
  134. package/dist/esm/behaviors/operational-credentials/OperationalCredentialsServer.js.map +1 -1
  135. package/dist/esm/endpoint/Endpoint.js +1 -1
  136. package/dist/esm/endpoint/Endpoint.js.map +1 -1
  137. package/dist/esm/node/Node.d.ts +1 -1
  138. package/dist/esm/node/Node.d.ts.map +1 -1
  139. package/dist/esm/node/Node.js +1 -1
  140. package/dist/esm/node/Node.js.map +1 -1
  141. package/dist/esm/node/ServerNode.d.ts +1 -1
  142. package/dist/esm/node/ServerNode.d.ts.map +1 -1
  143. package/dist/esm/node/ServerNode.js +1 -1
  144. package/dist/esm/node/client/NodePeerAddressStore.d.ts +1 -1
  145. package/dist/esm/node/client/NodePeerAddressStore.d.ts.map +1 -1
  146. package/dist/esm/node/server/InteractionServer.d.ts +2 -2
  147. package/dist/esm/node/server/InteractionServer.d.ts.map +1 -1
  148. package/dist/esm/node/server/InteractionServer.js +2 -2
  149. package/dist/esm/node/server/InteractionServer.js.map +1 -1
  150. package/dist/esm/node/server/ServerSubscription.d.ts +4 -4
  151. package/dist/esm/node/server/ServerSubscription.d.ts.map +1 -1
  152. package/dist/esm/node/server/ServerSubscription.js.map +1 -1
  153. package/package.json +7 -7
  154. package/src/behavior/Behavior.ts +2 -2
  155. package/src/behavior/Transitions.ts +1 -1
  156. package/src/behavior/context/server/OnlineContext.ts +21 -19
  157. package/src/behavior/internal/ClientBehaviorBacking.ts +2 -1
  158. package/src/behavior/system/commissioning/CommissioningClient.ts +1 -1
  159. package/src/behavior/system/network/NetworkBehavior.ts +2 -1
  160. package/src/behavior/system/network/ServerGroupNetworking.ts +150 -0
  161. package/src/behavior/system/network/ServerNetworkRuntime.ts +27 -5
  162. package/src/behavior/system/sessions/SessionsBehavior.ts +5 -5
  163. package/src/behaviors/access-control/AccessControlServer.ts +21 -14
  164. package/src/behaviors/color-control/ColorControlServer.ts +4 -4
  165. package/src/behaviors/general-commissioning/GeneralCommissioningServer.ts +8 -7
  166. package/src/behaviors/general-commissioning/ServerNodeFailsafeContext.ts +1 -1
  167. package/src/behaviors/group-key-management/GroupKeyManagementServer.ts +441 -26
  168. package/src/behaviors/groups/GroupsServer.ts +181 -3
  169. package/src/behaviors/level-control/LevelControlServer.ts +5 -5
  170. package/src/behaviors/mode-select/ModeSelectServer.ts +3 -3
  171. package/src/behaviors/on-off/OnOffServer.ts +3 -3
  172. package/src/behaviors/operational-credentials/OperationalCredentialsServer.ts +17 -9
  173. package/src/endpoint/Endpoint.ts +1 -1
  174. package/src/node/Node.ts +1 -1
  175. package/src/node/ServerNode.ts +1 -1
  176. package/src/node/client/NodePeerAddressStore.ts +1 -1
  177. package/src/node/server/InteractionServer.ts +5 -6
  178. package/src/node/server/ServerSubscription.ts +3 -4
@@ -4,11 +4,189 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- /*** THIS FILE WILL BE REGENERATED IF YOU DO NOT REMOVE THIS MESSAGE ***/
8
-
7
+ import { GroupKeyManagementServer } from "#behaviors/group-key-management";
8
+ import { IdentifyBehavior } from "#behaviors/identify";
9
+ import { Groups } from "#clusters/groups";
10
+ import { Endpoint } from "#endpoint/Endpoint.js";
11
+ import { RootEndpoint } from "#endpoints/root";
12
+ import { Logger } from "#general";
13
+ import { AccessLevel } from "#model";
14
+ import {
15
+ Command,
16
+ StatusCode,
17
+ StatusResponseError,
18
+ TlvField,
19
+ TlvGroupId,
20
+ TlvNoResponse,
21
+ TlvObject,
22
+ TlvString,
23
+ } from "#types";
24
+ import { InternalError } from "@matter/general";
9
25
  import { GroupsBehavior } from "./GroupsBehavior.js";
10
26
 
27
+ const logger = Logger.get("GroupsServer");
28
+
29
+ // We enable group names by default
30
+ const GroupsBase = GroupsBehavior.with(Groups.Feature.GroupNames);
31
+
32
+ /**
33
+ * Monkey patching Tlv Structure of addGroup* commands to prevent data validation of the groupName field to be
34
+ * handled as ConstraintError because we need to return a special error.
35
+ * We do this to leave the model in fact for other validations and only apply the change for our Schema-aware Tlv parsing.
36
+ */
37
+ Groups.Cluster.commands = {
38
+ ...Groups.Cluster.commands,
39
+ addGroup: Command(
40
+ 0x0,
41
+ TlvObject({
42
+ groupId: TlvField(0, TlvGroupId),
43
+ groupName: TlvField(1, TlvString),
44
+ }),
45
+ 0x0,
46
+ Groups.TlvAddGroupResponse,
47
+ { invokeAcl: AccessLevel.Manage },
48
+ ),
49
+ addGroupIfIdentifying: Command(
50
+ 0x5,
51
+ TlvObject({
52
+ groupId: TlvField(0, TlvGroupId),
53
+ groupName: TlvField(1, TlvString),
54
+ }),
55
+ 0x5,
56
+ TlvNoResponse,
57
+ { invokeAcl: AccessLevel.Manage },
58
+ ),
59
+ };
60
+
11
61
  /**
12
62
  * This is the default server implementation of {@link GroupsBehavior}.
13
63
  */
14
- export class GroupsServer extends GroupsBehavior {}
64
+ export class GroupsServer extends GroupsBase {
65
+ override initialize() {
66
+ this.state.nameSupport.groupNames = this.features.groupNames;
67
+ }
68
+
69
+ // We need to search the root here ourselves because we cannot include ServerNode because else we generate a
70
+ // circular dependency
71
+ #rootEndpoint(): Endpoint<RootEndpoint> {
72
+ const rootEndpoint = this.endpoint.ownerOfType(RootEndpoint);
73
+ if (rootEndpoint === undefined) {
74
+ throw new InternalError("RootEndpoint not found");
75
+ }
76
+ return rootEndpoint;
77
+ }
78
+
79
+ #actOnGroupKeyManagement(act: (groupKeyManagement: GroupKeyManagementServer) => unknown) {
80
+ return this.#rootEndpoint().act(agent => act(agent.get(GroupKeyManagementServer)));
81
+ }
82
+
83
+ override async addGroup({ groupId, groupName }: Groups.AddGroupRequest): Promise<Groups.AddGroupResponse> {
84
+ const fabric = this.session.associatedFabric;
85
+
86
+ if (groupId < 1) {
87
+ return { status: StatusCode.ConstraintError, groupId };
88
+ }
89
+ if (groupName.length > 16) {
90
+ return { status: StatusCode.ConstraintError, groupId };
91
+ }
92
+
93
+ if (!fabric.groups.groupKeyIdMap.has(groupId)) {
94
+ return { status: StatusCode.UnsupportedAccess, groupId };
95
+ }
96
+
97
+ const endpointNumber = this.endpoint.number;
98
+
99
+ try {
100
+ await this.#actOnGroupKeyManagement(gkm =>
101
+ gkm.addEndpointForGroup(fabric, groupId, endpointNumber, groupName),
102
+ );
103
+ } catch (error) {
104
+ logger.error(error);
105
+ StatusResponseError.accept(error);
106
+ return { status: error.code, groupId };
107
+ }
108
+
109
+ return { status: StatusCode.Success, groupId };
110
+ }
111
+
112
+ override viewGroup({ groupId }: Groups.ViewGroupRequest): Groups.ViewGroupResponse {
113
+ const fabric = this.session.associatedFabric;
114
+
115
+ if (groupId < 1) {
116
+ return { status: StatusCode.ConstraintError, groupId, groupName: "" };
117
+ }
118
+
119
+ const fabricIndex = fabric.fabricIndex;
120
+ const endpointNumber = this.endpoint.number;
121
+
122
+ const { groupTable } = this.#rootEndpoint().stateOf(GroupKeyManagementServer);
123
+ const groupEntry = groupTable.find(entry => entry.groupId === groupId && entry.fabricIndex === fabricIndex);
124
+ if (groupEntry === undefined || !groupEntry.endpoints.includes(endpointNumber)) {
125
+ return { status: StatusCode.NotFound, groupId, groupName: "" };
126
+ }
127
+ return { status: StatusCode.Success, groupId, groupName: groupEntry.groupName ?? "" };
128
+ }
129
+
130
+ override async getGroupMembership({
131
+ groupList,
132
+ }: Groups.GetGroupMembershipRequest): Promise<Groups.GetGroupMembershipResponse> {
133
+ const fabric = this.session.associatedFabric;
134
+ const fabricIndex = fabric.fabricIndex;
135
+ const endpointNumber = this.endpoint.number;
136
+
137
+ const { groupTable } = this.#rootEndpoint().stateOf(GroupKeyManagementServer);
138
+ const endpointGroups = groupTable.filter(
139
+ entry => entry.endpoints.includes(endpointNumber) && entry.fabricIndex === fabricIndex,
140
+ );
141
+ const fabricGroupsList = endpointGroups.map(entry => entry.groupId);
142
+
143
+ if (groupList.length === 0) {
144
+ return { capacity: 0xfe - fabricGroupsList.length, groupList: fabricGroupsList };
145
+ }
146
+
147
+ const filteredGroupsList = groupList.filter(groupId => fabricGroupsList.includes(groupId));
148
+ return { capacity: 0xfe - fabricGroupsList.length, groupList: filteredGroupsList };
149
+ }
150
+
151
+ override async removeGroup({ groupId }: Groups.RemoveGroupRequest): Promise<Groups.RemoveGroupResponse> {
152
+ if (groupId < 1) {
153
+ return { status: StatusCode.ConstraintError, groupId };
154
+ }
155
+
156
+ try {
157
+ if (
158
+ await this.#actOnGroupKeyManagement(gkm =>
159
+ gkm.removeEndpoint(this.session.associatedFabric, this.endpoint.number, groupId),
160
+ )
161
+ ) {
162
+ return { status: StatusCode.Success, groupId };
163
+ }
164
+ return { status: StatusCode.NotFound, groupId };
165
+ } catch (error) {
166
+ StatusResponseError.accept(error);
167
+ return { status: error.code, groupId };
168
+ }
169
+ }
170
+
171
+ // TODO ScenesManagement cluster is also affected by this command
172
+ override async removeAllGroups() {
173
+ try {
174
+ await this.#actOnGroupKeyManagement(gkm =>
175
+ gkm.removeEndpoint(this.session.associatedFabric, this.endpoint.number),
176
+ );
177
+ } catch (error) {
178
+ StatusResponseError.accept(error);
179
+ throw error;
180
+ }
181
+ }
182
+
183
+ override async addGroupIfIdentifying({ groupId, groupName }: Groups.AddGroupIfIdentifyingRequest) {
184
+ if (this.endpoint.stateOf(IdentifyBehavior).identifyTime > 0) {
185
+ // We identify ourselves currently
186
+ const { status } = await this.addGroup({ groupId, groupName });
187
+ if (status !== StatusCode.Success) {
188
+ throw new StatusResponseError(`Failed to add group ${groupId}`, status);
189
+ }
190
+ }
191
+ }
192
+ }
@@ -4,17 +4,17 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
+ import { Behavior } from "#behavior/Behavior.js";
7
8
  import { ActionContext } from "#behavior/context/ActionContext.js";
8
- import { Behavior } from "#behavior/index.js";
9
9
  import { Transitions } from "#behavior/Transitions.js";
10
10
  import { ColorControlServer } from "#behaviors/color-control";
11
11
  import { GeneralDiagnosticsBehavior } from "#behaviors/general-diagnostics";
12
12
  import { OnOffServer } from "#behaviors/on-off";
13
13
  import { GeneralDiagnostics } from "#clusters/general-diagnostics";
14
14
  import { LevelControl } from "#clusters/level-control";
15
- import { Endpoint } from "#endpoint/index.js";
16
- import { RootEndpoint } from "#endpoints/root";
15
+ import { Endpoint } from "#endpoint/Endpoint.js";
17
16
  import { AsyncObservable, Logger, MaybePromise } from "#general";
17
+ import { ServerNode } from "#node/ServerNode.js";
18
18
  import { Val } from "#protocol";
19
19
  import { ClusterType, StatusCode, StatusResponseError, TypeFromPartialBitSchema } from "#types";
20
20
  import { LevelControlBehavior } from "./LevelControlBehavior.js";
@@ -572,8 +572,8 @@ export class LevelControlBaseServer extends LevelControlBase {
572
572
  }
573
573
 
574
574
  #getBootReason() {
575
- const rootEndpoint = this.endpoint.ownerOfType(RootEndpoint);
576
- if (rootEndpoint !== undefined && rootEndpoint.behaviors.has(GeneralDiagnosticsBehavior)) {
575
+ const rootEndpoint = this.env.get(ServerNode);
576
+ if (rootEndpoint.behaviors.has(GeneralDiagnosticsBehavior)) {
577
577
  return rootEndpoint.stateOf(GeneralDiagnosticsBehavior).bootReason;
578
578
  }
579
579
  }
@@ -9,8 +9,8 @@ import { OnOffServer } from "#behaviors/on-off";
9
9
  import { GeneralDiagnostics } from "#clusters/general-diagnostics";
10
10
  import { ModeSelect } from "#clusters/mode-select";
11
11
  import { OnOff } from "#clusters/on-off";
12
- import { RootEndpoint } from "#endpoints/root";
13
12
  import { Logger, MaybePromise } from "#general";
13
+ import { ServerNode } from "#node/ServerNode.js";
14
14
  import { ClusterType, StatusCode, StatusResponseError } from "#types";
15
15
  import { ModeSelectBehavior } from "./ModeSelectBehavior.js";
16
16
 
@@ -101,8 +101,8 @@ export class ModeSelectBaseServer extends ModeSelectBase {
101
101
  }
102
102
 
103
103
  #getBootReason() {
104
- const rootEndpoint = this.endpoint.ownerOfType(RootEndpoint);
105
- if (rootEndpoint !== undefined && rootEndpoint.behaviors.has(GeneralDiagnosticsBehavior)) {
104
+ const rootEndpoint = this.env.get(ServerNode);
105
+ if (rootEndpoint.behaviors.has(GeneralDiagnosticsBehavior)) {
106
106
  return rootEndpoint.stateOf(GeneralDiagnosticsBehavior).bootReason;
107
107
  }
108
108
  }
@@ -7,8 +7,8 @@
7
7
  import { GeneralDiagnosticsBehavior } from "#behaviors/general-diagnostics";
8
8
  import { GeneralDiagnostics } from "#clusters/general-diagnostics";
9
9
  import { OnOff } from "#clusters/on-off";
10
- import { RootEndpoint } from "#endpoints/root";
11
10
  import { MaybePromise, Time, Timer } from "#general";
11
+ import { ServerNode } from "#node/ServerNode.js";
12
12
  import { OnOffBehavior } from "./OnOffBehavior.js";
13
13
 
14
14
  const OnOffLogicBase = OnOffBehavior.with(OnOff.Feature.Lighting);
@@ -187,8 +187,8 @@ export class OnOffBaseServer extends OnOffLogicBase {
187
187
  }
188
188
 
189
189
  #getBootReason() {
190
- const rootEndpoint = this.endpoint.ownerOfType(RootEndpoint);
191
- if (rootEndpoint !== undefined && rootEndpoint.behaviors.has(GeneralDiagnosticsBehavior)) {
190
+ const rootEndpoint = this.env.get(ServerNode);
191
+ if (rootEndpoint.behaviors.has(GeneralDiagnosticsBehavior)) {
192
192
  return rootEndpoint.stateOf(GeneralDiagnosticsBehavior).bootReason;
193
193
  }
194
194
  }
@@ -15,7 +15,6 @@ import { CryptoVerifyError, Logger, MatterFlowError, MaybePromise, UnexpectedDat
15
15
  import { AccessLevel } from "#model";
16
16
  import type { Node } from "#node/Node.js";
17
17
  import {
18
- assertSecureSession,
19
18
  CertificateError,
20
19
  DeviceCertification,
21
20
  DeviceCommissioner,
@@ -25,6 +24,7 @@ import {
25
24
  FabricTableFullError,
26
25
  MatterFabricConflictError,
27
26
  MatterFabricInvalidAdminSubjectError,
27
+ NodeSession,
28
28
  PublicKeyError,
29
29
  TlvAttestation,
30
30
  TlvCertSigningRequest,
@@ -101,6 +101,9 @@ export class OperationalCredentialsServer extends OperationalCredentialsBehavior
101
101
 
102
102
  const certification = await this.getCertification();
103
103
 
104
+ const session = this.session;
105
+ NodeSession.assert(session);
106
+
104
107
  const elements = TlvAttestation.encode({
105
108
  declaration: certification.declaration,
106
109
  attestationNonce: attestationNonce,
@@ -108,7 +111,7 @@ export class OperationalCredentialsServer extends OperationalCredentialsBehavior
108
111
  });
109
112
  return {
110
113
  attestationElements: elements,
111
- attestationSignature: await certification.sign(this.session, elements),
114
+ attestationSignature: await certification.sign(session, elements),
112
115
  };
113
116
  }
114
117
 
@@ -117,7 +120,9 @@ export class OperationalCredentialsServer extends OperationalCredentialsBehavior
117
120
  throw new StatusResponseError("Invalid csr nonce length", StatusCode.InvalidCommand);
118
121
  }
119
122
 
120
- if (isForUpdateNoc && this.session.isPase) {
123
+ const session = this.session;
124
+ NodeSession.assert(session);
125
+ if (isForUpdateNoc && session.isPase) {
121
126
  throw new StatusResponseError(
122
127
  "csrRequest for UpdateNoc received on a PASE session",
123
128
  StatusCode.InvalidCommand,
@@ -140,7 +145,7 @@ export class OperationalCredentialsServer extends OperationalCredentialsBehavior
140
145
  this.session.id,
141
146
  );
142
147
  const nocsrElements = TlvCertSigningRequest.encode({ certSigningRequest, csrNonce });
143
- return { nocsrElements, attestationSignature: await certification.sign(this.session, nocsrElements) };
148
+ return { nocsrElements, attestationSignature: await certification.sign(session, nocsrElements) };
144
149
  }
145
150
 
146
151
  override async certificateChainRequest({ certificateType }: OperationalCredentials.CertificateChainRequest) {
@@ -264,12 +269,15 @@ export class OperationalCredentialsServer extends OperationalCredentialsBehavior
264
269
  targets: null, // entire node
265
270
  });
266
271
 
272
+ const session = this.session;
273
+ NodeSession.assert(session);
274
+
267
275
  await failsafeContext.addFabric(fabric);
268
276
 
269
277
  try {
270
- if (this.session.isPase) {
271
- logger.debug(`Add Fabric ${fabric.fabricIndex} to PASE session ${this.session.name}`);
272
- this.session.addAssociatedFabric(fabric);
278
+ if (session.isPase) {
279
+ logger.debug(`Add Fabric ${fabric.fabricIndex} to PASE session ${session.name}`);
280
+ session.addAssociatedFabric(fabric);
273
281
  }
274
282
 
275
283
  // Update attributes
@@ -282,7 +290,7 @@ export class OperationalCredentialsServer extends OperationalCredentialsBehavior
282
290
  }
283
291
  } catch (e) {
284
292
  // Fabric insertion into FabricManager is not currently transactional so we need to remove manually
285
- await fabric.remove(this.session.id);
293
+ await fabric.remove(session.id);
286
294
  throw e;
287
295
  }
288
296
 
@@ -302,7 +310,7 @@ export class OperationalCredentialsServer extends OperationalCredentialsBehavior
302
310
  }
303
311
 
304
312
  override async updateNoc({ nocValue, icacValue }: OperationalCredentials.UpdateNocRequest) {
305
- assertSecureSession(this.session);
313
+ NodeSession.assert(this.session);
306
314
 
307
315
  const timedOp = this.#failsafeContext;
308
316
 
@@ -124,7 +124,7 @@ export class Endpoint<T extends EndpointType = EndpointType.Empty> {
124
124
  */
125
125
  ownerOfType<T extends EndpointType.Empty>(type: T): Endpoint<T> | undefined {
126
126
  for (let endpoint: Endpoint | undefined = this; endpoint !== undefined; endpoint = endpoint.owner) {
127
- if (endpoint.type.deviceClass === type.deviceClass) {
127
+ if (endpoint.type.deviceType === type.deviceType) {
128
128
  return endpoint as Endpoint<T>;
129
129
  }
130
130
  }
package/src/node/Node.ts CHANGED
@@ -10,8 +10,8 @@ import { IndexBehavior } from "#behavior/system/index/IndexBehavior.js";
10
10
  import { NetworkRuntime } from "#behavior/system/network/NetworkRuntime.js";
11
11
  import { PartsBehavior } from "#behavior/system/parts/PartsBehavior.js";
12
12
  import { Endpoint } from "#endpoint/Endpoint.js";
13
- import { MutableEndpoint } from "#endpoint/index.js";
14
13
  import { EndpointType } from "#endpoint/type/EndpointType.js";
14
+ import { MutableEndpoint } from "#endpoint/type/MutableEndpoint.js";
15
15
  import {
16
16
  Construction,
17
17
  Diagnostic,
@@ -12,7 +12,7 @@ import { NetworkServer } from "#behavior/system/network/NetworkServer.js";
12
12
  import { ServerNetworkRuntime } from "#behavior/system/network/ServerNetworkRuntime.js";
13
13
  import { ProductDescriptionServer } from "#behavior/system/product-description/ProductDescriptionServer.js";
14
14
  import { SessionsBehavior } from "#behavior/system/sessions/SessionsBehavior.js";
15
- import { SubscriptionBehavior } from "#behavior/system/subscription/index.js";
15
+ import { SubscriptionBehavior } from "#behavior/system/subscription/SubscriptionBehavior.js";
16
16
  import { Endpoint } from "#endpoint/Endpoint.js";
17
17
  import type { Environment } from "#general";
18
18
  import { Construction, DiagnosticSource, Identity, MatterError, asyncNew, errorOf } from "#general";
@@ -5,7 +5,7 @@
5
5
  */
6
6
 
7
7
  import { RemoteDescriptor } from "#behavior/system/commissioning/RemoteDescriptor.js";
8
- import { ClientNode } from "#node/ClientNode.js";
8
+ import type { ClientNode } from "#node/ClientNode.js";
9
9
  import { IdentityService } from "#node/server/IdentityService.js";
10
10
  import type { ServerNode } from "#node/ServerNode.js";
11
11
  import { OperationalPeer, PeerAddress, PeerAddressMap, PeerAddressStore } from "#protocol";
@@ -5,7 +5,7 @@
5
5
  */
6
6
 
7
7
  import { NodeActivity } from "#behavior/context/NodeActivity.js";
8
- import { OnlineContext } from "#behavior/index.js";
8
+ import { OnlineContext } from "#behavior/context/server/OnlineContext.js";
9
9
  import { AccessControlServer } from "#behaviors/access-control";
10
10
  import { AccessControl as AccessControlClusterType } from "#clusters/access-control";
11
11
  import {
@@ -20,7 +20,6 @@ import {
20
20
  } from "#general";
21
21
  import { GLOBAL_IDS, Specification } from "#model";
22
22
  import {
23
- assertSecureSession,
24
23
  DataReport,
25
24
  DataReportPayloadIterator,
26
25
  ExchangeManager,
@@ -30,10 +29,10 @@ import {
30
29
  Message,
31
30
  MessageExchange,
32
31
  MessageType,
32
+ NodeSession,
33
33
  PeerAddress,
34
34
  ProtocolHandler,
35
35
  ReadRequest,
36
- SecureSession,
37
36
  SessionManager,
38
37
  SessionType,
39
38
  SubscribeRequest,
@@ -474,7 +473,7 @@ export class InteractionServer implements ProtocolHandler, InteractionRecipient
474
473
  );
475
474
  }
476
475
 
477
- assertSecureSession(exchange.session, "Subscriptions are only implemented on secure sessions");
476
+ NodeSession.assert(exchange.session, "Subscriptions are only implemented on secure sessions");
478
477
  const session = exchange.session;
479
478
  const fabric = session.fabric;
480
479
 
@@ -606,7 +605,7 @@ export class InteractionServer implements ProtocolHandler, InteractionRecipient
606
605
  isFabricFiltered,
607
606
  }: SubscribeRequest,
608
607
  messenger: InteractionServerMessenger,
609
- session: SecureSession,
608
+ session: NodeSession,
610
609
  exchange: MessageExchange,
611
610
  message: Message,
612
611
  ) {
@@ -660,7 +659,7 @@ export class InteractionServer implements ProtocolHandler, InteractionRecipient
660
659
  maxInterval,
661
660
  sendInterval,
662
661
  }: PeerSubscription,
663
- session: SecureSession,
662
+ session: NodeSession,
664
663
  ) {
665
664
  const exchange = this.#context.exchangeManager.initiateExchange(session.peerAddress, INTERACTION_PROTOCOL_ID);
666
665
  const message = {} as Message;
@@ -7,8 +7,8 @@
7
7
  import { OnlineContext } from "#behavior/context/server/OnlineContext.js";
8
8
  import { Logger, MatterError, NetworkError, NoResponseTimeoutError, ObserverGroup, Time, Timer } from "#general";
9
9
  import { Specification } from "#model";
10
- import { ServerNode } from "#node/index.js";
11
- import type { AttributeResponseFilter, Message, MessageExchange } from "#protocol";
10
+ import type { ServerNode } from "#node/ServerNode.js";
11
+ import type { AttributeResponseFilter, Message, MessageExchange, NodeSession } from "#protocol";
12
12
  import {
13
13
  AttributeReadResponse,
14
14
  AttributeSubscriptionResponse,
@@ -19,7 +19,6 @@ import {
19
19
  PeerAddress,
20
20
  Read,
21
21
  ReadResult,
22
- SecureSession,
23
22
  Subscription,
24
23
  SubscriptionCriteria,
25
24
  } from "#protocol";
@@ -95,7 +94,7 @@ export namespace ServerSubscriptionConfig {
95
94
  * Interface between {@link ServerSubscription} and the local Matter environment.
96
95
  */
97
96
  export interface ServerSubscriptionContext {
98
- session: SecureSession;
97
+ session: NodeSession;
99
98
  node: ServerNode;
100
99
  initiateExchange(address: PeerAddress, protocolId: number): MessageExchange;
101
100
  }