@matter/protocol 0.16.0-alpha.0-20251030-e9ca79f93 → 0.16.0-alpha.0-20251101-70c8d51d7

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 (164) hide show
  1. package/dist/cjs/action/Interactable.d.ts +1 -0
  2. package/dist/cjs/action/Interactable.d.ts.map +1 -1
  3. package/dist/cjs/action/client/ClientInteraction.d.ts +25 -19
  4. package/dist/cjs/action/client/ClientInteraction.d.ts.map +1 -1
  5. package/dist/cjs/action/client/ClientInteraction.js +198 -94
  6. package/dist/cjs/action/client/ClientInteraction.js.map +2 -2
  7. package/dist/cjs/action/client/index.d.ts +1 -3
  8. package/dist/cjs/action/client/index.d.ts.map +1 -1
  9. package/dist/cjs/action/client/index.js +1 -3
  10. package/dist/cjs/action/client/index.js.map +1 -1
  11. package/dist/cjs/action/client/subscription/ClientSubscribe.d.ts +8 -0
  12. package/dist/cjs/action/client/subscription/ClientSubscribe.d.ts.map +1 -0
  13. package/dist/cjs/action/client/{ClientSubscription.js → subscription/ClientSubscribe.js} +3 -8
  14. package/dist/cjs/action/client/subscription/ClientSubscribe.js.map +6 -0
  15. package/dist/cjs/action/client/subscription/ClientSubscription.d.ts +38 -0
  16. package/dist/cjs/action/client/subscription/ClientSubscription.d.ts.map +1 -0
  17. package/dist/cjs/action/client/subscription/ClientSubscription.js +79 -0
  18. package/dist/cjs/action/client/subscription/ClientSubscription.js.map +6 -0
  19. package/dist/cjs/action/client/subscription/ClientSubscriptionHandler.d.ts.map +1 -0
  20. package/dist/cjs/action/client/{ClientSubscriptionHandler.js → subscription/ClientSubscriptionHandler.js} +5 -2
  21. package/dist/cjs/action/client/subscription/ClientSubscriptionHandler.js.map +6 -0
  22. package/dist/{esm/action/client → cjs/action/client/subscription}/ClientSubscriptions.d.ts +15 -8
  23. package/dist/cjs/action/client/subscription/ClientSubscriptions.d.ts.map +1 -0
  24. package/dist/cjs/action/client/subscription/ClientSubscriptions.js +133 -0
  25. package/dist/cjs/action/client/subscription/ClientSubscriptions.js.map +6 -0
  26. package/dist/cjs/action/client/subscription/PeerSubscription.d.ts +27 -0
  27. package/dist/cjs/action/client/subscription/PeerSubscription.d.ts.map +1 -0
  28. package/dist/cjs/action/client/subscription/PeerSubscription.js +57 -0
  29. package/dist/cjs/action/client/subscription/PeerSubscription.js.map +6 -0
  30. package/dist/cjs/action/client/subscription/SustainedSubscription.d.ts +57 -0
  31. package/dist/cjs/action/client/subscription/SustainedSubscription.d.ts.map +1 -0
  32. package/dist/cjs/action/client/subscription/SustainedSubscription.js +143 -0
  33. package/dist/cjs/action/client/subscription/SustainedSubscription.js.map +6 -0
  34. package/dist/cjs/action/client/subscription/index.d.ts +12 -0
  35. package/dist/cjs/action/client/subscription/index.d.ts.map +1 -0
  36. package/dist/cjs/action/client/subscription/index.js +29 -0
  37. package/dist/cjs/action/client/subscription/index.js.map +6 -0
  38. package/dist/cjs/action/errors.d.ts +7 -2
  39. package/dist/cjs/action/errors.d.ts.map +1 -1
  40. package/dist/cjs/action/errors.js +6 -3
  41. package/dist/cjs/action/errors.js.map +1 -1
  42. package/dist/cjs/action/request/Subscribe.d.ts +2 -2
  43. package/dist/cjs/action/request/Subscribe.d.ts.map +1 -1
  44. package/dist/cjs/action/request/Subscribe.js.map +1 -1
  45. package/dist/cjs/action/response/ReadResult.d.ts +1 -1
  46. package/dist/cjs/action/response/ReadResult.d.ts.map +1 -1
  47. package/dist/cjs/action/response/SubscribeResult.d.ts +2 -1
  48. package/dist/cjs/action/response/SubscribeResult.d.ts.map +1 -1
  49. package/dist/cjs/action/server/ServerInteraction.d.ts +0 -1
  50. package/dist/cjs/action/server/ServerInteraction.d.ts.map +1 -1
  51. package/dist/cjs/action/server/ServerInteraction.js +0 -3
  52. package/dist/cjs/action/server/ServerInteraction.js.map +1 -1
  53. package/dist/cjs/bdx/flow/InboundFlow.js +1 -1
  54. package/dist/cjs/bdx/flow/InboundFlow.js.map +1 -1
  55. package/dist/cjs/interaction/SubscriptionClient.d.ts +3 -3
  56. package/dist/cjs/interaction/SubscriptionClient.d.ts.map +1 -1
  57. package/dist/cjs/interaction/SubscriptionClient.js +0 -7
  58. package/dist/cjs/interaction/SubscriptionClient.js.map +1 -1
  59. package/dist/cjs/peer/PeerSet.d.ts +1 -1
  60. package/dist/cjs/peer/PeerSet.d.ts.map +1 -1
  61. package/dist/cjs/protocol/MessageExchange.js +1 -1
  62. package/dist/cjs/protocol/MessageExchange.js.map +1 -1
  63. package/dist/esm/action/Interactable.d.ts +1 -0
  64. package/dist/esm/action/Interactable.d.ts.map +1 -1
  65. package/dist/esm/action/client/ClientInteraction.d.ts +25 -19
  66. package/dist/esm/action/client/ClientInteraction.d.ts.map +1 -1
  67. package/dist/esm/action/client/ClientInteraction.js +201 -95
  68. package/dist/esm/action/client/ClientInteraction.js.map +2 -2
  69. package/dist/esm/action/client/index.d.ts +1 -3
  70. package/dist/esm/action/client/index.d.ts.map +1 -1
  71. package/dist/esm/action/client/index.js +1 -3
  72. package/dist/esm/action/client/index.js.map +1 -1
  73. package/dist/esm/action/client/subscription/ClientSubscribe.d.ts +8 -0
  74. package/dist/esm/action/client/subscription/ClientSubscribe.d.ts.map +1 -0
  75. package/dist/esm/action/client/subscription/ClientSubscribe.js +1 -0
  76. package/dist/esm/action/client/subscription/ClientSubscribe.js.map +6 -0
  77. package/dist/esm/action/client/subscription/ClientSubscription.d.ts +38 -0
  78. package/dist/esm/action/client/subscription/ClientSubscription.d.ts.map +1 -0
  79. package/dist/esm/action/client/subscription/ClientSubscription.js +59 -0
  80. package/dist/esm/action/client/subscription/ClientSubscription.js.map +6 -0
  81. package/dist/esm/action/client/subscription/ClientSubscriptionHandler.d.ts.map +1 -0
  82. package/dist/esm/action/client/{ClientSubscriptionHandler.js → subscription/ClientSubscriptionHandler.js} +5 -2
  83. package/dist/esm/action/client/subscription/ClientSubscriptionHandler.js.map +6 -0
  84. package/dist/{cjs/action/client → esm/action/client/subscription}/ClientSubscriptions.d.ts +15 -8
  85. package/dist/esm/action/client/subscription/ClientSubscriptions.d.ts.map +1 -0
  86. package/dist/esm/action/client/subscription/ClientSubscriptions.js +113 -0
  87. package/dist/esm/action/client/subscription/ClientSubscriptions.js.map +6 -0
  88. package/dist/esm/action/client/subscription/PeerSubscription.d.ts +27 -0
  89. package/dist/esm/action/client/subscription/PeerSubscription.d.ts.map +1 -0
  90. package/dist/esm/action/client/subscription/PeerSubscription.js +37 -0
  91. package/dist/esm/action/client/subscription/PeerSubscription.js.map +6 -0
  92. package/dist/esm/action/client/subscription/SustainedSubscription.d.ts +57 -0
  93. package/dist/esm/action/client/subscription/SustainedSubscription.d.ts.map +1 -0
  94. package/dist/esm/action/client/subscription/SustainedSubscription.js +133 -0
  95. package/dist/esm/action/client/subscription/SustainedSubscription.js.map +6 -0
  96. package/dist/esm/action/client/subscription/index.d.ts +12 -0
  97. package/dist/esm/action/client/subscription/index.d.ts.map +1 -0
  98. package/dist/esm/action/client/subscription/index.js +12 -0
  99. package/dist/esm/action/client/subscription/index.js.map +6 -0
  100. package/dist/esm/action/errors.d.ts +7 -2
  101. package/dist/esm/action/errors.d.ts.map +1 -1
  102. package/dist/esm/action/errors.js +6 -3
  103. package/dist/esm/action/errors.js.map +1 -1
  104. package/dist/esm/action/request/Subscribe.d.ts +2 -2
  105. package/dist/esm/action/request/Subscribe.d.ts.map +1 -1
  106. package/dist/esm/action/request/Subscribe.js.map +1 -1
  107. package/dist/esm/action/response/ReadResult.d.ts +1 -1
  108. package/dist/esm/action/response/ReadResult.d.ts.map +1 -1
  109. package/dist/esm/action/response/SubscribeResult.d.ts +2 -1
  110. package/dist/esm/action/response/SubscribeResult.d.ts.map +1 -1
  111. package/dist/esm/action/server/ServerInteraction.d.ts +0 -1
  112. package/dist/esm/action/server/ServerInteraction.d.ts.map +1 -1
  113. package/dist/esm/action/server/ServerInteraction.js +0 -3
  114. package/dist/esm/action/server/ServerInteraction.js.map +1 -1
  115. package/dist/esm/bdx/flow/InboundFlow.js +1 -1
  116. package/dist/esm/bdx/flow/InboundFlow.js.map +1 -1
  117. package/dist/esm/interaction/SubscriptionClient.d.ts +3 -3
  118. package/dist/esm/interaction/SubscriptionClient.d.ts.map +1 -1
  119. package/dist/esm/interaction/SubscriptionClient.js +1 -8
  120. package/dist/esm/interaction/SubscriptionClient.js.map +1 -1
  121. package/dist/esm/peer/PeerSet.d.ts +1 -1
  122. package/dist/esm/peer/PeerSet.d.ts.map +1 -1
  123. package/dist/esm/protocol/MessageExchange.js +1 -1
  124. package/dist/esm/protocol/MessageExchange.js.map +1 -1
  125. package/package.json +6 -6
  126. package/src/action/Interactable.ts +1 -0
  127. package/src/action/client/ClientInteraction.ts +273 -235
  128. package/src/action/client/index.ts +1 -3
  129. package/src/action/client/subscription/ClientSubscribe.ts +8 -0
  130. package/src/action/client/subscription/ClientSubscription.ts +88 -0
  131. package/src/action/client/{ClientSubscriptionHandler.ts → subscription/ClientSubscriptionHandler.ts} +5 -2
  132. package/src/action/client/subscription/ClientSubscriptions.ts +150 -0
  133. package/src/action/client/subscription/PeerSubscription.ts +51 -0
  134. package/src/action/client/subscription/SustainedSubscription.ts +199 -0
  135. package/src/action/client/subscription/index.ts +12 -0
  136. package/src/action/errors.ts +11 -6
  137. package/src/action/request/Subscribe.ts +2 -2
  138. package/src/action/response/ReadResult.ts +1 -1
  139. package/src/action/response/SubscribeResult.ts +2 -1
  140. package/src/action/server/ServerInteraction.ts +0 -5
  141. package/src/bdx/flow/InboundFlow.ts +1 -1
  142. package/src/interaction/SubscriptionClient.ts +4 -9
  143. package/src/protocol/MessageExchange.ts +1 -1
  144. package/dist/cjs/action/client/ClientSubscription.d.ts +0 -18
  145. package/dist/cjs/action/client/ClientSubscription.d.ts.map +0 -1
  146. package/dist/cjs/action/client/ClientSubscription.js.map +0 -6
  147. package/dist/cjs/action/client/ClientSubscriptionHandler.d.ts.map +0 -1
  148. package/dist/cjs/action/client/ClientSubscriptionHandler.js.map +0 -6
  149. package/dist/cjs/action/client/ClientSubscriptions.d.ts.map +0 -1
  150. package/dist/cjs/action/client/ClientSubscriptions.js +0 -145
  151. package/dist/cjs/action/client/ClientSubscriptions.js.map +0 -6
  152. package/dist/esm/action/client/ClientSubscription.d.ts +0 -18
  153. package/dist/esm/action/client/ClientSubscription.d.ts.map +0 -1
  154. package/dist/esm/action/client/ClientSubscription.js +0 -6
  155. package/dist/esm/action/client/ClientSubscription.js.map +0 -6
  156. package/dist/esm/action/client/ClientSubscriptionHandler.d.ts.map +0 -1
  157. package/dist/esm/action/client/ClientSubscriptionHandler.js.map +0 -6
  158. package/dist/esm/action/client/ClientSubscriptions.d.ts.map +0 -1
  159. package/dist/esm/action/client/ClientSubscriptions.js +0 -135
  160. package/dist/esm/action/client/ClientSubscriptions.js.map +0 -6
  161. package/src/action/client/ClientSubscription.ts +0 -19
  162. package/src/action/client/ClientSubscriptions.ts +0 -178
  163. /package/dist/cjs/action/client/{ClientSubscriptionHandler.d.ts → subscription/ClientSubscriptionHandler.d.ts} +0 -0
  164. /package/dist/esm/action/client/{ClientSubscriptionHandler.d.ts → subscription/ClientSubscriptionHandler.d.ts} +0 -0
