@project-chip/matter.js 0.0.2 → 0.2.0

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 (136) hide show
  1. package/README.md +14 -0
  2. package/dist/cjs/cluster/AccessControlCluster.js +105 -0
  3. package/dist/cjs/cluster/BasicInformationCluster.js +92 -0
  4. package/dist/cjs/cluster/BindingCluster.js +51 -0
  5. package/dist/cjs/cluster/BridgedDeviceBasicInformationCluster.js +75 -0
  6. package/dist/cjs/cluster/Cluster.js +49 -0
  7. package/dist/cjs/cluster/DescriptorCluster.js +53 -0
  8. package/dist/cjs/cluster/GeneralCommissioningCluster.js +89 -0
  9. package/dist/cjs/cluster/GroupsCluster.js +140 -0
  10. package/dist/cjs/cluster/IdentifyCluster.js +55 -0
  11. package/dist/cjs/cluster/LabelCluster.js +55 -0
  12. package/dist/cjs/cluster/OnOffCluster.js +105 -0
  13. package/dist/cjs/cluster/OperationalCredentialsCluster.js +205 -0
  14. package/dist/cjs/cluster/ScenesCluster.js +236 -0
  15. package/dist/cjs/common/AttributeId.js +23 -0
  16. package/dist/cjs/common/ClusterId.js +24 -0
  17. package/dist/cjs/common/DeviceTypeId.js +23 -0
  18. package/dist/cjs/common/EndpointNumber.js +23 -0
  19. package/dist/cjs/common/FabricId.js +24 -0
  20. package/dist/cjs/common/FabricIndex.js +28 -0
  21. package/dist/cjs/common/GroupId.js +30 -0
  22. package/dist/cjs/common/NodeId.js +31 -0
  23. package/dist/cjs/common/SubjectId.js +11 -0
  24. package/dist/cjs/common/VendorId.js +25 -0
  25. package/{dist-cjs → dist/cjs}/matter.js +12 -0
  26. package/dist/cjs/protocol/InteractionProtocol.js +136 -0
  27. package/dist/cjs/schema/BitmapSchema.js +133 -0
  28. package/{dist-cjs → dist/cjs}/tlv/TlvObject.js +6 -2
  29. package/{dist-cjs → dist/cjs}/util/ByteArray.js +2 -0
  30. package/{dist-cjs → dist/cjs}/util/Type.js +3 -0
  31. package/dist/dts/cluster/AccessControlCluster.d.ts +108 -0
  32. package/dist/dts/cluster/BasicInformationCluster.d.ts +57 -0
  33. package/dist/dts/cluster/BindingCluster.d.ts +23 -0
  34. package/dist/dts/cluster/BridgedDeviceBasicInformationCluster.d.ts +53 -0
  35. package/dist/dts/cluster/Cluster.d.ts +109 -0
  36. package/dist/dts/cluster/DescriptorCluster.d.ts +25 -0
  37. package/dist/dts/cluster/GeneralCommissioningCluster.d.ts +94 -0
  38. package/dist/dts/cluster/GroupsCluster.d.ts +92 -0
  39. package/dist/dts/cluster/IdentifyCluster.d.ts +60 -0
  40. package/dist/dts/cluster/LabelCluster.d.ts +34 -0
  41. package/dist/dts/cluster/OnOffCluster.d.ts +85 -0
  42. package/dist/dts/cluster/OperationalCredentialsCluster.d.ts +156 -0
  43. package/dist/dts/cluster/ScenesCluster.d.ts +200 -0
  44. package/dist/dts/common/AttributeId.d.ts +17 -0
  45. package/dist/dts/common/ClusterId.d.ts +18 -0
  46. package/dist/dts/common/DeviceTypeId.d.ts +17 -0
  47. package/dist/dts/common/EndpointNumber.d.ts +17 -0
  48. package/dist/dts/common/FabricId.d.ts +18 -0
  49. package/dist/dts/common/FabricIndex.d.ts +22 -0
  50. package/dist/dts/common/GroupId.d.ts +24 -0
  51. package/dist/dts/common/NodeId.d.ts +19 -0
  52. package/dist/dts/common/SubjectId.d.ts +15 -0
  53. package/dist/dts/common/VendorId.d.ts +19 -0
  54. package/dist/{matter.d.ts → dts/matter.d.ts} +12 -0
  55. package/dist/dts/protocol/InteractionProtocol.d.ts +159 -0
  56. package/dist/{schema → dts/schema}/BitmapSchema.d.ts +15 -3
  57. package/dist/{util → dts/util}/Type.d.ts +1 -0
  58. package/dist/es/cluster/AccessControlCluster.js +102 -0
  59. package/dist/es/cluster/BasicInformationCluster.js +89 -0
  60. package/dist/es/cluster/BindingCluster.js +48 -0
  61. package/dist/es/cluster/BridgedDeviceBasicInformationCluster.js +72 -0
  62. package/dist/es/cluster/Cluster.js +36 -0
  63. package/dist/es/cluster/DescriptorCluster.js +50 -0
  64. package/dist/es/cluster/GeneralCommissioningCluster.js +86 -0
  65. package/dist/es/cluster/GroupsCluster.js +137 -0
  66. package/dist/es/cluster/IdentifyCluster.js +52 -0
  67. package/dist/es/cluster/LabelCluster.js +52 -0
  68. package/dist/es/cluster/OnOffCluster.js +102 -0
  69. package/dist/es/cluster/OperationalCredentialsCluster.js +202 -0
  70. package/dist/es/cluster/ScenesCluster.js +233 -0
  71. package/dist/es/common/AttributeId.js +19 -0
  72. package/dist/es/common/ClusterId.js +20 -0
  73. package/dist/es/common/DeviceTypeId.js +19 -0
  74. package/dist/es/common/EndpointNumber.js +19 -0
  75. package/dist/es/common/FabricId.js +20 -0
  76. package/dist/es/common/FabricIndex.js +24 -0
  77. package/dist/es/common/GroupId.js +26 -0
  78. package/dist/es/common/NodeId.js +27 -0
  79. package/dist/es/common/SubjectId.js +8 -0
  80. package/dist/es/common/VendorId.js +21 -0
  81. package/dist/{matter.js → es/matter.js} +12 -0
  82. package/dist/es/protocol/InteractionProtocol.js +133 -0
  83. package/dist/es/schema/BitmapSchema.js +125 -0
  84. package/dist/{tlv → es/tlv}/TlvObject.js +6 -2
  85. package/dist/{util → es/util}/ByteArray.js +2 -0
  86. package/dist/{util → es/util}/Type.js +1 -1
  87. package/package.json +7 -8
  88. package/dist/schema/BitmapSchema.js +0 -48
  89. package/dist-cjs/schema/BitmapSchema.js +0 -55
  90. /package/{dist-cjs → dist/cjs}/schema/Schema.js +0 -0
  91. /package/{dist-cjs → dist/cjs}/spec/Specifications.js +0 -0
  92. /package/{dist-cjs → dist/cjs}/tlv/TlvAny.js +0 -0
  93. /package/{dist-cjs → dist/cjs}/tlv/TlvArray.js +0 -0
  94. /package/{dist-cjs → dist/cjs}/tlv/TlvBoolean.js +0 -0
  95. /package/{dist-cjs → dist/cjs}/tlv/TlvCodec.js +0 -0
  96. /package/{dist-cjs → dist/cjs}/tlv/TlvNullable.js +0 -0
  97. /package/{dist-cjs → dist/cjs}/tlv/TlvNumber.js +0 -0
  98. /package/{dist-cjs → dist/cjs}/tlv/TlvSchema.js +0 -0
  99. /package/{dist-cjs → dist/cjs}/tlv/TlvString.js +0 -0
  100. /package/{dist-cjs → dist/cjs}/tlv/TlvVoid.js +0 -0
  101. /package/{dist-cjs → dist/cjs}/tlv/TlvWrapper.js +0 -0
  102. /package/{dist-cjs → dist/cjs}/util/DataReader.js +0 -0
  103. /package/{dist-cjs → dist/cjs}/util/DataWriter.js +0 -0
  104. /package/{dist-cjs → dist/cjs}/util/Number.js +0 -0
  105. /package/dist/{schema → dts/schema}/Schema.d.ts +0 -0
  106. /package/dist/{spec → dts/spec}/Specifications.d.ts +0 -0
  107. /package/dist/{tlv → dts/tlv}/TlvAny.d.ts +0 -0
  108. /package/dist/{tlv → dts/tlv}/TlvArray.d.ts +0 -0
  109. /package/dist/{tlv → dts/tlv}/TlvBoolean.d.ts +0 -0
  110. /package/dist/{tlv → dts/tlv}/TlvCodec.d.ts +0 -0
  111. /package/dist/{tlv → dts/tlv}/TlvNullable.d.ts +0 -0
  112. /package/dist/{tlv → dts/tlv}/TlvNumber.d.ts +0 -0
  113. /package/dist/{tlv → dts/tlv}/TlvObject.d.ts +0 -0
  114. /package/dist/{tlv → dts/tlv}/TlvSchema.d.ts +0 -0
  115. /package/dist/{tlv → dts/tlv}/TlvString.d.ts +0 -0
  116. /package/dist/{tlv → dts/tlv}/TlvVoid.d.ts +0 -0
  117. /package/dist/{tlv → dts/tlv}/TlvWrapper.d.ts +0 -0
  118. /package/dist/{util → dts/util}/ByteArray.d.ts +0 -0
  119. /package/dist/{util → dts/util}/DataReader.d.ts +0 -0
  120. /package/dist/{util → dts/util}/DataWriter.d.ts +0 -0
  121. /package/dist/{util → dts/util}/Number.d.ts +0 -0
  122. /package/dist/{schema → es/schema}/Schema.js +0 -0
  123. /package/dist/{spec → es/spec}/Specifications.js +0 -0
  124. /package/dist/{tlv → es/tlv}/TlvAny.js +0 -0
  125. /package/dist/{tlv → es/tlv}/TlvArray.js +0 -0
  126. /package/dist/{tlv → es/tlv}/TlvBoolean.js +0 -0
  127. /package/dist/{tlv → es/tlv}/TlvCodec.js +0 -0
  128. /package/dist/{tlv → es/tlv}/TlvNullable.js +0 -0
  129. /package/dist/{tlv → es/tlv}/TlvNumber.js +0 -0
  130. /package/dist/{tlv → es/tlv}/TlvSchema.js +0 -0
  131. /package/dist/{tlv → es/tlv}/TlvString.js +0 -0
  132. /package/dist/{tlv → es/tlv}/TlvVoid.js +0 -0
  133. /package/dist/{tlv → es/tlv}/TlvWrapper.js +0 -0
  134. /package/dist/{util → es/util}/DataReader.js +0 -0
  135. /package/dist/{util → es/util}/DataWriter.js +0 -0
  136. /package/dist/{util → es/util}/Number.js +0 -0
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022 Project CHIP Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { TlvWrapper } from "../tlv/TlvWrapper.js";
7
+ /**
8
+ * A Endpoint Number is a 16-bit number that that indicates an instance of a device type.
9
+ *
10
+ * @see {@link MatterCoreSpecificationV1_0} § 7.18.2.11
11
+ */
12
+ export declare class EndpointNumber {
13
+ readonly number: number;
14
+ constructor(number: number);
15
+ }
16
+ /** Tlv schema for an Endpoint number. */
17
+ export declare const TlvEndpointNumber: TlvWrapper<EndpointNumber, number>;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022 Project CHIP Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { TlvWrapper } from "../tlv/TlvWrapper.js";
7
+ /**
8
+ * A Fabric ID is a 64-bit number that uniquely identifies the Fabric within the scope of
9
+ * a particular root CA.
10
+ *
11
+ * @see {@link MatterCoreSpecificationV1_0} § 2.5.1
12
+ */
13
+ export declare class FabricId {
14
+ readonly id: bigint;
15
+ constructor(id: bigint);
16
+ }
17
+ /** Tlv schema for a Node Identifier. */
18
+ export declare const TlvFabricId: TlvWrapper<FabricId, number | bigint>;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022 Project CHIP Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { TlvWrapper } from "../tlv/TlvWrapper.js";
7
+ /**
8
+ * Each fabric supported on a node is referenced by fabric-index that is unique on the node. This
9
+ * fabric-index enables the look-up of the full fabric information from the fabric-index. A fabric-index
10
+ * of 0 (zero) or null SHALL indicate that there is no fabric associated with the context in which the
11
+ * fabric-index is being used. If fabric-index is used in a context that is exclusively associated with
12
+ * a fabric, such as fabric-scoped data model elements, then the fabric-index values SHALL NOT include 0
13
+ * (zero) or null.
14
+ *
15
+ * @see {@link MatterCoreSpecificationV1_0} § 7.5.2
16
+ */
17
+ export declare class FabricIndex {
18
+ readonly index: number;
19
+ constructor(index: number);
20
+ }
21
+ /** Tlv Schema for a Fabric Index. */
22
+ export declare const TlvFabricIndex: TlvWrapper<FabricIndex, number>;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022 Project CHIP Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { TlvWrapper } from "../tlv/TlvWrapper.js";
7
+ /**
8
+ * A Group Identifier (Group ID or GID) is a 16-bit number that identifies a set of Nodes across a
9
+ * Fabric at the message layer (see Section 4.15, “Group Key Management”). A Group ID can further
10
+ * be bound to one or more Endpoints within each Node in the group at the interaction layer.
11
+ *
12
+ * The Group ID space is allocated as described in Table 2, “Group ID Allocations”:
13
+ * 0x0000 - Null or unspecified Group ID
14
+ * 0x0001 - 0xFEFF: Application Group ID, assigned by fabric Administrator
15
+ * 0xFF00 - 0xFFFF: Universal Group ID range reserved for static multicast and anycast identifiers
16
+ *
17
+ * @see {@link MatterCoreSpecificationV1_0} § 2.5.4
18
+ */
19
+ export declare class GroupId {
20
+ readonly id: number;
21
+ constructor(id: number);
22
+ }
23
+ /** Tlv Schema for a Group Id. */
24
+ export declare const TlvGroupId: TlvWrapper<GroupId, number>;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022 Project CHIP Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { TlvWrapper } from "../tlv/TlvWrapper.js";
7
+ /**
8
+ * A Node Identifier (Node ID) is a 64-bit number that uniquely identifies an individual Node or a
9
+ * group of Nodes on a Fabric.
10
+ *
11
+ * @see {@link MatterCoreSpecificationV1_0} § 2.5.5
12
+ */
13
+ export declare class NodeId {
14
+ readonly id: bigint;
15
+ constructor(id: bigint);
16
+ toString(): string;
17
+ }
18
+ /** Tlv schema for a Node Identifier. */
19
+ export declare const TlvNodeId: TlvWrapper<NodeId, number | bigint>;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022 Project CHIP Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { NodeId } from "./NodeId.js";
7
+ /**
8
+ * The meaning of a "Subject" is primarily that of describing the source for an action, using a given
9
+ * authentication method provided by the Secure Channel architecture.
10
+ *
11
+ * @see {@link MatterCoreSpecificationV1_0} § 6.6.2.1
12
+ */
13
+ export type SubjectId = NodeId;
14
+ /** Tlv schema for a Subject Id */
15
+ export declare const TlvSubjectId: import("../matter.js").TlvWrapper<NodeId, number | bigint>;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022 Project CHIP Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { TlvWrapper } from "../tlv/TlvWrapper.js";
7
+ /**
8
+ * A Vendor Identifier (Vendor ID or VID) is a 16-bit number that uniquely identifies a particular
9
+ * product manufacturer, vendor, or group thereof. Each Vendor ID is statically allocated by the
10
+ * Connectivity Standards Alliance (see [CSA Manufacturer Code Database]).
11
+ *
12
+ * @see {@link MatterCoreSpecificationV1_0} § 2.5.2
13
+ */
14
+ export declare class VendorId {
15
+ readonly id: number;
16
+ constructor(id: number);
17
+ }
18
+ /** Data model for a Vendor Identifier. */
19
+ export declare const TlvVendorId: TlvWrapper<VendorId, number>;
@@ -20,3 +20,15 @@ export * from "./tlv/TlvString.js";
20
20
  export * from "./tlv/TlvNumber.js";
