@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
@@ -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,79 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var ClientSubscription_exports = {};
20
+ __export(ClientSubscription_exports, {
21
+ ClientSubscription: () => ClientSubscription
22
+ });
23
+ module.exports = __toCommonJS(ClientSubscription_exports);
24
+ var import_general = require("#general");
25
+ /**
26
+ * @license
27
+ * Copyright 2022-2025 Matter.js Authors
28
+ * SPDX-License-Identifier: Apache-2.0
29
+ */
30
+ const logger = import_general.Logger.get("ClientSubscription");
31
+ class ClientSubscription {
32
+ request;
33
+ peer;
34
+ /**
35
+ * If the subscription has an async worker, this is the promise associated with the worker.
36
+ */
37
+ done;
38
+ #closed;
39
+ #abort;
40
+ #isClosed = false;
41
+ constructor({ request, peer, closed, abort }) {
42
+ this.request = request;
43
+ this.peer = peer;
44
+ this.#closed = closed;
45
+ this.#abort = new import_general.Abort({
46
+ abort,
47
+ handler: this.close.bind(this)
48
+ });
49
+ }
50
+ close() {
51
+ if (this.#isClosed) {
52
+ return;
53
+ }
54
+ this.#isClosed = true;
55
+ this.#abort();
56
+ this.#closed();
57
+ const unhandledError = (e) => {
58
+ this.logger.error("Unhandled error in subscription to", import_general.Diagnostic.strong(this.peer.toString()), e);
59
+ };
60
+ if (this.done) {
61
+ this.done.finally(() => {
62
+ this.request.closed?.();
63
+ }).catch(unhandledError);
64
+ } else {
65
+ try {
66
+ this.request.closed?.();
67
+ } catch (e) {
68
+ unhandledError(e);
69
+ }
70
+ }
71
+ }
72
+ get abort() {
73
+ return this.#abort;
74
+ }
75
+ get logger() {
76
+ return logger;
77
+ }
78
+ }
79
+ //# 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,qBAA0C;AAR1C;AAAA;AAAA;AAAA;AAAA;AAYA,MAAM,SAAS,sBAAO,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,qBAAM;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,0BAAW,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"}
@@ -24,8 +24,9 @@ module.exports = __toCommonJS(ClientSubscriptionHandler_exports);
24
24
  var import_general = require("#general");
25
25
  var import_DecodedDataReport = require("#interaction/DecodedDataReport.js");
26
26
  var import_InteractionMessenger = require("#interaction/InteractionMessenger.js");
27
+ var import_SecureSession = require("#session/SecureSession.js");
27
28
  var import_types = require("#types");