@@ -1,3 +1,48 @@
1
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
2
+ var __typeError = (msg) => {
3
+ throw TypeError(msg);
4
+ };
5
+ var __using = (stack, value, async) => {
6
+ if (value != null) {
7
+ if (typeof value !== "object" && typeof value !== "function") __typeError("Object expected");
8
+ var dispose, inner;
9
+ if (async) dispose = value[__knownSymbol("asyncDispose")];
10
+ if (dispose === void 0) {
11
+ dispose = value[__knownSymbol("dispose")];
12
+ if (async) inner = dispose;
13
+ }
14
+ if (typeof dispose !== "function") __typeError("Object not disposable");
15
+ if (inner) dispose = function() {
16
+ try {
17
+ inner.call(this);
18
+ } catch (e) {
19
+ return Promise.reject(e);
20
+ }
21
+ };
22
+ stack.push([async, dispose, value]);
23
+ } else if (async) {
24
+ stack.push([async]);
25
+ }
26
+ return value;
27
+ };
28
+ var __callDispose = (stack, error, hasError) => {
29
+ var E = typeof SuppressedError === "function" ? SuppressedError : function(e, s, m, _) {
30
+ return _ = Error(m), _.name = "SuppressedError", _.error = e, _.suppressed = s, _;
31
+ };
32
+ var fail = (e) => error = hasError ? new E(e, error, "An error was suppressed during disposal") : (hasError = true, e);
33
+ var next = (it) => {
34
+ while (it = stack.pop()) {
35
+ try {
36
+ var result = it[1] && it[1].call(it[2]);
37
+ if (it[0]) return Promise.resolve(result).then(next, (e) => (fail(e), next()));
38
+ } catch (e) {
39
+ fail(e);
40
+ }
41
+ }
42
+ if (hasError) throw error;
43
+ };
44
+ return next();
45
+ };
1
46
  /**
2
47
  * @license
3
48
  * Copyright 2022-2025 Matter.js Authors
@@ -6,21 +51,25 @@
6
51
  import { Invoke } from "#action/request/Invoke.js";
7
52
  import { resolvePathForSpecifier } from "#action/request/Specifier.js";
8
53
  import {
54
+ Abort,
9
55
  BasicSet,
10
56
  Diagnostic,
11
57
  Duration,
12
- Environmental,
58
+ Entropy,
13
59
  ImplementationError,
14
60
  isObject,
15
61
  Logger,
62
+ RetrySchedule,
16
63
  Seconds
17
64
  } from "#general";
18
65
  import { InteractionClientMessenger, MessageType } from "#interaction/InteractionMessenger.js";
19
- import { InteractionQueue } from "#peer/InteractionQueue.js";
20
66
  import { ExchangeProvider } from "#protocol/ExchangeProvider.js";
67
+ import { SecureSession } from "#session/SecureSession.js";
21
68
  import { Status, TlvNoResponse, TlvSubscribeResponse } from "#types";
22
- import { ClientSubscriptions } from "./ClientSubscriptions.js";
23
69
  import { InputChunk } from "./InputChunk.js";
70
+ import { ClientSubscriptions } from "./subscription/ClientSubscriptions.js";
71
+ import { PeerSubscription } from "./subscription/PeerSubscription.js";
72
+ import { SustainedSubscription } from "./subscription/SustainedSubscription.js";
24
73
  const logger = Logger.get("ClientInteraction");
25
74
  const DEFAULT_MIN_INTERVAL_FLOOR = Seconds(1);
26
75
  const DEFAULT_TIMED_REQUEST_TIMEOUT = Seconds(10);
@@ -28,16 +77,20 @@ const DEFAULT_MINIMUM_RESPONSE_TIMEOUT_WITH_FAILSAFE = Seconds(30);
28
77
  class ClientInteraction {
29
78
  #exchanges;
30
79
  #subscriptions;
31
- #queue;
32
80
  #interactions = new BasicSet();
33
- #closed = false;
34
- constructor(context) {
35
- this.#exchanges = context.exchanges;
36
- this.#subscriptions = context.subscriptions;
37
- this.#queue = context.queue;
81
+ #abort;
82
+ #sustainRetries;
83
+ constructor({ environment, abort, sustainRetries }) {
84
+ this.#exchanges = environment.get(ExchangeProvider);
85
+ this.#subscriptions = environment.get(ClientSubscriptions);
86
+ this.#abort = Abort.subtask(abort);
87
+ this.#sustainRetries = new RetrySchedule(
88
+ environment.get(Entropy),
89
+ RetrySchedule.Configuration(SustainedSubscription.DefaultRetrySchedule, sustainRetries)
90
+ );
38
91
  }
39
92
  async close() {
40
- this.#closed = true;
93
+ this.#abort();
41
94
  while (this.#interactions.size) {
42
95
  await this.#interactions.deleted;
43
96
  }
@@ -45,37 +98,31 @@ class ClientInteraction {
45
98
  get subscriptions() {
46
99
  return this.#subscriptions;
47
100
  }
48
- get queue() {
49
- return this.#queue;
50
- }
51
- static [Environmental.create](env) {
52
- const instance = new ClientInteraction({
53
- exchanges: env.get(ExchangeProvider),
54
- subscriptions: env.get(ClientSubscriptions),
55
- queue: env.get(InteractionQueue)
56
- });
57
- env.set(ClientInteraction, instance);
58
- return instance;
59
- }
60
- async *read(request, _session) {
61
- const readPathsCount = (request.attributeRequests?.length ?? 0) + (request.eventRequests?.length ?? 0);
62
- if (readPathsCount > 9) {
63
- logger.debug(
64
- "Read interactions with more then 9 paths might be not allowed by the device. Consider splitting then into several read requests."
65
- );
66
- }
67
- this.#begin(request);
68
- let messenger;
101
+ /**
102
+ * Read attributes and events.
103
+ */
104
+ async *read(request, session) {
105
+ var _stack = [];
69
106
  try {
70
- messenger = await InteractionClientMessenger.create(this.#exchanges);
107
+ const readPathsCount = (request.attributeRequests?.length ?? 0) + (request.eventRequests?.length ?? 0);
108
+ if (readPathsCount > 9) {
109
+ logger.debug(
110
+ "Read interactions with more then 9 paths might be not allowed by the device. Consider splitting then into several read requests."
111
+ );
112
+ }
113
+ const context = __using(_stack, await this.#begin(request, session), true);
114
+ const { checkAbort, messenger } = context;
71
115
  logger.debug("Read \xBB", messenger.exchange.via, request);
72
116
  await messenger.sendReadRequest(request);
117
+ checkAbort();
73
118
  let attributeReportCount = 0;
74
119
  let eventReportCount = 0;
75
120
  for await (const report of messenger.readDataReports()) {
121
+ checkAbort();
76
122
  attributeReportCount += report.attributeReports?.length ?? 0;
77
123
  eventReportCount += report.eventReports?.length ?? 0;
78
124
  yield InputChunk(report);
125
+ checkAbort();
79
126
  }
80
127
  logger.debug(
81
128
  "Read \xAB",
@@ -84,26 +131,31 @@ class ClientInteraction {
84
131
  attributeReportCount + eventReportCount === 0 ? "(empty)" : Diagnostic.dict({ attributes: attributeReportCount, events: eventReportCount })
85
132
  )
86
133
  );
134
+ } catch (_) {
135
+ var _error = _, _hasError = true;
87
136
  } finally {
88
- await messenger?.close();
89
- this.#end(request);
137
+ var _promise = __callDispose(_stack, _error, _hasError);
138
+ _promise && await _promise;
90
139
  }
91
140
  }
92
141
  /**
93
- * Write chosen attributes remotely to the node.
94
- * The returned attribute write status information is returned. No error is thrown for individual attribute write
95
- * failures.
142
+ * Update node attributes.
143
+ *
144
+ * Writes with the Matter protocol are generally not atomic, so this method only throws if the entire action fails.
145
+ * You must check each {@link WriteResult.AttributeStatus} to determine whether individual updates failed.
96
146
  */
97
- async write(request, _session) {
98
- this.#begin(request);
99
- let messenger;
147
+ async write(request, session) {
148
+ var _stack = [];
100
149
  try {
101
- messenger = await InteractionClientMessenger.create(this.#exchanges);
150
+ const context = __using(_stack, await this.#begin(request, session), true);
151
+ const { checkAbort, messenger } = context;
102
152
  if (request.timedRequest) {
103
153
  await messenger.sendTimedRequest(request.timeout ?? DEFAULT_TIMED_REQUEST_TIMEOUT);
154
+ checkAbort();
104
155
  }
105
156
  logger.info("Write \xBB", messenger.exchange.via, request);
106
157
  const response = await messenger.sendWriteCommand(request);
158
+ checkAbort();
107
159
  if (request.suppressResponse) {
108
160
  return void 0;
109
161
  }
@@ -144,18 +196,24 @@ class ClientInteraction {
144
196
  )
145
197
  );
146
198
  return result;
199
+ } catch (_) {
200
+ var _error = _, _hasError = true;
147
201
  } finally {
148
- await messenger?.close();
149
- this.#end(request);
202
+ var _promise = __callDispose(_stack, _error, _hasError);
203
+ _promise && await _promise;
150
204
  }
151
205
  }
152
- async *invoke(request, _session) {
153
- this.#begin(request);
154
- let messenger;
206
+ /**
207
+ * Invoke one or more commands.
208
+ */
209
+ async *invoke(request, session) {
210
+ var _stack = [];
155
211
  try {
156
- messenger = await InteractionClientMessenger.create(this.#exchanges);
212
+ const context = __using(_stack, await this.#begin(request, session), true);
213
+ const { checkAbort, messenger } = context;
157
214
  if (request.timedRequest) {
158
215
  await messenger.sendTimedRequest(request.timeout ?? DEFAULT_TIMED_REQUEST_TIMEOUT);
216
+ checkAbort();
159
217
  }
160
218
  logger.info(
161
219
  "Invoke \xBB",
@@ -168,6 +226,7 @@ class ClientInteraction {
168
226
  request,
169
227
  expectedProcessingTime ?? (useExtendedFailSafeMessageResponseTimeout ? DEFAULT_MINIMUM_RESPONSE_TIMEOUT_WITH_FAILSAFE : void 0)
170
228
  );
229
+ checkAbort();
171
230
  if (!request.suppressResponse) {
172
231
  if (result && result.invokeResponses?.length) {
173
232
  const chunk = result.invokeResponses.map((response) => {
@@ -233,64 +292,98 @@ class ClientInteraction {
233
292
  } else {
234
293
  yield [];
235
294
  }
295
+ checkAbort();
236
296
  }
297
+ } catch (_) {
298
+ var _error = _, _hasError = true;
237
299
  } finally {
238
- await messenger?.close();
239
- this.#end(request);
300
+ var _promise = __callDispose(_stack, _error, _hasError);
301
+ _promise && await _promise;
240
302
  }
241
303
  }
242
- async subscribe(request, _session) {
304
+ /**
305
+ * Subscribe to attribute values and events.
306
+ */
307
+ async subscribe(request, session) {
243
308
  const subscriptionPathsCount = (request.attributeRequests?.length ?? 0) + (request.eventRequests?.length ?? 0);
244
309
  if (subscriptionPathsCount > 3) {
245
310
  logger.debug("Subscribe interactions with more then 3 paths might be not allowed by the device.");
246
311
  }
247
312
  if (!request.keepSubscriptions) {
248
- for (const subscription of this.#subscriptions) {
313
+ for (const subscription2 of this.#subscriptions) {
249
314
  logger.debug(
250
- `Removing subscription with ID ${subscription.subscriptionId} because new subscription replaces it`
315
+ `Removing subscription with ID ${subscription2.subscriptionId} because new subscription replaces it`
251
316
  );
252
- subscription.close();
317
+ subscription2.close();
253
318
  }
254
319
  }
255
- this.#begin(request);
256
- let messenger;
257
- try {
258
- messenger = await InteractionClientMessenger.create(this.#exchanges);
259
- logger.info(
260
- "Subscribe \xBB",
261
- messenger.exchange.via,
262
- Diagnostic.asFlags({ keepSubscriptions: request.keepSubscriptions }),
263
- Diagnostic.dict({
264
- min: Duration.format(request.minIntervalFloor),
265
- max: Duration.format(request.maxIntervalCeiling)
266
- }),
267
- request
268
- );
269
- await messenger.sendSubscribeRequest({
270
- minIntervalFloorSeconds: Seconds.of(DEFAULT_MIN_INTERVAL_FLOOR),
271
- maxIntervalCeilingSeconds: Seconds.of(DEFAULT_MIN_INTERVAL_FLOOR),
272
- // TODO use better max fallback
273
- ...request
320
+ SecureSession.assert(this.#exchanges.session);
321
+ const peer = this.#exchanges.session.peerAddress;
322
+ const subscribe = async (request2) => {
323
+ var _stack = [];
324
+ try {
325
+ const context = __using(_stack, await this.#begin(request2, session), true);
326
+ const { checkAbort, messenger } = context;
327
+ logger.info(
328
+ "Subscribe \xBB",
329
+ messenger.exchange.via,
330
+ Diagnostic.asFlags({ keepSubscriptions: request2.keepSubscriptions }),
331
+ Diagnostic.dict({
332
+ min: Duration.format(request2.minIntervalFloor),
333
+ max: Duration.format(request2.maxIntervalCeiling)
334
+ }),
335
+ request2
336
+ );
337
+ await messenger.sendSubscribeRequest({
338
+ minIntervalFloorSeconds: Seconds.of(DEFAULT_MIN_INTERVAL_FLOOR),
339
+ maxIntervalCeilingSeconds: Seconds.of(DEFAULT_MIN_INTERVAL_FLOOR),
340
+ // TODO use better max fallback
341
+ ...request2
342
+ });
343
+ checkAbort();
344
+ await this.#handleSubscriptionResponse(request2, readChunks(messenger));
345
+ checkAbort();
346
+ const responseMessage = await messenger.nextMessage(MessageType.SubscribeResponse);
347
+ const response = TlvSubscribeResponse.decode(responseMessage.payload);
348
+ logger.info(
349
+ "Subscription successful \xAB",
350
+ messenger.exchange.via,
351
+ Diagnostic.dict({
352
+ id: response.subscriptionId,
353
+ interval: Duration.format(Seconds(response.maxInterval))
354
+ })
355
+ );
356
+ const subscription2 = new PeerSubscription({
357
+ request: request2,
358
+ peer,
359
+ closed: () => this.#subscriptions.delete(subscription2),
360
+ response,
361
+ abort: session?.abort
362
+ });
363
+ this.#subscriptions.addPeer(subscription2);
364
+ return subscription2;
365
+ } catch (_) {
366
+ var _error = _, _hasError = true;
367
+ } finally {
368
+ var _promise = __callDispose(_stack, _error, _hasError);
369
+ _promise && await _promise;
370
+ }
371
+ };
372
+ let subscription;
373
+ if (request.sustain) {
374
+ subscription = new SustainedSubscription({
375
+ subscribe,
376
+ peer,
377
+ closed: () => this.#subscriptions.delete(subscription),
378
+ request,
379
+ abort: session?.abort,
380
+ retries: this.#sustainRetries
274
381
  });
275
- await this.#handleSubscriptionResponse(request, readChunks(messenger));
276
- const responseMessage = await messenger.nextMessage(MessageType.SubscribeResponse);
277
- const response = TlvSubscribeResponse.decode(responseMessage.payload);
278
- logger.info(
279
- "Subscription successful \xAB",
280
- messenger.exchange.via,
281
- Diagnostic.dict({
282
- subId: response.subscriptionId,
283
- interval: Duration.format(Seconds(response.maxInterval))
284
- })
285
- );
286
- return this.#subscriptions.add(request, response);
287
- } finally {
288
- await messenger?.close();
289
- this.#end(request);
382
+ } else {
383
+ subscription = await subscribe(request);
290
384
  }
291
- }
292
- cancelSubscription(id) {
293
- this.#subscriptions.get(id)?.close();
385
+ this.#subscriptions.addActive(subscription);
386
+ return subscription;
294
387
  }
295
388
  async #handleSubscriptionResponse(request, result) {
296
389
  if (request.updated) {
@@ -299,14 +392,27 @@ class ClientInteraction {
299
392
  for await (const _chunk of result) ;
300
393
  }
301
394
  }
302
- #begin(request) {
303
- if (this.#closed) {
395
+ async #begin(request, session) {
396
+ if (this.#abort.aborted) {
304
397
  throw new ImplementationError("Client interaction unavailable after close");
305
398
  }
306
399
  this.#interactions.add(request);
307
- }
308
- #end(request) {
309
- this.#interactions.delete(request);
400
+ const checkAbort = Abort.checkerFor(session);
401
+ const messenger = await InteractionClientMessenger.create(this.#exchanges);
402
+ const context = {
403
+ checkAbort,
404
+ messenger,
405
+ [Symbol.asyncDispose]: async () => {
406
+ await messenger.close();
407
+ this.#interactions.delete(request);
408
+ }
409
+ };
410
+ try {
411
+ context.checkAbort();
412
+ } catch (e) {
413
+ await context[Symbol.asyncDispose]();
414
+ }
415
+ return context;
310
416
  }
311
417
  }
312
418
  async function* readChunks(messenger) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/action/client/ClientInteraction.ts"],
4
- "mappings": "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",
5
- "names": []
4
+ "mappings": "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",
5
+ "names": ["subscription", "request"]
6
6
  }
@@ -4,9 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  export * from "./ClientInteraction.js";
7
- export * from "./ClientSubscription.js";
8
- export * from "./ClientSubscriptionHandler.js";
9
- export * from "./ClientSubscriptions.js";
10
7
  export * from "./InputChunk.js";
11
8
  export * from "./ReadScope.js";
9
+ export * from "./subscription/index.js";
12
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/action/client/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/action/client/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC"}
@@ -4,9 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  export * from "./ClientInteraction.js";
7
- export * from "./ClientSubscription.js";
8
- export * from "./ClientSubscriptionHandler.js";
9
- export * from "./ClientSubscriptions.js";
10
7
  export * from "./InputChunk.js";
11
8
  export * from "./ReadScope.js";
9
+ export * from "./subscription/index.js";
12
10
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/action/client/index.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,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;",
5
5
  "names": []
6
6
  }
@@ -0,0 +1,8 @@
1
+ import { Subscribe } from "#action/request/Subscribe.js";
2
+ export interface ClientSubscribe extends Subscribe {
3
+ /**
4
+ * If true the subscription is virtualized and the underlying subscription is reestablished when lost.
5
+ */
6
+ sustain?: boolean;
7
+ }
8
+ //# sourceMappingURL=ClientSubscribe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClientSubscribe.d.ts","sourceRoot":"","sources":["../../../../../src/action/client/subscription/ClientSubscribe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAC9C;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=ClientSubscribe.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "mappings": "",
5
+ "names": []
6
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { Subscribe } from "#action/request/Subscribe.js";
7
+ import type { ActiveSubscription } from "#action/response/SubscribeResult.js";
8
+ import { Abort, Logger } from "#general";
9
+ import { PeerAddress } from "#peer/PeerAddress.js";
10
+ import { ClientSubscribe } from "./ClientSubscribe.js";
11
+ /**
12
+ * The client view of an established Matter subscription.
13
+ */
14
+ export declare abstract class ClientSubscription implements ActiveSubscription {
15
+ #private;
16
+ readonly request: Subscribe;
17
+ readonly peer: PeerAddress;
18
+ abstract subscriptionId: number;
19
+ abstract maxInterval: number;
20
+ abstract interactionModelRevision: number;
21
+ /**
22
+ * If the subscription has an async worker, this is the promise associated with the worker.
23
+ */
24
+ done?: Promise<void>;
25
+ constructor({ request, peer, closed, abort }: ClientSubscription.Configuration);
26
+ close(): void;
27
+ protected get abort(): Abort;
28
+ protected get logger(): Logger;
29
+ }
30
+ export declare namespace ClientSubscription {
31
+ interface Configuration {
32
+ request: ClientSubscribe;
33
+ peer: PeerAddress;
34
+ closed: () => void;
35
+ abort?: AbortSignal;
36
+ }
37
+ }
38
+ //# sourceMappingURL=ClientSubscription.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClientSubscription.d.ts","sourceRoot":"","sources":["../../../../../src/action/client/subscription/ClientSubscription.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,KAAK,EAAc,MAAM,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD;;GAEG;AACH,8BAAsB,kBAAmB,YAAW,kBAAkB;;IAClE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAE1C;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gBAMT,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,kBAAkB,CAAC,aAAa;IAU9E,KAAK;IA4BL,SAAS,KAAK,KAAK,UAElB;IAED,SAAS,KAAK,MAAM,WAEnB;CACJ;AAED,yBAAiB,kBAAkB,CAAC;IAChC,UAAiB,aAAa;QAC1B,OAAO,EAAE,eAAe,CAAC;QACzB,IAAI,EAAE,WAAW,CAAC;QAClB,MAAM,EAAE,MAAM,IAAI,CAAC;QACnB,KAAK,CAAC,EAAE,WAAW,CAAC;KACvB;CACJ"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Abort, Diagnostic, Logger } from "#general";
7
+ const logger = Logger.get("ClientSubscription");
8
+ class ClientSubscription {
9
+ request;
10
+ peer;
11
+ /**
12
+ * If the subscription has an async worker, this is the promise associated with the worker.
13
+ */
14
+ done;
15
+ #closed;
16
+ #abort;
17
+ #isClosed = false;
18
+ constructor({ request, peer, closed, abort }) {
19
+ this.request = request;
20
+ this.peer = peer;
21
+ this.#closed = closed;
22
+ this.#abort = new Abort({
23
+ abort,
24
+ handler: this.close.bind(this)
25
+ });
26
+ }
27
+ close() {
28
+ if (this.#isClosed) {
29
+ return;
30
+ }
31
+ this.#isClosed = true;
32
+ this.#abort();
33
+ this.#closed();
34
+ const unhandledError = (e) => {
35
+ this.logger.error("Unhandled error in subscription to", Diagnostic.strong(this.peer.toString()), e);
36
+ };
37
+ if (this.done) {
38
+ this.done.finally(() => {
39
+ this.request.closed?.();
40
+ }).catch(unhandledError);
41
+ } else {
42
+ try {
43
+ this.request.closed?.();
44
+ } catch (e) {
45
+ unhandledError(e);
46
+ }
47
+ }
48
+ }
49
+ get abort() {
50
+ return this.#abort;
51
+ }
52
+ get logger() {
53
+ return logger;
54
+ }
55
+ }
56
+ export {
57
+ ClientSubscription
58
+ };
59
+ //# sourceMappingURL=ClientSubscription.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/action/client/subscription/ClientSubscription.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,SAAS,OAAO,YAAY,cAAc;AAI1C,MAAM,SAAS,OAAO,IAAI,oBAAoB;AAKvC,MAAe,mBAAiD;AAAA,EAC1D;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,EAQT;AAAA,EAES;AAAA,EACA;AAAA,EACT,YAAY;AAAA,EAEZ,YAAY,EAAE,SAAS,MAAM,QAAQ,MAAM,GAAqC;AAC5E,SAAK,UAAU;AACf,SAAK,OAAO;AACZ,SAAK,UAAU;AACf,SAAK,SAAS,IAAI,MAAM;AAAA,MACpB;AAAA,MACA,SAAS,KAAK,MAAM,KAAK,IAAI;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EAEA,QAAQ;AACJ,QAAI,KAAK,WAAW;AAChB;AAAA,IACJ;AACA,SAAK,YAAY;AAEjB,SAAK,OAAO;AACZ,SAAK,QAAQ;AAEb,UAAM,iBAAiB,CAAC,MAAe;AACnC,WAAK,OAAO,MAAM,sCAAsC,WAAW,OAAO,KAAK,KAAK,SAAS,CAAC,GAAG,CAAC;AAAA,IACtG;AAEA,QAAI,KAAK,MAAM;AACX,WAAK,KACA,QAAQ,MAAM;AACX,aAAK,QAAQ,SAAS;AAAA,MAC1B,CAAC,EACA,MAAM,cAAc;AAAA,IAC7B,OAAO;AACH,UAAI;AACA,aAAK,QAAQ,SAAS;AAAA,MAC1B,SAAS,GAAG;AACR,uBAAe,CAAC;AAAA,MACpB;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,IAAc,QAAQ;AAClB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAc,SAAS;AACnB,WAAO;AAAA,EACX;AACJ;",
5
+ "names": []
6
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClientSubscriptionHandler.d.ts","sourceRoot":"","sources":["../../../../../src/action/client/subscription/ClientSubscriptionHandler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAI/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAI/D;;GAEG;AACH,qBAAa,yBAA0B,YAAW,eAAe;;IAC7D,EAAE,SAA2B;IAC7B,qBAAqB,UAAQ;gBAIjB,aAAa,EAAE,mBAAmB;IAIxC,aAAa,CAAC,QAAQ,EAAE,eAAe;IAyDvC,KAAK;CACd"}
@@ -6,8 +6,9 @@
6
6
  import { Diagnostic, InternalError, Logger } from "#general";
7
7
  import { DecodedDataReport } from "#interaction/DecodedDataReport.js";
8
8
  import { IncomingInteractionClientMessenger } from "#interaction/InteractionMessenger.js";
9
+ import { SecureSession } from "#session/SecureSession.js";
9
10
  import { INTERACTION_PROTOCOL_ID, Status } from "#types";
10
- import { InputChunk } from "./InputChunk.js";
11
+ import { InputChunk } from "../InputChunk.js";
11
12
  const logger = Logger.get("ClientSubscriptionHandler");
12
13
  class ClientSubscriptionHandler {
13
14
  id = INTERACTION_PROTOCOL_ID;
@@ -30,7 +31,9 @@ class ClientSubscriptionHandler {
30
31
  await sendInvalid(messenger, void 0);
31
32
  return;
32
33
  }
33
- const subscription = this.#subscriptions.get(subscriptionId);
34
+ const { session } = exchange.channel;
35
+ SecureSession.assert(session);
36
+ const subscription = this.#subscriptions.getPeer(session.peerAddress, subscriptionId);
34
37
  if (subscription === void 0) {
35
38
  logger.debug("Ignoring data report for unknown subscription ID", Diagnostic.strong(subscriptionId));
36
39
  await sendInvalid(messenger, subscriptionId);