@matter/protocol 0.13.0-alpha.0-20250318-c1aa38b08 → 0.13.0-alpha.0-20250323-770919c6a

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 (173) hide show
  1. package/dist/cjs/ble/BtpSessionHandler.js +2 -2
  2. package/dist/cjs/ble/BtpSessionHandler.js.map +1 -1
  3. package/dist/cjs/certificate/CertificateAuthority.d.ts +1 -0
  4. package/dist/cjs/certificate/CertificateAuthority.d.ts.map +1 -1
  5. package/dist/cjs/certificate/CertificateAuthority.js.map +1 -1
  6. package/dist/cjs/certificate/CertificateManager.d.ts.map +1 -1
  7. package/dist/cjs/certificate/CertificateManager.js +21 -19
  8. package/dist/cjs/certificate/CertificateManager.js.map +1 -1
  9. package/dist/cjs/cluster/client/ClusterClient.d.ts.map +1 -1
  10. package/dist/cjs/cluster/client/ClusterClient.js +3 -0
  11. package/dist/cjs/cluster/client/ClusterClient.js.map +1 -1
  12. package/dist/cjs/cluster/server/AttributeServer.d.ts.map +1 -1
  13. package/dist/cjs/cluster/server/AttributeServer.js +5 -5
  14. package/dist/cjs/cluster/server/AttributeServer.js.map +1 -1
  15. package/dist/cjs/cluster/server/CommandServer.js +2 -2
  16. package/dist/cjs/cluster/server/CommandServer.js.map +1 -1
  17. package/dist/cjs/common/FailsafeContext.js +1 -1
  18. package/dist/cjs/common/FailsafeContext.js.map +1 -1
  19. package/dist/cjs/endpoint/EndpointStructureLogger.js +1 -1
  20. package/dist/cjs/endpoint/EndpointStructureLogger.js.map +1 -1
  21. package/dist/cjs/events/OccurrenceManager.d.ts.map +1 -1
  22. package/dist/cjs/events/OccurrenceManager.js +2 -2
  23. package/dist/cjs/events/OccurrenceManager.js.map +1 -1
  24. package/dist/cjs/interaction/AttributeDataDecoder.d.ts +21 -4
  25. package/dist/cjs/interaction/AttributeDataDecoder.d.ts.map +1 -1
  26. package/dist/cjs/interaction/AttributeDataDecoder.js +41 -2
  27. package/dist/cjs/interaction/AttributeDataDecoder.js.map +1 -1
  28. package/dist/cjs/interaction/AttributeDataEncoder.d.ts.map +1 -1
  29. package/dist/cjs/interaction/AttributeDataEncoder.js +3 -3
  30. package/dist/cjs/interaction/AttributeDataEncoder.js.map +1 -1
  31. package/dist/cjs/interaction/DecodedDataReport.d.ts +4 -2
  32. package/dist/cjs/interaction/DecodedDataReport.d.ts.map +1 -1
  33. package/dist/cjs/interaction/DecodedDataReport.js +6 -2
  34. package/dist/cjs/interaction/DecodedDataReport.js.map +1 -1
  35. package/dist/cjs/interaction/EventDataDecoder.d.ts +15 -3
  36. package/dist/cjs/interaction/EventDataDecoder.d.ts.map +1 -1
  37. package/dist/cjs/interaction/EventDataDecoder.js +39 -2
  38. package/dist/cjs/interaction/EventDataDecoder.js.map +1 -1
  39. package/dist/cjs/interaction/InteractionClient.d.ts +44 -4
  40. package/dist/cjs/interaction/InteractionClient.d.ts.map +1 -1
  41. package/dist/cjs/interaction/InteractionClient.js +71 -18
  42. package/dist/cjs/interaction/InteractionClient.js.map +1 -1
  43. package/dist/cjs/interaction/InteractionMessenger.d.ts.map +1 -1
  44. package/dist/cjs/interaction/InteractionMessenger.js +7 -4
  45. package/dist/cjs/interaction/InteractionMessenger.js.map +1 -1
  46. package/dist/cjs/interaction/InteractionServer.d.ts.map +1 -1
  47. package/dist/cjs/interaction/InteractionServer.js +7 -7
  48. package/dist/cjs/interaction/InteractionServer.js.map +1 -1
  49. package/dist/cjs/interaction/ServerSubscription.d.ts.map +1 -1
  50. package/dist/cjs/interaction/ServerSubscription.js +1 -1
  51. package/dist/cjs/interaction/ServerSubscription.js.map +1 -1
  52. package/dist/cjs/mdns/MdnsScanner.js +2 -2
  53. package/dist/cjs/mdns/MdnsScanner.js.map +1 -1
  54. package/dist/cjs/peer/ControllerCommissioner.d.ts +15 -3
  55. package/dist/cjs/peer/ControllerCommissioner.d.ts.map +1 -1
  56. package/dist/cjs/peer/ControllerCommissioner.js +17 -6
  57. package/dist/cjs/peer/ControllerCommissioner.js.map +1 -1
  58. package/dist/cjs/peer/ControllerCommissioningFlow.d.ts +47 -1
  59. package/dist/cjs/peer/ControllerCommissioningFlow.d.ts.map +1 -1
  60. package/dist/cjs/peer/ControllerCommissioningFlow.js +136 -136
  61. package/dist/cjs/peer/ControllerCommissioningFlow.js.map +1 -1
  62. package/dist/cjs/peer/ControllerDiscovery.d.ts.map +1 -1
  63. package/dist/cjs/peer/ControllerDiscovery.js +4 -4
  64. package/dist/cjs/peer/ControllerDiscovery.js.map +1 -1
  65. package/dist/cjs/peer/PeerSet.d.ts +2 -2
  66. package/dist/cjs/peer/PeerSet.d.ts.map +1 -1
  67. package/dist/cjs/peer/PeerSet.js +6 -1
  68. package/dist/cjs/peer/PeerSet.js.map +1 -1
  69. package/dist/cjs/protocol/ChannelManager.d.ts.map +1 -1
  70. package/dist/cjs/protocol/ChannelManager.js +11 -4
  71. package/dist/cjs/protocol/ChannelManager.js.map +1 -1
  72. package/dist/cjs/protocol/ExchangeManager.d.ts.map +1 -1
  73. package/dist/cjs/protocol/ExchangeManager.js +1 -2
  74. package/dist/cjs/protocol/ExchangeManager.js.map +1 -1
  75. package/dist/esm/ble/BtpSessionHandler.js +2 -2
  76. package/dist/esm/ble/BtpSessionHandler.js.map +1 -1
  77. package/dist/esm/certificate/CertificateAuthority.d.ts +1 -0
  78. package/dist/esm/certificate/CertificateAuthority.d.ts.map +1 -1
  79. package/dist/esm/certificate/CertificateAuthority.js.map +1 -1
  80. package/dist/esm/certificate/CertificateManager.d.ts.map +1 -1
  81. package/dist/esm/certificate/CertificateManager.js +22 -19
  82. package/dist/esm/certificate/CertificateManager.js.map +1 -1
  83. package/dist/esm/cluster/client/ClusterClient.d.ts.map +1 -1
  84. package/dist/esm/cluster/client/ClusterClient.js +3 -0
  85. package/dist/esm/cluster/client/ClusterClient.js.map +1 -1
  86. package/dist/esm/cluster/server/AttributeServer.d.ts.map +1 -1
  87. package/dist/esm/cluster/server/AttributeServer.js +15 -6
  88. package/dist/esm/cluster/server/AttributeServer.js.map +1 -1
  89. package/dist/esm/cluster/server/CommandServer.js +3 -3
  90. package/dist/esm/cluster/server/CommandServer.js.map +1 -1
  91. package/dist/esm/common/FailsafeContext.js +1 -1
  92. package/dist/esm/common/FailsafeContext.js.map +1 -1
  93. package/dist/esm/endpoint/EndpointStructureLogger.js +1 -1
  94. package/dist/esm/endpoint/EndpointStructureLogger.js.map +1 -1
  95. package/dist/esm/events/OccurrenceManager.d.ts.map +1 -1
  96. package/dist/esm/events/OccurrenceManager.js +3 -2
  97. package/dist/esm/events/OccurrenceManager.js.map +1 -1
  98. package/dist/esm/interaction/AttributeDataDecoder.d.ts +21 -4
  99. package/dist/esm/interaction/AttributeDataDecoder.d.ts.map +1 -1
  100. package/dist/esm/interaction/AttributeDataDecoder.js +41 -2
  101. package/dist/esm/interaction/AttributeDataDecoder.js.map +1 -1
  102. package/dist/esm/interaction/AttributeDataEncoder.d.ts.map +1 -1
  103. package/dist/esm/interaction/AttributeDataEncoder.js +4 -4
  104. package/dist/esm/interaction/AttributeDataEncoder.js.map +1 -1
  105. package/dist/esm/interaction/DecodedDataReport.d.ts +4 -2
  106. package/dist/esm/interaction/DecodedDataReport.d.ts.map +1 -1
  107. package/dist/esm/interaction/DecodedDataReport.js +12 -4
  108. package/dist/esm/interaction/DecodedDataReport.js.map +1 -1
  109. package/dist/esm/interaction/EventDataDecoder.d.ts +15 -3
  110. package/dist/esm/interaction/EventDataDecoder.d.ts.map +1 -1
  111. package/dist/esm/interaction/EventDataDecoder.js +39 -2
  112. package/dist/esm/interaction/EventDataDecoder.js.map +1 -1
  113. package/dist/esm/interaction/InteractionClient.d.ts +44 -4
  114. package/dist/esm/interaction/InteractionClient.d.ts.map +1 -1
  115. package/dist/esm/interaction/InteractionClient.js +74 -18
  116. package/dist/esm/interaction/InteractionClient.js.map +1 -1
  117. package/dist/esm/interaction/InteractionMessenger.d.ts.map +1 -1
  118. package/dist/esm/interaction/InteractionMessenger.js +8 -4
  119. package/dist/esm/interaction/InteractionMessenger.js.map +1 -1
  120. package/dist/esm/interaction/InteractionServer.d.ts.map +1 -1
  121. package/dist/esm/interaction/InteractionServer.js +17 -8
  122. package/dist/esm/interaction/InteractionServer.js.map +1 -1
  123. package/dist/esm/interaction/ServerSubscription.d.ts.map +1 -1
  124. package/dist/esm/interaction/ServerSubscription.js +2 -1
  125. package/dist/esm/interaction/ServerSubscription.js.map +1 -1
  126. package/dist/esm/mdns/MdnsScanner.js +2 -2
  127. package/dist/esm/mdns/MdnsScanner.js.map +1 -1
  128. package/dist/esm/peer/ControllerCommissioner.d.ts +15 -3
  129. package/dist/esm/peer/ControllerCommissioner.d.ts.map +1 -1
  130. package/dist/esm/peer/ControllerCommissioner.js +18 -6
  131. package/dist/esm/peer/ControllerCommissioner.js.map +1 -1
  132. package/dist/esm/peer/ControllerCommissioningFlow.d.ts +47 -1
  133. package/dist/esm/peer/ControllerCommissioningFlow.d.ts.map +1 -1
  134. package/dist/esm/peer/ControllerCommissioningFlow.js +147 -137
  135. package/dist/esm/peer/ControllerCommissioningFlow.js.map +1 -1
  136. package/dist/esm/peer/ControllerDiscovery.d.ts.map +1 -1
  137. package/dist/esm/peer/ControllerDiscovery.js +5 -5
  138. package/dist/esm/peer/ControllerDiscovery.js.map +1 -1
  139. package/dist/esm/peer/PeerSet.d.ts +2 -2
  140. package/dist/esm/peer/PeerSet.d.ts.map +1 -1
  141. package/dist/esm/peer/PeerSet.js +7 -2
  142. package/dist/esm/peer/PeerSet.js.map +1 -1
  143. package/dist/esm/protocol/ChannelManager.d.ts.map +1 -1
  144. package/dist/esm/protocol/ChannelManager.js +11 -4
  145. package/dist/esm/protocol/ChannelManager.js.map +1 -1
  146. package/dist/esm/protocol/ExchangeManager.d.ts.map +1 -1
  147. package/dist/esm/protocol/ExchangeManager.js +2 -2
  148. package/dist/esm/protocol/ExchangeManager.js.map +1 -1
  149. package/package.json +6 -6
  150. package/src/ble/BtpSessionHandler.ts +2 -2
  151. package/src/certificate/CertificateAuthority.ts +1 -0
  152. package/src/certificate/CertificateManager.ts +22 -19
  153. package/src/cluster/client/ClusterClient.ts +3 -0
  154. package/src/cluster/server/AttributeServer.ts +15 -6
  155. package/src/cluster/server/CommandServer.ts +3 -3
  156. package/src/common/FailsafeContext.ts +1 -1
  157. package/src/endpoint/EndpointStructureLogger.ts +1 -1
  158. package/src/events/OccurrenceManager.ts +3 -2
  159. package/src/interaction/AttributeDataDecoder.ts +67 -7
  160. package/src/interaction/AttributeDataEncoder.ts +4 -4
  161. package/src/interaction/DecodedDataReport.ts +24 -5
  162. package/src/interaction/EventDataDecoder.ts +57 -5
  163. package/src/interaction/InteractionClient.ts +112 -18
  164. package/src/interaction/InteractionMessenger.ts +8 -4
  165. package/src/interaction/InteractionServer.ts +19 -9
  166. package/src/interaction/ServerSubscription.ts +2 -1
  167. package/src/mdns/MdnsScanner.ts +2 -2
  168. package/src/peer/ControllerCommissioner.ts +32 -7
  169. package/src/peer/ControllerCommissioningFlow.ts +160 -146
  170. package/src/peer/ControllerDiscovery.ts +5 -5
  171. package/src/peer/PeerSet.ts +7 -2
  172. package/src/protocol/ChannelManager.ts +11 -4
  173. package/src/protocol/ExchangeManager.ts +2 -2
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- import { anyPromise, ClassExtends, Logger, NoResponseTimeoutError, serverAddressToString } from "#general";
7
+ import { anyPromise, ClassExtends, Diagnostic, Logger, NoResponseTimeoutError, serverAddressToString } from "#general";
8
8
  import { NodeId } from "#types";