28
- var import_InputChunk = require("./InputChunk.js");
29
+ var import_InputChunk = require("../InputChunk.js");
29
30
  /**
30
31
  * @license
31
32
  * Copyright 2022-2025 Matter.js Authors
@@ -53,7 +54,9 @@ class ClientSubscriptionHandler {
53
54
  await sendInvalid(messenger, void 0);
54
55
  return;
55
56
  }
56
- const subscription = this.#subscriptions.get(subscriptionId);
57
+ const { session } = exchange.channel;
58
+ import_SecureSession.SecureSession.assert(session);
59
+ const subscription = this.#subscriptions.getPeer(session.peerAddress, subscriptionId);
57
60
  if (subscription === void 0) {
58
61
  logger.debug("Ignoring data report for unknown subscription ID", import_general.Diagnostic.strong(subscriptionId));
59
62
  await sendInvalid(messenger, subscriptionId);
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/action/client/subscription/ClientSubscriptionHandler.ts"],
4
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,qBAAkD;AAClD,+BAAkC;AAClC,kCAAmD;AAInD,2BAA8B;AAC9B,mBAA4D;AAC5D,wBAA2B;AAf3B;AAAA;AAAA;AAAA;AAAA;AAkBA,MAAM,SAAS,sBAAO,IAAI,2BAA2B;AAK9C,MAAM,0BAAqD;AAAA,EAC9D,KAAK;AAAA,EACL,wBAAwB;AAAA,EAExB;AAAA,EAEA,YAAY,eAAoC;AAC5C,SAAK,iBAAiB;AAAA,EAC1B;AAAA,EAEA,MAAM,cAAc,UAA2B;AAC3C,UAAM,YAAY,IAAI,+DAAmC,QAAQ;AAEjE,UAAM,UAAU,UAAU,gBAAgB;AAE1C,UAAM,mBAAmB,MAAM,QAAQ,KAAK;AAC5C,QAAI,iBAAiB,MAAM;AACvB,YAAM,IAAI,6BAAc,4CAA4C;AAAA,IACxE;AACA,UAAM,gBAAgB,iBAAiB;AAGvC,UAAM,EAAE,eAAe,IAAI;AAC3B,QAAI,mBAAmB,QAAW;AAC9B,aAAO,MAAM,0DAA0D;AACvE,YAAM,YAAY,WAAW,MAAS;AACtC;AAAA,IACJ;AAGA,UAAM,EAAE,QAAQ,IAAI,SAAS;AAC7B,uCAAc,OAAO,OAAO;AAC5B,UAAM,eAAe,KAAK,eAAe,QAAQ,QAAQ,aAAa,cAAc;AACpF,QAAI,iBAAiB,QAAW;AAC5B,aAAO,MAAM,oDAAoD,0BAAW,OAAO,cAAc,CAAC;AAClG,YAAM,YAAY,WAAW,cAAc;AAC3C;AAAA,IACJ;AAGA,QAAI,CAAC,cAAc,kBAAkB,UAAU,CAAC,cAAc,cAAc,QAAQ;AAChF,mBAAa,YAAY;AACzB,WAAK,eAAe,WAAW;AAC/B,YAAM,SAAS,MAAM;AACrB;AAAA,IACJ;AAGA,QAAI;AACA,mBAAa,YAAY;AAEzB,UAAI,aAAa,QAAQ,SAAS;AAC9B,cAAM,aAAa,QAAQ,QAAQ,eAAe,eAAe,SAAS,SAAS,CAAC;AAAA,MACxF,OAAO;AAIH,yBAAiB,UAAU,QAAQ;AAAA,MACvC;AAAA,IACJ,UAAE;AACE,mBAAa,YAAY;AACzB,mBAAa,YAAY;AACzB,WAAK,eAAe,WAAW;AAC/B,YAAM,SAAS,MAAM;AAAA,IACzB;AAAA,EACJ;AAAA,EAEA,MAAM,QAAQ;AAAA,EAAC;AACnB;AAEA,eAAe,YAAY,WAA+C,gBAAiC;AACvG,QAAM,UAAU,WAAW,oBAAO,qBAAqB;AAAA,IACnD,4BAA4B;AAAA,IAC5B,YAAY;AAAA,MACR,OAAO;AAAA,IACX;AAAA,EACJ,CAAC;AACD,QAAM,UAAU,MAAM;AAC1B;AAOA,gBAAgB,eACZ,eACA,cACA,WACU;AACV,YAAM,8BAAW,aAAa;AAE9B,QAAM,EAAE,eAAe,IAAI;AAE3B,mBAAiB,UAAU,cAAc;AACrC,UAAM,cAAU,4CAAkB,MAAM;AAExC,QAAI,QAAQ,mBAAmB,QAAW;AACtC,aAAO;AAAA,QACH;AAAA,QACA,0BAAW,OAAO,QAAQ,cAAc;AAAA,MAC5C;AACA,YAAM,YAAY,WAAW,QAAQ,cAAc;AAAA,IACvD;AAEA,QAAI,QAAQ,mBAAmB,gBAAgB;AAC3C,aAAO;AAAA,QACH;AAAA,QACA,0BAAW,OAAO,QAAQ,cAAc;AAAA,MAC5C;AACA,YAAM,YAAY,WAAW,QAAQ,cAAc;AACnD;AAAA,IACJ;AAEA,cAAM,8BAAW,MAAM;AAAA,EAC3B;AACJ;",
5
+ "names": []
6
+ }
@@ -3,27 +3,34 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { Subscribe } from "#action/request/Subscribe.js";
7
6
  import { ReadResult } from "#action/response/ReadResult.js";
8
- import { ActiveSubscription } from "#action/response/SubscribeResult.js";
9
7
  import { Environment, Environmental } from "#general";
10
8
  import { SubscriptionId } from "#interaction/Subscription.js";
11
- import { SubscribeResponse } from "#types";
9
+ import { PeerAddress } from "#peer/PeerAddress.js";
12
10
  import { ClientSubscription } from "./ClientSubscription.js";
11
+ import type { PeerSubscription } from "./PeerSubscription.js";
13
12
  /**
14
- * A managed set of {@link ClientSubscription} instances.
13
+ * A managed set of {@link ActiveSubscription} instances.
15
14
  */
