@matter/protocol 0.15.0-alpha.0-20250625-4a4b1be1b → 0.15.0-alpha.0-20250626-fc3a84ce9

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 (117) hide show
  1. package/dist/cjs/cluster/client/ClusterClient.d.ts.map +1 -1
  2. package/dist/cjs/cluster/client/ClusterClient.js +7 -1
  3. package/dist/cjs/cluster/client/ClusterClient.js.map +1 -1
  4. package/dist/cjs/cluster/client/ClusterClientTypes.d.ts +10 -0
  5. package/dist/cjs/cluster/client/ClusterClientTypes.d.ts.map +1 -1
  6. package/dist/cjs/interaction/InteractionClient.d.ts +8 -1
  7. package/dist/cjs/interaction/InteractionClient.d.ts.map +1 -1
  8. package/dist/cjs/interaction/InteractionClient.js +15 -10
  9. package/dist/cjs/interaction/InteractionClient.js.map +1 -1
  10. package/dist/cjs/interaction/InteractionMessenger.d.ts +0 -1
  11. package/dist/cjs/interaction/InteractionMessenger.d.ts.map +1 -1
  12. package/dist/cjs/interaction/InteractionMessenger.js +0 -3
  13. package/dist/cjs/interaction/InteractionMessenger.js.map +1 -1
  14. package/dist/cjs/interaction/SubscriptionClient.d.ts +1 -1
  15. package/dist/cjs/interaction/SubscriptionClient.d.ts.map +1 -1
  16. package/dist/cjs/interaction/SubscriptionClient.js +1 -1
  17. package/dist/cjs/peer/ControllerCommissioner.d.ts +3 -2
  18. package/dist/cjs/peer/ControllerCommissioner.d.ts.map +1 -1
  19. package/dist/cjs/peer/ControllerCommissioner.js +6 -5
  20. package/dist/cjs/peer/ControllerCommissioner.js.map +1 -1
  21. package/dist/cjs/peer/ControllerCommissioningFlow.d.ts.map +1 -1
  22. package/dist/cjs/peer/ControllerCommissioningFlow.js +81 -52
  23. package/dist/cjs/peer/ControllerCommissioningFlow.js.map +1 -1
  24. package/dist/cjs/peer/PeerSet.d.ts +4 -3
  25. package/dist/cjs/peer/PeerSet.d.ts.map +1 -1
  26. package/dist/cjs/peer/PeerSet.js +9 -8
  27. package/dist/cjs/peer/PeerSet.js.map +1 -1
  28. package/dist/cjs/protocol/ChannelManager.d.ts +2 -2
  29. package/dist/cjs/protocol/ChannelManager.d.ts.map +1 -1
  30. package/dist/cjs/protocol/ChannelManager.js +4 -4
  31. package/dist/cjs/protocol/ChannelManager.js.map +1 -1
  32. package/dist/cjs/protocol/ExchangeManager.d.ts +5 -24
  33. package/dist/cjs/protocol/ExchangeManager.d.ts.map +1 -1
  34. package/dist/cjs/protocol/ExchangeManager.js +12 -55
  35. package/dist/cjs/protocol/ExchangeManager.js.map +1 -1
  36. package/dist/cjs/protocol/ExchangeProvider.d.ts +10 -6
  37. package/dist/cjs/protocol/ExchangeProvider.d.ts.map +1 -1
  38. package/dist/cjs/protocol/ExchangeProvider.js +12 -1
  39. package/dist/cjs/protocol/ExchangeProvider.js.map +1 -1
  40. package/dist/cjs/protocol/MessageChannel.d.ts +52 -0
  41. package/dist/cjs/protocol/MessageChannel.d.ts.map +1 -0
  42. package/dist/cjs/protocol/MessageChannel.js +130 -0
  43. package/dist/cjs/protocol/MessageChannel.js.map +6 -0
  44. package/dist/cjs/protocol/MessageExchange.d.ts +5 -5
  45. package/dist/cjs/protocol/MessageExchange.d.ts.map +1 -1
  46. package/dist/cjs/protocol/MessageExchange.js +34 -78
  47. package/dist/cjs/protocol/MessageExchange.js.map +1 -1
  48. package/dist/cjs/protocol/index.d.ts +1 -0
  49. package/dist/cjs/protocol/index.d.ts.map +1 -1
  50. package/dist/cjs/protocol/index.js +1 -0
  51. package/dist/cjs/protocol/index.js.map +1 -1
  52. package/dist/esm/cluster/client/ClusterClient.d.ts.map +1 -1
  53. package/dist/esm/cluster/client/ClusterClient.js +7 -1
  54. package/dist/esm/cluster/client/ClusterClient.js.map +1 -1
  55. package/dist/esm/cluster/client/ClusterClientTypes.d.ts +10 -0
  56. package/dist/esm/cluster/client/ClusterClientTypes.d.ts.map +1 -1
  57. package/dist/esm/interaction/InteractionClient.d.ts +8 -1
  58. package/dist/esm/interaction/InteractionClient.d.ts.map +1 -1
  59. package/dist/esm/interaction/InteractionClient.js +15 -10
  60. package/dist/esm/interaction/InteractionClient.js.map +1 -1
  61. package/dist/esm/interaction/InteractionMessenger.d.ts +0 -1
  62. package/dist/esm/interaction/InteractionMessenger.d.ts.map +1 -1
  63. package/dist/esm/interaction/InteractionMessenger.js +0 -3
  64. package/dist/esm/interaction/InteractionMessenger.js.map +1 -1
  65. package/dist/esm/interaction/SubscriptionClient.d.ts +1 -1
  66. package/dist/esm/interaction/SubscriptionClient.d.ts.map +1 -1
  67. package/dist/esm/interaction/SubscriptionClient.js +1 -1
  68. package/dist/esm/peer/ControllerCommissioner.d.ts +3 -2
  69. package/dist/esm/peer/ControllerCommissioner.d.ts.map +1 -1
  70. package/dist/esm/peer/ControllerCommissioner.js +4 -3
  71. package/dist/esm/peer/ControllerCommissioner.js.map +1 -1
  72. package/dist/esm/peer/ControllerCommissioningFlow.d.ts.map +1 -1
  73. package/dist/esm/peer/ControllerCommissioningFlow.js +81 -52
  74. package/dist/esm/peer/ControllerCommissioningFlow.js.map +1 -1
  75. package/dist/esm/peer/PeerSet.d.ts +4 -3
  76. package/dist/esm/peer/PeerSet.d.ts.map +1 -1
  77. package/dist/esm/peer/PeerSet.js +5 -4
  78. package/dist/esm/peer/PeerSet.js.map +1 -1
  79. package/dist/esm/protocol/ChannelManager.d.ts +2 -2
  80. package/dist/esm/protocol/ChannelManager.d.ts.map +1 -1
  81. package/dist/esm/protocol/ChannelManager.js +2 -2
  82. package/dist/esm/protocol/ChannelManager.js.map +1 -1
  83. package/dist/esm/protocol/ExchangeManager.d.ts +5 -24
  84. package/dist/esm/protocol/ExchangeManager.d.ts.map +1 -1
  85. package/dist/esm/protocol/ExchangeManager.js +13 -56
  86. package/dist/esm/protocol/ExchangeManager.js.map +1 -1
  87. package/dist/esm/protocol/ExchangeProvider.d.ts +10 -6
  88. package/dist/esm/protocol/ExchangeProvider.d.ts.map +1 -1
  89. package/dist/esm/protocol/ExchangeProvider.js +12 -1
  90. package/dist/esm/protocol/ExchangeProvider.js.map +1 -1
  91. package/dist/esm/protocol/MessageChannel.d.ts +52 -0
  92. package/dist/esm/protocol/MessageChannel.d.ts.map +1 -0
  93. package/dist/esm/protocol/MessageChannel.js +110 -0
  94. package/dist/esm/protocol/MessageChannel.js.map +6 -0
  95. package/dist/esm/protocol/MessageExchange.d.ts +5 -5
  96. package/dist/esm/protocol/MessageExchange.d.ts.map +1 -1
  97. package/dist/esm/protocol/MessageExchange.js +39 -83
  98. package/dist/esm/protocol/MessageExchange.js.map +1 -1
  99. package/dist/esm/protocol/index.d.ts +1 -0
  100. package/dist/esm/protocol/index.d.ts.map +1 -1
  101. package/dist/esm/protocol/index.js +1 -0
  102. package/dist/esm/protocol/index.js.map +1 -1
  103. package/package.json +6 -6
  104. package/src/cluster/client/ClusterClient.ts +8 -1
  105. package/src/cluster/client/ClusterClientTypes.ts +12 -0
  106. package/src/interaction/InteractionClient.ts +29 -16
  107. package/src/interaction/InteractionMessenger.ts +0 -4
  108. package/src/interaction/SubscriptionClient.ts +2 -2
  109. package/src/peer/ControllerCommissioner.ts +4 -3
  110. package/src/peer/ControllerCommissioningFlow.ts +96 -57
  111. package/src/peer/PeerSet.ts +5 -4
  112. package/src/protocol/ChannelManager.ts +3 -3
  113. package/src/protocol/ExchangeManager.ts +18 -67
  114. package/src/protocol/ExchangeProvider.ts +20 -6
  115. package/src/protocol/MessageChannel.ts +163 -0
  116. package/src/protocol/MessageExchange.ts +40 -119
  117. package/src/protocol/index.ts +1 -0
