@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
@@ -5,15 +5,38 @@
5
5
  */
6
6
  import { GroupKeyManagement } from "#clusters/group-key-management";
7
7
  import { MaybePromise } from "#general";
8
+ import { Fabric } from "#protocol";
9
+ import { EndpointNumber, FabricIndex, GroupId } from "#types";
8
10
  import { GroupKeyManagementBehavior } from "./GroupKeyManagementBehavior.js";
9
11
  /**
10
12
  * This is the default server implementation of {@link GroupKeyManagementBehavior}.
11
13
  */
12
14
  export declare class GroupKeyManagementServer extends GroupKeyManagementBehavior {
15
+ #private;
16
+ state: GroupKeyManagementServer.State;
17
+ schema: import("#model").Schema;
13
18
  initialize(): MaybePromise;
14
- keySetWrite(): MaybePromise;
15
- keySetRead({ groupKeySetId, }: GroupKeyManagement.KeySetReadRequest): MaybePromise<GroupKeyManagement.KeySetReadResponse>;
16
- keySetRemove({ groupKeySetId }: GroupKeyManagement.KeySetRemoveRequest): MaybePromise;
17
- keySetReadAllIndices(): MaybePromise<GroupKeyManagement.KeySetReadAllIndicesResponse>;
19
+ keySetWrite({ groupKeySet }: GroupKeyManagement.KeySetWriteRequest): Promise<void>;
20
+ keySetRead({ groupKeySetId, }: GroupKeyManagement.KeySetReadRequest): GroupKeyManagement.KeySetReadResponse;
21
+ keySetRemove({ groupKeySetId }: GroupKeyManagement.KeySetRemoveRequest): Promise<void>;
22
+ keySetReadAllIndices(): GroupKeyManagement.KeySetReadAllIndicesResponse;
23
+ addEndpointForGroup(fabric: Fabric, groupId: GroupId, endpointId: EndpointNumber, groupName: string): void;
24
+ /**
25
+ * Remove endpoint from the provided group, or all groups if no groupId is provided.
26
+ */
27
+ removeEndpoint(fabric: Fabric, endpointId: EndpointNumber, groupId?: GroupId): boolean;
28
+ }
29
+ export declare namespace GroupKeyManagementServer {
30
+ class State extends GroupKeyManagementBehavior.State {
31
+ /**
32
+ * Extended state to hold and persist the group key sets for this server. This structure contains all
33
+ * GroupKeySet entries for all fabrics beside the fabric specific entries of the groupKeyset 0
34
+ */
35
+ groupKeySets: (GroupKeyManagement.GroupKeySet & {
36
+ fabricIndex: FabricIndex;
37
+ })[];
38
+ maxGroupKeysPerFabric: number;
39
+ maxGroupsPerFabric: number;
40
+ }
18
41
  }
19
42
  //# sourceMappingURL=GroupKeyManagementServer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GroupKeyManagementServer.d.ts","sourceRoot":"","sources":["../../../../src/behaviors/group-key-management/GroupKeyManagementServer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAuB,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,0BAA0B;IAC3D,UAAU,IAAI,YAAY;IAU1B,WAAW,IAAI,YAAY;IAO3B,UAAU,CAAC,EAChB,aAAa,GAChB,EAAE,kBAAkB,CAAC,iBAAiB,GAAG,YAAY,CAAC,kBAAkB,CAAC,kBAAkB,CAAC;IAqBpF,YAAY,CAAC,EAAE,aAAa,EAAE,EAAE,kBAAkB,CAAC,mBAAmB,GAAG,YAAY;IASrF,oBAAoB,IAAI,YAAY,CAAC,kBAAkB,CAAC,4BAA4B,CAAC;CAYjG"}