21
21
  export * from "./tlv/TlvVoid.js";
22
22
  export * from "./tlv/TlvWrapper.js";
23
+ export * from "./cluster/AccessControlCluster.js";
24
+ export * from "./cluster/BasicInformationCluster.js";
25
+ export * from "./cluster/BindingCluster.js";
26
+ export * from "./cluster/BridgedDeviceBasicInformationCluster.js";
27
+ export * from "./cluster/DescriptorCluster.js";
28
+ export * from "./cluster/GeneralCommissioningCluster.js";
29
+ export * from "./cluster/GroupsCluster.js";
30
+ export * from "./cluster/IdentifyCluster.js";
31
+ export * from "./cluster/LabelCluster.js";
32
+ export * from "./cluster/OnOffCluster.js";
33
+ export * from "./cluster/OperationalCredentialsCluster.js";
34
+ export * from "./cluster/ScenesCluster.js";
@@ -0,0 +1,159 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022 Project CHIP Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * @see {@link MatterCoreSpecificationV1_0}, section 8.10
8
+ */
9
+ export declare const enum StatusCode {
10
+ Success = 0,
11
+ Failure = 1,
12
+ InvalidSubscription = 125,
13
+ UnsupportedAccess = 126,
14
+ UnsupportedEndpoint = 127,
15
+ InvalidAction = 128,
16
+ UnsupportedCommand = 129,
17
+ InvalidCommand = 133,
18
+ UnsupportedAttribute = 134,
19
+ ConstraintError = 135,
20
+ UnsupportedWrite = 136,
21
+ ResourceExhausted = 137,
22
+ NotFound = 139,
23
+ UnreportableAttribute = 140,
24
+ InvalidDataType = 141,
25
+ UnsupportedRead = 143,
26
+ DataVersionMismatch = 146,
27
+ Timeout = 148,
28
+ UnsupportedMode = 155,
29
+ Busy = 156,
30
+ UnsupportedCluster = 195,
31
+ NoUpstreamSubscription = 197,
32
+ NeedsTimedInteraction = 198,
33
+ UnsupportedEvent = 199,
34
+ PathsExhausted = 200,
35
+ TimedRequestMismatch = 201,
36
+ FailsafeRequired = 202
37
+ }
38
+ /**
39
+ * @see {@link MatterCoreSpecificationV1_0}, section 10.6.1. StatusResponseMessage
40
+ */
41
+ export declare const TlvStatusResponse: import("../tlv/TlvObject.js").ObjectSchema<{
42
+ status: import("../tlv/TlvObject.js").FieldType<StatusCode>;
43
+ interactionModelRevision: import("../tlv/TlvObject.js").FieldType<number>;
44
+ }>;
45
+ /**
46
+ * @see {@link MatterCoreSpecificationV1_0}, section 10.6.2. ReadRequestMessage
47
+ */
48
+ export declare const TlvReadRequest: import("../tlv/TlvObject.js").ObjectSchema<{
49
+ attributes: import("../tlv/TlvObject.js").FieldType<{
50
+ id?: number | undefined;
51
+ endpointId?: number | undefined;
52
+ clusterId?: number | undefined;
53
+ }[]>;
54
+ isFabricFiltered: import("../tlv/TlvObject.js").FieldType<boolean>;
55
+ interactionModelRevision: import("../tlv/TlvObject.js").FieldType<number>;
56
+ }>;
57
+ /**
58
+ * @see {@link MatterCoreSpecificationV1_0}, section 10.6.3. ReportDataMessage
59
+ */
60
+ export declare const TlvReportData: import("../tlv/TlvObject.js").ObjectSchema<{
61
+ subscriptionId: import("../tlv/TlvObject.js").OptionalFieldType<number>;
62
+ values: import("../tlv/TlvObject.js").FieldType<{
63
+ value: {
64
+ value: import("../matter.js").TlvStream;
65
+ path: {
66
+ id: number;
67
+ endpointId: number;
68
+ clusterId: number;
69
+ };
70
+ version: number;
71
+ };
72
+ }[]>;
73
+ isFabricFiltered: import("../tlv/TlvObject.js").OptionalFieldType<boolean>;
74
+ interactionModelRevision: import("../tlv/TlvObject.js").FieldType<number>;
75
+ }>;
76
+ /**
77
+ * @see {@link MatterCoreSpecificationV1_0}, section 10.6.4. SubscribeRequestMessage
78
+ */
79
+ export declare const TlvSubscribeRequest: import("../tlv/TlvObject.js").ObjectSchema<{
80
+ keepSubscriptions: import("../tlv/TlvObject.js").FieldType<boolean>;
81
+ minIntervalFloorSeconds: import("../tlv/TlvObject.js").FieldType<number>;
82
+ maxIntervalCeilingSeconds: import("../tlv/TlvObject.js").FieldType<number>;
83
+ attributeRequests: import("../tlv/TlvObject.js").OptionalFieldType<{
84
+ id?: number | undefined;
85
+ endpointId?: number | undefined;
86
+ clusterId?: number | undefined;
87
+ }[]>;
88
+ eventRequests: import("../tlv/TlvObject.js").OptionalFieldType<{
89
+ event: number;
90
+ cluster: number;
91
+ endpoint: number;
92
+ node: import("../common/NodeId.js").NodeId;
93
+ isUrgent: boolean;
94
+ }[]>;
95
+ eventFilters: import("../tlv/TlvObject.js").OptionalFieldType<{
96
+ node: import("../common/NodeId.js").NodeId;
97
+ eventMin: number | bigint;
98
+ }[]>;
99
+ isFabricFiltered: import("../tlv/TlvObject.js").FieldType<boolean>;
100
+ dataVersionFilters: import("../tlv/TlvObject.js").OptionalFieldType<{
101
+ path: {
102
+ cluster: number;
103
+ endpoint: number;
104
+ node: import("../common/NodeId.js").NodeId;
105
+ };
106
+ dataVersion: number;
107
+ }[]>;
108
+ }>;
109
+ /**
110
+ * @see {@link MatterCoreSpecificationV1_0}, section 10.6.5. SubscribeResponseMessage
111
+ */
112
+ export declare const TlvSubscribeResponse: import("../tlv/TlvObject.js").ObjectSchema<{
113
+ subscriptionId: import("../tlv/TlvObject.js").FieldType<number>;
114
+ maxIntervalCeilingSeconds: import("../tlv/TlvObject.js").FieldType<number>;
115
+ interactionModelRevision: import("../tlv/TlvObject.js").FieldType<number>;
116
+ }>;
117
+ /**
118
+ * @see {@link MatterCoreSpecificationV1_0}, section 10.6.9. InvokeRequestMessage
119
+ */
120
+ export declare const TlvInvokeRequest: import("../tlv/TlvObject.js").ObjectSchema<{
121
+ suppressResponse: import("../tlv/TlvObject.js").FieldType<boolean>;
122
+ timedRequest: import("../tlv/TlvObject.js").FieldType<boolean>;
123
+ invokes: import("../tlv/TlvObject.js").FieldType<{
124
+ path: {
125
+ id: number;
126
+ endpointId: number;
127
+ clusterId: number;
128
+ };
129
+ args: import("../matter.js").TlvStream;
130
+ }[]>;
131
+ interactionModelRevision: import("../tlv/TlvObject.js").FieldType<number>;
132
+ }>;
133
+ /**
134
+ * @see {@link MatterCoreSpecificationV1_0}, section 10.6.10. InvokeResponseMessage
135
+ */
136
+ export declare const TlvInvokeResponse: import("../tlv/TlvObject.js").ObjectSchema<{
137
+ suppressResponse: import("../tlv/TlvObject.js").FieldType<boolean>;
138
+ responses: import("../tlv/TlvObject.js").FieldType<{
139
+ response?: {
140
+ path: {
141
+ id: number;
142
+ endpointId: number;
143
+ clusterId: number;
144
+ };
145
+ response: import("../matter.js").TlvStream;
146
+ } | undefined;
147
+ result?: {
148
+ path: {
149
+ id: number;
150
+ endpointId: number;
151
+ clusterId: number;
152
+ };
153
+ result: {
154
+ code: number;
155
+ };
156
+ } | undefined;
157
+ }[]>;
158
+ interactionModelRevision: import("../tlv/TlvObject.js").FieldType<number>;
159
+ }>;
@@ -3,7 +3,8 @@
3
3
  * Copyright 2022 Project CHIP Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { Schema } from "./Schema.js";
