@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.
- package/dist/cjs/behavior/Behavior.d.ts +2 -1
- package/dist/cjs/behavior/Behavior.d.ts.map +1 -1
- package/dist/cjs/behavior/Behavior.js +1 -1
- package/dist/cjs/behavior/Behavior.js.map +1 -1
- package/dist/cjs/behavior/Transitions.js +2 -2
- package/dist/cjs/behavior/Transitions.js.map +1 -1
- package/dist/cjs/behavior/context/server/OnlineContext.d.ts +3 -3
- package/dist/cjs/behavior/context/server/OnlineContext.d.ts.map +1 -1
- package/dist/cjs/behavior/context/server/OnlineContext.js +12 -9
- package/dist/cjs/behavior/context/server/OnlineContext.js.map +1 -1
- package/dist/cjs/behavior/internal/ClientBehaviorBacking.d.ts +2 -1
- package/dist/cjs/behavior/internal/ClientBehaviorBacking.d.ts.map +1 -1
- package/dist/cjs/behavior/internal/ClientBehaviorBacking.js.map +1 -1
- package/dist/cjs/behavior/system/network/NetworkBehavior.d.ts.map +1 -1
- package/dist/cjs/behavior/system/network/NetworkBehavior.js +2 -1
- package/dist/cjs/behavior/system/network/NetworkBehavior.js.map +1 -1
- package/dist/cjs/behavior/system/network/ServerGroupNetworking.d.ts +18 -0
- package/dist/cjs/behavior/system/network/ServerGroupNetworking.d.ts.map +1 -0
- package/dist/cjs/behavior/system/network/ServerGroupNetworking.js +150 -0
- package/dist/cjs/behavior/system/network/ServerGroupNetworking.js.map +6 -0
- package/dist/cjs/behavior/system/network/ServerNetworkRuntime.d.ts.map +1 -1
- package/dist/cjs/behavior/system/network/ServerNetworkRuntime.js +25 -7
- package/dist/cjs/behavior/system/network/ServerNetworkRuntime.js.map +1 -1
- package/dist/cjs/behavior/system/sessions/SessionsBehavior.d.ts.map +1 -1
- package/dist/cjs/behavior/system/sessions/SessionsBehavior.js.map +1 -1
- package/dist/cjs/behaviors/access-control/AccessControlServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/access-control/AccessControlServer.js +18 -12
- package/dist/cjs/behaviors/access-control/AccessControlServer.js.map +1 -1
- package/dist/cjs/behaviors/color-control/ColorControlServer.d.ts +4 -4
- package/dist/cjs/behaviors/color-control/ColorControlServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/color-control/ColorControlServer.js +3 -3
- package/dist/cjs/behaviors/color-control/ColorControlServer.js.map +1 -1
- package/dist/cjs/behaviors/general-commissioning/GeneralCommissioningServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/general-commissioning/GeneralCommissioningServer.js +5 -4
- package/dist/cjs/behaviors/general-commissioning/GeneralCommissioningServer.js.map +1 -1
- package/dist/cjs/behaviors/general-commissioning/ServerNodeFailsafeContext.d.ts +1 -1
- package/dist/cjs/behaviors/general-commissioning/ServerNodeFailsafeContext.d.ts.map +1 -1
- package/dist/cjs/behaviors/group-key-management/GroupKeyManagementServer.d.ts +27 -4
- package/dist/cjs/behaviors/group-key-management/GroupKeyManagementServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/group-key-management/GroupKeyManagementServer.js +340 -21
- package/dist/cjs/behaviors/group-key-management/GroupKeyManagementServer.js.map +2 -2
- package/dist/cjs/behaviors/groups/GroupsServer.d.ts +19 -3
- package/dist/cjs/behaviors/groups/GroupsServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/groups/GroupsServer.js +138 -1
- package/dist/cjs/behaviors/groups/GroupsServer.js.map +2 -2
- package/dist/cjs/behaviors/level-control/LevelControlServer.d.ts +5 -5
- package/dist/cjs/behaviors/level-control/LevelControlServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/level-control/LevelControlServer.js +3 -3
- package/dist/cjs/behaviors/level-control/LevelControlServer.js.map +1 -1
- package/dist/cjs/behaviors/mode-select/ModeSelectServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/mode-select/ModeSelectServer.js +3 -3
- package/dist/cjs/behaviors/mode-select/ModeSelectServer.js.map +1 -1
- package/dist/cjs/behaviors/on-off/OnOffServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/on-off/OnOffServer.js +3 -3
- package/dist/cjs/behaviors/on-off/OnOffServer.js.map +1 -1
- package/dist/cjs/behaviors/operational-credentials/OperationalCredentialsServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/operational-credentials/OperationalCredentialsServer.js +14 -8
- package/dist/cjs/behaviors/operational-credentials/OperationalCredentialsServer.js.map +1 -1
- package/dist/cjs/endpoint/Endpoint.js +1 -1
- package/dist/cjs/endpoint/Endpoint.js.map +1 -1
- package/dist/cjs/node/Node.d.ts +1 -1
- package/dist/cjs/node/Node.d.ts.map +1 -1
- package/dist/cjs/node/Node.js +2 -2
- package/dist/cjs/node/Node.js.map +1 -1
- package/dist/cjs/node/ServerNode.d.ts +1 -1
- package/dist/cjs/node/ServerNode.d.ts.map +1 -1
- package/dist/cjs/node/ServerNode.js +2 -2
- package/dist/cjs/node/ServerNode.js.map +1 -1
- package/dist/cjs/node/client/NodePeerAddressStore.d.ts +1 -1
- package/dist/cjs/node/client/NodePeerAddressStore.d.ts.map +1 -1
- package/dist/cjs/node/server/InteractionServer.d.ts +2 -2
- package/dist/cjs/node/server/InteractionServer.d.ts.map +1 -1
- package/dist/cjs/node/server/InteractionServer.js +1 -1
- package/dist/cjs/node/server/InteractionServer.js.map +1 -1
- package/dist/cjs/node/server/ServerSubscription.d.ts +4 -4
- package/dist/cjs/node/server/ServerSubscription.d.ts.map +1 -1
- package/dist/cjs/node/server/ServerSubscription.js.map +1 -1
- package/dist/esm/behavior/Behavior.d.ts +2 -1
- package/dist/esm/behavior/Behavior.d.ts.map +1 -1
- package/dist/esm/behavior/Behavior.js +2 -2
- package/dist/esm/behavior/Behavior.js.map +1 -1
- package/dist/esm/behavior/Transitions.js +1 -1
- package/dist/esm/behavior/context/server/OnlineContext.d.ts +3 -3
- package/dist/esm/behavior/context/server/OnlineContext.d.ts.map +1 -1
- package/dist/esm/behavior/context/server/OnlineContext.js +13 -10
- package/dist/esm/behavior/context/server/OnlineContext.js.map +1 -1
- package/dist/esm/behavior/internal/ClientBehaviorBacking.d.ts +2 -1
- package/dist/esm/behavior/internal/ClientBehaviorBacking.d.ts.map +1 -1
- package/dist/esm/behavior/internal/ClientBehaviorBacking.js.map +1 -1
- package/dist/esm/behavior/system/network/NetworkBehavior.d.ts.map +1 -1
- package/dist/esm/behavior/system/network/NetworkBehavior.js +2 -1
- package/dist/esm/behavior/system/network/NetworkBehavior.js.map +1 -1
- package/dist/esm/behavior/system/network/ServerGroupNetworking.d.ts +18 -0
- package/dist/esm/behavior/system/network/ServerGroupNetworking.d.ts.map +1 -0
- package/dist/esm/behavior/system/network/ServerGroupNetworking.js +130 -0
- package/dist/esm/behavior/system/network/ServerGroupNetworking.js.map +6 -0
- package/dist/esm/behavior/system/network/ServerNetworkRuntime.d.ts.map +1 -1
- package/dist/esm/behavior/system/network/ServerNetworkRuntime.js +23 -5
- package/dist/esm/behavior/system/network/ServerNetworkRuntime.js.map +1 -1
- package/dist/esm/behavior/system/sessions/SessionsBehavior.d.ts.map +1 -1
- package/dist/esm/behavior/system/sessions/SessionsBehavior.js.map +1 -1
- package/dist/esm/behaviors/access-control/AccessControlServer.d.ts.map +1 -1
- package/dist/esm/behaviors/access-control/AccessControlServer.js +20 -13
- package/dist/esm/behaviors/access-control/AccessControlServer.js.map +1 -1
- package/dist/esm/behaviors/color-control/ColorControlServer.d.ts +4 -4
- package/dist/esm/behaviors/color-control/ColorControlServer.d.ts.map +1 -1
- package/dist/esm/behaviors/color-control/ColorControlServer.js +3 -3
- package/dist/esm/behaviors/color-control/ColorControlServer.js.map +1 -1
- package/dist/esm/behaviors/general-commissioning/GeneralCommissioningServer.d.ts.map +1 -1
- package/dist/esm/behaviors/general-commissioning/GeneralCommissioningServer.js +6 -5
- package/dist/esm/behaviors/general-commissioning/GeneralCommissioningServer.js.map +1 -1
- package/dist/esm/behaviors/general-commissioning/ServerNodeFailsafeContext.d.ts +1 -1
- package/dist/esm/behaviors/general-commissioning/ServerNodeFailsafeContext.d.ts.map +1 -1
- package/dist/esm/behaviors/group-key-management/GroupKeyManagementServer.d.ts +27 -4
- package/dist/esm/behaviors/group-key-management/GroupKeyManagementServer.d.ts.map +1 -1
- package/dist/esm/behaviors/group-key-management/GroupKeyManagementServer.js +342 -23
- package/dist/esm/behaviors/group-key-management/GroupKeyManagementServer.js.map +2 -2
- package/dist/esm/behaviors/groups/GroupsServer.d.ts +19 -3
- package/dist/esm/behaviors/groups/GroupsServer.d.ts.map +1 -1
- package/dist/esm/behaviors/groups/GroupsServer.js +147 -1
- package/dist/esm/behaviors/groups/GroupsServer.js.map +1 -1
- package/dist/esm/behaviors/level-control/LevelControlServer.d.ts +5 -5
- package/dist/esm/behaviors/level-control/LevelControlServer.d.ts.map +1 -1
- package/dist/esm/behaviors/level-control/LevelControlServer.js +3 -3
- package/dist/esm/behaviors/level-control/LevelControlServer.js.map +1 -1
- package/dist/esm/behaviors/mode-select/ModeSelectServer.d.ts.map +1 -1
- package/dist/esm/behaviors/mode-select/ModeSelectServer.js +3 -3
- package/dist/esm/behaviors/mode-select/ModeSelectServer.js.map +1 -1
- package/dist/esm/behaviors/on-off/OnOffServer.d.ts.map +1 -1
- package/dist/esm/behaviors/on-off/OnOffServer.js +3 -3
- package/dist/esm/behaviors/on-off/OnOffServer.js.map +1 -1
- package/dist/esm/behaviors/operational-credentials/OperationalCredentialsServer.d.ts.map +1 -1
- package/dist/esm/behaviors/operational-credentials/OperationalCredentialsServer.js +15 -9
- package/dist/esm/behaviors/operational-credentials/OperationalCredentialsServer.js.map +1 -1
- package/dist/esm/endpoint/Endpoint.js +1 -1
- package/dist/esm/endpoint/Endpoint.js.map +1 -1
- package/dist/esm/node/Node.d.ts +1 -1
- package/dist/esm/node/Node.d.ts.map +1 -1
- package/dist/esm/node/Node.js +1 -1
- package/dist/esm/node/Node.js.map +1 -1
- package/dist/esm/node/ServerNode.d.ts +1 -1
- package/dist/esm/node/ServerNode.d.ts.map +1 -1
- package/dist/esm/node/ServerNode.js +1 -1
- package/dist/esm/node/client/NodePeerAddressStore.d.ts +1 -1
- package/dist/esm/node/client/NodePeerAddressStore.d.ts.map +1 -1
- package/dist/esm/node/server/InteractionServer.d.ts +2 -2
- package/dist/esm/node/server/InteractionServer.d.ts.map +1 -1
- package/dist/esm/node/server/InteractionServer.js +2 -2
- package/dist/esm/node/server/InteractionServer.js.map +1 -1
- package/dist/esm/node/server/ServerSubscription.d.ts +4 -4
- package/dist/esm/node/server/ServerSubscription.d.ts.map +1 -1
- package/dist/esm/node/server/ServerSubscription.js.map +1 -1
- package/package.json +7 -7
- package/src/behavior/Behavior.ts +2 -2
- package/src/behavior/Transitions.ts +1 -1
- package/src/behavior/context/server/OnlineContext.ts +21 -19
- package/src/behavior/internal/ClientBehaviorBacking.ts +2 -1
- package/src/behavior/system/commissioning/CommissioningClient.ts +1 -1
- package/src/behavior/system/network/NetworkBehavior.ts +2 -1
- package/src/behavior/system/network/ServerGroupNetworking.ts +150 -0
- package/src/behavior/system/network/ServerNetworkRuntime.ts +27 -5
- package/src/behavior/system/sessions/SessionsBehavior.ts +5 -5
- package/src/behaviors/access-control/AccessControlServer.ts +21 -14
- package/src/behaviors/color-control/ColorControlServer.ts +4 -4
- package/src/behaviors/general-commissioning/GeneralCommissioningServer.ts +8 -7
- package/src/behaviors/general-commissioning/ServerNodeFailsafeContext.ts +1 -1
- package/src/behaviors/group-key-management/GroupKeyManagementServer.ts +441 -26
- package/src/behaviors/groups/GroupsServer.ts +181 -3
- package/src/behaviors/level-control/LevelControlServer.ts +5 -5
- package/src/behaviors/mode-select/ModeSelectServer.ts +3 -3
- package/src/behaviors/on-off/OnOffServer.ts +3 -3
- package/src/behaviors/operational-credentials/OperationalCredentialsServer.ts +17 -9
- package/src/endpoint/Endpoint.ts +1 -1
- package/src/node/Node.ts +1 -1
- package/src/node/ServerNode.ts +1 -1
- package/src/node/client/NodePeerAddressStore.ts +1 -1
- package/src/node/server/InteractionServer.ts +5 -6
- 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():
|
|
15
|
-
keySetRead({ groupKeySetId, }: GroupKeyManagement.KeySetReadRequest):
|
|
16
|
-
keySetRemove({ groupKeySetId }: GroupKeyManagement.KeySetRemoveRequest):
|
|
17
|
-
keySetReadAllIndices():
|
|
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;
|
|
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 {
|
|
7
|
-
import {
|
|
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.
|
|
12
|
-
throw new ImplementationError("
|
|
29
|
+
if (this.features.cacheAndSync) {
|
|
30
|
+
throw new ImplementationError("The CacheAndSync feature is provisional. Do not use it.");
|
|
13
31
|
}
|
|
14
|
-
if (this.state.
|
|
15
|
-
|
|
32
|
+
if (this.state.groupKeySets === void 0) {
|
|
33
|
+
this.state.groupKeySets = [];
|
|
16
34
|
}
|
|
17
|
-
this.
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
29
|
-
|
|
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
|
-
|
|
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
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
|
|
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,
|
|
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
|
-
|
|
7
|
-
|
|
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
|
|
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;
|
|
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"}
|