9
9
  import {
10
10
  AddressTypeFromDevice,
@@ -40,7 +40,7 @@ export class ControllerDiscovery {
40
40
  identifier: CommissionableDeviceIdentifiers,
41
41
  timeoutSeconds = 30,
42
42
  ): Promise<CommissionableDevice[]> {
43
- logger.info(`Start Discovering devices using identifier ${Logger.toJSON(identifier)} ...`);
43
+ logger.info(`Start Discovering devices using identifier ${Diagnostic.json(identifier)} ...`);
44
44
 
45
45
  const scanResults = scanners.map(async scanner => {
46
46
  const foundDevices = await scanner.findCommissionableDevices(
@@ -48,10 +48,10 @@ export class ControllerDiscovery {
48
48
  timeoutSeconds,
49
49
  scanner.type === "ble", // Force rediscovery for BLE
50
50
  );
51
- logger.info(`Found ${foundDevices.length} devices using identifier ${Logger.toJSON(identifier)}`);
51
+ logger.info(`Found ${foundDevices.length} devices using identifier ${Diagnostic.json(identifier)}`);
52
52
  if (foundDevices.length === 0) {
53
53
  throw new CommissioningError(
54
- `No device discovered using identifier ${Logger.toJSON(
54
+ `No device discovered using identifier ${Diagnostic.json(
55
55
  identifier,
56
56
  )}! Please check that the relevant device is online.`,
57
57
  );
@@ -60,7 +60,7 @@ export class ControllerDiscovery {
60
60
  const devices = foundDevices.filter(device => device.addresses.length > 0);
61
61
  if (devices.length === 0) {
62
62
  throw new CommissioningError(
63
- `Device discovered using identifier ${Logger.toJSON(
63
+ `Device discovered using identifier ${Diagnostic.json(
64
64
  identifier,
65
65
  )}, but no Network addresses discovered.`,
66
66
  );
@@ -36,7 +36,7 @@ import { SessionManager } from "#session/SessionManager.js";
36
36
  import { SECURE_CHANNEL_PROTOCOL_ID } from "@matter/types";
37
37
  import { ChannelManager } from "../protocol/ChannelManager.js";
38
38
  import { ChannelNotConnectedError, ExchangeManager, MessageChannel } from "../protocol/ExchangeManager.js";
39
- import { ReconnectableExchangeProvider } from "../protocol/ExchangeProvider.js";
39
+ import { DedicatedChannelExchangeProvider, ReconnectableExchangeProvider } from "../protocol/ExchangeProvider.js";
40
40
  import { RetransmissionLimitReachedError } from "../protocol/MessageExchange.js";
41
41
  import { ControllerDiscovery, DiscoveryError, PairRetransmissionLimitReachedError } from "./ControllerDiscovery.js";
42
42
  import { InteractionQueue } from "./InteractionQueue.js";
@@ -272,7 +272,11 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
272
272
  /**
273
273
  * Obtain an exchange provider for the designated peer.
274
274
  */
275
- async exchangeProviderFor(address: PeerAddress, discoveryOptions?: DiscoveryOptions) {
275
+ async exchangeProviderFor(addressOrChannel: PeerAddress | MessageChannel, discoveryOptions?: DiscoveryOptions) {
276
+ if (addressOrChannel instanceof MessageChannel) {
277
+ return new DedicatedChannelExchangeProvider(this.#exchanges, addressOrChannel);
278
+ }
279
+ const address: PeerAddress = addressOrChannel;
276
280
  let initiallyConnected = this.#channels.hasChannel(address);
277
281
  return new ReconnectableExchangeProvider(this.#exchanges, this.#channels, address, async () => {
278
282
  if (!initiallyConnected && !this.#channels.hasChannel(address)) {
@@ -622,6 +626,7 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
622
626
  discoveryData?: DiscoveryData,
623
627
  expectedProcessingTimeMs?: number,
624
628
  ) {
629
+ logger.debug(`Pair with ${address} at ${serverAddressToString(operationalServerAddress)}`);
625
630
  const { ip, port } = operationalServerAddress;
626
631
  // Do CASE pairing
627
632
  const isIpv6Address = isIPv6(ip);
@@ -69,7 +69,9 @@ export class ChannelManager {
69
69
  }
70
70
 
71
71
  hasChannel(address: PeerAddress) {
72
- return !!this.#channels.get(address)?.length;
72
+ return !!this.#channels
73
+ .get(address)
74
+ ?.filter(channel => !channel.closed && !channel.session.closingAfterExchangeFinished).length;
73
75
  }
74
76
 
75
77
  getChannel(address: PeerAddress, session?: Session) {
@@ -77,6 +79,7 @@ export class ChannelManager {
77
79
  if (session !== undefined) {
78
80
  results = results.filter(channel => channel.session.id === session.id);
79
81
  }
82
+ results = results.filter(channel => !channel.closed && !channel.session.closingAfterExchangeFinished);
80
83
  if (results.length === 0)
81
84
  throw new NoChannelError(
82
85
  `Can't find a channel to ${PeerAddress(address)}${session !== undefined ? ` session ${session.id}` : ""}`,
@@ -131,6 +134,7 @@ export class ChannelManager {
131
134
  async () => void this.#paseChannels.delete(session),
132
135
  );
133
136
  this.#paseChannels.set(session, msgChannel);
137
+ session.destroyed.on(() => msgChannel.close());
134
138
  return msgChannel;
135
139
  }
136
140
 
@@ -154,9 +158,12 @@ export class ChannelManager {
154
158
  }
155
159
 
156
160
  // Need to create
157
- const result = new MessageChannel(byteArrayChannel, session, async () => this.removeChannel(address, session));
158
- await this.setChannel(address, result);
159
- return result;
161
+ const msgChannel = new MessageChannel(byteArrayChannel, session, async () =>
162
+ this.removeChannel(address, session),
163
+ );
164
+ await this.setChannel(address, msgChannel);
165
+ session.destroyed.on(() => msgChannel.close());
166
+ return msgChannel;
160
167
  }
161
168
 
162
169
  async close() {
@@ -7,6 +7,7 @@
7
7
  import {
8
8
  Channel,
9
9
  Crypto,
10
+ Diagnostic,
10
11
  Environment,
11
12
  Environmental,
12
13
  ImplementationError,
@@ -48,7 +49,6 @@ export class MessageChannel implements Channel<Message> {
48
49
  closeCallback?: () => Promise<void>,
49
50
  ) {
50
51
  this.#closeCallback = closeCallback;
51
- this.session.destroyed.on(() => this.close());
52
52
  }
53
53
 
54
54
  set closeCallback(callback: () => Promise<void>) {
@@ -315,7 +315,7 @@ export class ExchangeManager {
315
315
  logger.info(
316
316
  `Discarding unexpected message ${messageId} for protocol ${
317
317
  message.payloadHeader.protocolId
318
- }, exchangeIndex ${exchangeIndex} and sessionId ${session.id} on channel ${channel.name}: ${Logger.toJSON(message)}`,
318
+ }, exchangeIndex ${exchangeIndex} and sessionId ${session.id} on channel ${channel.name}: ${Diagnostic.json(message)}`,
319
319
  );
320
320
  }
321
321
  }