6
+ import { ByteArray } from "../util/ByteArray";
7
+ import { Schema } from "./Schema";
7
8
  declare const enum BitRangeType {
8
9
  Flag = 0,
9
10
  Number = 1,
@@ -12,7 +13,7 @@ declare const enum BitRangeType {
12
13
  type BitRange<T> = {
13
14
  type: BitRangeType;
14
15
  offset: number;
15
- mask: number;
16
+ length: number;
16
17
  };
17
18
  declare const BitRange: <T>(type: BitRangeType, offset: number, length: number) => BitRange<T>;
18
19
  /** Defines the bit position of a boolean flag. */
@@ -37,11 +38,22 @@ export type TypeFromBitSchema<T extends BitSchema> = {
37
38
  [K in keyof T]: T[K] extends BitFieldEnum<infer E> ? E : (T[K] extends BitField ? number : boolean);
38
39
  };
39
40
  declare class BitmapSchemaInternal<T extends BitSchema> extends Schema<TypeFromBitSchema<T>, number> {
40
- readonly bitSchemas: T;
41
+ private readonly bitSchemas;
42
+ private readonly masks;
41
43
  constructor(bitSchemas: T);
42
44
  encodeInternal(value: TypeFromBitSchema<T>): number;
43
45
  decodeInternal(bitmap: number): TypeFromBitSchema<T>;
44
46
  }
47
+ declare class ByteArrayBitmapSchemaInternal<T extends BitSchema> extends Schema<TypeFromBitSchema<T>, ByteArray> {
48
+ private readonly bitSchemas;
49
+ private readonly byteArrayLength;
50
+ private readonly maskOffset;
51
+ constructor(bitSchemas: T);
52
+ encodeInternal(value: TypeFromBitSchema<T>): Uint8Array;
53
+ decodeInternal(bitmap: ByteArray): TypeFromBitSchema<T>;
54
+ }
45
55
  /** Declares a bitmap schema by indicating the bit position and their names. */
46
56
  export declare const BitmapSchema: <T extends BitSchema>(bitSchemas: T) => BitmapSchemaInternal<T>;
57
+ /** Declares a bitmap schema backed by a ByteArray by indicating the bit position and their names. */
58
+ export declare const ByteArrayBitmapSchema: <T extends BitSchema>(bitSchemas: T) => ByteArrayBitmapSchemaInternal<T>;
47
59
  export {};
@@ -7,3 +7,4 @@
7
7
  export type Merge<A, B> = A & B extends infer AB ? {
8
8
  [K in keyof AB]: AB[K];
9
9
  } : never;
10
+ export declare const Merge: <A, B>(a: A, b: B) => Merge<A, B>;
@@ -0,0 +1,102 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022 Project CHIP Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Cluster, WritableAttribute, Attribute, Event, OptionalWritableAttribute } from "./Cluster.js";
7
+ import { TlvClusterId } from "../common/ClusterId.js";
8
+ import { TlvEndpointNumber } from "../common/EndpointNumber.js";
9
+ import { TlvDeviceTypeId } from "../common/DeviceTypeId.js";
10
+ import { TlvNodeId } from "../common/NodeId.js";
11
+ import { TlvSubjectId } from "../common/SubjectId.js";
12
+ import { TlvField, TlvObject } from "../tlv/TlvObject.js";
13
+ import { TlvNullable } from "../tlv/TlvNullable.js";
14
+ import { TlvEnum, TlvUInt16 } from "../tlv/TlvNumber.js";
15
+ import { TlvArray } from "../tlv/TlvArray.js";
16
+ import { TlvByteString } from "../tlv/TlvString.js";
17
+ /**
18
+ *
19
+ * Defines the clusters on this Node to which this Access Control Entry grants access.
20
+ *
21
+ * A single target SHALL contain at least one field (Cluster, Endpoint, or DeviceType), and SHALL NOT
22
+ * contain both an Endpoint field and a DeviceType field.
23
+ *
24
+ * @see {@link MatterCoreSpecificationV1_0} § 9.10.5.3
25
+ */
26
+ const TlvTarget = TlvObject({
27
+ /** Cluster to grant access on. */
28
+ cluster: TlvField(0, TlvNullable(TlvClusterId)),
29
+ /** Endpoint to grant access on. */
30
+ endpoint: TlvField(1, TlvNullable(TlvEndpointNumber)),
31
+ /** Device type to grant access on. */
32
+ deviceType: TlvField(1, TlvNullable(TlvDeviceTypeId)),
33
+ });
34
+ /** @see {@link MatterCoreSpecificationV1_0} § 9.10.5.3 */
35
+ const TlvAccessControlEntry = TlvObject({
36
+ /** Specifies the level of privilege granted by this Access Control Entry. */
37
+ privilege: TlvField(1, TlvEnum()),
38
+ /** Specifies the authentication mode required by this Access Control Entry. */
39
+ authMode: TlvField(2, TlvEnum()),
40
+ /** Specifies a list of Subject IDs, to which this Access Control Entry grants access. */
41
+ subjects: TlvField(3, TlvNullable(TlvArray(TlvSubjectId))),
42
+ /** Specifies a list of TargetStruct, which define the clusters on this Node to which this Access Control Entry grants access. */
43
+ targets: TlvField(4, TlvNullable(TlvArray(TlvTarget))), /* maxArrayLength: targetsPerAccessControlEntry */
44
+ });
45
+ /** @see {@link MatterCoreSpecificationV1_0} § 9.10.5.4 */
46
+ const TlvAccessControlExtensionEntry = TlvObject({
47
+ /** Used by manufacturers to store arbitrary TLV-encoded data related to a fabric’s Access Control Entries. */
48
+ data: TlvField(1, TlvByteString.bound({ maxLength: 128 })),
49
+ });
50
+ /** @see {@link MatterCoreSpecificationV1_0} § 9.10.7.1 */
51
+ const AccessChangeEvent = (entrySchema) => ({
52
+ /** The Node ID of the Administrator that made the change, if the change occurred via a CASE session. */
53
+ adminNodeID: TlvField(1, TlvNullable(TlvNodeId)),
54
+ /** The Passcode ID of the Administrator that made the change, if the change occurred via a PASE session. */
55
+ adminPasscodeID: TlvField(2, TlvNullable(TlvUInt16)),
56
+ /** The type of change as appropriate. */
57
+ changeType: TlvField(3, TlvEnum()),
58
+ /** The latest value of the changed entry. */
59
+ latestValue: TlvField(4, TlvNullable(entrySchema)),
60
+ });
61
+ /**
62
+ * The Access Control Cluster exposes a data model view of a Node’s Access Control List (ACL),
63
+ * which codifies the rules used to manage and enforce Access Control for the Node’s endpoints
64
+ * and their associated cluster instances. Access to this Access Control Cluster itself requires
65
+ * a special Administer privilege level, such that only Nodes granted such privilege (hereafter
66
+ * termed "Administrators") can manage the Access Control Cluster.
67
+ * The Access Control Cluster SHALL be present on the root node endpoint of each Node, and SHALL
68
+ * NOT be present on any other Endpoint of any Node.
69
+ *
70
+ * @see {@link MatterCoreSpecificationV1_0} § 9.10
71
+ */
72
+ export const AccessControlCluster = Cluster({
73
+ id: 0x1f,
74
+ name: "Access Control",
75
+ revision: 1,
76
+ /** @see {@link MatterCoreSpecificationV1_0} § 9.10.5 */
77
+ attributes: {
78
+ /** Codifies a single grant of privilege on this Node. */
79
+ acl: WritableAttribute(0, TlvArray(TlvAccessControlEntry), { default: [], writeAcl: 2 /* AccessLevel.Administer */, readAcl: 2 /* AccessLevel.Administer */ }),
80
+ /** MAY be used by Administrators to store arbitrary data related to fabric’s Access Control Entries. */
81
+ extension: OptionalWritableAttribute(1, TlvArray(TlvAccessControlExtensionEntry), { default: [], writeAcl: 2 /* AccessLevel.Administer */, readAcl: 2 /* AccessLevel.Administer */ }),
82
+ /** Provide the minimum number of Subjects per entry that are supported by this server. */
83
+ subjectsPerAccessControlEntry: Attribute(2, TlvUInt16.bound({ min: 4 }), { default: 4 }),
84
+ /** Provides the minimum number of Targets per entry that are supported by this server. */
85
+ targetsPerAccessControlEntry: Attribute(3, TlvUInt16.bound({ min: 3 }), { default: 3 }),
86
+ /** Provides the minimum number of ACL Entries per fabric that are supported by this server. */
87
+ accessControlEntriesPerFabric: Attribute(4, TlvUInt16.bound({ min: 3 }), { default: 3 }),
88
+ },
89
+ /** @see {@link MatterCoreSpecificationV1_0} § 9.10.7 */
90
+ events: {
91
+ /**
92
+ * The cluster SHALL send AccessControlEntryChanged events whenever its ACL attribute data is changed by an
93
+ * Administrator.
94
+ */
95
+ accessControlEntryChanged: Event(0, 1 /* EventPriority.Info */, AccessChangeEvent(TlvAccessControlEntry)),
96
+ /**
97
+ * The cluster SHALL send AccessControlExtensionChanged events whenever its extension attribute data is changed
98
+ * by an Administrator.
99
+ */
100
+ accessControlExtensionChanged: Event(1, 1 /* EventPriority.Info */, AccessChangeEvent(TlvAccessControlExtensionEntry)), /* readAcl: AccessLevel.Administer */
101
+ },
102
+ });
@@ -0,0 +1,89 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022 Project CHIP Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { TlvFabricIndex } from "../common/FabricIndex.js";
7
+ import { TlvVendorId } from "../common/VendorId.js";
8
+ import { TlvBoolean } from "../tlv/TlvBoolean.js";
9
+ import { TlvUInt16, TlvUInt32 } from "../tlv/TlvNumber.js";
10
+ import { TlvField, TlvObject } from "../tlv/TlvObject.js";
11
+ import { TlvString, TlvString256max, TlvString32max, TlvString64max } from "../tlv/TlvString.js";
12
+ import { Attribute, Cluster, Event, OptionalAttribute, OptionalEvent, OptionalWritableAttribute, WritableAttribute } from "./Cluster.js";
13
+ /**
14
+ * Provides constant values related to overall global capabilities of this Node, that are not cluster-specific.
15
+ *
16
+ * @see {@link MatterCoreSpecificationV1_0} § 11.1.6.2
17
+ */
18
+ const TlvCapabilityMinima = TlvObject({
19
+ /** Indicates the minimum number of concurrent CASE sessions that are supported per fabric. */
20
+ caseSessionsPerFabric: TlvField(0, TlvUInt16.bound({ min: 3 })),
21
+ /** Indicate the actual minimum number of concurrent subscriptions supported per fabric. */
22
+ subscriptionsPerFabric: TlvField(1, TlvUInt16.bound({ min: 3 })),
23
+ });
24
+ /**
25
+ * This cluster provides attributes and events for determining basic information about Nodes, which supports both
26
+ * commissioning and operational determination of Node characteristics, such as Vendor ID, Product ID and serial number,
27
+ * which apply to the whole Node. Also allows setting user device information such as location.
28
+ *
29
+ * @see {@link MatterCoreSpecificationV1_0} § 11.1
30
+ */
31
+ export const BasicInformationCluster = Cluster({
32
+ id: 0x28,
33
+ name: "Basic Information",
34
+ revision: 1,
35
+ /** @see {@link MatterCoreSpecificationV1_0} § 11.1.6.3 */
36
+ attributes: {
37
+ /** Revision number of the Data Model against which the Node is certified */
38
+ dataModelRevision: Attribute(0, TlvUInt16),
39
+ /** Human-readable (displayable) name of the vendor for the Node. */
40
+ vendorName: Attribute(1, TlvString32max),
41
+ /** Specifies the {@link VendorId}. */
42
+ vendorId: Attribute(2, TlvVendorId),
43
+ /** Human-readable name of the model for the Node such as the model number assigned by the vendor. */
44
+ productName: Attribute(3, TlvString32max),
45
+ /** Product ID assigned by the vendor that is unique to the specific product of the Node. */
46
+ productId: Attribute(4, TlvUInt16),
47
+ /** User defined name for the Node. It is set during initial commissioning and may be updated by further reconfigurations. */
48
+ nodeLabel: WritableAttribute(5, TlvString32max, { default: "", writeAcl: 1 /* AccessLevel.Manage */ }),
49
+ /** ISO 3166-1 alpha-2 code where the Node is located. Might affect some regulatory aspects. */
50
+ location: WritableAttribute(6, TlvString.bound({ length: 2 }), { default: "XX", writeAcl: 2 /* AccessLevel.Administer */ }),
51
+ /** Version number of the hardware of the Node. The meaning of its value, and the versioning scheme, are vendor defined. */
52
+ hardwareVersion: Attribute(7, TlvUInt16, { default: 0 }),
53
+ /** Human-readable representation of the {@link BasicInformationCluster.attributes.hardwareVersion hardwareVersion} attribute. */
54
+ hardwareVersionString: Attribute(8, TlvString.bound({ minLength: 1, maxLength: 64 })),
55
+ /** Current version number for the software running on this Node. A larger value is newer than a lower value. */
56
+ softwareVersion: Attribute(9, TlvUInt32, { default: 0 }),
57
+ /** Human-readable representation of the {@link BasicInformationCluster.attributes.softwareVersion softwareVersion} attribute. */
58
+ softwareVersionString: Attribute(10, TlvString.bound({ minLength: 1, maxLength: 64 })),
59
+ /** Node manufacturing date formatted with YYYYMMDD. The additional 8 characters might include other vendor related information. */
60
+ manufacturingDate: OptionalAttribute(11, TlvString.bound({ minLength: 8, maxLength: 16 })),
61
+ /** Human-readable vendor assigned part number for the Node whose meaning and numbering scheme is vendor defined. */
62
+ partNumber: OptionalAttribute(12, TlvString32max),
63
+ /** Link to a product specific web page following the syntax as specified in RFC 3986. */
64
+ productURL: OptionalAttribute(13, TlvString256max),
65
+ /** Vendor specific human readable product label. */
66
+ productLabel: OptionalAttribute(14, TlvString64max),
67
+ /** Human readable serial number. */
68
+ serialNumber: OptionalAttribute(15, TlvString32max),
69
+ /** Allows to disable the ability to configure the Node through an on-Node user interface. */
70
+ localConfigDisabled: OptionalWritableAttribute(16, TlvBoolean, { default: false, writeAcl: 1 /* AccessLevel.Manage */ }),
71
+ /** Indicates whether the Node can be reached over the non-native network for bridged devices. */
72
+ reachable: OptionalAttribute(17, TlvBoolean, { default: true }),
73
+ /** Unique identifier for the device, which is constructed in a manufacturer specific manner, updated during factory reset. */
74
+ uniqueId: OptionalAttribute(18, TlvString32max),
75
+ /** Minimum guaranteed value for some system-wide, not cluster-specific, resource capabilities. */
76
+ capabilityMinima: Attribute(19, TlvCapabilityMinima, { default: { caseSessionsPerFabric: 3, subscriptionsPerFabric: 3 } }),
77
+ },
78
+ /** @see {@link MatterCoreSpecificationV1_0} § 11.1.6.5 */
79
+ events: {
80
+ /** First event fired as soon as reasonable after completing a boot or reboot process. */
81
+ startUp: Event(0, 0 /* EventPriority.Critical */, { softwareVersion: TlvField(0, TlvUInt32) }),
82
+ /** Last event fired prior to any orderly shutdown sequence on a best-effort basis. */
83
+ shutDown: OptionalEvent(1, 0 /* EventPriority.Critical */),
84
+ /** Fired prior to permanently leaving a given Fabric. */
85
+ leave: OptionalEvent(2, 1 /* EventPriority.Info */, { fabricIndex: TlvField(0, TlvFabricIndex) }),
86
+ /** Fired when there is a change in the {@link BasicInformationCluster.attributes.reachable reachable} attribute. */
87
+ reachableChanged: OptionalEvent(3, 1 /* EventPriority.Info */, { reachableNewValue: TlvField(0, TlvBoolean) }),
88
+ },
89
+ });
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022 Project CHIP Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Cluster, WritableAttribute } from "./Cluster.js";
7
+ import { TlvClusterId } from "../common/ClusterId.js";
8
+ import { TlvEndpointNumber } from "../common/EndpointNumber.js";
9
+ import { TlvNodeId } from "../common/NodeId.js";
10
+ import { TlvGroupId } from "../common/GroupId.js";
11
+ import { TlvObject, TlvOptionalField } from "../tlv/TlvObject.js";
12
+ import { TlvArray } from "../tlv/TlvArray.js";
13
+ /**
14
+ * Provides information about endpoint conformance to a release of a device type definition.
15
+ *
16
+ * @see {@link MatterCoreSpecificationV1_0} § 9.5.5.1
17
+ */
18
+ const TlvTarget = TlvObject({
19
+ /** Contains the remote target node ID. If the Endpoint field is present, this field SHALL be present. */
20
+ node: TlvOptionalField(1, TlvNodeId),
21
+ /** Contains the target group ID that represents remote endpoints. If the Endpoint field is present, this field SHALL NOT be present. */
22
+ group: TlvOptionalField(2, TlvGroupId),
23
+ /** Contains the remote endpoint that the local endpoint is bound to. If the Group field is present, this field SHALL NOT be present. */
24
+ endpoint: TlvOptionalField(3, TlvEndpointNumber),
25
+ /**
26
+ * Contains the cluster ID (client & server) on the local and target endpoint(s). If this field is present, the
27
+ * client cluster SHALL also exist on this endpoint (with this Binding cluster). If this field is present, the
28
+ * target SHALL be this cluster on the target endpoint(s).
29
+ */
30
+ cluster: TlvOptionalField(4, TlvClusterId),
31
+ });
32
+ /**
33
+ * A binding represents a persistent relationship between an endpoint and one or more other local or
34
+ * remote endpoints. A binding does not require that the relationship exists. It is up to the node
35
+ * application to set up the relationship.
36
+ *
37
+ * @see {@link MatterCoreSpecificationV1_0} § 9.6
38
+ */
39
+ export const BindingCluster = Cluster({
40
+ id: 0x1e,
41
+ name: "Binding",
42
+ revision: 1,
43
+ /** @see {@link MatterCoreSpecificationV1_0} § 9.6.5 */
44
+ attributes: {
45
+ /** List of device types and corresponding revisions declaring endpoint conformance. */
46
+ binding: WritableAttribute(0, TlvArray(TlvTarget), { default: [] }), /* non-volatile */
47
+ },
48
+ });