1
+ {"version":3,"file":"GroupKeyManagementServer.d.ts","sourceRoot":"","sources":["../../../../src/behaviors/group-key-management/GroupKeyManagementServer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAyC,YAAY,EAAE,MAAM,UAAU,CAAC;AAG/E,OAAO,EAAE,MAAM,EAAgC,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO,EAAmC,MAAM,QAAQ,CAAC;AAC/F,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAmB7E;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,0BAA0B;;IAC5D,KAAK,EAAE,wBAAwB,CAAC,KAAK,CAAC;IAC9C,MAAM,0BAAU;IAEP,UAAU,IAAI,YAAY;IAsNpB,WAAW,CAAC,EAAE,WAAW,EAAE,EAAE,kBAAkB,CAAC,kBAAkB;IAsGxE,UAAU,CAAC,EAChB,aAAa,GAChB,EAAE,kBAAkB,CAAC,iBAAiB,GAAG,kBAAkB,CAAC,kBAAkB;IAmBhE,YAAY,CAAC,EAAE,aAAa,EAAE,EAAE,kBAAkB,CAAC,mBAAmB;IA2B5E,oBAAoB,IAAI,kBAAkB,CAAC,4BAA4B;IAchF,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IA4B1G;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO;CA4BzF;AAED,yBAAiB,wBAAwB,CAAC;IACtC,MAAa,KAAM,SAAQ,0BAA0B,CAAC,KAAK;QACvD;;;WAGG;QACH,YAAY,EAAE,CAAC,kBAAkB,CAAC,WAAW,GAAG;YAAE,WAAW,EAAE,WAAW,CAAA;SAAE,CAAC,EAAE,CAAM;QAG5E,qBAAqB,SAAM;QAC3B,kBAAkB,SAAM;KACpC;CACJ"}
@@ -3,33 +3,276 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { ImplementationError } from "#general";
7
- import { StatusCode, StatusResponseError } from "#types";
6
+ import { GroupsBehavior } from "#behaviors/groups";
7
+ import { GroupKeyManagement } from "#clusters/group-key-management";
8
+ import { deepCopy, ImplementationError, Logger } from "#general";
9
+ import { DatatypeModel, FieldElement } from "#model";
10
+ import { FabricManager, SecureSession } from "#protocol";
11
+ import { GroupId, StatusCode, StatusResponseError } from "#types";
8
12
  import { GroupKeyManagementBehavior } from "./GroupKeyManagementBehavior.js";
13
+ const logger = Logger.get("GroupKeyManagementServer");
14
+ const MAX_64BIT_TIME = BigInt("0xffffffffffffffff");
15
+ const groupKeySetStruct = GroupKeyManagementBehavior.schema.get(DatatypeModel, "GroupKeySetStruct");
16
+ const groupKeySetStructFS = groupKeySetStruct.extend({
17
+ name: "GroupKeySetStructFS",
18
+ children: [FieldElement({ name: "FabricIndex", id: 254, type: "FabricIndex" })]
19
+ });
20
+ const schema = GroupKeyManagementBehavior.schema.extend({
21
+ children: [
22
+ groupKeySetStructFS,
23
+ FieldElement({ name: "groupKeySets", type: "GroupKeySetStructFS", quality: "N", access: "RW VM F" })
24
+ ]
25
+ });
9
26
  class GroupKeyManagementServer extends GroupKeyManagementBehavior {
27
+ schema = schema;
10
28
  initialize() {
11
- if (this.state.maxGroupKeysPerFabric !== 1) {
12
- throw new ImplementationError("maxGroupKeysPerFabric must be 1 for now.");
29
+ if (this.features.cacheAndSync) {
30
+ throw new ImplementationError("The CacheAndSync feature is provisional. Do not use it.");
13
31
  }
14
- if (this.state.maxGroupsPerFabric !== 0) {
15
- throw new ImplementationError("maxGroupsPerFabric must be 0 for now.");
32
+ if (this.state.groupKeySets === void 0) {
33
+ this.state.groupKeySets = [];
16
34
  }
17
- this.state.groupTable = [];
35
+ this.reactTo(this.events.groupKeyMap$Changing, this.#validateGroupKeyMap);
36
+ this.reactTo(this.events.groupTable$Changing, this.#validateGroupTable);
37
+ this.reactTo(this.events.groupKeyMap$Changed, this.#updateGroupKeyMap);
38
+ const lifecycle = this.endpoint.lifecycle;
39
+ this.reactTo(lifecycle.online, this.#online);
18
40
  }
19
- keySetWrite() {
20
- throw new StatusResponseError(
21
- "We do not support additional groups beyond the IPK",
22
- StatusCode.ResourceExhausted
41
+ async #online() {
42
+ if (this.state.maxGroupKeysPerFabric === 0 && this.state.maxGroupsPerFabric === 1) {
43
+ let groupsFound = false;
44
+ this.endpoint.visit((endpoint) => {
45
+ if (!groupsFound && endpoint.behaviors.has(GroupsBehavior)) {
46
+ groupsFound = true;
47
+ }
48
+ });
49
+ if (groupsFound) {
50
+ throw new ImplementationError(
51
+ "One of the device types you use has a Groups cluster. Please adjust the Group Key Management cluster maximum defaults. You need to support groups management."
52
+ );
53
+ }
54
+ }
55
+ const fabrics = this.env.get(FabricManager);
56
+ this.reactTo(fabrics.events.updated, this.#handleFabricUpdate);
57
+ if (this.state.groupKeySets.length) {
58
+ const groupKeysForFabric = /* @__PURE__ */ new Map();
59
+ for (const groupKeySet of this.state.groupKeySets) {
60
+ const fabricIndex = groupKeySet.fabricIndex;
61
+ const keys = groupKeysForFabric.get(fabricIndex) ?? [];
62
+ keys.push(groupKeySet);
63
+ groupKeysForFabric.set(fabricIndex, keys);
64
+ }
65
+ for (const [fabricIndex, keys] of groupKeysForFabric.entries()) {
66
+ const fabric = fabrics.for(fabricIndex);
67
+ for (const groupKeySet of keys) {
68
+ await fabric.groups.setFromGroupKeySet(groupKeySet);
69
+ }
70
+ }
71
+ }
72
+ if (this.state.groupKeyMap.length) {
73
+ this.#updateGroupKeyMap(this.state.groupKeyMap);
74
+ }
75
+ }
76
+ /** Handle the recreation (update) of a fabric, so we need to reinitialize the group key sets */
77
+ async #handleFabricUpdate(fabric) {
78
+ if (this.state.groupKeySets.length === 0) {
79
+ return;
80
+ }
81
+ const fabricIndex = fabric.fabricIndex;
82
+ const groupKeysForFabric = this.state.groupKeySets.filter(
83
+ ({ fabricIndex: entryIndex }) => entryIndex === fabricIndex
84
+ );
85
+ for (const groupKeySet of groupKeysForFabric) {
86
+ await fabric.groups.setFromGroupKeySet(groupKeySet);
87
+ }
88
+ if (this.state.groupKeyMap.length) {
89
+ fabric.groups.groupKeyIdMap = new Map(
90
+ this.state.groupKeyMap.filter(({ fabricIndex: entryIndex }) => entryIndex === fabricIndex).map(({ groupId, groupKeySetId }) => [groupId, groupKeySetId])
91
+ );
92
+ }
93
+ if (this.state.groupTable.length) {
94
+ const groupTable = this.state.groupTable.filter(
95
+ ({ fabricIndex: entryIndex }) => entryIndex === fabricIndex
96
+ );
97
+ fabric.groups.endpoints.clear();
98
+ for (const entry of groupTable) {
99
+ fabric.groups.endpoints.set(entry.groupId, entry.endpoints);
100
+ }
101
+ }
102
+ }
103
+ #validateGroupKeyMap(groupKeyMap) {
104
+ const knownGroupKeys = /* @__PURE__ */ new Set();
105
+ for (const keySetId of this.state.groupKeySets) {
106
+ const { groupKeySetId, fabricIndex } = keySetId;
107
+ const id = `${fabricIndex}-${groupKeySetId}`;
108
+ knownGroupKeys.add(id);
109
+ }
110
+ const knownGroupIds = /* @__PURE__ */ new Set();
111
+ const groupIdsPerFabric = new Array();
112
+ for (const entry of groupKeyMap) {
113
+ const { groupId, fabricIndex } = entry;
114
+ if (!GroupId.isApplicationGroupId(groupId)) {
115
+ throw new StatusResponseError(
116
+ "Only operational GroupIds are allowed in GroupKeyMap",
117
+ StatusCode.InvalidAction
118
+ );
119
+ }
120
+ groupIdsPerFabric[fabricIndex] = (groupIdsPerFabric[fabricIndex] ?? 0) + 1;
121
+ const id = `${fabricIndex}-${groupId}`;
122
+ if (knownGroupIds.has(id)) {
123
+ throw new StatusResponseError(
124
+ `Duplicate GroupId ${groupId} for FabricIndex ${fabricIndex}`,
125
+ StatusCode.ConstraintError
126
+ );
127
+ }
128
+ knownGroupIds.add(id);
129
+ }
130
+ if (groupIdsPerFabric.some((count) => count > this.state.maxGroupsPerFabric)) {
131
+ throw new StatusResponseError(
132
+ `Too many groups per fabric, maximum is ${this.state.maxGroupsPerFabric}`,
133
+ StatusCode.ResourceExhausted
134
+ );
135
+ }
136
+ }
137
+ #validateGroupTable(groupTable) {
138
+ const knownGroupIds = /* @__PURE__ */ new Set();
139
+ for (const entry of groupTable) {
140
+ const { groupId, fabricIndex, endpoints } = entry;
141
+ if (groupId === 0) {
142
+ throw new StatusResponseError(
143
+ "GroupId 0 can not be used as operational group id",
144
+ StatusCode.ConstraintError
145
+ );
146
+ }
147
+ const id = `${fabricIndex}-${groupId}`;
148
+ if (knownGroupIds.has(id)) {
149
+ throw new StatusResponseError(
150
+ `Duplicate GroupId ${groupId} for FabricIndex ${fabricIndex}`,
151
+ StatusCode.ConstraintError
152
+ );
153
+ }
154
+ knownGroupIds.add(id);
155
+ const endpointIds = new Set(endpoints);
156
+ if (endpointIds.size !== endpoints.length) {
157
+ throw new StatusResponseError(
158
+ `Duplicate endpoint IDs in GroupId ${groupId} for FabricIndex ${fabricIndex}`,
159
+ StatusCode.ConstraintError
160
+ );
161
+ }
162
+ }
163
+ }
164
+ #updateGroupKeyMap(groupKeyMap, _oldMap, context) {
165
+ if (context !== void 0 && !context?.offline) {
166
+ const fabric = context.session?.associatedFabric;
167
+ const fabricIndex = fabric?.fabricIndex;
168
+ if (fabric !== void 0 && fabricIndex !== void 0) {
169
+ fabric.groups.groupKeyIdMap = new Map(
170
+ groupKeyMap.filter(({ fabricIndex: entryIndex }) => entryIndex === fabricIndex).map(({ groupId, groupKeySetId }) => [groupId, groupKeySetId])
171
+ );
172
+ return;
173
+ }
174
+ }
175
+ const fabrics = this.env.get(FabricManager);
176
+ const fabricMaps = /* @__PURE__ */ new Map();
177
+ for (const entry of groupKeyMap) {
178
+ const { fabricIndex, groupId, groupKeySetId } = entry;
179
+ const fabricMap = fabricMaps.get(fabricIndex) ?? /* @__PURE__ */ new Map();
180
+ fabricMap.set(groupId, groupKeySetId);
181
+ fabricMaps.set(fabricIndex, fabricMap);
182
+ }
183
+ for (const fabric of fabrics) {
184
+ const fabricIndex = fabric.fabricIndex;
185
+ const map = fabricMaps.get(fabricIndex);
186
+ if (map === void 0) {
187
+ continue;
188
+ }
189
+ fabric.groups.groupKeyIdMap = map;
190
+ }
191
+ }
192
+ async keySetWrite({ groupKeySet }) {
193
+ SecureSession.assert(this.session);
194
+ const {
195
+ groupKeySetId,
196
+ epochKey0,
197
+ epochKey1,
198
+ epochKey2,
199
+ epochStartTime0,
200
+ epochStartTime1,
201
+ epochStartTime2,
202
+ groupKeySecurityPolicy,
203
+ groupKeyMulticastPolicy = GroupKeyManagement.GroupKeyMulticastPolicy.PerGroupId
204
+ } = groupKeySet;
205
+ if (groupKeySet.epochStartTime0 === MAX_64BIT_TIME) {
206
+ groupKeySet.epochStartTime0 = null;
207
+ groupKeySet.epochKey0 = null;
208
+ }
209
+ if (groupKeySet.epochStartTime1 === MAX_64BIT_TIME) {
210
+ groupKeySet.epochStartTime1 = null;
211
+ groupKeySet.epochKey1 = null;
212
+ }
213
+ if (groupKeySet.epochStartTime2 === MAX_64BIT_TIME) {
214
+ groupKeySet.epochStartTime2 = null;
215
+ groupKeySet.epochKey2 = null;
216
+ }
217
+ if (epochKey0 === null || epochStartTime0 === null) {
218
+ throw new StatusResponseError("EpochKey0 and EpochStartTime0 must be set", StatusCode.InvalidCommand);
219
+ }
220
+ if (epochStartTime0 === 0) {
221
+ throw new StatusResponseError("EpochStartTime0 must not be 0", StatusCode.InvalidCommand);
222
+ }
223
+ if (epochKey1 !== null && (epochStartTime1 === null || epochStartTime1 <= epochStartTime0)) {
224
+ throw new StatusResponseError(
225
+ "EpochStartTime1 must be set and greater than EpochStartTime0",
226
+ StatusCode.InvalidCommand
227
+ );
228
+ }
229
+ if (epochKey1 === null && epochStartTime1 !== null) {
230
+ throw new StatusResponseError("EpochKey1 must be set if EpochStartTime1 is set", StatusCode.InvalidCommand);
231
+ }
232
+ if (epochKey2 !== null && epochKey1 === null) {
233
+ throw new StatusResponseError("EpochKey1 must be set if EpochKey2 is set", StatusCode.InvalidCommand);
234
+ }
235
+ if (epochKey2 !== null && (epochStartTime2 === null || epochStartTime1 === null || epochStartTime2 <= epochStartTime1)) {
236
+ throw new StatusResponseError(
237
+ "EpochStartTime2 must be set and greater than EpochStartTime1",
238
+ StatusCode.InvalidCommand
239
+ );
240
+ }
241
+ if (epochKey2 === null && epochStartTime2 !== null) {
242
+ throw new StatusResponseError("EpochKey2 must be set if EpochStartTime2 is set", StatusCode.InvalidCommand);
243
+ }
244
+ if (groupKeySecurityPolicy !== GroupKeyManagement.GroupKeySecurityPolicy.TrustFirst) {
245
+ throw new StatusResponseError("GroupKeySecurityPolicy must be TrustFirst", StatusCode.InvalidCommand);
246
+ }
247
+ if (groupKeyMulticastPolicy !== GroupKeyManagement.GroupKeyMulticastPolicy.PerGroupId) {
248
+ throw new StatusResponseError("GroupKeyMulticastPolicy must be PerGroupId", StatusCode.InvalidCommand);
249
+ }
250
+ const fabric = this.session.associatedFabric;
251
+ const fabricIndex = fabric.fabricIndex;
252
+ const existingIndex = this.state.groupKeySets.findIndex(
253
+ ({ groupKeySetId: entryId, fabricIndex: entryIndex }) => entryIndex === fabricIndex && entryId === groupKeySetId
23
254
  );
255
+ if (existingIndex !== -1) {
256
+ this.state.groupKeySets[existingIndex] = { ...groupKeySet, fabricIndex };
257
+ } else {
258
+ const keySetsOfFabric = this.state.groupKeySets.filter(
259
+ ({ fabricIndex: entryIndex }) => entryIndex === fabricIndex
260
+ ).length;
261
+ if (keySetsOfFabric >= this.state.maxGroupKeysPerFabric) {
262
+ throw new StatusResponseError(
263
+ `Too many group key sets for fabric ${fabricIndex}, maximum is ${this.state.maxGroupKeysPerFabric}`,
264
+ StatusCode.ResourceExhausted
265
+ );
266
+ }
267
+ this.state.groupKeySets.push({ ...groupKeySet, fabricIndex });
268
+ }
269
+ await fabric.groups.setFromGroupKeySet(groupKeySet);
24
270
  }
25
271
  keySetRead({
26
272
  groupKeySetId
27
273
  }) {
28
- if (this.context.session === void 0) {
29
- throw new ImplementationError("Session must be defined");
30
- }
31
- const fabric = this.context.session.associatedFabric;
32
- const groupKeySet = fabric.getGroupKeySet(groupKeySetId);
274
+ const fabric = this.session.associatedFabric;
275
+ const groupKeySet = fabric.groups.keySets.asGroupKeySet(groupKeySetId);
33
276
  if (groupKeySet === void 0) {
34
277
  throw new StatusResponseError(`GroupKeySet ${groupKeySetId} not found`, StatusCode.NotFound);
35
278
  }
@@ -42,23 +285,99 @@ class GroupKeyManagementServer extends GroupKeyManagementBehavior {
42
285
  }
43
286
  };
44
287
  }
45
- keySetRemove({ groupKeySetId }) {
288
+ async keySetRemove({ groupKeySetId }) {
46
289
  if (groupKeySetId === 0) {
47
290
  throw new StatusResponseError(`GroupKeySet ${groupKeySetId} cannot be removed`, StatusCode.InvalidCommand);
48
291
  }
49
- throw new StatusResponseError(`GroupKeySet ${groupKeySetId} not found`, StatusCode.NotFound);
292
+ const fabric = this.session.associatedFabric;
293
+ const fabricIndex = fabric.fabricIndex;
294
+ const existingIndex = this.state.groupKeySets.findIndex(
295
+ ({ groupKeySetId: entryId, fabricIndex: entryIndex }) => entryIndex === fabricIndex && entryId === groupKeySetId
296
+ );
297
+ if (existingIndex === -1) {
298
+ throw new StatusResponseError(`GroupKeySet ${groupKeySetId} not found`, StatusCode.NotFound);
299
+ }
300
+ this.state.groupKeySets.splice(existingIndex, 1);
301
+ const groupKeyMap = deepCopy(this.state.groupKeyMap);
302
+ this.state.groupKeyMap = groupKeyMap.filter(({ groupKeySetId: entryId }) => groupKeySetId !== entryId);
303
+ await fabric.groups.removeGroupKeySet(groupKeySetId);
50
304
  }
51
305
  keySetReadAllIndices() {
52
- if (this.context.session === void 0) {
53
- throw new ImplementationError("Session must be defined");
54
- }
55
- const fabric = this.context.session.associatedFabric;
56
- const groupKeySetIDs = fabric.getAllGroupKeySets().map(({ groupKeySetId }) => groupKeySetId);
306
+ const fabric = this.session.associatedFabric;
307
+ const fabricIndex = fabric.fabricIndex;
308
+ const groupKeySetIDs = this.state.groupKeySets.filter(({ fabricIndex: entryIndex }) => entryIndex === fabricIndex).map(({ groupKeySetId }) => groupKeySetId);
309
+ groupKeySetIDs.unshift(0);
57
310
  return {
58
311
  groupKeySetIDs
59
312
  };
60
313
  }
314
+ addEndpointForGroup(fabric, groupId, endpointId, groupName) {
315
+ const fabricIndex = fabric.fabricIndex;
316
+ const existingGroupIndex = this.state.groupTable.findIndex(
317
+ (entry) => entry.groupId === groupId && entry.fabricIndex === fabricIndex
318
+ );
319
+ if (existingGroupIndex !== -1) {
320
+ if (!this.state.groupTable[existingGroupIndex].endpoints.includes(endpointId)) {
321
+ this.state.groupTable[existingGroupIndex].endpoints.push(endpointId);
322
+ fabric.groups.endpoints.set(groupId, this.state.groupTable[existingGroupIndex].endpoints);
323
+ }
324
+ this.state.groupTable[existingGroupIndex].groupName = groupName;
325
+ } else {
326
+ this.state.groupTable.push({
327
+ groupId,
328
+ endpoints: [endpointId],
329
+ groupName,
330
+ fabricIndex
331
+ });
332
+ fabric.groups.endpoints.set(groupId, [endpointId]);
333
+ }
334
+ logger.info(
335
+ `Added endpoint ${endpointId} to group ${groupId} on fabric ${fabricIndex} with name "${groupName}"`
336
+ );
337
+ }
338
+ /**
339
+ * Remove endpoint from the provided group, or all groups if no groupId is provided.
340
+ */
341
+ removeEndpoint(fabric, endpointId, groupId) {
342
+ let existing = false;
343
+ const groupTable = this.state.groupTable;
344
+ const fabricIndex = fabric.fabricIndex;
345
+ for (const entry of groupTable) {
346
+ if (entry.fabricIndex !== fabricIndex || groupId !== void 0 && entry.groupId !== groupId) {
347
+ continue;
348
+ }
349
+ const endpointExists = entry.endpoints.includes(endpointId);
350
+ if (endpointExists) {
351
+ if (entry.endpoints.length === 1 && entry.endpoints[0] === endpointId) {
352
+ const groupId2 = entry.groupId;
353
+ const index = groupTable.indexOf(entry);
354
+ groupTable.splice(index, 1);
355
+ fabric.groups.endpoints.delete(groupId2);
356
+ } else {
357
+ entry.endpoints = entry.endpoints.filter((id) => id !== endpointId);
358
+ fabric.groups.endpoints.set(entry.groupId, entry.endpoints);
359
+ }
360
+ existing = true;
361
+ }
362
+ }
363
+ return existing;
364
+ }
61
365
  }
366
+ ((GroupKeyManagementServer2) => {
367
+ class State extends GroupKeyManagementBehavior.State {
368
+ /**
369
+ * Extended state to hold and persist the group key sets for this server. This structure contains all
370
+ * GroupKeySet entries for all fabrics beside the fabric specific entries of the groupKeyset 0
371
+ */
372
+ groupKeySets = [];
373
+ // Overwrite defaults to allow more than 3 group keys and 4 groups per fabric, because we can
374
+ maxGroupKeysPerFabric = 20;
375
+ // The Minimum would be 3;
376
+ maxGroupsPerFabric = 21;
377
+ // The Minimum would be 4;
378
+ }
379
+ GroupKeyManagementServer2.State = State;
380
+ })(GroupKeyManagementServer || (GroupKeyManagementServer = {}));
62
381
  export {
63
382
  GroupKeyManagementServer
64
383
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/behaviors/group-key-management/GroupKeyManagementServer.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,SAAS,2BAAyC;AAClD,SAAS,YAAY,2BAA2B;AAChD,SAAS,kCAAkC;AAKpC,MAAM,iCAAiC,2BAA2B;AAAA,EAC5D,aAA2B;AAChC,QAAI,KAAK,MAAM,0BAA0B,GAAG;AACxC,YAAM,IAAI,oBAAoB,0CAA0C;AAAA,IAC5E;AACA,QAAI,KAAK,MAAM,uBAAuB,GAAG;AACrC,YAAM,IAAI,oBAAoB,uCAAuC;AAAA,IACzE;AACA,SAAK,MAAM,aAAa,CAAC;AAAA,EAC7B;AAAA,EAES,cAA4B;AACjC,UAAM,IAAI;AAAA,MACN;AAAA,MACA,WAAW;AAAA,IACf;AAAA,EACJ;AAAA,EAES,WAAW;AAAA,IAChB;AAAA,EACJ,GAA8F;AAC1F,QAAI,KAAK,QAAQ,YAAY,QAAW;AACpC,YAAM,IAAI,oBAAoB,yBAAyB;AAAA,IAC3D;AACA,UAAM,SAAS,KAAK,QAAQ,QAAQ;AAEpC,UAAM,cAAc,OAAO,eAAe,aAAa;AACvD,QAAI,gBAAgB,QAAW;AAC3B,YAAM,IAAI,oBAAoB,eAAe,aAAa,cAAc,WAAW,QAAQ;AAAA,IAC/F;AAEA,WAAO;AAAA,MACH,aAAa;AAAA,QACT,GAAG;AAAA,QACH,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,MACf;AAAA,IACJ;AAAA,EACJ;AAAA,EAES,aAAa,EAAE,cAAc,GAAyD;AAC3F,QAAI,kBAAkB,GAAG;AACrB,YAAM,IAAI,oBAAoB,eAAe,aAAa,sBAAsB,WAAW,cAAc;AAAA,IAC7G;AAGA,UAAM,IAAI,oBAAoB,eAAe,aAAa,cAAc,WAAW,QAAQ;AAAA,EAC/F;AAAA,EAES,uBAAsF;AAC3F,QAAI,KAAK,QAAQ,YAAY,QAAW;AACpC,YAAM,IAAI,oBAAoB,yBAAyB;AAAA,IAC3D;AACA,UAAM,SAAS,KAAK,QAAQ,QAAQ;AAEpC,UAAM,iBAAiB,OAAO,mBAAmB,EAAE,IAAI,CAAC,EAAE,cAAc,MAAM,aAAa;AAE3F,WAAO;AAAA,MACH;AAAA,IACJ;AAAA,EACJ;AACJ;",
5
- "names": []
4
+ "mappings": "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",
5
+ "names": ["groupId", "GroupKeyManagementServer"]
6
6
  }
@@ -3,11 +3,27 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- /*** THIS FILE WILL BE REGENERATED IF YOU DO NOT REMOVE THIS MESSAGE ***/
7
- import { GroupsBehavior } from "./GroupsBehavior.js";
6
+ import { Groups } from "#clusters/groups";
7
+ declare const GroupsBase: import("../../index.js").ClusterBehavior.Type<import("#types").ClusterComposer.WithFeatures<Groups.Cluster, readonly [Groups.Feature]>, import("../../index.js").ClusterBehavior.Type<Groups.Cluster, import("../../index.js").ClusterBehavior.Type<import("#types").ClusterType.Of<{
8
+ readonly id: 0;
9
+ readonly revision: 0;
10
+ readonly name: "Unknown";
11
+ readonly attributes: {};
12
+ readonly commands: {};
13
+ readonly events: {};
14
+ }>, typeof import("../../index.js").ClusterBehavior, import("./GroupsInterface.js").GroupsInterface>, import("./GroupsInterface.js").GroupsInterface>, import("./GroupsInterface.js").GroupsInterface>;
8
15
  /**
9
16
  * This is the default server implementation of {@link GroupsBehavior}.
10
17
  */
11
- export declare class GroupsServer extends GroupsBehavior {
18
+ export declare class GroupsServer extends GroupsBase {
19
+ #private;
20
+ initialize(): void;
21
+ addGroup({ groupId, groupName }: Groups.AddGroupRequest): Promise<Groups.AddGroupResponse>;
22
+ viewGroup({ groupId }: Groups.ViewGroupRequest): Groups.ViewGroupResponse;
23
+ getGroupMembership({ groupList, }: Groups.GetGroupMembershipRequest): Promise<Groups.GetGroupMembershipResponse>;
24
+ removeGroup({ groupId }: Groups.RemoveGroupRequest): Promise<Groups.RemoveGroupResponse>;
25
+ removeAllGroups(): Promise<void>;
26
+ addGroupIfIdentifying({ groupId, groupName }: Groups.AddGroupIfIdentifyingRequest): Promise<void>;
12
27
  }
28
+ export {};
13
29
  //# sourceMappingURL=GroupsServer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GroupsServer.d.ts","sourceRoot":"","sources":["../../../../src/behaviors/groups/GroupsServer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,yEAAyE;AAEzE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;GAEG;AACH,qBAAa,YAAa,SAAQ,cAAc;CAAG"}
1
+ {"version":3,"file":"GroupsServer.d.ts","sourceRoot":"","sources":["../../../../src/behaviors/groups/GroupsServer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAqB1C,QAAA,MAAM,UAAU;;;;;;;sMAAiD,CAAC;AA+BlE;;GAEG;AACH,qBAAa,YAAa,SAAQ,UAAU;;IAC/B,UAAU;IAkBJ,QAAQ,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC;IA6BhG,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,iBAAiB;IAkBnE,kBAAkB,CAAC,EAC9B,SAAS,GACZ,EAAE,MAAM,CAAC,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,0BAA0B,CAAC;IAmBjE,WAAW,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC;IAqBxF,eAAe;IAWf,qBAAqB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,4BAA4B;CASnG"}