@@ -3,8 +3,10 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import { MessageCodec, SessionType } from "#codec/MessageCodec.js";
6
7
  import {
7
8
  AsyncObservable,
9
+ createPromise,
8
10
  CRYPTO_AEAD_MIC_LENGTH_BYTES,
9
11
  DataReadQueue,
10
12
  Diagnostic,
@@ -13,10 +15,16 @@ import {
13
15
  MatterError,
14
16
  MatterFlowError,
15
17
  NoResponseTimeoutError,
16
- Time,
17
- createPromise
18
+ Time
18
19
  } from "#general";
19
- import { GroupSession } from "#session/index.js";
20
+ import { MRP } from "#protocol/MessageChannel.js";
21
+ import { SecureChannelProtocol } from "#securechannel/SecureChannelProtocol.js";
22
+ import { GroupSession } from "#session/GroupSession.js";
23
+ import {
24
+ SESSION_ACTIVE_INTERVAL_MS,
25
+ SESSION_ACTIVE_THRESHOLD_MS,
26
+ SESSION_IDLE_INTERVAL_MS
27
+ } from "#session/Session.js";
20
28
  import {
21
29
  GroupId,
22
30
  SECURE_CHANNEL_PROTOCOL_ID,
@@ -24,13 +32,6 @@ import {
24
32
  StatusCode,
25
33
  StatusResponseError
26
34
  } from "#types";
27
- import { MessageCodec, SessionType } from "../codec/MessageCodec.js";
28
- import { SecureChannelProtocol } from "../securechannel/SecureChannelProtocol.js";
29
- import {
30
- SESSION_ACTIVE_INTERVAL_MS,
31
- SESSION_ACTIVE_THRESHOLD_MS,
32
- SESSION_IDLE_INTERVAL_MS
33
- } from "../session/Session.js";
34
35
  import { ChannelNotConnectedError } from "./ExchangeManager.js";
35
36
  const logger = Logger.get("MessageExchange");
36
37
  class RetransmissionLimitReachedError extends NoResponseTimeoutError {
@@ -41,14 +42,7 @@ class UnexpectedMessageError extends MatterError {
41
42
  this.receivedMessage = receivedMessage;
42
43
  }
43
44
  }
44
- const MRP_MAX_TRANSMISSIONS = 5;
45
- const MRP_BACKOFF_BASE = 1.6;
46
- const MRP_BACKOFF_JITTER = 0.25;
47
- const MRP_BACKOFF_MARGIN = 1.1;
48
- const MRP_BACKOFF_THRESHOLD = 1;
49
- const MRP_STANDALONE_ACK_TIMEOUT_MS = 200;
50
45
  const DEFAULT_EXPECTED_PROCESSING_TIME_MS = 2e3;
51
- const PEER_RESPONSE_TIME_BUFFER_MS = 5e3;
52
46
  const MATTER_MESSAGE_OVERHEAD = 26 + 12 + CRYPTO_AEAD_MIC_LENGTH_BYTES;
53
47
  class MessageExchange {
54
48
  constructor(context, isInitiator, peerSessionId, nodeId, peerNodeId, exchangeId, protocolId, requiresSecureSession) {
@@ -66,8 +60,6 @@ class MessageExchange {
66
60
  this.#activeIntervalMs = activeIntervalMs ?? SESSION_ACTIVE_INTERVAL_MS;
67
61
  this.#idleIntervalMs = idleIntervalMs ?? SESSION_IDLE_INTERVAL_MS;
68
62
  this.#activeThresholdMs = activeThresholdMs ?? SESSION_ACTIVE_THRESHOLD_MS;
69
- this.#maxTransmissions = MRP_MAX_TRANSMISSIONS;
70
- this.#useMRP = session.supportsMRP && !channel.isReliable;
71
63
  this.#used = !isInitiator;
72
64
  logger.debug(
73
65
  "New exchange",
@@ -80,9 +72,9 @@ class MessageExchange {
80
72
  SAT: this.#activeThresholdMs,
81
73
  SAI: this.#activeIntervalMs,
82
74
  SII: this.#idleIntervalMs,
83
- maxTrans: this.#maxTransmissions,
75
+ maxTrans: MRP.MAX_TRANSMISSIONS,
84
76
  exchangeFlags: Diagnostic.asFlags({
85
- MRP: this.#useMRP,
77
+ MRP: this.channel.usesMrp,
86
78
  I: this.isInitiator
87
79
  })
88
80
  })
@@ -121,10 +113,9 @@ class MessageExchange {
121
113
  #activeIntervalMs;
122
114
  #idleIntervalMs;
123
115
  #activeThresholdMs;
124
- #maxTransmissions;
125
116
  #messagesQueue = new DataReadQueue();
126
117
  #receivedMessageToAck;
127
- #receivedMessageAckTimer = Time.getTimer("Ack receipt timeout", MRP_STANDALONE_ACK_TIMEOUT_MS, () => {
118
+ #receivedMessageAckTimer = Time.getTimer("Ack receipt timeout", MRP.STANDALONE_ACK_TIMEOUT_MS, () => {
128
119
  if (this.#receivedMessageToAck !== void 0) {
129
120
  const messageToAck = this.#receivedMessageToAck;
130
121
  this.#receivedMessageToAck = void 0;
@@ -149,7 +140,6 @@ class MessageExchange {
149
140
  #protocolId;
150
141
  #closed = AsyncObservable();
151
142
  #closing = AsyncObservable();
152
- #useMRP;
153
143
  /** Emits when the exchange is actually closed. This happens after all Retries and Communication are done. */
154
144
  get closed() {
155
145
  return this.#closed;
@@ -185,12 +175,12 @@ class MessageExchange {
185
175
  packetHeader: { messageId },
186
176
  payloadHeader: { requiresAck }
187
177
  } = message;
188
- if (!requiresAck || !this.#useMRP) return;
178
+ if (!requiresAck || !this.channel.usesMrp) return;
189
179
  await this.send(SecureMessageType.StandaloneAck, new Uint8Array(0), { includeAcknowledgeMessageId: messageId });
190
180
  }
191
181
  async onMessageReceived(message, duplicate = false) {
192
182
  logger.debug("Message \xAB", MessageCodec.messageDiagnostics(message, { duplicate }));
193
- if (message.payloadHeader.requiresAck && !this.#useMRP) {
183
+ if (message.payloadHeader.requiresAck && !this.channel.usesMrp) {
194
184
  logger.debug("Ignoring ack-required flag because MRP is not used for this exchange");
195
185
  message.payloadHeader.requiresAck = false;
196
186
  }
@@ -253,7 +243,7 @@ class MessageExchange {
253
243
  await this.#messagesQueue.write(message);
254
244
  }
255
245
  async send(messageType, payload, options) {
256
- if (options?.requiresAck && !this.#useMRP) {
246
+ if (options?.requiresAck && !this.channel.usesMrp) {
257
247
  options.requiresAck = false;
258
248
  }
259
249
  const {
@@ -264,11 +254,11 @@ class MessageExchange {
264
254
  includeAcknowledgeMessageId,
265
255
  logContext
266
256
  } = options ?? {};
267
- if (!this.#useMRP && includeAcknowledgeMessageId !== void 0) {
257
+ if (!this.channel.usesMrp && includeAcknowledgeMessageId !== void 0) {
268
258
  throw new InternalError("Cannot include an acknowledge message ID when MRP is not used");
269
259
  }
270
260
  if (messageType === SecureMessageType.StandaloneAck) {
271
- if (!this.#useMRP) {
261
+ if (!this.channel.usesMrp) {
272
262
  return;
273
263
  }
274
264
  if (requiresAck) {
@@ -280,7 +270,7 @@ class MessageExchange {
280
270
  this.#used = true;
281
271
  this.session.notifyActivity(false);
282
272
  let ackedMessageId = includeAcknowledgeMessageId;
283
- if (ackedMessageId === void 0 && this.#useMRP) {
273
+ if (ackedMessageId === void 0 && this.channel.usesMrp) {
284
274
  ackedMessageId = this.#receivedMessageToAck?.packetHeader.messageId;
285
275
  if (ackedMessageId !== void 0) {
286
276
  this.#receivedMessageAckTimer.stop();
@@ -329,18 +319,18 @@ class MessageExchange {
329
319
  protocolId: messageType === SecureMessageType.StandaloneAck ? SECURE_CHANNEL_PROTOCOL_ID : this.#protocolId,
330
320
  messageType,
331
321
  isInitiatorMessage: this.isInitiator,
332
- requiresAck: requiresAck ?? (this.#useMRP && messageType !== SecureMessageType.StandaloneAck),
322
+ requiresAck: requiresAck ?? (this.channel.usesMrp && messageType !== SecureMessageType.StandaloneAck),
333
323
  ackedMessageId,
334
324
  hasSecuredExtension: false
335
325
  },
336
326
  payload
337
327
  };
338
328
  let ackPromise;
339
- if (this.#useMRP && message.payloadHeader.requiresAck && !disableMrpLogic) {
329
+ if (this.channel.usesMrp && message.payloadHeader.requiresAck && !disableMrpLogic) {
340
330
  this.#sentMessageToAck = message;
341
331
  this.#retransmissionTimer = Time.getTimer(
342
332
  `Message retransmission ${message.packetHeader.messageId}`,
343
- this.#getResubmissionBackOffTime(0),
333
+ this.channel.getMrpResubmissionBackOffTime(0),
344
334
  () => this.#retransmitMessage(message, expectedProcessingTimeMs)
345
335
  );
346
336
  const { promise, resolver, rejecter } = createPromise();
@@ -370,61 +360,27 @@ class MessageExchange {
370
360
  } else if (this.#messagesQueue.size > 0) {
371
361
  timeout = 0;
372
362
  } else {
373
- switch (this.channel.type) {
374
- case "tcp":
375
- timeout = 3e4;
376
- break;
377
- case "udp":
378
- if (!this.#useMRP) {
379
- throw new MatterFlowError(
380
- "No response expected for this message exchange because UDP and no MRP."
381
- );
382
- }
383
- const { expectedProcessingTimeMs } = options ?? {};
384
- timeout = this.calculateMaximumPeerResponseTime(expectedProcessingTimeMs);
385
- break;
386
- case "ble":
387
- timeout = 3e4;
388
- break;
389
- default:
390
- throw new MatterFlowError(
391
- `Can not calculate expected timeout for unknown channel type: ${this.channel.type}`
392
- );
393
- }
394
- timeout += PEER_RESPONSE_TIME_BUFFER_MS;
363
+ timeout = this.channel.calculateMaximumPeerResponseTimeMs(
364
+ this.context.localSessionParameters,
365
+ options?.expectedProcessingTimeMs
366
+ );
395
367
  }
396
368
  return this.#messagesQueue.read(timeout);
397
369
  }
398
- /**
399
- * Calculates the backoff time for a resubmission based on the current retransmission count.
400
- * If no session parameters are provided, the parameters of the current session are used.
401
- * If session parameters are provided, the method can be used to calculate the maximum backoff time for the other
402
- * side of the exchange.
403
- *
404
- * @see {@link MatterSpecification.v10.Core}, section 4.11.2.1
405
- */
406
- #getResubmissionBackOffTime(retransmissionCount, sessionParameters) {
407
- const { activeIntervalMs, idleIntervalMs } = sessionParameters ?? {
408
- activeIntervalMs: this.#activeIntervalMs,
409
- idleIntervalMs: this.#idleIntervalMs
410
- };
411
- const baseInterval = sessionParameters !== void 0 || this.session.isPeerActive() ? activeIntervalMs : idleIntervalMs;
412
- return Math.floor(
413
- MRP_BACKOFF_MARGIN * baseInterval * Math.pow(MRP_BACKOFF_BASE, Math.max(0, retransmissionCount - MRP_BACKOFF_THRESHOLD)) * (1 + (sessionParameters !== void 0 ? 1 : Math.random()) * MRP_BACKOFF_JITTER)
370
+ calculateMaximumPeerResponseTimeMs(expectedProcessingTimeMs = DEFAULT_EXPECTED_PROCESSING_TIME_MS) {
371
+ return this.channel.calculateMaximumPeerResponseTimeMs(
372
+ this.context.localSessionParameters,
373
+ expectedProcessingTimeMs
414
374
  );
415
375
  }
416
- calculateMaximumPeerResponseTime(expectedProcessingTimeMs = DEFAULT_EXPECTED_PROCESSING_TIME_MS) {
417
- let finalWaitTime = expectedProcessingTimeMs;
418
- for (let i = 0; i < this.#maxTransmissions; i++) {
419
- finalWaitTime += this.#getResubmissionBackOffTime(i, this.context.localSessionParameters);
420
- }
421
- return finalWaitTime;
422
- }
423
376
  #retransmitMessage(message, expectedProcessingTimeMs) {
424
377
  this.#retransmissionCounter++;
425
- if (this.#retransmissionCounter >= this.#maxTransmissions) {
378
+ if (this.#retransmissionCounter >= MRP.MAX_TRANSMISSIONS) {
426
379
  if (expectedProcessingTimeMs !== void 0) {
427
- const finalWaitTime = this.calculateMaximumPeerResponseTime(expectedProcessingTimeMs) - (this.#retransmissionTimer?.intervalMs ?? 0);
380
+ const finalWaitTime = this.channel.calculateMaximumPeerResponseTimeMs(
381
+ this.context.localSessionParameters,
382
+ expectedProcessingTimeMs
383
+ ) - (this.#retransmissionTimer?.intervalMs ?? 0);
428
384
  if (finalWaitTime > 0) {
429
385
  this.#retransmissionCounter--;
430
386
  logger.debug(
@@ -453,7 +409,7 @@ class MessageExchange {
453
409
  if (this.#retransmissionCounter === 1) {
454
410
  this.context.resubmissionStarted();
455
411
  }
456
- const resubmissionBackoffTime = this.#getResubmissionBackOffTime(this.#retransmissionCounter);
412
+ const resubmissionBackoffTime = this.channel.getMrpResubmissionBackOffTime(this.#retransmissionCounter);
457
413
  logger.debug(
458
414
  `Resubmit message ${message.packetHeader.messageId} (retransmission attempt ${this.#retransmissionCounter}, backoff time ${resubmissionBackoffTime}ms))`
459
415
  );
@@ -554,8 +510,8 @@ class MessageExchange {
554
510
  return this.#close();
555
511
  }
556
512
  let maxResubmissionTime = 0;
557
- for (let i = this.#retransmissionCounter; i <= this.#maxTransmissions; i++) {
558
- maxResubmissionTime += this.#getResubmissionBackOffTime(i);
513
+ for (let i = this.#retransmissionCounter; i <= MRP.MAX_TRANSMISSIONS; i++) {
514
+ maxResubmissionTime += this.channel.getMrpResubmissionBackOffTime(i);
559
515
  }
560
516
  this.#closeTimer = Time.getTimer(
561
517
  `Message exchange cleanup ${this.session.name} / ${this.#exchangeId}`,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/protocol/MessageExchange.ts"],
4
- "mappings": "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",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAkB,cAA4B,mBAAmB;AACjE;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEG;AACP,SAAyB,WAAW;AACpC,SAAS,6BAA6B;AACtC,SAAS,oBAAoB;AAC7B;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,OAEG;AACP;AAAA,EACI;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,gCAAgC;AAEzC,MAAM,SAAS,OAAO,IAAI,iBAAiB;AAEpC,MAAM,wCAAwC,uBAAuB;AAAC;AAEtE,MAAM,+BAA+B,YAAY;AAAA,EAC7C,YACH,SACgB,iBAClB;AACE,UAAM,IAAI,aAAa,mBAAmB,eAAe,CAAC,KAAK,OAAO,EAAE;AAFxD;AAAA,EAGpB;AACJ;AA2CO,MAAM,sCAAsC;AAQ5C,MAAM,0BAA0B,KAAK,KAAK;AAW1C,MAAM,gBAAgB;AAAA,EAkEzB,YACa,SACA,aACT,eACA,QACA,YACA,YACA,YACS,uBACX;AARW;AACA;AAMA;AAET,UAAM,EAAE,QAAQ,IAAI;AACpB,UAAM,EAAE,QAAQ,IAAI;AACpB,SAAK,iBAAiB;AACtB,SAAK,UAAU;AACf,SAAK,cAAc;AACnB,SAAK,cAAc;AACnB,SAAK,cAAc;AAEnB,UAAM,EAAE,kBAAkB,gBAAgB,kBAAkB,IAAI,QAAQ;AACxE,SAAK,oBAAoB,oBAAoB;AAC7C,SAAK,kBAAkB,kBAAkB;AACzC,SAAK,qBAAqB,qBAAqB;AAE/C,SAAK,QAAQ,CAAC;AAEd,WAAO;AAAA,MACH;AAAA,MACA,WAAW,KAAK;AAAA,QACZ,SAAS,QAAQ;AAAA,QACjB,UAAU,KAAK;AAAA,QACf,MAAM,KAAK;AAAA,QACX,MAAM,QAAQ;AAAA,QACd,UAAU,KAAK;AAAA,QACf,KAAK,KAAK;AAAA,QACV,KAAK,KAAK;AAAA,QACV,KAAK,KAAK;AAAA,QACV,UAAU,IAAI;AAAA,QACd,eAAe,WAAW,QAAQ;AAAA,UAC9B,KAAK,KAAK,QAAQ;AAAA,UAClB,GAAG,KAAK;AAAA,QACZ,CAAC;AAAA,MACL,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EA5GA,OAAO,mBAAmB,SAAiC,gBAAyB;AAChF,UAAM;AAAA,MACF,SAAS,EAAE,QAAQ;AAAA,IACvB,IAAI;AACJ,WAAO,IAAI;AAAA,MACP;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,eAAe,aAAa;AAAA,MAC5B,eAAe,aAAa;AAAA,MAC5B,eAAe,cAAc;AAAA,MAC7B,eAAe,cAAc;AAAA,MAC7B,QAAQ;AAAA,IACZ;AAAA,EACJ;AAAA,EAEA,OAAO,SAAS,SAAiC,YAAoB,YAAoB;AACrF,UAAM;AAAA,MACF,SAAS,EAAE,QAAQ;AAAA,IACvB,IAAI;AACJ,WAAO,IAAI;AAAA,MACP;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IACZ;AAAA,EACJ;AAAA,EAES;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB,IAAI,cAAuB;AAAA,EACrD;AAAA,EACA,2BAA2B,KAAK,SAAS,uBAAuB,IAAI,2BAA2B,MAAM;AACjG,QAAI,KAAK,0BAA0B,QAAW;AAC1C,YAAM,eAAe,KAAK;AAC1B,WAAK,wBAAwB;AAE7B,WAAK,4BAA4B,YAAY,EAAE;AAAA,QAAM,WACjD,OAAO,MAAM,mDAAmD,KAAK;AAAA,MACzE;AAAA,IACJ;AAAA,EACJ,CAAC;AAAA,EACD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,yBAAyB;AAAA,EACzB;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EAES;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU,gBAAoB;AAAA,EAC9B,WAAW,gBAAoB;AAAA;AAAA,EAgDxC,IAAI,SAAS;AACT,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,UAAU;AACV,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,YAAY;AACZ,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,KAAK;AACL,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,UAAU;AACV,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEA,IAAI,UAAU;AACV,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,iBAAiB;AAGjB,WAAO,KAAK,QAAQ,iBAAiB;AAAA,EACzC;AAAA,EAEA,MAAM,4BAA4B,SAAkB;AAChD,UAAM;AAAA,MACF,cAAc,EAAE,UAAU;AAAA,MAC1B,eAAe,EAAE,YAAY;AAAA,IACjC,IAAI;AACJ,QAAI,CAAC,eAAe,CAAC,KAAK,QAAQ,QAAS;AAE3C,UAAM,KAAK,KAAK,kBAAkB,eAAe,IAAI,WAAW,CAAC,GAAG,EAAE,6BAA6B,UAAU,CAAC;AAAA,EAClH;AAAA,EAEA,MAAM,kBAAkB,SAAkB,YAAY,OAAO;AACzD,WAAO,MAAM,gBAAa,aAAa,mBAAmB,SAAS,EAAE,UAAU,CAAC,CAAC;AAGjF,QAAI,QAAQ,cAAc,eAAe,CAAC,KAAK,QAAQ,SAAS;AAC5D,aAAO,MAAM,sEAAsE;AACnF,cAAQ,cAAc,cAAc;AAAA,IACxC;AAEA,UAAM;AAAA,MACF,cAAc,EAAE,UAAU;AAAA,MAC1B,eAAe,EAAE,aAAa,gBAAgB,YAAY,YAAY;AAAA,IAC1E,IAAI;AAEJ,UAAM,kBAAkB,sBAAsB,gBAAgB,YAAY,WAAW;AACrF,QAAI,eAAe,KAAK,eAAe,CAAC,iBAAiB;AACrD,YAAM,IAAI;AAAA,QACN,iEAAiE,KAAK,WAAW,eAAe,UAAU;AAAA,MAC9G;AAAA,IACJ;AAEA,SAAK,QAAQ,eAAe,IAAI;AAEhC,QAAI,WAAW;AAEX,UAAI,aAAa;AACb,cAAM,KAAK,4BAA4B,OAAO;AAAA,MAClD;AACA;AAAA,IACJ;AACA,QAAI,cAAc,KAAK,mBAAmB,cAAc,gBAAgB;AAGpE,YAAM,KAAK,QAAQ,KAAK,KAAK,iBAAiB;AAC9C;AAAA,IACJ;AACA,UAAM,qBAAqB,KAAK,mBAAmB,aAAa;AAChE,QAAI,uBAAuB,QAAW;AAClC,UAAI,mBAAmB,QAAW;AAE9B,cAAM,IAAI,gBAAgB,iCAAiC;AAAA,MAC/D,WAAW,mBAAmB,oBAAoB;AAE9C,YAAI,iBAAiB;AAAA,QAErB,OAAO;AACH,gBAAM,IAAI;AAAA,YACN,oCAAoC,kBAAkB,eAAe,cAAc;AAAA,UACvF;AAAA,QACJ;AAAA,MACJ,OAAO;AAEH,aAAK,sBAAsB,KAAK;AAChC,aAAK,yBAAyB;AAC9B,aAAK,yBAAyB,OAAO;AACrC,aAAK,yBAAyB;AAC9B,aAAK,yBAAyB;AAC9B,aAAK,oBAAoB;AACzB,YAAI,mBAAmB,KAAK,gBAAgB,QAAW;AAEnD,iBAAO,KAAK,OAAO;AAAA,QACvB;AAAA,MACJ;AAAA,IACJ;AACA,QAAI,iBAAiB;AAEjB;AAAA,IACJ;AACA,QAAI,aAAa;AAEb,UAAI,KAAK,0BAA0B,QAAW;AAC1C,aAAK,yBAAyB,KAAK;AACnC,cAAM,KAAK,4BAA4B,KAAK,qBAAqB;AACjE;AAAA,MACJ;AACA,WAAK,wBAAwB;AAC7B,WAAK,yBAAyB,MAAM;AAAA,IACxC;AACA,UAAM,KAAK,eAAe,MAAM,OAAO;AAAA,EAC3C;AAAA,EAEA,MAAM,KAAK,aAAqB,SAAqB,SAA+B;AAChF,QAAI,SAAS,eAAe,CAAC,KAAK,QAAQ,SAAS;AAC/C,cAAQ,cAAc;AAAA,IAC1B;AAEA,UAAM;AAAA,MACF,gBAAgB;AAAA,MAChB;AAAA,MACA,2BAA2B;AAAA,MAC3B;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAI,WAAW,CAAC;AAChB,QAAI,CAAC,KAAK,QAAQ,WAAW,gCAAgC,QAAW;AACpE,YAAM,IAAI,cAAc,+DAA+D;AAAA,IAC3F;AACA,QAAI,gBAAgB,kBAAkB,eAAe;AACjD,UAAI,CAAC,KAAK,QAAQ,SAAS;AACvB;AAAA,MACJ;AACA,UAAI,aAAa;AACb,cAAM,IAAI,gBAAgB,mDAAmD;AAAA,MACjF;AAAA,IACJ;AACA,QAAI,KAAK,sBAAsB,UAAa,gBAAgB,kBAAkB;AAC1E,YAAM,IAAI,gBAAgB,yEAAyE;AAEvG,SAAK,QAAQ;AACb,SAAK,QAAQ,eAAe,KAAK;AAEjC,QAAI,iBAAiB;AACrB,QAAI,mBAAmB,UAAa,KAAK,QAAQ,SAAS;AACtD,uBAAiB,KAAK,uBAAuB,aAAa;AAC1D,UAAI,mBAAmB,QAAW;AAC9B,aAAK,yBAAyB,KAAK;AACnC,aAAK,wBAAwB;AAAA,MACjC;AAAA,IACJ;AAEA,QAAI;AACJ,QAAI,KAAK,QAAQ,SAAS,YAAY,SAAS;AAC3C,qBAAe;AAAA,QACX,WAAW,KAAK;AAAA,QAChB,aAAa,YAAY;AAAA,QACzB,WAAW,MAAM,KAAK,QAAQ,6BAA6B;AAAA,QAC3D,YAAY,KAAK;AAAA,QACjB,cAAc,KAAK;AAAA,QACnB,wBAAwB;AAAA,QACxB,kBAAkB;AAAA,QAClB,sBAAsB;AAAA,MAC1B;AAAA,IACJ,WAAW,KAAK,QAAQ,SAAS,YAAY,OAAO;AAChD,YAAM,UAAU,KAAK;AACrB,UAAI,CAAC,aAAa,GAAG,OAAO,GAAG;AAC3B,cAAM,IAAI,cAAc,2DAA2D;AAAA,MACvF;AACA,YAAM,cAAc,QAAQ,WAAW,KAAK,WAAY;AACxD,UAAI,gBAAgB,GAAG;AACnB,cAAM,IAAI,cAAc,yCAAyC,KAAK,WAAW,EAAE;AAAA,MACvF;AACA,qBAAe;AAAA,QACX,WAAW,KAAK;AAAA,QAChB,aAAa,YAAY;AAAA,QACzB,WAAW,MAAM,QAAQ,6BAA6B;AAAA,QACtD;AAAA,QACA,cAAc,KAAK;AAAA;AAAA,QACnB,wBAAwB;AAAA,QACxB,kBAAkB;AAAA,QAClB,sBAAsB;AAAA,MAC1B;AAAA,IACJ,OAAO;AACH,YAAM,IAAI,cAAc,yBAAyB,KAAK,QAAQ,IAAI,EAAE;AAAA,IACxE;AAEA,UAAM,UAAmB;AAAA,MACrB;AAAA,MACA,eAAe;AAAA,QACX,YAAY,KAAK;AAAA,QACjB,YACI,gBAAgB,kBAAkB,gBAAgB,6BAA6B,KAAK;AAAA,QACxF;AAAA,QACA,oBAAoB,KAAK;AAAA,QACzB,aAAa,gBAAgB,KAAK,QAAQ,WAAW,gBAAgB,kBAAkB;AAAA,QACvF;AAAA,QACA,qBAAqB;AAAA,MACzB;AAAA,MACA;AAAA,IACJ;AAEA,QAAI;AACJ,QAAI,KAAK,QAAQ,WAAW,QAAQ,cAAc,eAAe,CAAC,iBAAiB;AAC/E,WAAK,oBAAoB;AACzB,WAAK,uBAAuB,KAAK;AAAA,QAC7B,0BAA0B,QAAQ,aAAa,SAAS;AAAA,QACxD,KAAK,QAAQ,8BAA8B,CAAC;AAAA,QAC5C,MAAM,KAAK,mBAAmB,SAAS,wBAAwB;AAAA,MACnE;AACA,YAAM,EAAE,SAAS,UAAU,SAAS,IAAI,cAAuB;AAC/D,mBAAa;AACb,WAAK,yBAAyB;AAC9B,WAAK,yBAAyB;AAAA,IAClC;AAEA,UAAM,KAAK,QAAQ,KAAK,SAAS,UAAU;AAE3C,QAAI,eAAe,QAAW;AAC1B,WAAK,yBAAyB;AAC9B,WAAK,sBAAsB,MAAM;AAEjC,YAAM,kBAAkB,MAAM;AAC9B,WAAK,yBAAyB;AAC9B,WAAK,yBAAyB;AAE9B,YAAM;AAAA,QACF,eAAe,EAAE,YAAY,aAAAA,aAAY;AAAA,MAC7C,IAAI;AACJ,UAAI,iBAAiB,CAAC,sBAAsB,gBAAgB,YAAYA,YAAW,GAAG;AAClF,cAAM,IAAI,uBAAuB,qBAAqB,eAAe;AAAA,MACzE;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,YAAY,SAAqE;AAC7E,QAAI;AACJ,QAAI,SAAS,cAAc,QAAW;AAClC,gBAAU,QAAQ;AAAA,IACtB,WAAW,KAAK,eAAe,OAAO,GAAG;AACrC,gBAAU;AAAA,IACd,OAAO;AACH,gBAAU,KAAK,QAAQ;AAAA,QACnB,KAAK,QAAQ;AAAA,QACb,SAAS;AAAA,MACb;AAAA,IACJ;AACA,WAAO,KAAK,eAAe,KAAK,OAAO;AAAA,EAC3C;AAAA,EAEA,mCAAmC,2BAA2B,qCAAqC;AAC/F,WAAO,KAAK,QAAQ;AAAA,MAChB,KAAK,QAAQ;AAAA,MACb;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,mBAAmB,SAAkB,0BAAmC;AACpE,SAAK;AACL,QAAI,KAAK,0BAA0B,IAAI,mBAAmB;AAGtD,UAAI,6BAA6B,QAAW;AAExC,cAAM,gBACF,KAAK,QAAQ;AAAA,UACT,KAAK,QAAQ;AAAA,UACb;AAAA,QACJ,KAAK,KAAK,sBAAsB,cAAc;AAClD,YAAI,gBAAgB,GAAG;AACnB,eAAK;AACL,iBAAO;AAAA,YACH,WAAW,QAAQ,aAAa,SAAS,qBAAqB,aAAa;AAAA,UAC/E;AACA,eAAK,uBAAuB,KAAK;AAAA,YAC7B,yCAAyC,QAAQ,aAAa,SAAS;AAAA,YACvE;AAAA,YACA,MAAM,KAAK,mBAAmB,OAAO;AAAA,UACzC,EAAE,MAAM;AACR;AAAA,QACJ;AAAA,MACJ;AAGA,UAAI,KAAK,sBAAsB,UAAa,KAAK,2BAA2B,QAAW;AACnF,aAAK,wBAAwB;AAC7B,aAAK,uBAAuB,IAAI,gCAAgC,CAAC;AACjE,aAAK,yBAAyB;AAC9B,aAAK,yBAAyB;AAAA,MAClC;AACA,UAAI,KAAK,gBAAgB,QAAW;AAEhC,aAAK,OAAO,EAAE,MAAM,WAAS,OAAO,MAAM,+CAA+C,KAAK,CAAC;AAAA,MACnG;AACA;AAAA,IACJ;AAEA,SAAK,QAAQ,eAAe,KAAK;AAEjC,QAAI,KAAK,2BAA2B,GAAG;AACnC,WAAK,QAAQ,oBAAoB;AAAA,IACrC;AACA,UAAM,0BAA0B,KAAK,QAAQ,8BAA8B,KAAK,sBAAsB;AACtG,WAAO;AAAA,MACH,oBAAoB,QAAQ,aAAa,SAAS,4BAA4B,KAAK,sBAAsB,kBAAkB,uBAAuB;AAAA,IACtJ;AAEA,SAAK,QACA,KAAK,OAAO,EACZ,KAAK,MAAM,KAAK,wBAAwB,SAAS,yBAAyB,wBAAwB,CAAC,EACnG,MAAM,WAAS;AACZ,aAAO,MAAM,mDAAmD,KAAK;AACrE,UAAI,iBAAiB,0BAA0B;AAC3C,aAAK,OAAO,EAAE,MAAM,CAAAC,WAAS,OAAO,MAAM,+CAA+CA,MAAK,CAAC;AAAA,MACnG,OAAO;AACH,aAAK,wBAAwB,SAAS,yBAAyB,wBAAwB;AAAA,MAC3F;AAAA,IACJ,CAAC;AAAA,EACT;AAAA,EAEA,wBAAwB,SAAkB,yBAAiC,0BAAmC;AAC1G,SAAK,uBAAuB,KAAK;AAAA,MAAS;AAAA,MAA0B;AAAA,MAAyB,MACzF,KAAK,mBAAmB,SAAS,wBAAwB;AAAA,IAC7D,EAAE,MAAM;AAAA,EACZ;AAAA,EAEA,MAAM,UAAU;AACZ,QAAI,KAAK,gBAAgB,UAAa,KAAK,0BAA0B,QAAW;AAC5E,WAAK,yBAAyB,KAAK;AACnC,YAAM,eAAe,KAAK;AAC1B,WAAK,wBAAwB;AAC7B,UAAI;AACA,cAAM,KAAK,4BAA4B,YAAY;AAAA,MACvD,SAAS,OAAO;AACZ,eAAO,MAAM,+CAA+C,KAAK;AAAA,MACrE;AAAA,IACJ;AACA,UAAM,KAAK,OAAO;AAAA,EACtB;AAAA,EAEA,sBAAsB,WAAmB;AACrC,QAAI,KAAK,2BAA2B,UAAa,KAAK,uBAAuB,WAAW;AACpF,WAAK,uBAAuB,KAAK;AACjC,YAAM,IAAI;AAAA,QACN;AAAA,QACA,WAAW;AAAA,MACf;AAAA,IACJ;AACA,WAAO;AAAA,MACH,kDAAkD,KAAK,WAAW,QAAQ,SAAS,WAAW,KAAK,QAAQ,IAAI;AAAA,IACnH;AACA,SAAK,yBAAyB,KAAK,SAAS,qBAAqB,WAAW,MAAM;AAC9E,aAAO;AAAA,QACH,yCAAyC,KAAK,WAAW,SAAS,KAAK,QAAQ,IAAI;AAAA,MACvF;AAAA,IACJ,CAAC,EAAE,MAAM;AAAA,EACb;AAAA,EAEA,wBAAwB;AACpB,QAAI,KAAK,2BAA2B,QAAW;AAC3C,aAAO;AAAA,QACH,kDAAkD,KAAK,WAAW,SAAS,KAAK,QAAQ,IAAI;AAAA,MAChG;AACA,WAAK,uBAAuB,KAAK;AACjC,WAAK,yBAAyB;AAAA,IAClC;AAAA,EACJ;AAAA,EAEA,sBAAsB;AAClB,WAAO,KAAK,2BAA2B;AAAA,EAC3C;AAAA,EAEA,4BAA4B;AACxB,WAAO,KAAK,2BAA2B,UAAa,KAAK,uBAAuB;AAAA,EACpF;AAAA,EAEA,6BAA6B;AACzB,WAAO,KAAK,2BAA2B,UAAa,CAAC,KAAK,uBAAuB;AAAA,EACrF;AAAA,EAEA,MAAM,MAAM,QAAQ,OAAO;AACvB,QAAI,KAAK,gBAAgB,QAAW;AAChC,UAAI,OAAO;AAEP,aAAK,YAAY,KAAK;AACtB,eAAO,KAAK,OAAO;AAAA,MACvB;AAEA;AAAA,IACJ;AACA,QAAI,CAAC,KAAK,OAAO;AAGb,aAAO,KAAK,YAAY,KAAK,QAAQ,IAAI,MAAM,KAAK,WAAW,mCAAmC;AAClG,aAAO,KAAK,OAAO;AAAA,IACvB;AACA,SAAK,aAAa;AAClB,SAAK,SAAS,KAAK;AAEnB,QAAI,KAAK,0BAA0B,QAAW;AAC1C,WAAK,yBAAyB,KAAK;AACnC,YAAM,eAAe,KAAK;AAC1B,WAAK,wBAAwB;AAC7B,UAAI;AACA,cAAM,KAAK,4BAA4B,YAAY;AAAA,MACvD,SAAS,OAAO;AACZ,eAAO;AAAA,UACH,+CAA+C,KAAK,QAAQ,IAAI,MAAM,KAAK,WAAW;AAAA,UACtF;AAAA,QACJ;AAAA,MACJ;AACA,UAAI,OAAO;AAEP,eAAO,KAAK,OAAO;AAAA,MACvB;AAAA,IACJ,WAAW,KAAK,sBAAsB,UAAa,OAAO;AAEtD,aAAO,KAAK,OAAO;AAAA,IACvB;AAKA,QAAI,sBAAsB;AAC1B,aAAS,IAAI,KAAK,wBAAwB,KAAK,IAAI,mBAAmB,KAAK;AACvE,6BAAuB,KAAK,QAAQ,8BAA8B,CAAC;AAAA,IACvE;AACA,SAAK,cAAc,KAAK;AAAA,MACpB,4BAA4B,KAAK,QAAQ,IAAI,MAAM,KAAK,WAAW;AAAA,MACnE;AAAA,MACA,YAAY,MAAM,KAAK,OAAO;AAAA,IAClC,EAAE,MAAM;AAAA,EACZ;AAAA,EAEA,MAAM,SAAS;AACX,QAAI,CAAC,KAAK,YAAY;AAClB,WAAK,SAAS,KAAK;AAAA,IACvB;AACA,SAAK,aAAa;AAClB,SAAK,sBAAsB,KAAK;AAChC,SAAK,aAAa,KAAK;AACvB,SAAK,wBAAwB,KAAK;AAClC,SAAK,eAAe,MAAM;AAC1B,UAAM,KAAK,QAAQ,KAAK;AAAA,EAC5B;AACJ;",
5
5
  "names": ["messageType", "error"]
6
6
  }
@@ -8,6 +8,7 @@ export * from "./DeviceAdvertiser.js";
8
8
  export * from "./DeviceCommissioner.js";
9
9
  export * from "./ExchangeManager.js";
10
10
  export * from "./ExchangeProvider.js";
11
+ export * from "./MessageChannel.js";
11
12
  export * from "./MessageCounter.js";
12
13
  export * from "./MessageExchange.js";
13
14
  export * from "./MessageReceptionState.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/protocol/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/protocol/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC"}
@@ -8,6 +8,7 @@ export * from "./DeviceAdvertiser.js";
8
8
  export * from "./DeviceCommissioner.js";
9
9
  export * from "./ExchangeManager.js";
10
10
  export * from "./ExchangeProvider.js";
11
+ export * from "./MessageChannel.js";
11
12
  export * from "./MessageCounter.js";
12
13
  export * from "./MessageExchange.js";
13
14
  export * from "./MessageReceptionState.js";
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/protocol/index.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
5
5
  "names": []
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter/protocol",
3
- "version": "0.15.0-alpha.0-20250625-4a4b1be1b",
3
+ "version": "0.15.0-alpha.0-20250626-fc3a84ce9",
4
4
  "description": "Low-level APIs for Matter interaction",
5
5
  "keywords": [
6
6
  "iot",
@@ -40,13 +40,13 @@
40
40
  "#*": "./src/*"
41
41
  },
42
42
  "dependencies": {
43
- "@matter/general": "0.15.0-alpha.0-20250625-4a4b1be1b",
44
- "@matter/model": "0.15.0-alpha.0-20250625-4a4b1be1b",
45
- "@matter/types": "0.15.0-alpha.0-20250625-4a4b1be1b"
43
+ "@matter/general": "0.15.0-alpha.0-20250626-fc3a84ce9",
44
+ "@matter/model": "0.15.0-alpha.0-20250626-fc3a84ce9",
45
+ "@matter/types": "0.15.0-alpha.0-20250626-fc3a84ce9"
46
46
  },
47
47
  "devDependencies": {
48
- "@matter/tools": "0.15.0-alpha.0-20250625-4a4b1be1b",
49
- "@matter/testing": "0.15.0-alpha.0-20250625-4a4b1be1b"
48
+ "@matter/tools": "0.15.0-alpha.0-20250626-fc3a84ce9",
49
+ "@matter/testing": "0.15.0-alpha.0-20250626-fc3a84ce9"
50
50
  },
51
51
  "files": [
52
52
  "dist/**/*",
@@ -388,10 +388,16 @@ export function ClusterClient<const T extends ClusterType>(
388
388
  options: {
389
389
  asTimedRequest?: boolean;
390
390
  timedRequestTimeoutMs?: number;
391
+ expectedProcessingTimeMs?: number;
391
392
  useExtendedFailSafeMessageResponseTimeout?: boolean;
392
393
  } = {},
393
394
  ) => {
394
- const { asTimedRequest, timedRequestTimeoutMs, useExtendedFailSafeMessageResponseTimeout } = options;
395
+ const {
396
+ asTimedRequest,
397
+ timedRequestTimeoutMs,
398
+ useExtendedFailSafeMessageResponseTimeout,
399
+ expectedProcessingTimeMs,
400
+ } = options;
395
401
  if (isGroupAddress) {
396
402
  return interactionClient.invokeWithSuppressedResponse<Command<RequestT, ResponseT, any>>({
397
403
  clusterId,
@@ -408,6 +414,7 @@ export function ClusterClient<const T extends ClusterType>(
408
414
  request,
409
415
  asTimedRequest,
410
416
  timedRequestTimeoutMs,
417
+ expectedProcessingTimeMs,
411
418
  useExtendedFailSafeMessageResponseTimeout,
412
419
  });
413
420
  };
@@ -65,6 +65,12 @@ export type SignatureFromCommandSpec<C extends Command<any, any, any>> = (
65
65
  /** Override the request timeout when the command is sent as times request. Default are 10s. */
66
66
  timedRequestTimeoutMs?: number;
67
67
 
68
+ /**
69
+ * Expected processing time on the device side for this command.
70
+ * useExtendedFailSafeMessageResponseTimeout is ignored if this value is set.
71
+ */
72
+ expectedProcessingTimeMs?: number;
73
+
68
74
  /**
69
75
  * Use the extended fail-safe message response timeout of 30 seconds. Use this for all commands
70
76
  * executed during an activated FailSafe context!
@@ -82,6 +88,12 @@ export type SignatureFromCommandSpecWithoutResponse<C extends Command<any, any,
82
88
  /** Override the request timeout when the command is sent as times request. Default are 10s. */
83
89
  timedRequestTimeoutMs?: number;
84
90
 
91
+ /**
92
+ * Expected processing time on the device side for this command.
93
+ * useExtendedFailSafeMessageResponseTimeout is ignored if this value is set.
94
+ */
95
+ expectedProcessingTimeMs?: number;
96
+
85
97
  /**
86
98
  * Use the extended fail-safe message response timeout of 30 seconds. Use this for all commands
87
99
  * executed during an activated FailSafe context!
@@ -50,8 +50,8 @@ import {
50
50
  resolveCommandName,
51
51
  resolveEventName,
52
52
  } from "#types";
53
- import { MessageChannel } from "../protocol/ExchangeManager.js";
54
53
  import { ExchangeProvider, ReconnectableExchangeProvider } from "../protocol/ExchangeProvider.js";
54
+ import { MessageChannel } from "../protocol/MessageChannel.js";
55
55
  import { DecodedAttributeReportStatus, DecodedAttributeReportValue } from "./AttributeDataDecoder.js";
56
56
  import { DecodedDataReport } from "./DecodedDataReport.js";
57
57
  import { DecodedEventData, DecodedEventReportStatus, DecodedEventReportValue } from "./EventDataDecoder.js";
@@ -203,6 +203,11 @@ export class InteractionClient {
203
203
  throw new ImplementationError("ExchangeProvider does not support channelUpdated");
204
204
  }
205
205
 
206
+ /** Calculates the current maximum response time for a message use in additional logic like timers. */
207
+ maximumPeerResponseTimeMs(expectedProcessingTimeMs?: number) {
208
+ return this.#exchangeProvider.maximumPeerResponseTimeMs(expectedProcessingTimeMs);
209
+ }
210
+
206
211
  removeSubscription(subscriptionId: number) {
207
212
  this.#ownSubscriptionIds.delete(subscriptionId);
208
213
  this.#subscriptionClient.delete(subscriptionId);
@@ -741,11 +746,11 @@ export class InteractionClient {
741
746
  const {
742
747
  subscribeResponse: { subscriptionId, maxInterval },
743
748
  report,
744
- maximumPeerResponseTime,
749
+ maximumPeerResponseTimeMs,
745
750
  } = await this.withMessenger<{
746
751
  subscribeResponse: TypeFromSchema<typeof TlvSubscribeResponse>;
747
752
  report: DataReport;
748
- maximumPeerResponseTime: number;
753
+ maximumPeerResponseTimeMs: number;
749
754
  }>(async messenger => {
750
755
  const { subscribeResponse, report } = await messenger.sendSubscribeRequest({
751
756
  interactionModelRevision: Specification.INTERACTION_MODEL_REVISION,
@@ -762,7 +767,7 @@ export class InteractionClient {
762
767
  return {
763
768
  subscribeResponse,
764
769
  report,
765
- maximumPeerResponseTime: messenger.calculateMaximumPeerResponseTime(),
770
+ maximumPeerResponseTimeMs: this.maximumPeerResponseTimeMs(),
766
771
  };
767
772
  }, executeQueued);
768
773
 
@@ -793,7 +798,7 @@ export class InteractionClient {
793
798
  await this.#registerSubscription(
794
799
  {
795
800
  id: subscriptionId,
796
- maximumPeerResponseTime,
801
+ maximumPeerResponseTimeMs,
797
802
  maxIntervalS: maxInterval,
798
803
  onData: subscriptionListener,
799
804
  onTimeout: updateTimeoutHandler,
@@ -852,11 +857,11 @@ export class InteractionClient {
852
857
  const {
853
858
  report,
854
859
  subscribeResponse: { subscriptionId, maxInterval },
855
- maximumPeerResponseTime,
860
+ maximumPeerResponseTimeMs,
856
861
  } = await this.withMessenger<{
857
862
  subscribeResponse: TypeFromSchema<typeof TlvSubscribeResponse>;
858
863
  report: DataReport;
859
- maximumPeerResponseTime: number;
864
+ maximumPeerResponseTimeMs: number;
860
865
  }>(async messenger => {
861
866
  const { subscribeResponse, report } = await messenger.sendSubscribeRequest({
862
867
  interactionModelRevision: Specification.INTERACTION_MODEL_REVISION,
@@ -870,7 +875,7 @@ export class InteractionClient {
870
875
  return {
871
876
  subscribeResponse,
872
877
  report,
873
- maximumPeerResponseTime: messenger.calculateMaximumPeerResponseTime(),
878
+ maximumPeerResponseTimeMs: this.maximumPeerResponseTimeMs(),
874
879
  };
875
880
  }, executeQueued);
876
881
 
@@ -898,7 +903,7 @@ export class InteractionClient {
898
903
  await this.#registerSubscription(
899
904
  {
900
905
  id: subscriptionId,
901
- maximumPeerResponseTime,
906
+ maximumPeerResponseTimeMs,
902
907
  maxIntervalS: maxInterval,
903
908
  onData: subscriptionListener,
904
909
  onTimeout: updateTimeoutHandler,
@@ -1019,11 +1024,11 @@ export class InteractionClient {
1019
1024
  const {
1020
1025
  report,
1021
1026
  subscribeResponse: { subscriptionId, maxInterval },
1022
- maximumPeerResponseTime,
1027
+ maximumPeerResponseTimeMs,
1023
1028
  } = await this.withMessenger<{
1024
1029
  subscribeResponse: TypeFromSchema<typeof TlvSubscribeResponse>;
1025
1030
  report: DataReport;
1026
- maximumPeerResponseTime: number;
1031
+ maximumPeerResponseTimeMs: number;
1027
1032
  }>(async messenger => {
1028
1033
  const { subscribeResponse, report } = await messenger.sendSubscribeRequest({
1029
1034
  interactionModelRevision: Specification.INTERACTION_MODEL_REVISION,
@@ -1042,7 +1047,7 @@ export class InteractionClient {
1042
1047
  return {
1043
1048
  subscribeResponse,
1044
1049
  report,
1045
- maximumPeerResponseTime: messenger.calculateMaximumPeerResponseTime(),
1050
+ maximumPeerResponseTimeMs: this.maximumPeerResponseTimeMs(),
1046
1051
  };
1047
1052
  }, executeQueued);
1048
1053
 
@@ -1116,7 +1121,7 @@ export class InteractionClient {
1116
1121
  await this.#registerSubscription(
1117
1122
  {
1118
1123
  id: subscriptionId,
1119
- maximumPeerResponseTime,
1124
+ maximumPeerResponseTimeMs,
1120
1125
  maxIntervalS: maxInterval,
1121
1126
 
1122
1127
  onData: dataReport => subscriptionListener(DecodedDataReport(dataReport)),
@@ -1148,6 +1153,12 @@ export class InteractionClient {
1148
1153
  /** Use this timeout and send the request as Timed Request. If this is specified the above parameter is implied. */
1149
1154
  timedRequestTimeoutMs?: number;
1150
1155
 
1156
+ /**
1157
+ * Expected processing time on the device side for this command.
1158
+ * useExtendedFailSafeMessageResponseTimeout is ignored if this value is set.
1159
+ */
1160
+ expectedProcessingTimeMs?: number;
1161
+
1151
1162
  /** Use an extended Message Response Timeout as defined for FailSafe cases which is 30s. */
1152
1163
  useExtendedFailSafeMessageResponseTimeout?: boolean;
1153
1164
 
@@ -1165,6 +1176,7 @@ export class InteractionClient {
1165
1176
  command: { requestId, requestSchema, responseId, responseSchema, optional, timed },
1166
1177
  asTimedRequest,
1167
1178
  timedRequestTimeoutMs = DEFAULT_TIMED_REQUEST_TIMEOUT_MS,
1179
+ expectedProcessingTimeMs,
1168
1180
  useExtendedFailSafeMessageResponseTimeout = false,
1169
1181
  skipValidation,
1170
1182
  } = options;
@@ -1218,9 +1230,10 @@ export class InteractionClient {
1218
1230
  suppressResponse: false,
1219
1231
  interactionModelRevision: Specification.INTERACTION_MODEL_REVISION,
1220
1232
  },
1221
- useExtendedFailSafeMessageResponseTimeout
1222
- ? DEFAULT_MINIMUM_RESPONSE_TIMEOUT_WITH_FAILSAFE_MS
1223
- : undefined,
1233
+ expectedProcessingTimeMs ??
1234
+ (useExtendedFailSafeMessageResponseTimeout
1235
+ ? DEFAULT_MINIMUM_RESPONSE_TIMEOUT_WITH_FAILSAFE_MS
1236
+ : undefined),
1224
1237
  );
1225
1238
  if (response === undefined) {
1226
1239
  throw new MatterFlowError("No response received from invoke interaction but expected.");
@@ -98,10 +98,6 @@ const DATA_REPORT_MIN_AVAILABLE_BYTES_BEFORE_SENDING = 40;
98
98
  class InteractionMessenger {
99
99
  constructor(protected exchange: MessageExchange) {}
100
100
 
101
- calculateMaximumPeerResponseTime(expectedProcessingTimeMs?: number) {
102
- return this.exchange.calculateMaximumPeerResponseTime(expectedProcessingTimeMs);
103
- }
104
-
105
101
  send(messageType: number, payload: Uint8Array, options?: ExchangeSendOptions) {
106
102
  return this.exchange.send(messageType, payload, options);
107
103
  }
@@ -14,7 +14,7 @@ const logger = Logger.get("SubscriptionClient");
14
14
 
15
15
  export interface RegisteredSubscription {
16
16
  id: number;
17
- maximumPeerResponseTime: number;
17
+ maximumPeerResponseTimeMs: number;
18
18
  maxIntervalS: number;
19
19
  onData: (dataReport: DataReport) => MaybePromise<void>;
20
20
  onTimeout?: () => void;
@@ -53,7 +53,7 @@ export class SubscriptionClient implements ProtocolHandler {
53
53
  this.#timeouts.delete(id);
54
54
  }
55
55
 
56
- const maxIntervalMs = subscription.maxIntervalS * 1000 + subscription.maximumPeerResponseTime;
56
+ const maxIntervalMs = subscription.maxIntervalS * 1000 + subscription.maximumPeerResponseTimeMs;
57
57
 
58
58
  timer = Time.getTimer("Subscription timeout", maxIntervalMs, () => {
59
59
  logger.info(`Subscription ${id} timed out after ${maxIntervalMs}ms`);
@@ -22,6 +22,7 @@ import {
22
22
  ServerAddress,
23
23
  serverAddressToString,
24
24
  } from "#general";
25
+ import { InteractionClient, InteractionClientProvider } from "#interaction/InteractionClient.js";
25
26
  import { MdnsScanner } from "#mdns/MdnsScanner.js";
26
27
  import {
27
28
  CommissioningError,
@@ -30,13 +31,13 @@ import {
30
31
  NodeIdConflictError,
31
32
  } from "#peer/ControllerCommissioningFlow.js";
32
33
  import { ControllerDiscovery, PairRetransmissionLimitReachedError } from "#peer/ControllerDiscovery.js";
34
+ import { ExchangeManager } from "#protocol/ExchangeManager.js";
35
+ import { DedicatedChannelExchangeProvider } from "#protocol/ExchangeProvider.js";
36
+ import { MessageChannel } from "#protocol/MessageChannel.js";
33
37
  import { ChannelStatusResponseError } from "#securechannel/index.js";
34
38
  import { PaseClient } from "#session/index.js";
35
39
  import { SessionManager } from "#session/SessionManager.js";
36
40
  import { DiscoveryCapabilitiesBitmap, NodeId, SECURE_CHANNEL_PROTOCOL_ID, TypeFromPartialBitSchema } from "#types";
37
- import { InteractionClient, InteractionClientProvider } from "../interaction/InteractionClient.js";
38
- import { ExchangeManager, MessageChannel } from "../protocol/ExchangeManager.js";
39
- import { DedicatedChannelExchangeProvider } from "../protocol/ExchangeProvider.js";
40
41
  import { PeerAddress } from "./PeerAddress.js";
41
42
  import { NodeDiscoveryType, PeerSet } from "./PeerSet.js";
42
43