@matter/protocol 0.16.0-alpha.0-20250916-d577beb1d → 0.16.0-alpha.0-20250921-b7a3dda23

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 (254) hide show
  1. package/dist/cjs/bdx/BdxClient.d.ts +31 -0
  2. package/dist/cjs/bdx/BdxClient.d.ts.map +1 -0
  3. package/dist/cjs/bdx/BdxClient.js +57 -0
  4. package/dist/cjs/bdx/BdxClient.js.map +6 -0
  5. package/dist/cjs/bdx/BdxError.d.ts +21 -0
  6. package/dist/cjs/bdx/BdxError.d.ts.map +1 -0
  7. package/dist/cjs/bdx/BdxError.js +54 -0
  8. package/dist/cjs/bdx/BdxError.js.map +6 -0
  9. package/dist/cjs/bdx/BdxMessenger.d.ts +77 -0
  10. package/dist/cjs/bdx/BdxMessenger.d.ts.map +1 -0
  11. package/dist/cjs/bdx/BdxMessenger.js +245 -0
  12. package/dist/cjs/bdx/BdxMessenger.js.map +6 -0
  13. package/dist/cjs/bdx/BdxProtocol.d.ts +25 -0
  14. package/dist/cjs/bdx/BdxProtocol.d.ts.map +1 -0
  15. package/dist/cjs/bdx/BdxProtocol.js +102 -0
  16. package/dist/cjs/bdx/BdxProtocol.js.map +6 -0
  17. package/dist/cjs/bdx/BdxSession.d.ts +36 -0
  18. package/dist/cjs/bdx/BdxSession.d.ts.map +1 -0
  19. package/dist/cjs/bdx/BdxSession.js +153 -0
  20. package/dist/cjs/bdx/BdxSession.js.map +6 -0
  21. package/dist/cjs/bdx/BdxSessionConfiguration.d.ts +61 -0
  22. package/dist/cjs/bdx/BdxSessionConfiguration.d.ts.map +1 -0
  23. package/dist/cjs/bdx/BdxSessionConfiguration.js +95 -0
  24. package/dist/cjs/bdx/BdxSessionConfiguration.js.map +6 -0
  25. package/dist/cjs/bdx/FileDesignator.d.ts +21 -0
  26. package/dist/cjs/bdx/FileDesignator.d.ts.map +1 -0
  27. package/dist/cjs/bdx/FileDesignator.js +62 -0
  28. package/dist/cjs/bdx/FileDesignator.js.map +6 -0
  29. package/dist/cjs/bdx/PersistedFileDesignator.d.ts +16 -0
  30. package/dist/cjs/bdx/PersistedFileDesignator.d.ts.map +1 -0
  31. package/dist/cjs/bdx/PersistedFileDesignator.js +57 -0
  32. package/dist/cjs/bdx/PersistedFileDesignator.js.map +6 -0
  33. package/dist/cjs/bdx/bdx-session-initiator.d.ts +14 -0
  34. package/dist/cjs/bdx/bdx-session-initiator.d.ts.map +1 -0
  35. package/dist/cjs/bdx/bdx-session-initiator.js +218 -0
  36. package/dist/cjs/bdx/bdx-session-initiator.js.map +6 -0
  37. package/dist/cjs/bdx/flow/DrivenSendingFlow.d.ts +15 -0
  38. package/dist/cjs/bdx/flow/DrivenSendingFlow.d.ts.map +1 -0
  39. package/dist/cjs/bdx/flow/DrivenSendingFlow.js +49 -0
  40. package/dist/cjs/bdx/flow/DrivenSendingFlow.js.map +6 -0
  41. package/dist/cjs/bdx/flow/DrivingReceivingFlow.d.ts +15 -0
  42. package/dist/cjs/bdx/flow/DrivingReceivingFlow.d.ts.map +1 -0
  43. package/dist/cjs/bdx/flow/DrivingReceivingFlow.js +47 -0
  44. package/dist/cjs/bdx/flow/DrivingReceivingFlow.js.map +6 -0
  45. package/dist/cjs/bdx/flow/Flow.d.ts +48 -0
  46. package/dist/cjs/bdx/flow/Flow.d.ts.map +1 -0
  47. package/dist/cjs/bdx/flow/Flow.js +112 -0
  48. package/dist/cjs/bdx/flow/Flow.js.map +6 -0
  49. package/dist/cjs/bdx/flow/FollowingReceivingFlow.d.ts +16 -0
  50. package/dist/cjs/bdx/flow/FollowingReceivingFlow.d.ts.map +1 -0
  51. package/dist/cjs/bdx/flow/FollowingReceivingFlow.js +60 -0
  52. package/dist/cjs/bdx/flow/FollowingReceivingFlow.js.map +6 -0
  53. package/dist/cjs/bdx/flow/FollowingSendingFlow.d.ts +15 -0
  54. package/dist/cjs/bdx/flow/FollowingSendingFlow.d.ts.map +1 -0
  55. package/dist/cjs/bdx/flow/FollowingSendingFlow.js +49 -0
  56. package/dist/cjs/bdx/flow/FollowingSendingFlow.js.map +6 -0
  57. package/dist/cjs/bdx/flow/InboundFlow.d.ts +26 -0
  58. package/dist/cjs/bdx/flow/InboundFlow.d.ts.map +1 -0
  59. package/dist/cjs/bdx/flow/InboundFlow.js +101 -0
  60. package/dist/cjs/bdx/flow/InboundFlow.js.map +6 -0
  61. package/dist/cjs/bdx/flow/OutboundFlow.d.ts +31 -0
  62. package/dist/cjs/bdx/flow/OutboundFlow.d.ts.map +1 -0
  63. package/dist/cjs/bdx/flow/OutboundFlow.js +124 -0
  64. package/dist/cjs/bdx/flow/OutboundFlow.js.map +6 -0
  65. package/dist/cjs/bdx/index.d.ts +16 -0
  66. package/dist/cjs/bdx/index.d.ts.map +1 -0
  67. package/dist/cjs/bdx/index.js +33 -0
  68. package/dist/cjs/bdx/index.js.map +6 -0
  69. package/dist/cjs/bdx/schema/BdxAcceptMessagesSchema.d.ts +50 -0
  70. package/dist/cjs/bdx/schema/BdxAcceptMessagesSchema.d.ts.map +1 -0
  71. package/dist/cjs/bdx/schema/BdxAcceptMessagesSchema.js +125 -0
  72. package/dist/cjs/bdx/schema/BdxAcceptMessagesSchema.js.map +6 -0
  73. package/dist/cjs/bdx/schema/BdxBlockMessagesSchema.d.ts +53 -0
  74. package/dist/cjs/bdx/schema/BdxBlockMessagesSchema.d.ts.map +1 -0
  75. package/dist/cjs/bdx/schema/BdxBlockMessagesSchema.js +92 -0
  76. package/dist/cjs/bdx/schema/BdxBlockMessagesSchema.js.map +6 -0
  77. package/dist/cjs/bdx/schema/BdxInitMessagesSchema.d.ts +117 -0
  78. package/dist/cjs/bdx/schema/BdxInitMessagesSchema.d.ts.map +1 -0
  79. package/dist/cjs/bdx/schema/BdxInitMessagesSchema.js +153 -0
  80. package/dist/cjs/bdx/schema/BdxInitMessagesSchema.js.map +6 -0
  81. package/dist/cjs/bdx/schema/BdxMessage.d.ts +23 -0
  82. package/dist/cjs/bdx/schema/BdxMessage.d.ts.map +1 -0
  83. package/dist/cjs/bdx/schema/BdxMessage.js +75 -0
  84. package/dist/cjs/bdx/schema/BdxMessage.js.map +6 -0
  85. package/dist/cjs/bdx/schema/BdxStatusMessageSchema.d.ts +12 -0
  86. package/dist/cjs/bdx/schema/BdxStatusMessageSchema.d.ts.map +1 -0
  87. package/dist/cjs/bdx/schema/BdxStatusMessageSchema.js +35 -0
  88. package/dist/cjs/bdx/schema/BdxStatusMessageSchema.js.map +6 -0
  89. package/dist/cjs/bdx/schema/index.d.ts +11 -0
  90. package/dist/cjs/bdx/schema/index.d.ts.map +1 -0
  91. package/dist/cjs/bdx/schema/index.js +28 -0
  92. package/dist/cjs/bdx/schema/index.js.map +6 -0
  93. package/dist/cjs/index.d.ts +1 -0
  94. package/dist/cjs/index.d.ts.map +1 -1
  95. package/dist/cjs/index.js +1 -0
  96. package/dist/cjs/index.js.map +1 -1
  97. package/dist/cjs/interaction/InteractionClient.d.ts +4 -4
  98. package/dist/cjs/interaction/InteractionClient.d.ts.map +1 -1
  99. package/dist/cjs/interaction/InteractionClient.js +27 -39
  100. package/dist/cjs/interaction/InteractionClient.js.map +1 -1
  101. package/dist/cjs/mdns/MdnsClient.js +2 -2
  102. package/dist/cjs/mdns/MdnsClient.js.map +1 -1
  103. package/dist/cjs/protocol/ExchangeManager.d.ts.map +1 -1
  104. package/dist/cjs/protocol/ExchangeManager.js +4 -2
  105. package/dist/cjs/protocol/ExchangeManager.js.map +1 -1
  106. package/dist/cjs/protocol/MessageExchange.d.ts +2 -0
  107. package/dist/cjs/protocol/MessageExchange.d.ts.map +1 -1
  108. package/dist/cjs/protocol/MessageExchange.js +14 -8
  109. package/dist/cjs/protocol/MessageExchange.js.map +2 -2
  110. package/dist/cjs/protocol/ProtocolStatusMessage.d.ts +1 -1
  111. package/dist/cjs/protocol/ProtocolStatusMessage.d.ts.map +1 -1
  112. package/dist/cjs/protocol/ProtocolStatusMessage.js.map +1 -1
  113. package/dist/esm/bdx/BdxClient.d.ts +31 -0
  114. package/dist/esm/bdx/BdxClient.d.ts.map +1 -0
  115. package/dist/esm/bdx/BdxClient.js +37 -0
  116. package/dist/esm/bdx/BdxClient.js.map +6 -0
  117. package/dist/esm/bdx/BdxError.d.ts +21 -0
  118. package/dist/esm/bdx/BdxError.d.ts.map +1 -0
  119. package/dist/esm/bdx/BdxError.js +34 -0
  120. package/dist/esm/bdx/BdxError.js.map +6 -0
  121. package/dist/esm/bdx/BdxMessenger.d.ts +77 -0
  122. package/dist/esm/bdx/BdxMessenger.d.ts.map +1 -0
  123. package/dist/esm/bdx/BdxMessenger.js +233 -0
  124. package/dist/esm/bdx/BdxMessenger.js.map +6 -0
  125. package/dist/esm/bdx/BdxProtocol.d.ts +25 -0
  126. package/dist/esm/bdx/BdxProtocol.d.ts.map +1 -0
  127. package/dist/esm/bdx/BdxProtocol.js +82 -0
  128. package/dist/esm/bdx/BdxProtocol.js.map +6 -0
  129. package/dist/esm/bdx/BdxSession.d.ts +36 -0
  130. package/dist/esm/bdx/BdxSession.d.ts.map +1 -0
  131. package/dist/esm/bdx/BdxSession.js +133 -0
  132. package/dist/esm/bdx/BdxSession.js.map +6 -0
  133. package/dist/esm/bdx/BdxSessionConfiguration.d.ts +61 -0
  134. package/dist/esm/bdx/BdxSessionConfiguration.d.ts.map +1 -0
  135. package/dist/esm/bdx/BdxSessionConfiguration.js +75 -0
  136. package/dist/esm/bdx/BdxSessionConfiguration.js.map +6 -0
  137. package/dist/esm/bdx/FileDesignator.d.ts +21 -0
  138. package/dist/esm/bdx/FileDesignator.d.ts.map +1 -0
  139. package/dist/esm/bdx/FileDesignator.js +42 -0
  140. package/dist/esm/bdx/FileDesignator.js.map +6 -0
  141. package/dist/esm/bdx/PersistedFileDesignator.d.ts +16 -0
  142. package/dist/esm/bdx/PersistedFileDesignator.d.ts.map +1 -0
  143. package/dist/esm/bdx/PersistedFileDesignator.js +37 -0
  144. package/dist/esm/bdx/PersistedFileDesignator.js.map +6 -0
  145. package/dist/esm/bdx/bdx-session-initiator.d.ts +14 -0
  146. package/dist/esm/bdx/bdx-session-initiator.d.ts.map +1 -0
  147. package/dist/esm/bdx/bdx-session-initiator.js +198 -0
  148. package/dist/esm/bdx/bdx-session-initiator.js.map +6 -0
  149. package/dist/esm/bdx/flow/DrivenSendingFlow.d.ts +15 -0
  150. package/dist/esm/bdx/flow/DrivenSendingFlow.d.ts.map +1 -0
  151. package/dist/esm/bdx/flow/DrivenSendingFlow.js +29 -0
  152. package/dist/esm/bdx/flow/DrivenSendingFlow.js.map +6 -0
  153. package/dist/esm/bdx/flow/DrivingReceivingFlow.d.ts +15 -0
  154. package/dist/esm/bdx/flow/DrivingReceivingFlow.d.ts.map +1 -0
  155. package/dist/esm/bdx/flow/DrivingReceivingFlow.js +27 -0
  156. package/dist/esm/bdx/flow/DrivingReceivingFlow.js.map +6 -0
  157. package/dist/esm/bdx/flow/Flow.d.ts +48 -0
  158. package/dist/esm/bdx/flow/Flow.d.ts.map +1 -0
  159. package/dist/esm/bdx/flow/Flow.js +92 -0
  160. package/dist/esm/bdx/flow/Flow.js.map +6 -0
  161. package/dist/esm/bdx/flow/FollowingReceivingFlow.d.ts +16 -0
  162. package/dist/esm/bdx/flow/FollowingReceivingFlow.d.ts.map +1 -0
  163. package/dist/esm/bdx/flow/FollowingReceivingFlow.js +40 -0
  164. package/dist/esm/bdx/flow/FollowingReceivingFlow.js.map +6 -0
  165. package/dist/esm/bdx/flow/FollowingSendingFlow.d.ts +15 -0
  166. package/dist/esm/bdx/flow/FollowingSendingFlow.d.ts.map +1 -0
  167. package/dist/esm/bdx/flow/FollowingSendingFlow.js +29 -0
  168. package/dist/esm/bdx/flow/FollowingSendingFlow.js.map +6 -0
  169. package/dist/esm/bdx/flow/InboundFlow.d.ts +26 -0
  170. package/dist/esm/bdx/flow/InboundFlow.d.ts.map +1 -0
  171. package/dist/esm/bdx/flow/InboundFlow.js +81 -0
  172. package/dist/esm/bdx/flow/InboundFlow.js.map +6 -0
  173. package/dist/esm/bdx/flow/OutboundFlow.d.ts +31 -0
  174. package/dist/esm/bdx/flow/OutboundFlow.d.ts.map +1 -0
  175. package/dist/esm/bdx/flow/OutboundFlow.js +104 -0
  176. package/dist/esm/bdx/flow/OutboundFlow.js.map +6 -0
  177. package/dist/esm/bdx/index.d.ts +16 -0
  178. package/dist/esm/bdx/index.d.ts.map +1 -0
  179. package/dist/esm/bdx/index.js +16 -0
  180. package/dist/esm/bdx/index.js.map +6 -0
  181. package/dist/esm/bdx/schema/BdxAcceptMessagesSchema.d.ts +50 -0
  182. package/dist/esm/bdx/schema/BdxAcceptMessagesSchema.d.ts.map +1 -0
  183. package/dist/esm/bdx/schema/BdxAcceptMessagesSchema.js +109 -0
  184. package/dist/esm/bdx/schema/BdxAcceptMessagesSchema.js.map +6 -0
  185. package/dist/esm/bdx/schema/BdxBlockMessagesSchema.d.ts +53 -0
  186. package/dist/esm/bdx/schema/BdxBlockMessagesSchema.d.ts.map +1 -0
  187. package/dist/esm/bdx/schema/BdxBlockMessagesSchema.js +72 -0
  188. package/dist/esm/bdx/schema/BdxBlockMessagesSchema.js.map +6 -0
  189. package/dist/esm/bdx/schema/BdxInitMessagesSchema.d.ts +117 -0
  190. package/dist/esm/bdx/schema/BdxInitMessagesSchema.d.ts.map +1 -0
  191. package/dist/esm/bdx/schema/BdxInitMessagesSchema.js +133 -0
  192. package/dist/esm/bdx/schema/BdxInitMessagesSchema.js.map +6 -0
  193. package/dist/esm/bdx/schema/BdxMessage.d.ts +23 -0
  194. package/dist/esm/bdx/schema/BdxMessage.d.ts.map +1 -0
  195. package/dist/esm/bdx/schema/BdxMessage.js +62 -0
  196. package/dist/esm/bdx/schema/BdxMessage.js.map +6 -0
  197. package/dist/esm/bdx/schema/BdxStatusMessageSchema.d.ts +12 -0
  198. package/dist/esm/bdx/schema/BdxStatusMessageSchema.d.ts.map +1 -0
  199. package/dist/esm/bdx/schema/BdxStatusMessageSchema.js +15 -0
  200. package/dist/esm/bdx/schema/BdxStatusMessageSchema.js.map +6 -0
  201. package/dist/esm/bdx/schema/index.d.ts +11 -0
  202. package/dist/esm/bdx/schema/index.d.ts.map +1 -0
  203. package/dist/esm/bdx/schema/index.js +11 -0
  204. package/dist/esm/bdx/schema/index.js.map +6 -0
  205. package/dist/esm/index.d.ts +1 -0
  206. package/dist/esm/index.d.ts.map +1 -1
  207. package/dist/esm/index.js +1 -0
  208. package/dist/esm/index.js.map +1 -1
  209. package/dist/esm/interaction/InteractionClient.d.ts +4 -4
  210. package/dist/esm/interaction/InteractionClient.d.ts.map +1 -1
  211. package/dist/esm/interaction/InteractionClient.js +27 -39
  212. package/dist/esm/interaction/InteractionClient.js.map +1 -1
  213. package/dist/esm/mdns/MdnsClient.js +2 -2
  214. package/dist/esm/mdns/MdnsClient.js.map +1 -1
  215. package/dist/esm/protocol/ExchangeManager.d.ts.map +1 -1
  216. package/dist/esm/protocol/ExchangeManager.js +4 -2
  217. package/dist/esm/protocol/ExchangeManager.js.map +1 -1
  218. package/dist/esm/protocol/MessageExchange.d.ts +2 -0
  219. package/dist/esm/protocol/MessageExchange.d.ts.map +1 -1
  220. package/dist/esm/protocol/MessageExchange.js +14 -8
  221. package/dist/esm/protocol/MessageExchange.js.map +2 -2
  222. package/dist/esm/protocol/ProtocolStatusMessage.d.ts +1 -1
  223. package/dist/esm/protocol/ProtocolStatusMessage.d.ts.map +1 -1
  224. package/dist/esm/protocol/ProtocolStatusMessage.js.map +1 -1
  225. package/package.json +6 -6
  226. package/src/bdx/BdxClient.ts +47 -0
  227. package/src/bdx/BdxError.ts +39 -0
  228. package/src/bdx/BdxMessenger.ts +291 -0
  229. package/src/bdx/BdxProtocol.ts +93 -0
  230. package/src/bdx/BdxSession.ts +174 -0
  231. package/src/bdx/BdxSessionConfiguration.ts +134 -0
  232. package/src/bdx/FileDesignator.ts +49 -0
  233. package/src/bdx/PersistedFileDesignator.ts +40 -0
  234. package/src/bdx/bdx-session-initiator.ts +246 -0
  235. package/src/bdx/flow/DrivenSendingFlow.ts +40 -0
  236. package/src/bdx/flow/DrivingReceivingFlow.ts +39 -0
  237. package/src/bdx/flow/Flow.ts +124 -0
  238. package/src/bdx/flow/FollowingReceivingFlow.ts +53 -0
  239. package/src/bdx/flow/FollowingSendingFlow.ts +38 -0
  240. package/src/bdx/flow/InboundFlow.ts +104 -0
  241. package/src/bdx/flow/OutboundFlow.ts +124 -0
  242. package/src/bdx/index.ts +16 -0
  243. package/src/bdx/schema/BdxAcceptMessagesSchema.ts +159 -0
  244. package/src/bdx/schema/BdxBlockMessagesSchema.ts +99 -0
  245. package/src/bdx/schema/BdxInitMessagesSchema.ts +213 -0
  246. package/src/bdx/schema/BdxMessage.ts +70 -0
  247. package/src/bdx/schema/BdxStatusMessageSchema.ts +14 -0
  248. package/src/bdx/schema/index.ts +11 -0
  249. package/src/index.ts +1 -0
  250. package/src/interaction/InteractionClient.ts +34 -48
  251. package/src/mdns/MdnsClient.ts +2 -2
  252. package/src/protocol/ExchangeManager.ts +2 -0
  253. package/src/protocol/MessageExchange.ts +17 -6
  254. package/src/protocol/ProtocolStatusMessage.ts +1 -1
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { BdxMessenger } from "../BdxMessenger.js";
7
+ import { PersistedFileDesignator } from "../PersistedFileDesignator.js";
8
+ /** Base class for BDX transfer flows. */
9
+ export declare abstract class Flow {
10
+ #private;
11
+ constructor(messenger: BdxMessenger, transferParameters: Flow.TransferOptions);
12
+ protected get transferParameters(): Flow.TransferOptions;
13
+ protected get isClosed(): boolean;
14
+ protected get messenger(): BdxMessenger;
15
+ protected get bytesLeft(): number | undefined;
16
+ protected set bytesLeft(value: number);
17
+ protected set finalBlockCounter(blockCounter: number);
18
+ protected get finalBlockCounter(): number;
19
+ /** Determines the next message counter to use for the next message, also handles wrapping around at 2^32. */
20
+ protected get nextMessageCounter(): number;
21
+ /** Utility function to check if a block counter is valid */
22
+ protected validateCounter(messageBlockCounter: number, expectedCounter?: number): number;
23
+ close(_error?: unknown): Promise<void>;
24
+ /**
25
+ * Main logic method to execute the flow.
26
+ * The promise resolves when the flow is complete, or rejects on any error or unexpected conditions.
27
+ */
28
+ processTransfer(): Promise<void>;
29
+ protected abstract initTransfer(): Promise<void>;
30
+ protected abstract transferNextChunk(): Promise<boolean>;
31
+ protected abstract finalizeTransfer(): Promise<void>;
32
+ }
33
+ export declare namespace Flow {
34
+ interface TransferOptions {
35
+ transferMode: DriverMode;
36
+ asynchronousTransfer: false;
37
+ dataLength?: number;
38
+ startOffset: number;
39
+ blockSize: number;
40
+ isDriver: boolean;
41
+ fileDesignator: PersistedFileDesignator;
42
+ }
43
+ enum DriverMode {
44
+ SenderDrive = "senderDrive",
45
+ ReceiverDrive = "receiverDrive"
46
+ }
47
+ }
48
+ //# sourceMappingURL=Flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Flow.d.ts","sourceRoot":"","sources":["../../../../src/bdx/flow/Flow.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE,yCAAyC;AACzC,8BAAsB,IAAI;;gBAQV,SAAS,EAAE,YAAY,EAAE,kBAAkB,EAAE,IAAI,CAAC,eAAe;IAM7E,SAAS,KAAK,kBAAkB,IAAI,IAAI,CAAC,eAAe,CAEvD;IAED,SAAS,KAAK,QAAQ,YAErB;IAED,SAAS,KAAK,SAAS,iBAEtB;IAED,SAAS,KAAK,SAAS,IAAI,MAAM,GAAG,SAAS,CAE5C;IAED,SAAS,KAAK,SAAS,CAAC,KAAK,EAAE,MAAM,EAEpC;IAED,SAAS,KAAK,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAKnD;IAED,SAAS,KAAK,iBAAiB,IAPe,MAAM,CAYnD;IAED,6GAA6G;IAC7G,SAAS,KAAK,kBAAkB,WAG/B;IAED,4DAA4D;IAC5D,SAAS,CAAC,eAAe,CAAC,mBAAmB,EAAE,MAAM,EAAE,eAAe,SAA0B;IAU1F,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO;IAI5B;;;OAGG;IACG,eAAe;IAerB,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAEhD,SAAS,CAAC,QAAQ,CAAC,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAExD,SAAS,CAAC,QAAQ,CAAC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;CACvD;AAED,yBAAiB,IAAI,CAAC;IAClB,UAAiB,eAAe;QAC5B,YAAY,EAAE,UAAU,CAAC;QACzB,oBAAoB,EAAE,KAAK,CAAC;QAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,OAAO,CAAC;QAClB,cAAc,EAAE,uBAAuB,CAAC;KAC3C;IAED,KAAY,UAAU;QAClB,WAAW,gBAAgB;QAC3B,aAAa,kBAAkB;KAClC;CACJ"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { InternalError } from "#general";
7
+ import { BdxStatusCode } from "#types";
8
+ import { BdxError } from "../BdxError.js";
9
+ class Flow {
10
+ #transferParameters;
11
+ #messenger;
12
+ #isClosed = false;
13
+ #blockCounter = 0;
14
+ #bytesLeft;
15
+ #finalBlockCounter;
16
+ constructor(messenger, transferParameters) {
17
+ this.#messenger = messenger;
18
+ this.#transferParameters = transferParameters;
19
+ this.#bytesLeft = transferParameters.dataLength;
20
+ }
21
+ get transferParameters() {
22
+ return this.#transferParameters;
23
+ }
24
+ get isClosed() {
25
+ return this.#isClosed;
26
+ }
27
+ get messenger() {
28
+ return this.#messenger;
29
+ }
30
+ get bytesLeft() {
31
+ return this.#bytesLeft;
32
+ }
33
+ set bytesLeft(value) {
34
+ this.#bytesLeft = value;
35
+ }
36
+ set finalBlockCounter(blockCounter) {
37
+ if (this.#finalBlockCounter !== void 0) {
38
+ throw new InternalError("Transfer already finalized. finalizeTransfer() should only be called once.");
39
+ }
40
+ this.#finalBlockCounter = blockCounter;
41
+ }
42
+ get finalBlockCounter() {
43
+ if (this.#finalBlockCounter === void 0) {
44
+ throw new InternalError("Transfer not finalized. Call finalizeTransfer() after completing the transfer.");
45
+ }
46
+ return this.#finalBlockCounter;
47
+ }
48
+ /** Determines the next message counter to use for the next message, also handles wrapping around at 2^32. */
49
+ get nextMessageCounter() {
50
+ this.#blockCounter = (this.#blockCounter + 1) % 4294967296;
51
+ return this.#blockCounter;
52
+ }
53
+ /** Utility function to check if a block counter is valid */
54
+ validateCounter(messageBlockCounter, expectedCounter = this.nextMessageCounter) {
55
+ if (messageBlockCounter !== expectedCounter) {
56
+ throw new BdxError(
57
+ `Received Block with unexpected block counter: ${messageBlockCounter}, expected: ${expectedCounter}`,
58
+ BdxStatusCode.BadBlockCounter
59
+ );
60
+ }
61
+ return messageBlockCounter;
62
+ }
63
+ async close(_error) {
64
+ this.#isClosed = true;
65
+ }
66
+ /**
67
+ * Main logic method to execute the flow.
68
+ * The promise resolves when the flow is complete, or rejects on any error or unexpected conditions.
69
+ */
70
+ async processTransfer() {
71
+ await this.initTransfer();
72
+ while (!this.isClosed) {
73
+ if (await this.transferNextChunk()) {
74
+ break;
75
+ }
76
+ }
77
+ if (!this.isClosed) {
78
+ await this.finalizeTransfer();
79
+ }
80
+ }
81
+ }
82
+ ((Flow2) => {
83
+ let DriverMode;
84
+ ((DriverMode2) => {
85
+ DriverMode2["SenderDrive"] = "senderDrive";
86
+ DriverMode2["ReceiverDrive"] = "receiverDrive";
87
+ })(DriverMode = Flow2.DriverMode || (Flow2.DriverMode = {}));
88
+ })(Flow || (Flow = {}));
89
+ export {
90
+ Flow
91
+ };
92
+ //# sourceMappingURL=Flow.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/bdx/flow/Flow.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB;AAKlB,MAAe,KAAK;AAAA,EACd;AAAA,EACA;AAAA,EACT,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EAEA,YAAY,WAAyB,oBAA0C;AAC3E,SAAK,aAAa;AAClB,SAAK,sBAAsB;AAC3B,SAAK,aAAa,mBAAmB;AAAA,EACzC;AAAA,EAEA,IAAc,qBAA2C;AACrD,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAc,WAAW;AACrB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAc,YAAY;AACtB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAc,YAAgC;AAC1C,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAc,UAAU,OAAe;AACnC,SAAK,aAAa;AAAA,EACtB;AAAA,EAEA,IAAc,kBAAkB,cAAsB;AAClD,QAAI,KAAK,uBAAuB,QAAW;AACvC,YAAM,IAAI,cAAc,4EAA4E;AAAA,IACxG;AACA,SAAK,qBAAqB;AAAA,EAC9B;AAAA,EAEA,IAAc,oBAAoB;AAC9B,QAAI,KAAK,uBAAuB,QAAW;AACvC,YAAM,IAAI,cAAc,gFAAgF;AAAA,IAC5G;AACA,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA,EAGA,IAAc,qBAAqB;AAC/B,SAAK,iBAAiB,KAAK,gBAAgB,KAAK;AAChD,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA,EAGU,gBAAgB,qBAA6B,kBAAkB,KAAK,oBAAoB;AAC9F,QAAI,wBAAwB,iBAAiB;AACzC,YAAM,IAAI;AAAA,QACN,iDAAiD,mBAAmB,eAAe,eAAe;AAAA,QAClG,cAAc;AAAA,MAClB;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,MAAM,QAAkB;AAC1B,SAAK,YAAY;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,kBAAkB;AACpB,UAAM,KAAK,aAAa;AAGxB,WAAO,CAAC,KAAK,UAAU;AACnB,UAAI,MAAM,KAAK,kBAAkB,GAAG;AAChC;AAAA,MACJ;AAAA,IACJ;AAEA,QAAI,CAAC,KAAK,UAAU;AAChB,YAAM,KAAK,iBAAiB;AAAA,IAChC;AAAA,EACJ;AAOJ;AAAA,CAEO,CAAUA,UAAV;AAWI,MAAK;AAAL,IAAKC,gBAAL;AACH,IAAAA,YAAA,iBAAc;AACd,IAAAA,YAAA,mBAAgB;AAAA,KAFR,aAAAD,MAAA,eAAAA,MAAA;AAAA,GAXC;",
5
+ "names": ["Flow", "DriverMode"]
6
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { OutboundFlow } from "./OutboundFlow.js";
7
+ /**
8
+ * BDX Transport flow logic for a "BDX Following Receiver":
9
+ * - Reads BlockQuery(WithSkip) messages and responds with Block or (for last block) BlockEof.
10
+ * Data are skipped over when requested by the peer.
11
+ * - After the last block is send it expects an AckEof
12
+ */
13
+ export declare class FollowingReceivingFlow extends OutboundFlow {
14
+ protected transferNextChunk(): Promise<boolean>;
15
+ }
16
+ //# sourceMappingURL=FollowingReceivingFlow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FollowingReceivingFlow.d.ts","sourceRoot":"","sources":["../../../../src/bdx/flow/FollowingReceivingFlow.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD;;;;;GAKG;AACH,qBAAa,sBAAuB,SAAQ,YAAY;cACpC,iBAAiB;CAgCpC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Logger } from "#general";
7
+ import { BdxMessageType, BdxStatusCode } from "#types";
8
+ import { BdxMessenger } from "../BdxMessenger.js";
9
+ import { BdxMessage } from "../schema/BdxMessage.js";
10
+ import { OutboundFlow } from "./OutboundFlow.js";
11
+ const logger = Logger.get("BdxFollowingReceivingFlow");
12
+ class FollowingReceivingFlow extends OutboundFlow {
13
+ async transferNextChunk() {
14
+ const { iterator, streamReader } = this.stream;
15
+ const blockQuery = await this.messenger.readBlockQuery();
16
+ const bytesToSkip = BdxMessage.is(blockQuery, BdxMessageType.BlockQueryWithSkip) ? BdxMessenger.asSafeNumber(
17
+ blockQuery.message.bytesToSkip,
18
+ "BytesToSkip",
19
+ BdxStatusCode.TransferFailedUnknownError
20
+ ) : 0;
21
+ const { blockCounter } = blockQuery.message;
22
+ this.validateCounter(blockCounter);
23
+ if (bytesToSkip > 0) {
24
+ const skipped = await streamReader.skip(bytesToSkip);
25
+ logger.debug(`Skipped ${skipped}bytes of data (requested ${bytesToSkip}bytes)`);
26
+ }
27
+ const { data, done } = await this.readDataChunk(iterator);
28
+ if (done) {
29
+ await this.messenger.sendBlockEof({ data, blockCounter });
30
+ this.finalBlockCounter = blockCounter;
31
+ return true;
32
+ }
33
+ await this.messenger.sendBlock({ data, blockCounter });
34
+ return false;
35
+ }
36
+ }
37
+ export {
38
+ FollowingReceivingFlow
39
+ };
40
+ //# sourceMappingURL=FollowingReceivingFlow.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/bdx/flow/FollowingReceivingFlow.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,cAAc;AACvB,SAAS,gBAAgB,qBAAqB;AAC9C,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB;AAC3B,SAAS,oBAAoB;AAE7B,MAAM,SAAS,OAAO,IAAI,2BAA2B;AAO9C,MAAM,+BAA+B,aAAa;AAAA,EACrD,MAAgB,oBAAoB;AAChC,UAAM,EAAE,UAAU,aAAa,IAAI,KAAK;AAGxC,UAAM,aAAa,MAAM,KAAK,UAAU,eAAe;AACvD,UAAM,cAAc,WAAW,GAAG,YAAY,eAAe,kBAAkB,IACzE,aAAa;AAAA,MACT,WAAW,QAAQ;AAAA,MACnB;AAAA,MACA,cAAc;AAAA,IAClB,IACA;AAEN,UAAM,EAAE,aAAa,IAAI,WAAW;AACpC,SAAK,gBAAgB,YAAY;AAEjC,QAAI,cAAc,GAAG;AACjB,YAAM,UAAU,MAAM,aAAa,KAAK,WAAW;AACnD,aAAO,MAAM,WAAW,OAAO,4BAA4B,WAAW,QAAQ;AAAA,IAClF;AACA,UAAM,EAAE,MAAM,KAAK,IAAI,MAAM,KAAK,cAAc,QAAQ;AAExD,QAAI,MAAM;AACN,YAAM,KAAK,UAAU,aAAa,EAAE,MAAM,aAAa,CAAC;AACxD,WAAK,oBAAoB;AACzB,aAAO;AAAA,IACX;AAEA,UAAM,KAAK,UAAU,UAAU,EAAE,MAAM,aAAa,CAAC;AAErD,WAAO;AAAA,EACX;AACJ;",
5
+ "names": []
6
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { InboundFlow } from "./InboundFlow.js";
7
+ /**
8
+ * BDX Transport flow logic for a "BDX Following Sender":
9
+ * - Reads the Block and sends an Ack (if synchronous transfer is used)
10
+ * - Last message is confirmed with an AckEof
11
+ */
12
+ export declare class FollowingSendingFlow extends InboundFlow {
13
+ protected transferNextChunk(): Promise<boolean>;
14
+ }
15
+ //# sourceMappingURL=FollowingSendingFlow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FollowingSendingFlow.d.ts","sourceRoot":"","sources":["../../../../src/bdx/flow/FollowingSendingFlow.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,WAAW;cACjC,iBAAiB;CAuBpC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { InboundFlow } from "./InboundFlow.js";
7
+ class FollowingSendingFlow extends InboundFlow {
8
+ async transferNextChunk() {
9
+ const { asynchronousTransfer } = this.transferParameters;
10
+ const { writeController } = this.stream;
11
+ const {
12
+ kind: messageType,
13
+ message: { data, blockCounter }
14
+ } = await this.messenger.readBlock();
15
+ this.validateCounter(blockCounter);
16
+ if (this.writeDataChunk(writeController, data, messageType)) {
17
+ this.finalBlockCounter = blockCounter;
18
+ return true;
19
+ }
20
+ if (!asynchronousTransfer) {
21
+ await this.messenger.sendBlockAck({ blockCounter });
22
+ }
23
+ return false;
24
+ }
25
+ }
26
+ export {
27
+ FollowingSendingFlow
28
+ };
29
+ //# sourceMappingURL=FollowingSendingFlow.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/bdx/flow/FollowingSendingFlow.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,mBAAmB;AAOrB,MAAM,6BAA6B,YAAY;AAAA,EAClD,MAAgB,oBAAoB;AAChC,UAAM,EAAE,qBAAqB,IAAI,KAAK;AACtC,UAAM,EAAE,gBAAgB,IAAI,KAAK;AAEjC,UAAM;AAAA,MACF,MAAM;AAAA,MACN,SAAS,EAAE,MAAM,aAAa;AAAA,IAClC,IAAI,MAAM,KAAK,UAAU,UAAU;AACnC,SAAK,gBAAgB,YAAY;AAGjC,QAAI,KAAK,eAAe,iBAAiB,MAAM,WAAW,GAAG;AACzD,WAAK,oBAAoB;AACzB,aAAO;AAAA,IACX;AAEA,QAAI,CAAC,sBAAsB;AAEvB,YAAM,KAAK,UAAU,aAAa,EAAE,aAAa,CAAC;AAAA,IACtD;AAEA,WAAO;AAAA,EACX;AACJ;",
5
+ "names": []
6
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Bytes } from "#general";
7
+ import { BdxMessageType } from "#types";
8
+ import { Flow } from "./Flow.js";
9
+ /**
10
+ * Base class for inbound BDX transfer flows where data is received from the peer and written to our node.
11
+ */
12
+ export declare abstract class InboundFlow extends Flow {
13
+ #private;
14
+ /**
15
+ * Returns initialized streams for the transfer and initializes the #closeStream class function
16
+ */
17
+ protected initTransfer(): Promise<void>;
18
+ protected get stream(): {
19
+ writeController: ReadableStreamDefaultController<AllowSharedBufferSource>;
20
+ writePromise: PromiseLike<void>;
21
+ };
22
+ protected finalizeTransfer(): Promise<void>;
23
+ protected writeDataChunk(writeController: ReadableStreamDefaultController<Bytes>, data: Bytes, messageType: BdxMessageType): boolean;
24
+ close(error?: unknown): Promise<void>;
25
+ }
26
+ //# sourceMappingURL=InboundFlow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InboundFlow.d.ts","sourceRoot":"","sources":["../../../../src/bdx/flow/InboundFlow.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAA+B,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAiB,MAAM,QAAQ,CAAC;AAEvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;GAEG;AACH,8BAAsB,WAAY,SAAQ,IAAI;;IAK1C;;OAEG;cACa,YAAY;IAkC5B,SAAS,KAAK,MAAM;;;MAKnB;cAEe,gBAAgB;IAOhC,SAAS,CAAC,cAAc,CACpB,eAAe,EAAE,+BAA+B,CAAC,KAAK,CAAC,EACvD,IAAI,EAAE,KAAK,EACX,WAAW,EAAE,cAAc;IA0BhB,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO;CAIvC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { InternalError } from "#general";
7
+ import { BdxMessageType, BdxStatusCode } from "#types";
8
+ import { BdxError } from "../BdxError.js";
9
+ import { Flow } from "./Flow.js";
10
+ class InboundFlow extends Flow {
11
+ #closeStreams;
12
+ #writeController;
13
+ #writePromise;
14
+ /**
15
+ * Returns initialized streams for the transfer and initializes the #closeStream class function
16
+ */
17
+ async initTransfer() {
18
+ let writeController;
19
+ const stream = new ReadableStream({
20
+ start: (controller) => {
21
+ writeController = controller;
22
+ }
23
+ });
24
+ const { fileDesignator } = this.transferParameters;
25
+ const writePromise = fileDesignator.writeFromStream(stream);
26
+ this.#closeStreams = async (error) => {
27
+ if (writeController !== void 0) {
28
+ if (error != void 0) {
29
+ writeController.error(error);
30
+ try {
31
+ await writePromise;
32
+ } catch {
33
+ }
34
+ }
35
+ }
36
+ if (!stream.locked) {
37
+ await stream.cancel();
38
+ }
39
+ };
40
+ this.#writeController = writeController;
41
+ this.#writePromise = writePromise;
42
+ }
43
+ get stream() {
44
+ if (!this.#writeController || !this.#writePromise) {
45
+ throw new InternalError("Transfer not initialized. Call initTransfer() before starting the transfer.");
46
+ }
47
+ return { writeController: this.#writeController, writePromise: this.#writePromise };
48
+ }
49
+ async finalizeTransfer() {
50
+ const { writePromise } = this.stream;
51
+ const blockCounter = this.finalBlockCounter;
52
+ await writePromise;
53
+ await this.messenger.sendBlockAckEof({ blockCounter });
54
+ }
55
+ writeDataChunk(writeController, data, messageType) {
56
+ writeController.enqueue(data);
57
+ if (this.bytesLeft !== void 0) {
58
+ this.bytesLeft -= data.byteLength;
59
+ }
60
+ let done = false;
61
+ if (messageType === BdxMessageType.BlockEof) {
62
+ if (this.bytesLeft !== void 0 && this.bytesLeft !== 0) {
63
+ throw new BdxError(
64
+ `Received BlockEof with ${this.bytesLeft}bytes left, but no more data available`,
65
+ this.bytesLeft > 0 ? BdxStatusCode.LengthTooShort : BdxStatusCode.LengthTooLarge
66
+ );
67
+ }
68
+ done = true;
69
+ writeController.close();
70
+ }
71
+ return done;
72
+ }
73
+ async close(error) {
74
+ await super.close(error);
75
+ await this.#closeStreams?.(error);
76
+ }
77
+ }
78
+ export {
79
+ InboundFlow
80
+ };
81
+ //# sourceMappingURL=InboundFlow.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/bdx/flow/InboundFlow.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAgB,qBAAmC;AACnD,SAAS,gBAAgB,qBAAqB;AAC9C,SAAS,gBAAgB;AACzB,SAAS,YAAY;AAKd,MAAe,oBAAoB,KAAK;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,eAAe;AAE3B,QAAI;AACJ,UAAM,SAAS,IAAI,eAAsB;AAAA,MACrC,OAAO,gBAAc;AACjB,0BAAkB;AAAA,MACtB;AAAA,IACJ,CAAC;AACD,UAAM,EAAE,eAAe,IAAI,KAAK;AAChC,UAAM,eAAe,eAAe,gBAAgB,MAAM;AAG1D,SAAK,gBAAgB,OAAO,UAAoB;AAC5C,UAAI,oBAAoB,QAAW;AAC/B,YAAI,SAAS,QAAW;AAEpB,0BAAgB,MAAM,KAAK;AAC3B,cAAI;AACA,kBAAM;AAAA,UACV,QAAQ;AAAA,UAER;AAAA,QACJ;AAAA,MACJ;AAEA,UAAI,CAAC,OAAO,QAAQ;AAChB,cAAM,OAAO,OAAO;AAAA,MACxB;AAAA,IACJ;AAEA,SAAK,mBAAmB;AACxB,SAAK,gBAAgB;AAAA,EACzB;AAAA,EAEA,IAAc,SAAS;AACnB,QAAI,CAAC,KAAK,oBAAoB,CAAC,KAAK,eAAe;AAC/C,YAAM,IAAI,cAAc,6EAA6E;AAAA,IACzG;AACA,WAAO,EAAE,iBAAiB,KAAK,kBAAkB,cAAc,KAAK,cAAc;AAAA,EACtF;AAAA,EAEA,MAAgB,mBAAmB;AAC/B,UAAM,EAAE,aAAa,IAAI,KAAK;AAC9B,UAAM,eAAe,KAAK;AAC1B,UAAM;AACN,UAAM,KAAK,UAAU,gBAAgB,EAAE,aAAa,CAAC;AAAA,EACzD;AAAA,EAEU,eACN,iBACA,MACA,aACF;AAEE,oBAAgB,QAAQ,IAAI;AAC5B,QAAI,KAAK,cAAc,QAAW;AAC9B,WAAK,aAAa,KAAK;AAAA,IAC3B;AAEA,QAAI,OAAO;AAGX,QAAI,gBAAgB,eAAe,UAAU;AACzC,UAAI,KAAK,cAAc,UAAa,KAAK,cAAc,GAAG;AACtD,cAAM,IAAI;AAAA,UACN,0BAA0B,KAAK,SAAS;AAAA,UACxC,KAAK,YAAY,IAAI,cAAc,iBAAiB,cAAc;AAAA,QACtE;AAAA,MACJ;AAEA,aAAO;AACP,sBAAgB,MAAM;AAAA,IAC1B;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,MAAe,MAAM,OAAiB;AAClC,UAAM,MAAM,MAAM,KAAK;AACvB,UAAM,KAAK,gBAAgB,KAAK;AAAA,EACpC;AACJ;",
5
+ "names": []
6
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { BytesStreamReader } from "#general";
7
+ import { Flow } from "./Flow.js";
8
+ /**
9
+ * Base class for outbound BDX transfer flows where data is read from our node and sent to the peer.
10
+ */
11
+ export declare abstract class OutboundFlow extends Flow {
12
+ #private;
13
+ protected get stream(): {
14
+ iterator: AsyncGenerator<Uint8Array<ArrayBufferLike>, void, unknown>;
15
+ streamReader: BytesStreamReader;
16
+ };
17
+ /**
18
+ * Returns initialized streams for the transfer and initializes the #closeStream class function
19
+ */
20
+ protected initTransfer(): Promise<void>;
21
+ /**
22
+ * Reads one data chunk from the reader and does some basic checks.
23
+ */
24
+ protected readDataChunk(reader: AsyncGenerator<Uint8Array<ArrayBufferLike>, void, unknown>): Promise<{
25
+ data: Uint8Array<ArrayBufferLike>;
26
+ done: boolean;
27
+ }>;
28
+ protected finalizeTransfer(): Promise<void>;
29
+ close(error?: unknown): Promise<void>;
30
+ }
31
+ //# sourceMappingURL=OutboundFlow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OutboundFlow.d.ts","sourceRoot":"","sources":["../../../../src/bdx/flow/OutboundFlow.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAiB,MAAM,UAAU,CAAC;AAG5D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;GAEG;AACH,8BAAsB,YAAa,SAAQ,IAAI;;IAK3C,SAAS,KAAK,MAAM;;;MAKnB;IAED;;OAEG;cACa,YAAY;IAoC5B;;OAEG;cACa,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC;;;;cA6ChF,gBAAgB;IAMjB,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO;CAIvC"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { BytesStreamReader, InternalError } from "#general";
7
+ import { BdxStatusCode } from "#types";
8
+ import { BdxError } from "../BdxError.js";
9
+ import { Flow } from "./Flow.js";
10
+ class OutboundFlow extends Flow {
11
+ #closeStreams;
12
+ #iterator;
13
+ #streamReader;
14
+ get stream() {
15
+ if (this.#iterator === void 0 || this.#streamReader === void 0) {
16
+ throw new InternalError("Read stream not initialized");
17
+ }
18
+ return { iterator: this.#iterator, streamReader: this.#streamReader };
19
+ }
20
+ /**
21
+ * Returns initialized streams for the transfer and initializes the #closeStream class function
22
+ */
23
+ async initTransfer() {
24
+ const { blockSize } = this.transferParameters;
25
+ const blob = await this.transferParameters.fileDesignator.openBlob();
26
+ const blobSize = blob.size;
27
+ const { startOffset = 0, dataLength = blobSize } = this.transferParameters;
28
+ const dataBlob = startOffset > 0 || dataLength !== blobSize ? blob.slice(startOffset, startOffset + dataLength) : blob;
29
+ const stream = dataBlob.stream();
30
+ const reader = stream.getReader();
31
+ this.#closeStreams = async (_error) => {
32
+ if (stream.locked) {
33
+ reader?.releaseLock();
34
+ try {
35
+ await reader?.cancel();
36
+ } catch (error) {
37
+ if (!(error instanceof TypeError)) {
38
+ throw error;
39
+ }
40
+ }
41
+ }
42
+ await stream.cancel();
43
+ };
44
+ const streamReader = new BytesStreamReader(reader);
45
+ this.#iterator = streamReader.read(blockSize);
46
+ this.#streamReader = streamReader;
47
+ }
48
+ /**
49
+ * Reads one data chunk from the reader and does some basic checks.
50
+ */
51
+ async readDataChunk(reader) {
52
+ const { blockSize, dataLength } = this.transferParameters;
53
+ let { value, done = false } = await reader.next();
54
+ if (value === void 0) {
55
+ if (!done) {
56
+ throw new BdxError(
57
+ `Data length too short, expected ${blockSize}bytes, but got less`,
58
+ BdxStatusCode.LengthTooShort
59
+ );
60
+ }
61
+ value = new Uint8Array();
62
+ } else if (value.byteLength < blockSize) {
63
+ ({ done = false } = await reader.next());
64
+ if (!done) {
65
+ throw new BdxError(
66
+ `Data length too short, expected ${blockSize}bytes, but got less`,
67
+ BdxStatusCode.LengthTooShort
68
+ );
69
+ }
70
+ }
71
+ if (this.bytesLeft !== void 0 && dataLength !== void 0) {
72
+ this.bytesLeft -= value.byteLength;
73
+ if (this.bytesLeft < 0) {
74
+ throw new BdxError(
75
+ `Data length exceeded, expected ${dataLength}bytes, but got ${-this.bytesLeft}bytes more`,
76
+ BdxStatusCode.LengthTooLarge
77
+ );
78
+ }
79
+ if (done && this.bytesLeft > 0) {
80
+ throw new BdxError(
81
+ `Data length too short, expected ${dataLength}bytes, but got ${this.bytesLeft}bytes less`,
82
+ BdxStatusCode.LengthTooShort
83
+ );
84
+ }
85
+ if (this.bytesLeft === 0) {
86
+ done = true;
87
+ }
88
+ }
89
+ return { data: value, done };
90
+ }
91
+ async finalizeTransfer() {
92
+ const blockCounter = this.finalBlockCounter;
93
+ const { blockCounter: ackedBlockCounter } = await this.messenger.readBlockAckEof();
94
+ this.validateCounter(ackedBlockCounter, blockCounter);
95
+ }
96
+ async close(error) {
97
+ await super.close(error);
98
+ await this.#closeStreams?.(error);
99
+ }
100
+ }
101
+ export {
102
+ OutboundFlow
103
+ };
104
+ //# sourceMappingURL=OutboundFlow.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/bdx/flow/OutboundFlow.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,mBAAmB,qBAAqB;AACjD,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB;AACzB,SAAS,YAAY;AAKd,MAAe,qBAAqB,KAAK;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EAEA,IAAc,SAAS;AACnB,QAAI,KAAK,cAAc,UAAa,KAAK,kBAAkB,QAAW;AAClE,YAAM,IAAI,cAAc,6BAA6B;AAAA,IACzD;AACA,WAAO,EAAE,UAAU,KAAK,WAAW,cAAc,KAAK,cAAc;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,eAAe;AAC3B,UAAM,EAAE,UAAU,IAAI,KAAK;AAE3B,UAAM,OAAO,MAAM,KAAK,mBAAmB,eAAe,SAAS;AACnE,UAAM,WAAW,KAAK;AAGtB,UAAM,EAAE,cAAc,GAAG,aAAa,SAAS,IAAI,KAAK;AAExD,UAAM,WACF,cAAc,KAAK,eAAe,WAAW,KAAK,MAAM,aAAa,cAAc,UAAU,IAAI;AAErG,UAAM,SAAS,SAAS,OAAO;AAE/B,UAAM,SAAS,OAAO,UAAU;AAEhC,SAAK,gBAAgB,OAAO,WAAqB;AAC7C,UAAI,OAAO,QAAQ;AACf,gBAAQ,YAAY;AACpB,YAAI;AACA,gBAAM,QAAQ,OAAO;AAAA,QACzB,SAAS,OAAO;AAEZ,cAAI,EAAE,iBAAiB,YAAY;AAC/B,kBAAM;AAAA,UACV;AAAA,QACJ;AAAA,MACJ;AACA,YAAM,OAAO,OAAO;AAAA,IACxB;AAEA,UAAM,eAAe,IAAI,kBAAkB,MAAM;AACjD,SAAK,YAAY,aAAa,KAAK,SAAS;AAC5C,SAAK,gBAAgB;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,cAAc,QAAoE;AAC9F,UAAM,EAAE,WAAW,WAAW,IAAI,KAAK;AACvC,QAAI,EAAE,OAAO,OAAO,MAAM,IAAI,MAAM,OAAO,KAAK;AAChD,QAAI,UAAU,QAAW;AAErB,UAAI,CAAC,MAAM;AACP,cAAM,IAAI;AAAA,UACN,mCAAmC,SAAS;AAAA,UAC5C,cAAc;AAAA,QAClB;AAAA,MACJ;AACA,cAAQ,IAAI,WAAW;AAAA,IAC3B,WAAW,MAAM,aAAa,WAAW;AAErC,OAAC,EAAE,OAAO,MAAM,IAAI,MAAM,OAAO,KAAK;AACtC,UAAI,CAAC,MAAM;AACP,cAAM,IAAI;AAAA,UACN,mCAAmC,SAAS;AAAA,UAC5C,cAAc;AAAA,QAClB;AAAA,MACJ;AAAA,IACJ;AAEA,QAAI,KAAK,cAAc,UAAa,eAAe,QAAW;AAC1D,WAAK,aAAa,MAAM;AACxB,UAAI,KAAK,YAAY,GAAG;AACpB,cAAM,IAAI;AAAA,UACN,kCAAkC,UAAU,kBAAkB,CAAC,KAAK,SAAS;AAAA,UAC7E,cAAc;AAAA,QAClB;AAAA,MACJ;AACA,UAAI,QAAQ,KAAK,YAAY,GAAG;AAC5B,cAAM,IAAI;AAAA,UACN,mCAAmC,UAAU,kBAAkB,KAAK,SAAS;AAAA,UAC7E,cAAc;AAAA,QAClB;AAAA,MACJ;AACA,UAAI,KAAK,cAAc,GAAG;AACtB,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,WAAO,EAAE,MAAM,OAAO,KAAK;AAAA,EAC/B;AAAA,EAEA,MAAgB,mBAAmB;AAC/B,UAAM,eAAe,KAAK;AAC1B,UAAM,EAAE,cAAc,kBAAkB,IAAI,MAAM,KAAK,UAAU,gBAAgB;AACjF,SAAK,gBAAgB,mBAAmB,YAAY;AAAA,EACxD;AAAA,EAEA,MAAe,MAAM,OAAiB;AAClC,UAAM,MAAM,MAAM,KAAK;AACvB,UAAM,KAAK,gBAAgB,KAAK;AAAA,EACpC;AACJ;",
5
+ "names": []
6
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export * from "./BdxClient.js";
7
+ export * from "./BdxError.js";
8
+ export * from "./BdxMessenger.js";
9
+ export * from "./BdxProtocol.js";
10
+ export * from "./BdxSession.js";
11
+ export * from "./BdxSessionConfiguration.js";
12
+ export * from "./FileDesignator.js";
13
+ export * from "./flow/Flow.js";
14
+ export * from "./PersistedFileDesignator.js";
15
+ export * from "./schema/index.js";
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bdx/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export * from "./BdxClient.js";
7
+ export * from "./BdxError.js";
8
+ export * from "./BdxMessenger.js";
9
+ export * from "./BdxProtocol.js";
10
+ export * from "./BdxSession.js";
11
+ export * from "./BdxSessionConfiguration.js";
12
+ export * from "./FileDesignator.js";
13
+ export * from "./flow/Flow.js";
14
+ export * from "./PersistedFileDesignator.js";
15
+ export * from "./schema/index.js";
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bdx/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;",
5
+ "names": []
6
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Bytes } from "#general";
7
+ import { Schema, TypeFromPartialBitSchema } from "#types";
8
+ import { BdxTransferControlBitmap } from "./BdxInitMessagesSchema.js";
9
+ /** @see {@link MatterSpecification.v141.Core}, section 11.22.5.2 */
10
+ export interface BdxSendAccept {
11
+ /**
12
+ * Transfer control details
13
+ * TC
14
+ * 1 octet
15
+ */
16
+ transferControl: TypeFromPartialBitSchema<typeof BdxTransferControlBitmap>;
17
+ /**
18
+ * Specifies the maximum data size (in bytes) of the block that the Initiator supports, exclusive of block header
19
+ * fields, such as a block counter.
20
+ * MBS, 2 octets
21
+ */
22
+ maxBlockSize: number;
23
+ /**
24
+ * Allows the Initiator to send additional application-specific information about the file to be transferred
25
+ * MD, Variable length, TLV
26
+ */
27
+ metaData?: Bytes;
28
+ }
29
+ /** @see {@link MatterSpecification.v141.Core}, section 11.22.5.3 */
30
+ export interface BdxReceiveAccept extends BdxSendAccept {
31
+ /**
32
+ * Specifies a predetermined definite length for the transfer
33
+ * DEFLEN, 4/8 octets
34
+ */
35
+ length?: number | bigint;
36
+ }
37
+ /** Schema for BDX SendAccept message */
38
+ export declare class BdxSendAcceptMessageSchema<M extends BdxSendAccept> extends Schema<M> {
39
+ encodeInternal(message: M): Uint8Array<ArrayBufferLike>;
40
+ decodeInternal(bytes: Bytes): M;
41
+ validate({ transferControl, maxBlockSize }: M): void;
42
+ }
43
+ export declare const BdxSendAcceptMessage: BdxSendAcceptMessageSchema<BdxSendAccept>;
44
+ /** Schema for Bdx ReceiveAccept message */
45
+ export declare class BdxReceiveAcceptMessageSchema extends BdxSendAcceptMessageSchema<BdxReceiveAccept> {
46
+ encodeInternal(message: BdxReceiveAccept): Uint8Array<ArrayBufferLike>;
47
+ decodeInternal(bytes: Bytes): BdxReceiveAccept;
48
+ }
49
+ export declare const BdxReceiveAcceptMessage: BdxReceiveAcceptMessageSchema;
50
+ //# sourceMappingURL=BdxAcceptMessagesSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BdxAcceptMessagesSchema.d.ts","sourceRoot":"","sources":["../../../../src/bdx/schema/BdxAcceptMessagesSchema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAkC,MAAM,UAAU,CAAC;AACjE,OAAO,EAAiB,MAAM,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AAEzE,OAAO,EAGH,wBAAwB,EAE3B,MAAM,4BAA4B,CAAC;AAEpC,oEAAoE;AACpE,MAAM,WAAW,aAAa;IAC1B;;;;OAIG;IACH,eAAe,EAAE,wBAAwB,CAAC,OAAO,wBAAwB,CAAC,CAAC;IAE3E;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC;CACpB;AAED,oEAAoE;AACpE,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACnD;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B;AAED,wCAAwC;AACxC,qBAAa,0BAA0B,CAAC,CAAC,SAAS,aAAa,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IAC9E,cAAc,CAAC,OAAO,EAAE,CAAC;IAezB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC;IAgBtB,QAAQ,CAAC,EAAE,eAAe,EAAE,YAAY,EAAE,EAAE,CAAC;CAiBzD;AACD,eAAO,MAAM,oBAAoB,2CAAmC,CAAC;AAErE,2CAA2C;AAC3C,qBAAa,6BAA8B,SAAQ,0BAA0B,CAAC,gBAAgB,CAAC;IAClF,cAAc,CAAC,OAAO,EAAE,gBAAgB;IA6BxC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,gBAAgB;CAyB1D;AACD,eAAO,MAAM,uBAAuB,+BAAsC,CAAC"}