16
15
  export declare class ClientSubscriptions {
17
16
  #private;
18
17
  static [Environmental.create](env: Environment): ClientSubscriptions;
19
18
  /**
20
- * Register an active subscription.
19
+ * Register a user-facing {@link ClientSubscription}.
21
20
  */
22
- add(request: Subscribe, response: SubscribeResponse): ActiveSubscription;
21
+ addActive(subscription: ClientSubscription): void;
23
22
  /**
24
- * Retrieve a subscription by ID.
23
+ * Register a {@link PeerSubscription}.
25
24
  */
26
- get(id: SubscriptionId): ClientSubscription | undefined;
25
+ addPeer(subscription: PeerSubscription): void;
26
+ /**
27
+ * Retrieve a {@link PeerSubscription} by ID.
28
+ */
29
+ getPeer(address: PeerAddress, id: SubscriptionId): PeerSubscription | undefined;
30
+ /**
31
+ * Unregister a {@link PeerSubscription}.
32
+ */
33
+ delete(subscription: ClientSubscription): void;
27
34
  /**
28
35
  * Iterate over active subscriptions.
29
36
  */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClientSubscriptions.d.ts","sourceRoot":"","sources":["../../../../../src/action/client/subscription/ClientSubscriptions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAY,WAAW,EAAE,aAAa,EAAkC,MAAM,UAAU,CAAC;AAChG,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;GAEG;AACH,qBAAa,mBAAmB;;IAK5B,MAAM,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,WAAW;IAM9C;;OAEG;IACH,SAAS,CAAC,YAAY,EAAE,kBAAkB;IAI1C;;OAEG;IACH,OAAO,CAAC,YAAY,EAAE,gBAAgB;IAUtC;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,cAAc;IAIhD;;OAEG;IACH,MAAM,CAAC,YAAY,EAAE,kBAAkB;IAUvC;;OAEG;IACH,CAAC,MAAM,CAAC,QAAQ,CAAC;IAIjB;;OAEG;IACG,KAAK;IAaX;;OAEG;IACH,UAAU;CAiDb;AAED,yBAAiB,mBAAmB,CAAC;IACjC,UAAiB,QAAQ;QACrB,CAAC,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAC7D;CACJ"}
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var ClientSubscriptions_exports = {};
20
+ __export(ClientSubscriptions_exports, {
21
+ ClientSubscriptions: () => ClientSubscriptions
22
+ });
23
+ module.exports = __toCommonJS(ClientSubscriptions_exports);
24
+ var import_general = require("#general");
25
+ /**
26
+ * @license
27
+ * Copyright 2022-2025 Matter.js Authors
28
+ * SPDX-License-Identifier: Apache-2.0
29
+ */
30
+ class ClientSubscriptions {
31
+ #active = new import_general.BasicSet();
32
+ #peers = /* @__PURE__ */ new Map();
33
+ #timeout;
34
+ static [import_general.Environmental.create](env) {
35
+ const instance = new ClientSubscriptions();
36
+ env.set(ClientSubscriptions, instance);
37
+ return instance;
38
+ }
39
+ /**
40
+ * Register a user-facing {@link ClientSubscription}.
41
+ */
42
+ addActive(subscription) {
43
+ this.#active.add(subscription);
44
+ }
45
+ /**
46
+ * Register a {@link PeerSubscription}.
47
+ */
48
+ addPeer(subscription) {
49
+ let forPeer = this.#peers.get(subscription.peer);
50
+ if (forPeer === void 0) {
51
+ this.#peers.set(subscription.peer, forPeer = /* @__PURE__ */ new Map());
52
+ }
53
+ forPeer.set(subscription.subscriptionId, subscription);
54
+ this.resetTimer();
55
+ }
56
+ /**
57
+ * Retrieve a {@link PeerSubscription} by ID.
58
+ */
59
+ getPeer(address, id) {
60
+ return this.#peers.get(address)?.get(id);
61
+ }
62
+ /**
63
+ * Unregister a {@link PeerSubscription}.
64
+ */
65
+ delete(subscription) {
66
+ const forPeer = this.#peers.get(subscription.peer);
67
+ if (forPeer?.delete(subscription.subscriptionId)) {
68
+ if (!forPeer.size) {
69
+ this.#peers.delete(subscription.peer);
70
+ }
71
+ }
72
+ this.#active.delete(subscription);
73
+ }
74
+ /**
75
+ * Iterate over active subscriptions.
76
+ */
77
+ [Symbol.iterator]() {
78
+ return this.#active[Symbol.iterator]();
79
+ }
80
+ /**
81
+ * Terminate all subscriptions.
82
+ */
83
+ async close() {
84
+ if (this.#timeout) {
85
+ this.#timeout.stop();
86
+ this.#timeout = void 0;
87
+ }
88
+ for (const subscription of this.#active) {
89
+ subscription.close();
90
+ }
91
+ await this.#active.empty;
92
+ }
93
+ /**
94
+ * Restart the timeout timer for the current set of active subscriptions.
95
+ */
96
+ resetTimer() {
97
+ const now = import_general.Time.nowMs;
98
+ let nextTimeoutAt;
99
+ for (const peer of this.#peers.values()) {
100
+ for (const subscription of peer.values()) {
101
+ if (subscription.isReading) {
102
+ continue;
103
+ }
104
+ let { timeoutAt } = subscription;
105
+ if (timeoutAt === void 0) {
106
+ timeoutAt = subscription.timeoutAt = (0, import_general.Timestamp)(now + subscription.timeout);
107
+ } else if (timeoutAt < now) {
108
+ subscription.timedOut();
109
+ continue;
110
+ }
111
+ if (nextTimeoutAt === void 0 || nextTimeoutAt > timeoutAt) {
112
+ nextTimeoutAt = timeoutAt;
113
+ }
114
+ }
115
+ }
116
+ if (nextTimeoutAt === void 0) {
117
+ this.#timeout?.stop();
118
+ return;
119
+ }
120
+ if (this.#timeout) {
121
+ this.#timeout?.stop();
122
+ this.#timeout.interval = (0, import_general.Millis)(nextTimeoutAt - now);
123
+ } else {
124
+ this.#timeout = import_general.Time.getTimer(
125
+ "Subscription timeout",
126
+ (0, import_general.Millis)(nextTimeoutAt - now),
127
+ this.resetTimer.bind(this)
128
+ );
129
+ }
130
+ this.#timeout.start();
131
+ }
132
+ }
133
+ //# sourceMappingURL=ClientSubscriptions.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/action/client/subscription/ClientSubscriptions.ts"],
4
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,qBAAqF;AARrF;AAAA;AAAA;AAAA;AAAA;AAiBO,MAAM,oBAAoB;AAAA,EAC7B,UAAU,IAAI,wBAA6B;AAAA,EAC3C,SAAS,oBAAI,IAAgD;AAAA,EAC7D;AAAA,EAEA,QAAQ,6BAAc,MAAM,EAAE,KAAkB;AAC5C,UAAM,WAAW,IAAI,oBAAoB;AACzC,QAAI,IAAI,qBAAqB,QAAQ;AACrC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,cAAkC;AACxC,SAAK,QAAQ,IAAI,YAAY;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,cAAgC;AACpC,QAAI,UAAU,KAAK,OAAO,IAAI,aAAa,IAAI;AAC/C,QAAI,YAAY,QAAW;AACvB,WAAK,OAAO,IAAI,aAAa,MAAO,UAAU,oBAAI,IAAI,CAAE;AAAA,IAC5D;AACA,YAAQ,IAAI,aAAa,gBAAgB,YAAY;AAErD,SAAK,WAAW;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,SAAsB,IAAoB;AAC9C,WAAO,KAAK,OAAO,IAAI,OAAO,GAAG,IAAI,EAAE;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,cAAkC;AACrC,UAAM,UAAU,KAAK,OAAO,IAAI,aAAa,IAAI;AACjD,QAAI,SAAS,OAAO,aAAa,cAAc,GAAG;AAC9C,UAAI,CAAC,QAAQ,MAAM;AACf,aAAK,OAAO,OAAO,aAAa,IAAI;AAAA,MACxC;AAAA,IACJ;AACA,SAAK,QAAQ,OAAO,YAAY;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,CAAC,OAAO,QAAQ,IAAI;AAChB,WAAO,KAAK,QAAQ,OAAO,QAAQ,EAAE;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ;AACV,QAAI,KAAK,UAAU;AACf,WAAK,SAAS,KAAK;AACnB,WAAK,WAAW;AAAA,IACpB;AAEA,eAAW,gBAAgB,KAAK,SAAS;AACrC,mBAAa,MAAM;AAAA,IACvB;AAEA,UAAM,KAAK,QAAQ;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa;AACT,UAAM,MAAM,oBAAK;AACjB,QAAI;AAGJ,eAAW,QAAQ,KAAK,OAAO,OAAO,GAAG;AACrC,iBAAW,gBAAgB,KAAK,OAAO,GAAG;AAEtC,YAAI,aAAa,WAAW;AACxB;AAAA,QACJ;AAGA,YAAI,EAAE,UAAU,IAAI;AACpB,YAAI,cAAc,QAAW;AAEzB,sBAAY,aAAa,gBAAY,0BAAU,MAAM,aAAa,OAAO;AAAA,QAC7E,WAAW,YAAY,KAAK;AAExB,uBAAa,SAAS;AACtB;AAAA,QACJ;AAGA,YAAI,kBAAkB,UAAa,gBAAgB,WAAW;AAC1D,0BAAgB;AAAA,QACpB;AAAA,MACJ;AAAA,IACJ;AAGA,QAAI,kBAAkB,QAAW;AAC7B,WAAK,UAAU,KAAK;AACpB;AAAA,IACJ;AAGA,QAAI,KAAK,UAAU;AACf,WAAK,UAAU,KAAK;AACpB,WAAK,SAAS,eAAW,uBAAO,gBAAgB,GAAG;AAAA,IACvD,OAAO;AACH,WAAK,WAAW,oBAAK;AAAA,QACjB;AAAA,YACA,uBAAO,gBAAgB,GAAG;AAAA,QAC1B,KAAK,WAAW,KAAK,IAAI;AAAA,MAC7B;AAAA,IACJ;AACA,SAAK,SAAS,MAAM;AAAA,EACxB;AACJ;",
5
+ "names": []
6
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Duration, Timestamp } from "#general";
7
+ import type { SubscribeResponse } from "#types";
8
+ import { ClientSubscription } from "./ClientSubscription.js";
9
+ /**
10
+ * A Matter protocol-level subscription established with a peer.
11
+ */
12
+ export declare class PeerSubscription extends ClientSubscription {
13
+ readonly interactionModelRevision: number;
14
+ readonly maxInterval: number;
15
+ readonly subscriptionId: number;
16
+ isReading: boolean;
17
+ timeoutAt?: Timestamp;
18
+ constructor(config: PeerSubscription.Configuration);
19
+ get timeout(): Duration;
20
+ timedOut(): void;
21
+ }
22
+ export declare namespace PeerSubscription {
23
+ interface Configuration extends ClientSubscription.Configuration {
24
+ response: SubscribeResponse;
25
+ }
26
+ }
27
+ //# sourceMappingURL=PeerSubscription.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PeerSubscription.d.ts","sourceRoot":"","sources":["../../../../../src/action/client/subscription/PeerSubscription.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAc,QAAQ,EAAmB,SAAS,EAAE,MAAM,UAAU,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,kBAAkB;IACpD,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,SAAS,UAAS;IAElB,SAAS,CAAC,EAAE,SAAS,CAAC;gBAEV,MAAM,EAAE,gBAAgB,CAAC,aAAa;IASlD,IAAI,OAAO,aAEV;IAED,QAAQ;CAUX;AAED,yBAAiB,gBAAgB,CAAC;IAC9B,UAAiB,aAAc,SAAQ,kBAAkB,CAAC,aAAa;QACnE,QAAQ,EAAE,iBAAiB,CAAC;KAC/B;CACJ"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var PeerSubscription_exports = {};
20
+ __export(PeerSubscription_exports, {
21
+ PeerSubscription: () => PeerSubscription
22
+ });
23
+ module.exports = __toCommonJS(PeerSubscription_exports);
24
+ var import_general = require("#general");
25
+ var import_ClientSubscription = require("./ClientSubscription.js");
26
+ /**
27
+ * @license
28
+ * Copyright 2022-2025 Matter.js Authors
29
+ * SPDX-License-Identifier: Apache-2.0
30
+ */
31
+ class PeerSubscription extends import_ClientSubscription.ClientSubscription {
32
+ interactionModelRevision;
33
+ maxInterval;
34
+ subscriptionId;
35
+ isReading = false;
36
+ timeoutAt;
37
+ constructor(config) {
38
+ super(config);
39
+ const { subscriptionId, interactionModelRevision, maxInterval } = config.response;
40
+ this.subscriptionId = subscriptionId;
41
+ this.interactionModelRevision = interactionModelRevision;
42
+ this.maxInterval = maxInterval;
43
+ }
44
+ get timeout() {
45
+ return (0, import_general.Millis)((0, import_general.Seconds)(this.maxInterval) + (this.request.maxPeerResponseTime ?? 0));
46
+ }
47
+ timedOut() {
48
+ this.logger.info(
49
+ "Subscription",
50
+ import_general.Diagnostic.strong(this.subscriptionId),
51
+ "timed out after",
52
+ import_general.Diagnostic.strong(import_general.Duration.format(this.timeout))
53
+ );
54
+ this.close();
55
+ }
56
+ }
57
+ //# sourceMappingURL=PeerSubscription.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/action/client/subscription/PeerSubscription.ts"],
4
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,qBAAiE;AAEjE,gCAAmC;AARnC;AAAA;AAAA;AAAA;AAAA;AAaO,MAAM,yBAAyB,6CAAmB;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACT,YAAY;AAAA,EAEZ;AAAA,EAEA,YAAY,QAAwC;AAChD,UAAM,MAAM;AAEZ,UAAM,EAAE,gBAAgB,0BAA0B,YAAY,IAAI,OAAO;AACzE,SAAK,iBAAiB;AACtB,SAAK,2BAA2B;AAChC,SAAK,cAAc;AAAA,EACvB;AAAA,EAEA,IAAI,UAAU;AACV,eAAO,2BAAO,wBAAQ,KAAK,WAAW,KAAK,KAAK,QAAQ,uBAAuB,EAAE;AAAA,EACrF;AAAA,EAEA,WAAW;AACP,SAAK,OAAO;AAAA,MACR;AAAA,MACA,0BAAW,OAAO,KAAK,cAAc;AAAA,MACrC;AAAA,MACA,0BAAW,OAAO,wBAAS,OAAO,KAAK,OAAO,CAAC;AAAA,IACnD;AAEA,SAAK,MAAM;AAAA,EACf;AACJ;",
5
+ "names": []
6
+ }
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Subscribe } from "#action/request/Subscribe.js";
7
+ import { AsyncObservableValue, RetrySchedule } from "#general";
8
+ import { SubscribeResponse } from "#types";
9
+ import { ClientSubscription } from "./ClientSubscription.js";
10
+ import { PeerSubscription } from "./PeerSubscription.js";
11
+ /**
12
+ * An {@link ActiveSubscription} that remains active regardless of the state of the peer.
13
+ *
14
+ * This class performs retries in response to connection errors and timeouts. The underlying Matter subscription and
15
+ * thus {@link ActiveSubscription#subscriptionId} may change if the peer goes offline or experiences transient errors.
16
+ *
17
+ * TODO - need to make underlying exchange provider abortable and work out how the retry schedule at this level
18
+ * interacts with the MDNS and secure protocol retries. Will require some refactoring at lower levels. Leaving
19
+ * retries at this level relatively conservative for now
20
+ */
21
+ export declare class SustainedSubscription extends ClientSubscription {
22
+ #private;
23
+ constructor(config: SustainedSubscription.Configuration);
24
+ /**
25
+ * Emits when active state changes.
26
+ */
27
+ get active(): AsyncObservableValue<[any, ...any[]]>;
28
+ /**
29
+ * Emits when inactive state changes.
30
+ */
31
+ get inactive(): AsyncObservableValue<[any, ...any[]]>;
32
+ get interactionModelRevision(): number;
33
+ get maxInterval(): number;
34
+ get subscriptionId(): number;
35
+ }
36
+ export declare namespace SustainedSubscription {
37
+ /**
38
+ * Configuration for {@link SustainedSubscription}.
39
+ */
40
+ interface Configuration extends ClientSubscription.Configuration {
41
+ /**
42
+ * Function to establish underlying subscription.
43
+ */
44
+ subscribe: (request: Subscribe) => Promise<PeerSubscription>;
45
+ /**
46
+ * The schedule we use for retrying subscription connections.
47
+ *
48
+ * We handle reconnection separately at the exchange level. This retry schedule only applies to establishing a
49
+ * subscription once we have an active exchange. Exchange reconnection is handled by lower-level components.
50
+ */
51
+ retries: RetrySchedule;
52
+ }
53
+ function assert(subscription: SubscribeResponse): asserts subscription is SustainedSubscription;
54
+ const NO_SUBSCRIPTION = -1;
55
+ const DefaultRetrySchedule: RetrySchedule.Configuration;
56
+ }
57
+ //# sourceMappingURL=SustainedSubscription.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SustainedSubscription.d.ts","sourceRoot":"","sources":["../../../../../src/action/client/subscription/SustainedSubscription.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,OAAO,EAEH,oBAAoB,EAMpB,aAAa,EAGhB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAE3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAIzD;;;;;;;;;GASG;AACH,qBAAa,qBAAsB,SAAQ,kBAAkB;;gBAQ7C,MAAM,EAAE,qBAAqB,CAAC,aAAa;IAWvD;;OAEG;IACH,IAAI,MAAM,0CAET;IAED;;OAEG;IACH,IAAI,QAAQ,0CAEX;IAwED,IAAI,wBAAwB,WAE3B;IAED,IAAI,WAAW,WAEd;IAED,IAAI,cAAc,WAEjB;CACJ;AAED,yBAAiB,qBAAqB,CAAC;IACnC;;OAEG;IACH,UAAiB,aAAc,SAAQ,kBAAkB,CAAC,aAAa;QACnE;;WAEG;QACH,SAAS,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAE7D;;;;;WAKG;QACH,OAAO,EAAE,aAAa,CAAC;KAC1B;IAED,SAAgB,MAAM,CAAC,YAAY,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,IAAI,qBAAqB,CAIrG;IAEM,MAAM,eAAe,KAAK,CAAC;IAE3B,MAAM,oBAAoB,EAAE,aAAa,CAAC,aAgBhD,CAAC;CACL"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var SustainedSubscription_exports = {};
20
+ __export(SustainedSubscription_exports, {
21
+ SustainedSubscription: () => SustainedSubscription
22
+ });
23
+ module.exports = __toCommonJS(SustainedSubscription_exports);
24
+ var import_general = require("#general");
25
+ var import_model = require("#model");
26
+ var import_ClientSubscription = require("./ClientSubscription.js");
27
+ /**
28
+ * @license
29
+ * Copyright 2022-2025 Matter.js Authors
30
+ * SPDX-License-Identifier: Apache-2.0
31
+ */
32
+ const logger = import_general.Logger.get("ClientSubscription");
33
+ class SustainedSubscription extends import_ClientSubscription.ClientSubscription {
34
+ #request;
35
+ #subscription;
36
+ #retries;
37
+ #subscribe;
38
+ #active = (0, import_general.AsyncObservableValue)(false);
39
+ #inactive = (0, import_general.AsyncObservableValue)(true);
40
+ constructor(config) {
41
+ super(config);
42
+ const { request, retries, subscribe } = config;
43
+ this.#request = request;
44
+ this.#retries = retries;
45
+ this.#subscribe = subscribe;
46
+ this.done = this.#run();
47
+ }
48
+ /**
49
+ * Emits when active state changes.
50
+ */
51
+ get active() {
52
+ return this.#active;
53
+ }
54
+ /**
55
+ * Emits when inactive state changes.
56
+ */
57
+ get inactive() {
58
+ return this.#inactive;
59
+ }
60
+ async #run() {
61
+ const updated = this.#request.updated?.bind(this.#request);
62
+ while (true) {
63
+ const request = { ...this.#request, updated };
64
+ if (this.#request.updated) {
65
+ request.updated = this.#request.updated.bind(request);
66
+ }
67
+ const closed = new Promise((resolve) => {
68
+ request.closed = () => {
69
+ this.#subscription = void 0;
70
+ resolve();
71
+ };
72
+ });
73
+ for (const retry of this.#retries) {
74
+ try {
75
+ this.#subscription = await this.#subscribe(request);
76
+ break;
77
+ } catch (e) {
78
+ if (this.abort.aborted) {
79
+ return;
80
+ }
81
+ logger.error(
82
+ `Failed to establish subscription to ${this.peer}, retry in ${import_general.Duration.format(retry)}:`,
83
+ import_general.Diagnostic.errorMessage((0, import_general.asError)(e))
84
+ );
85
+ }
86
+ const readyForRetry = import_general.Time.sleep("subscription retry", retry);
87
+ await this.abort.race(readyForRetry);
88
+ readyForRetry.cancel();
89
+ if (this.abort.aborted) {
90
+ break;
91
+ }
92
+ }
93
+ await this.#inactive.emit(false);
94
+ await this.#active.emit(true);
95
+ if (this.abort.aborted) {
96
+ break;
97
+ }
98
+ await closed;
99
+ await this.#active.emit(false);
100
+ await this.#inactive.emit(true);
101
+ if (this.abort.aborted) {
102
+ break;
103
+ }
104
+ if (this.abort.aborted) {
105
+ break;
106
+ }
107
+ logger.error(`Replacing subscription to ${this.peer} due to timeout`);
108
+ }
109
+ this.#request.closed?.();
110
+ }
111
+ get interactionModelRevision() {
112
+ return this.#subscription?.interactionModelRevision ?? import_model.Specification.INTERACTION_MODEL_REVISION;
113
+ }
114
+ get maxInterval() {
115
+ return this.#subscription?.maxInterval ?? import_general.Hours.one;
116
+ }
117
+ get subscriptionId() {
118
+ return this.#subscription?.subscriptionId ?? SustainedSubscription.NO_SUBSCRIPTION;
119
+ }
120
+ }
121
+ ((SustainedSubscription2) => {
122
+ function assert(subscription) {
123
+ if (!(subscription instanceof SustainedSubscription2)) {
124
+ throw new import_general.ImplementationError(`Non-sustained subscription provided where sustained subscription required`);
125
+ }
126
+ }
127
+ SustainedSubscription2.assert = assert;
128
+ SustainedSubscription2.NO_SUBSCRIPTION = -1;
129
+ SustainedSubscription2.DefaultRetrySchedule = {
130
+ // Protocol-level level happens at the exchange level and is faster; this is an application-level retry. Retry
131
+ // more slowly so we do not hammer devices that are experiencing transient errors
132
+ initialInterval: (0, import_general.Seconds)(15),
133
+ // Similarly, we have an exchange. If a device repeatedly fails to establish a subscription, give it plenty of
134
+ // time to recover. It's even possible our subscription attempt is invalid for some reason, in which case we
135
+ // an aggressive interval would be particularly bad form
136
+ maximumInterval: (0, import_general.Hours)(1),
137
+ // No timeout; we run until aborted
138
+ timeout: void 0,
139
+ backoffFactor: 2,
140
+ jitterFactor: 0.25
141
+ };
142
+ })(SustainedSubscription || (SustainedSubscription = {}));
143
+ //# sourceMappingURL=SustainedSubscription.js.map