@matter/protocol 0.16.0-alpha.0-20250913-0bc2515df → 0.16.0-alpha.0-20250920-809524dba

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 (245) 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/mdns/MdnsClient.js +2 -2
  98. package/dist/cjs/mdns/MdnsClient.js.map +1 -1
  99. package/dist/cjs/protocol/ExchangeManager.d.ts.map +1 -1
  100. package/dist/cjs/protocol/ExchangeManager.js +4 -2
  101. package/dist/cjs/protocol/ExchangeManager.js.map +1 -1
  102. package/dist/cjs/protocol/MessageExchange.d.ts +2 -0
  103. package/dist/cjs/protocol/MessageExchange.d.ts.map +1 -1
  104. package/dist/cjs/protocol/MessageExchange.js +14 -8
  105. package/dist/cjs/protocol/MessageExchange.js.map +2 -2
  106. package/dist/cjs/protocol/ProtocolStatusMessage.d.ts +1 -1
  107. package/dist/cjs/protocol/ProtocolStatusMessage.d.ts.map +1 -1
  108. package/dist/cjs/protocol/ProtocolStatusMessage.js.map +1 -1
  109. package/dist/esm/bdx/BdxClient.d.ts +31 -0
  110. package/dist/esm/bdx/BdxClient.d.ts.map +1 -0
  111. package/dist/esm/bdx/BdxClient.js +37 -0
  112. package/dist/esm/bdx/BdxClient.js.map +6 -0
  113. package/dist/esm/bdx/BdxError.d.ts +21 -0
  114. package/dist/esm/bdx/BdxError.d.ts.map +1 -0
  115. package/dist/esm/bdx/BdxError.js +34 -0
  116. package/dist/esm/bdx/BdxError.js.map +6 -0
  117. package/dist/esm/bdx/BdxMessenger.d.ts +77 -0
  118. package/dist/esm/bdx/BdxMessenger.d.ts.map +1 -0
  119. package/dist/esm/bdx/BdxMessenger.js +233 -0
  120. package/dist/esm/bdx/BdxMessenger.js.map +6 -0
  121. package/dist/esm/bdx/BdxProtocol.d.ts +25 -0
  122. package/dist/esm/bdx/BdxProtocol.d.ts.map +1 -0
  123. package/dist/esm/bdx/BdxProtocol.js +82 -0
  124. package/dist/esm/bdx/BdxProtocol.js.map +6 -0
  125. package/dist/esm/bdx/BdxSession.d.ts +36 -0
  126. package/dist/esm/bdx/BdxSession.d.ts.map +1 -0
  127. package/dist/esm/bdx/BdxSession.js +133 -0
  128. package/dist/esm/bdx/BdxSession.js.map +6 -0
  129. package/dist/esm/bdx/BdxSessionConfiguration.d.ts +61 -0
  130. package/dist/esm/bdx/BdxSessionConfiguration.d.ts.map +1 -0
  131. package/dist/esm/bdx/BdxSessionConfiguration.js +75 -0
  132. package/dist/esm/bdx/BdxSessionConfiguration.js.map +6 -0
  133. package/dist/esm/bdx/FileDesignator.d.ts +21 -0
  134. package/dist/esm/bdx/FileDesignator.d.ts.map +1 -0
  135. package/dist/esm/bdx/FileDesignator.js +42 -0
  136. package/dist/esm/bdx/FileDesignator.js.map +6 -0
  137. package/dist/esm/bdx/PersistedFileDesignator.d.ts +16 -0
  138. package/dist/esm/bdx/PersistedFileDesignator.d.ts.map +1 -0
  139. package/dist/esm/bdx/PersistedFileDesignator.js +37 -0
  140. package/dist/esm/bdx/PersistedFileDesignator.js.map +6 -0
  141. package/dist/esm/bdx/bdx-session-initiator.d.ts +14 -0
  142. package/dist/esm/bdx/bdx-session-initiator.d.ts.map +1 -0
  143. package/dist/esm/bdx/bdx-session-initiator.js +198 -0
  144. package/dist/esm/bdx/bdx-session-initiator.js.map +6 -0
  145. package/dist/esm/bdx/flow/DrivenSendingFlow.d.ts +15 -0
  146. package/dist/esm/bdx/flow/DrivenSendingFlow.d.ts.map +1 -0
  147. package/dist/esm/bdx/flow/DrivenSendingFlow.js +29 -0
  148. package/dist/esm/bdx/flow/DrivenSendingFlow.js.map +6 -0
  149. package/dist/esm/bdx/flow/DrivingReceivingFlow.d.ts +15 -0
  150. package/dist/esm/bdx/flow/DrivingReceivingFlow.d.ts.map +1 -0
  151. package/dist/esm/bdx/flow/DrivingReceivingFlow.js +27 -0
  152. package/dist/esm/bdx/flow/DrivingReceivingFlow.js.map +6 -0
  153. package/dist/esm/bdx/flow/Flow.d.ts +48 -0
  154. package/dist/esm/bdx/flow/Flow.d.ts.map +1 -0
  155. package/dist/esm/bdx/flow/Flow.js +92 -0
  156. package/dist/esm/bdx/flow/Flow.js.map +6 -0
  157. package/dist/esm/bdx/flow/FollowingReceivingFlow.d.ts +16 -0
  158. package/dist/esm/bdx/flow/FollowingReceivingFlow.d.ts.map +1 -0
  159. package/dist/esm/bdx/flow/FollowingReceivingFlow.js +40 -0
  160. package/dist/esm/bdx/flow/FollowingReceivingFlow.js.map +6 -0
  161. package/dist/esm/bdx/flow/FollowingSendingFlow.d.ts +15 -0
  162. package/dist/esm/bdx/flow/FollowingSendingFlow.d.ts.map +1 -0
  163. package/dist/esm/bdx/flow/FollowingSendingFlow.js +29 -0
  164. package/dist/esm/bdx/flow/FollowingSendingFlow.js.map +6 -0
  165. package/dist/esm/bdx/flow/InboundFlow.d.ts +26 -0
  166. package/dist/esm/bdx/flow/InboundFlow.d.ts.map +1 -0
  167. package/dist/esm/bdx/flow/InboundFlow.js +81 -0
  168. package/dist/esm/bdx/flow/InboundFlow.js.map +6 -0
  169. package/dist/esm/bdx/flow/OutboundFlow.d.ts +31 -0
  170. package/dist/esm/bdx/flow/OutboundFlow.d.ts.map +1 -0
  171. package/dist/esm/bdx/flow/OutboundFlow.js +104 -0
  172. package/dist/esm/bdx/flow/OutboundFlow.js.map +6 -0
  173. package/dist/esm/bdx/index.d.ts +16 -0
  174. package/dist/esm/bdx/index.d.ts.map +1 -0
  175. package/dist/esm/bdx/index.js +16 -0
  176. package/dist/esm/bdx/index.js.map +6 -0
  177. package/dist/esm/bdx/schema/BdxAcceptMessagesSchema.d.ts +50 -0
  178. package/dist/esm/bdx/schema/BdxAcceptMessagesSchema.d.ts.map +1 -0
  179. package/dist/esm/bdx/schema/BdxAcceptMessagesSchema.js +109 -0
  180. package/dist/esm/bdx/schema/BdxAcceptMessagesSchema.js.map +6 -0
  181. package/dist/esm/bdx/schema/BdxBlockMessagesSchema.d.ts +53 -0
  182. package/dist/esm/bdx/schema/BdxBlockMessagesSchema.d.ts.map +1 -0
  183. package/dist/esm/bdx/schema/BdxBlockMessagesSchema.js +72 -0
  184. package/dist/esm/bdx/schema/BdxBlockMessagesSchema.js.map +6 -0
  185. package/dist/esm/bdx/schema/BdxInitMessagesSchema.d.ts +117 -0
  186. package/dist/esm/bdx/schema/BdxInitMessagesSchema.d.ts.map +1 -0
  187. package/dist/esm/bdx/schema/BdxInitMessagesSchema.js +133 -0
  188. package/dist/esm/bdx/schema/BdxInitMessagesSchema.js.map +6 -0
  189. package/dist/esm/bdx/schema/BdxMessage.d.ts +23 -0
  190. package/dist/esm/bdx/schema/BdxMessage.d.ts.map +1 -0
  191. package/dist/esm/bdx/schema/BdxMessage.js +62 -0
  192. package/dist/esm/bdx/schema/BdxMessage.js.map +6 -0
  193. package/dist/esm/bdx/schema/BdxStatusMessageSchema.d.ts +12 -0
  194. package/dist/esm/bdx/schema/BdxStatusMessageSchema.d.ts.map +1 -0
  195. package/dist/esm/bdx/schema/BdxStatusMessageSchema.js +15 -0
  196. package/dist/esm/bdx/schema/BdxStatusMessageSchema.js.map +6 -0
  197. package/dist/esm/bdx/schema/index.d.ts +11 -0
  198. package/dist/esm/bdx/schema/index.d.ts.map +1 -0
  199. package/dist/esm/bdx/schema/index.js +11 -0
  200. package/dist/esm/bdx/schema/index.js.map +6 -0
  201. package/dist/esm/index.d.ts +1 -0
  202. package/dist/esm/index.d.ts.map +1 -1
  203. package/dist/esm/index.js +1 -0
  204. package/dist/esm/index.js.map +1 -1
  205. package/dist/esm/mdns/MdnsClient.js +2 -2
  206. package/dist/esm/mdns/MdnsClient.js.map +1 -1
  207. package/dist/esm/protocol/ExchangeManager.d.ts.map +1 -1
  208. package/dist/esm/protocol/ExchangeManager.js +4 -2
  209. package/dist/esm/protocol/ExchangeManager.js.map +1 -1
  210. package/dist/esm/protocol/MessageExchange.d.ts +2 -0
  211. package/dist/esm/protocol/MessageExchange.d.ts.map +1 -1
  212. package/dist/esm/protocol/MessageExchange.js +14 -8
  213. package/dist/esm/protocol/MessageExchange.js.map +2 -2
  214. package/dist/esm/protocol/ProtocolStatusMessage.d.ts +1 -1
  215. package/dist/esm/protocol/ProtocolStatusMessage.d.ts.map +1 -1
  216. package/dist/esm/protocol/ProtocolStatusMessage.js.map +1 -1
  217. package/package.json +6 -6
  218. package/src/bdx/BdxClient.ts +47 -0
  219. package/src/bdx/BdxError.ts +39 -0
  220. package/src/bdx/BdxMessenger.ts +291 -0
  221. package/src/bdx/BdxProtocol.ts +93 -0
  222. package/src/bdx/BdxSession.ts +174 -0
  223. package/src/bdx/BdxSessionConfiguration.ts +134 -0
  224. package/src/bdx/FileDesignator.ts +49 -0
  225. package/src/bdx/PersistedFileDesignator.ts +40 -0
  226. package/src/bdx/bdx-session-initiator.ts +246 -0
  227. package/src/bdx/flow/DrivenSendingFlow.ts +40 -0
  228. package/src/bdx/flow/DrivingReceivingFlow.ts +39 -0
  229. package/src/bdx/flow/Flow.ts +124 -0
  230. package/src/bdx/flow/FollowingReceivingFlow.ts +53 -0
  231. package/src/bdx/flow/FollowingSendingFlow.ts +38 -0
  232. package/src/bdx/flow/InboundFlow.ts +104 -0
  233. package/src/bdx/flow/OutboundFlow.ts +124 -0
  234. package/src/bdx/index.ts +16 -0
  235. package/src/bdx/schema/BdxAcceptMessagesSchema.ts +159 -0
  236. package/src/bdx/schema/BdxBlockMessagesSchema.ts +99 -0
  237. package/src/bdx/schema/BdxInitMessagesSchema.ts +213 -0
  238. package/src/bdx/schema/BdxMessage.ts +70 -0
  239. package/src/bdx/schema/BdxStatusMessageSchema.ts +14 -0
  240. package/src/bdx/schema/index.ts +11 -0
  241. package/src/index.ts +1 -0
  242. package/src/mdns/MdnsClient.ts +2 -2
  243. package/src/protocol/ExchangeManager.ts +2 -0
  244. package/src/protocol/MessageExchange.ts +17 -6
  245. package/src/protocol/ProtocolStatusMessage.ts +1 -1
@@ -0,0 +1,102 @@
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 BdxProtocol_exports = {};
20
+ __export(BdxProtocol_exports, {
21
+ BdxProtocol: () => BdxProtocol
22
+ });
23
+ module.exports = __toCommonJS(BdxProtocol_exports);
24
+ var import_general = require("#general");
25
+ var import_types = require("#types");
26
+ var import_BdxMessenger = require("./BdxMessenger.js");
27
+ var import_BdxSession = require("./BdxSession.js");
28
+ var import_BdxInitMessagesSchema = require("./schema/BdxInitMessagesSchema.js");
29
+ /**
30
+ * @license
31
+ * Copyright 2022-2025 Matter.js Authors
32
+ * SPDX-License-Identifier: Apache-2.0
33
+ */
34
+ const logger = import_general.Logger.get("BdxProtocol");
35
+ class BdxProtocol {
36
+ id = import_types.BDX_PROTOCOL_ID;
37
+ requiresSecureSession = true;
38
+ #activeBdxSessions = /* @__PURE__ */ new Map();
39
+ #storage;
40
+ #bdxLimits;
41
+ /**
42
+ * Create a new BDX protocol handler.
43
+ * @param storage StorageContext to read or write files from/to.
44
+ * @param options BDX options/limits to use for this session. us this to control how the transfer should behave.
45
+ */
46
+ constructor(storage, options) {
47
+ this.#storage = storage;
48
+ this.#bdxLimits = options;
49
+ }
50
+ async onNewExchange(exchange, message) {
51
+ const initMessageType = message.payloadHeader.messageType;
52
+ const messenger = new import_BdxMessenger.BdxMessenger(exchange);
53
+ switch (initMessageType) {
54
+ case import_types.BdxMessageType.SendInit:
55
+ case import_types.BdxMessageType.ReceiveInit:
56
+ logger.debug(
57
+ `Initialize Session for ${import_types.BdxMessageType[initMessageType]} message on BDX protocol for exchange ${exchange.id}`
58
+ );
59
+ const { payload } = message;
60
+ const bdxSession = import_BdxSession.BdxSession.fromMessage(this.#storage, messenger, {
61
+ initMessageType,
62
+ initMessage: new import_BdxInitMessagesSchema.BdxInitMessageSchema().decode(payload),
63
+ ...this.#bdxLimits
64
+ });
65
+ await this.#registerSession(messenger, bdxSession);
66
+ try {
67
+ await bdxSession.processTransfer();
68
+ } catch (error) {
69
+ logger.error(`Error processing BDX transfer:`, error);
70
+ }
71
+ break;
72
+ default:
73
+ logger.warn(
74
+ `Unexpected BDX message type ${import_types.BdxMessageType[initMessageType]} on new exchange ${exchange.id}`
75
+ );
76
+ await messenger.sendError(import_types.BdxStatusCode.UnexpectedMessage);
77
+ }
78
+ }
79
+ /** Make sure only one BDX session can be active per exchange and that the exchange is closed with the BDX session. */
80
+ async #registerSession(messenger, bdxSession) {
81
+ const exchange = messenger.exchange;
82
+ if (this.#activeBdxSessions.has(exchange)) {
83
+ logger.warn(`BDX session for exchange ${exchange.id} already exists, sending error`);
84
+ await messenger.sendError(import_types.BdxStatusCode.UnexpectedMessage);
85
+ return;
86
+ }
87
+ this.#activeBdxSessions.set(exchange, bdxSession);
88
+ bdxSession.closed.on(async () => {
89
+ logger.debug(`BDX session for exchange ${exchange.id} closed`);
90
+ this.#activeBdxSessions.delete(exchange);
91
+ await exchange.close();
92
+ });
93
+ }
94
+ async close() {
95
+ logger.debug(`Closing BDX protocol handler with ${this.#activeBdxSessions.size} active sessions`);
96
+ for (const session of this.#activeBdxSessions.values()) {
97
+ await session.close(new import_general.MatterError("BDX protocol handler closed"));
98
+ }
99
+ this.#activeBdxSessions.clear();
100
+ }
101
+ }
102
+ //# sourceMappingURL=BdxProtocol.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bdx/BdxProtocol.ts"],
4
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,qBAAoD;AAGpD,mBAA+D;AAE/D,0BAA6B;AAC7B,wBAA2B;AAE3B,mCAAqC;AAdrC;AAAA;AAAA;AAAA;AAAA;AAgBA,MAAM,SAAS,sBAAO,IAAI,aAAa;AAGhC,MAAM,YAAuC;AAAA,EACvC,KAAK;AAAA,EACL,wBAAwB;AAAA,EACxB,qBAAqB,oBAAI,IAAiC;AAAA,EACnE;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,SAAyB,SAA0C;AAC3E,SAAK,WAAW;AAChB,SAAK,aAAa;AAAA,EACtB;AAAA,EAEA,MAAM,cAAc,UAA2B,SAAkB;AAC7D,UAAM,kBAAkB,QAAQ,cAAc;AAC9C,UAAM,YAAY,IAAI,iCAAa,QAAQ;AAE3C,YAAQ,iBAAiB;AAAA,MACrB,KAAK,4BAAe;AAAA,MACpB,KAAK,4BAAe;AAChB,eAAO;AAAA,UACH,0BAA0B,4BAAe,eAAe,CAAC,yCAAyC,SAAS,EAAE;AAAA,QACjH;AACA,cAAM,EAAE,QAAQ,IAAI;AACpB,cAAM,aAAa,6BAAW,YAAY,KAAK,UAAU,WAAW;AAAA,UAChE;AAAA,UACA,aAAa,IAAI,kDAAqB,EAAE,OAAO,OAAO;AAAA,UACtD,GAAG,KAAK;AAAA,QACZ,CAAC;AACD,cAAM,KAAK,iBAAiB,WAAW,UAAU;AAEjD,YAAI;AACA,gBAAM,WAAW,gBAAgB;AAAA,QACrC,SAAS,OAAO;AACZ,iBAAO,MAAM,kCAAkC,KAAK;AAAA,QACxD;AAEA;AAAA,MACJ;AACI,eAAO;AAAA,UACH,+BAA+B,4BAAe,eAAe,CAAC,oBAAoB,SAAS,EAAE;AAAA,QACjG;AACA,cAAM,UAAU,UAAU,2BAAc,iBAAiB;AAAA,IACjE;AAAA,EACJ;AAAA;AAAA,EAGA,MAAM,iBAAiB,WAAyB,YAAwB;AACpE,UAAM,WAAW,UAAU;AAC3B,QAAI,KAAK,mBAAmB,IAAI,QAAQ,GAAG;AACvC,aAAO,KAAK,4BAA4B,SAAS,EAAE,gCAAgC;AACnF,YAAM,UAAU,UAAU,2BAAc,iBAAiB;AACzD;AAAA,IACJ;AACA,SAAK,mBAAmB,IAAI,UAAU,UAAU;AAChD,eAAW,OAAO,GAAG,YAAY;AAC7B,aAAO,MAAM,4BAA4B,SAAS,EAAE,SAAS;AAC7D,WAAK,mBAAmB,OAAO,QAAQ;AACvC,YAAM,SAAS,MAAM;AAAA,IACzB,CAAC;AAAA,EACL;AAAA,EAEA,MAAM,QAAQ;AACV,WAAO,MAAM,qCAAqC,KAAK,mBAAmB,IAAI,kBAAkB;AAChG,eAAW,WAAW,KAAK,mBAAmB,OAAO,GAAG;AACpD,YAAM,QAAQ,MAAM,IAAI,2BAAY,6BAA6B,CAAC;AAAA,IACtE;AACA,SAAK,mBAAmB,MAAM;AAAA,EAClC;AACJ;",
5
+ "names": []
6
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { AsyncObservable, StorageContext } from "#general";
7
+ import { BdxMessenger } from "./BdxMessenger.js";
8
+ import { BdxSessionConfiguration } from "./BdxSessionConfiguration.js";
9
+ /**
10
+ * Class to manage one BDX session.
11
+ *
12
+ * Matter BDX protocol is used to transfer files between devices.
13
+ *
14
+ * Notes:
15
+ * * Even though Matter allows 64bit values for size and offset, we do not use them, as they make no sense for now.
16
+ * We support up to MAX_SAFE_INTEGER for size and offset (which basically is 2^53 - 1 and so far enough for us).
17
+ * * We support partial transfers (startOffset or shorter dataLength) only when we act as the sender. As a receiver,
18
+ * only full transfers are supported.
19
+ * * We do not use BlockQueryWithSkip when requesting data ourselves
20
+ */
21
+ export declare class BdxSession {
22
+ #private;
23
+ /** Initializes a BdxSession as a sender, means that we upload data to the peer. */
24
+ static asSender(messenger: BdxMessenger, options: BdxSessionConfiguration.SenderInitiatorOptions): BdxSession;
25
+ /** Initializes a BdxSession as a receiver, means that we download data from the peer. */
26
+ static asReceiver(messenger: BdxMessenger, options: BdxSessionConfiguration.InitiatorOptions): BdxSession;
27
+ /** Initializes a BdxSession from an incoming *Init message. The message determines the direction of the transfer. */
28
+ static fromMessage(storage: StorageContext, messenger: BdxMessenger, options: BdxSessionConfiguration.ReceiverOptions): BdxSession;
29
+ private constructor();
30
+ /** Method called to start the session. It will end with a successful Transfer or with an error */
31
+ processTransfer(): Promise<void>;
32
+ get closed(): AsyncObservable<any[], void>;
33
+ close(error?: unknown): Promise<void>;
34
+ }
35
+ export declare namespace BdxSession { }
36
+ //# sourceMappingURL=BdxSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BdxSession.d.ts","sourceRoot":"","sources":["../../../src/bdx/BdxSession.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAoC,cAAc,EAAE,MAAM,UAAU,CAAC;AAI7F,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAUvE;;;;;;;;;;;GAWG;AACH,qBAAa,UAAU;;IAUnB,mFAAmF;IACnF,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,uBAAuB,CAAC,sBAAsB,GAAG,UAAU;IAI7G,yFAAyF;IACzF,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,uBAAuB,CAAC,gBAAgB,GAAG,UAAU;IAIzG,qHAAqH;IACrH,MAAM,CAAC,WAAW,CACd,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,YAAY,EACvB,OAAO,EAAE,uBAAuB,CAAC,eAAe,GACjD,UAAU;IAkBb,OAAO;IAeP,kGAAkG;IAC5F,eAAe;IAmErB,IAAI,MAAM,iCAET;IAEK,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO;CAQ9B;AAED,yBAAiB,UAAU,CAAC,GAAE"}
@@ -0,0 +1,153 @@
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 BdxSession_exports = {};
20
+ __export(BdxSession_exports, {
21
+ BdxSession: () => BdxSession
22
+ });
23
+ module.exports = __toCommonJS(BdxSession_exports);
24
+ var import_general = require("#general");
25
+ var import_types = require("#types");
26
+ var import_bdx_session_initiator = require("./bdx-session-initiator.js");
27
+ var import_BdxError = require("./BdxError.js");
28
+ var import_BdxSessionConfiguration = require("./BdxSessionConfiguration.js");
29
+ var import_DrivenSendingFlow = require("./flow/DrivenSendingFlow.js");
30
+ var import_DrivingReceivingFlow = require("./flow/DrivingReceivingFlow.js");
31
+ var import_Flow = require("./flow/Flow.js");
32
+ var import_FollowingReceivingFlow = require("./flow/FollowingReceivingFlow.js");
33
+ var import_FollowingSendingFlow = require("./flow/FollowingSendingFlow.js");
34
+ var import_PersistedFileDesignator = require("./PersistedFileDesignator.js");
35
+ /**
36
+ * @license
37
+ * Copyright 2022-2025 Matter.js Authors
38
+ * SPDX-License-Identifier: Apache-2.0
39
+ */
40
+ const logger = import_general.Logger.get("BdxSession");
41
+ class BdxSession {
42
+ #messenger;
43
+ #started = false;
44
+ #closed = (0, import_general.AsyncObservable)();
45
+ #isClosed = false;
46
+ #config;
47
+ #transferFlow;
48
+ /** Initializes a BdxSession as a sender, means that we upload data to the peer. */
49
+ static asSender(messenger, options) {
50
+ return new BdxSession(messenger, { isSender: true, ...options });
51
+ }
52
+ /** Initializes a BdxSession as a receiver, means that we download data from the peer. */
53
+ static asReceiver(messenger, options) {
54
+ return new BdxSession(messenger, { isSender: false, ...options });
55
+ }
56
+ /** Initializes a BdxSession from an incoming *Init message. The message determines the direction of the transfer. */
57
+ static fromMessage(storage, messenger, options) {
58
+ const { initMessageType, initMessage } = options;
59
+ if (initMessageType !== import_types.BdxMessageType.SendInit && initMessageType !== import_types.BdxMessageType.ReceiveInit) {
60
+ throw new import_BdxError.BdxError(
61
+ `Invalid message type for BDX session initialization: ${import_types.BdxMessageType[initMessageType]} (${initMessageType})`,
62
+ import_types.BdxStatusCode.UnexpectedMessage
63
+ );
64
+ }
65
+ const { fileDesignator } = initMessage;
66
+ return new BdxSession(messenger, {
67
+ isSender: initMessageType === import_types.BdxMessageType.ReceiveInit,
68
+ fileDesignator: new import_PersistedFileDesignator.PersistedFileDesignator(fileDesignator, storage),
69
+ ...options
70
+ });
71
+ }
72
+ constructor(messenger, options) {
73
+ this.#messenger = messenger;
74
+ this.#config = new import_BdxSessionConfiguration.BdxSessionConfiguration(options);
75
+ const exchange = messenger.exchange;
76
+ if (!exchange.channel.isReliable) {
77
+ throw new import_BdxError.BdxError("Bdx Protocol requires a reliable channel for message exchange");
78
+ }
79
+ exchange.closed.on(async () => {
80
+ logger.debug(`Closing BDX session for exchange ${exchange.id}`);
81
+ await this.close();
82
+ });
83
+ }
84
+ /** Method called to start the session. It will end with a successful Transfer or with an error */
85
+ async processTransfer() {
86
+ if (this.#started) {
87
+ throw new import_BdxError.BdxError("BDX session already started", import_types.BdxStatusCode.UnexpectedMessage);
88
+ }
89
+ if (this.#isClosed) {
90
+ throw new import_BdxError.BdxError("BDX session already closed", import_types.BdxStatusCode.UnexpectedMessage);
91
+ }
92
+ const { isSender, isInitiator, fileDesignator } = this.#config;
93
+ logger.info(
94
+ `Starting BDX session`,
95
+ import_general.Diagnostic.dict({
96
+ exId: this.#messenger.exchange.id,
97
+ isSender,
98
+ isInitiator,
99
+ blobName: fileDesignator?.text
100
+ })
101
+ );
102
+ this.#started = true;
103
+ try {
104
+ this.#transferFlow = this.#initializeFlow(await (0, import_bdx_session_initiator.bdxSessionInitiator)(this.#messenger, this.#config));
105
+ await this.#transferFlow.processTransfer();
106
+ await this.close();
107
+ } catch (error) {
108
+ import_BdxError.BdxError.accept(error);
109
+ await this.#messenger.sendError(error.code);
110
+ logger.warn(`BDX session failed with error:`, error);
111
+ await this.close(error);
112
+ throw error;
113
+ }
114
+ }
115
+ #initializeFlow(transferParameters) {
116
+ const { transferMode, asynchronousTransfer, dataLength, isDriver, fileDesignator } = transferParameters;
117
+ const isSenderDrive = transferMode === import_Flow.Flow.DriverMode.SenderDrive;
118
+ const role = `${isSenderDrive ? `${asynchronousTransfer ? "async " : ""}sending` : "receiving"} ${isDriver ? "driver" : "follower"}`;
119
+ logger.debug(
120
+ `Starting transfer flow as ${role}`,
121
+ import_general.Diagnostic.dict({
122
+ exId: this.#messenger.exchange.id,
123
+ dataLength,
124
+ blobName: fileDesignator.text
125
+ })
126
+ );
127
+ let FlowImpl;
128
+ if (isDriver) {
129
+ if (isSenderDrive || asynchronousTransfer) {
130
+ FlowImpl = import_DrivenSendingFlow.DrivenSendingFlow;
131
+ } else {
132
+ FlowImpl = import_DrivingReceivingFlow.DrivingReceivingFlow;
133
+ }
134
+ } else if (isSenderDrive || asynchronousTransfer) {
135
+ FlowImpl = import_FollowingSendingFlow.FollowingSendingFlow;
136
+ } else {
137
+ FlowImpl = import_FollowingReceivingFlow.FollowingReceivingFlow;
138
+ }
139
+ return new FlowImpl(this.#messenger, transferParameters);
140
+ }
141
+ get closed() {
142
+ return this.#closed;
143
+ }
144
+ async close(error) {
145
+ if (this.#isClosed) {
146
+ return;
147
+ }
148
+ this.#isClosed = true;
149
+ await this.#transferFlow?.close(error);
150
+ await this.#closed.emit();
151
+ }
152
+ }
153
+ //# sourceMappingURL=BdxSession.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bdx/BdxSession.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { BdxMessageType } from "#types";
7
+ import { Flow } from "./flow/Flow.js";
8
+ import { PersistedFileDesignator } from "./PersistedFileDesignator.js";
9
+ import { BdxInit } from "./schema/BdxInitMessagesSchema.js";
10
+ export declare class BdxSessionConfiguration {
11
+ #private;
12
+ constructor(options: BdxSessionConfiguration.Options);
13
+ get isSender(): boolean;
14
+ get initMessage(): BdxInit | undefined;
15
+ get isInitiator(): boolean;
16
+ get fileDesignator(): PersistedFileDesignator;
17
+ get transferConfig(): BdxSessionConfiguration.Config;
18
+ }
19
+ export declare namespace BdxSessionConfiguration {
20
+ interface Config {
21
+ /**
22
+ * Array of preferred transfer driver modes, in order of preference. Use this to configure the proposed behavior.
23
+ * Default is [SenderDrive, ReceiverDrive]
24
+ */
25
+ preferredDriverModes?: Flow.DriverMode[];
26
+ /** Asynchronous transfer is not supported right now because provisional. */
27
+ asynchronousTransferAllowed?: false;
28
+ /** Maximum block size to use for the session. This value is ignored if the transport only supports smaller blocks. */
29
+ maxBlockSize?: number;
30
+ /** Maximum transfer size to use for the session. Defaults to 100MB */
31
+ maxTransferSize?: number;
32
+ /** The start offset of the data to send. When using this, you need to know what you are doing. */
33
+ senderStartOffset?: number;
34
+ /** The maximum length of the data to send. When using this, you need to know what you are doing. */
35
+ senderMaxLength?: number;
36
+ }
37
+ const DefaultConfig: BdxSessionConfiguration.Config;
38
+ interface InitiatorOptions extends BdxSessionConfiguration.Config {
39
+ /** FileDesignator to use for the session. The value is usually pre-determined with the peer. */
40
+ fileDesignator: PersistedFileDesignator;
41
+ }
42
+ interface SenderInitiatorOptions extends InitiatorOptions {
43
+ /** The start offset of the data to send. When using this, you need to know what you are doing. */
44
+ senderStartOffset?: number;
45
+ /** The maximum length of the data to send. When using this, you need to know what you are doing. */
46
+ senderMaxLength?: number;
47
+ }
48
+ interface ReceiverOptions extends BdxSessionConfiguration.Config {
49
+ initMessageType: BdxMessageType;
50
+ initMessage: BdxInit;
51
+ }
52
+ interface Options extends BdxSessionConfiguration.Config {
53
+ /** True if the session is initiated as a sender, false for receiver */
54
+ isSender: boolean;
55
+ /** File designator to use for the session */
56
+ fileDesignator: PersistedFileDesignator;
57
+ /** The initial message received to start the session */
58
+ initMessage?: BdxInit;
59
+ }
60
+ }
61
+ //# sourceMappingURL=BdxSessionConfiguration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BdxSessionConfiguration.d.ts","sourceRoot":"","sources":["../../../src/bdx/BdxSessionConfiguration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAE5D,qBAAa,uBAAuB;;gBAMpB,OAAO,EAAE,uBAAuB,CAAC,OAAO;IAiCpD,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,WAAW,IAAI,OAAO,GAAG,SAAS,CAErC;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,cAAc,IAAI,uBAAuB,CAE5C;IAED,IAAI,cAAc,IAAI,uBAAuB,CAAC,MAAM,CAEnD;CACJ;AAED,yBAAiB,uBAAuB,CAAC;IACrC,UAAiB,MAAM;QACnB;;;WAGG;QACH,oBAAoB,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;QAEzC,4EAA4E;QAC5E,2BAA2B,CAAC,EAAE,KAAK,CAAC;QAEpC,sHAAsH;QACtH,YAAY,CAAC,EAAE,MAAM,CAAC;QAEtB,sEAAsE;QACtE,eAAe,CAAC,EAAE,MAAM,CAAC;QAEzB,kGAAkG;QAClG,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAE3B,oGAAoG;QACpG,eAAe,CAAC,EAAE,MAAM,CAAC;KAC5B;IAEM,MAAM,aAAa,EAAE,uBAAuB,CAAC,MAOnD,CAAC;IAEF,UAAiB,gBAAiB,SAAQ,uBAAuB,CAAC,MAAM;QACpE,gGAAgG;QAChG,cAAc,EAAE,uBAAuB,CAAC;KAC3C;IAED,UAAiB,sBAAuB,SAAQ,gBAAgB;QAC5D,kGAAkG;QAClG,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAE3B,oGAAoG;QACpG,eAAe,CAAC,EAAE,MAAM,CAAC;KAC5B;IAED,UAAiB,eAAgB,SAAQ,uBAAuB,CAAC,MAAM;QACnE,eAAe,EAAE,cAAc,CAAC;QAChC,WAAW,EAAE,OAAO,CAAC;KACxB;IAED,UAAiB,OAAQ,SAAQ,uBAAuB,CAAC,MAAM;QAC3D,uEAAuE;QACvE,QAAQ,EAAE,OAAO,CAAC;QAElB,6CAA6C;QAC7C,cAAc,EAAE,uBAAuB,CAAC;QAExC,wDAAwD;QACxD,WAAW,CAAC,EAAE,OAAO,CAAC;KACzB;CACJ"}
@@ -0,0 +1,95 @@
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 BdxSessionConfiguration_exports = {};
20
+ __export(BdxSessionConfiguration_exports, {
21
+ BdxSessionConfiguration: () => BdxSessionConfiguration
22
+ });
23
+ module.exports = __toCommonJS(BdxSessionConfiguration_exports);
24
+ var import_general = require("#general");
25
+ var import_Flow = require("./flow/Flow.js");
26
+ /**
27
+ * @license
28
+ * Copyright 2022-2025 Matter.js Authors
29
+ * SPDX-License-Identifier: Apache-2.0
30
+ */
31
+ class BdxSessionConfiguration {
32
+ #isSender;
33
+ #initMessage;
34
+ #transferConfig;
35
+ #fileDesignator;
36
+ constructor(options) {
37
+ const { isSender, fileDesignator, initMessage } = options;
38
+ this.#fileDesignator = fileDesignator;
39
+ this.#isSender = isSender;
40
+ this.#initMessage = initMessage;
41
+ this.#transferConfig = { ...BdxSessionConfiguration.DefaultConfig, ...options };
42
+ const {
43
+ preferredDriverModes = [],
44
+ maxBlockSize,
45
+ maxTransferSize,
46
+ asynchronousTransferAllowed,
47
+ senderStartOffset,
48
+ senderMaxLength
49
+ } = this.#transferConfig;
50
+ if (preferredDriverModes.length === 0) {
51
+ throw new import_general.ImplementationError("At least one preferred driver mode must be set.");
52
+ }
53
+ if (maxBlockSize !== void 0 && maxBlockSize <= 0) {
54
+ throw new import_general.ImplementationError("Max block size must be greater than 0");
55
+ }
56
+ if (maxTransferSize !== void 0 && maxTransferSize <= 0) {
57
+ throw new import_general.ImplementationError("Max transfer size must be greater than 0");
58
+ }
59
+ if (asynchronousTransferAllowed) {
60
+ throw new import_general.ImplementationError("Asynchronous transfer is not supported");
61
+ }
62
+ if (!isSender && (senderStartOffset !== void 0 || senderMaxLength !== void 0)) {
63
+ throw new import_general.ImplementationError("Sender start offset and sender max length are only supported for senders");
64
+ }
65
+ }
66
+ get isSender() {
67
+ return this.#isSender;
68
+ }
69
+ get initMessage() {
70
+ return this.#initMessage;
71
+ }
72
+ get isInitiator() {
73
+ return this.#initMessage === void 0;
74
+ }
75
+ get fileDesignator() {
76
+ return this.#fileDesignator;
77
+ }
78
+ get transferConfig() {
79
+ return this.#transferConfig;
80
+ }
81
+ }
82
+ ((BdxSessionConfiguration2) => {
83
+ BdxSessionConfiguration2.DefaultConfig = {
84
+ preferredDriverModes: [
85
+ import_Flow.Flow.DriverMode.SenderDrive,
86
+ // Default if multiple is supported, so lets use this
87
+ import_Flow.Flow.DriverMode.ReceiverDrive
88
+ ],
89
+ asynchronousTransferAllowed: false,
90
+ // Provisional, not supported
91
+ maxTransferSize: 1024 * 1e5
92
+ // 100 MB, lets use that as maximum transfer filesize for now just to protect
93
+ };
94
+ })(BdxSessionConfiguration || (BdxSessionConfiguration = {}));
95
+ //# sourceMappingURL=BdxSessionConfiguration.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bdx/BdxSessionConfiguration.ts"],
4
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,qBAAoC;AAEpC,kBAAqB;AARrB;AAAA;AAAA;AAAA;AAAA;AAYO,MAAM,wBAAwB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,SAA0C;AAClD,UAAM,EAAE,UAAU,gBAAgB,YAAY,IAAI;AAClD,SAAK,kBAAkB;AACvB,SAAK,YAAY;AACjB,SAAK,eAAe;AACpB,SAAK,kBAAkB,EAAE,GAAG,wBAAwB,eAAe,GAAG,QAAQ;AAG9E,UAAM;AAAA,MACF,uBAAuB,CAAC;AAAA,MACxB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAI,KAAK;AACT,QAAI,qBAAqB,WAAW,GAAG;AACnC,YAAM,IAAI,mCAAoB,iDAAiD;AAAA,IACnF;AACA,QAAI,iBAAiB,UAAa,gBAAgB,GAAG;AACjD,YAAM,IAAI,mCAAoB,uCAAuC;AAAA,IACzE;AACA,QAAI,oBAAoB,UAAa,mBAAmB,GAAG;AACvD,YAAM,IAAI,mCAAoB,0CAA0C;AAAA,IAC5E;AACA,QAAI,6BAA6B;AAC7B,YAAM,IAAI,mCAAoB,wCAAwC;AAAA,IAC1E;AACA,QAAI,CAAC,aAAa,sBAAsB,UAAa,oBAAoB,SAAY;AACjF,YAAM,IAAI,mCAAoB,0EAA0E;AAAA,IAC5G;AAAA,EACJ;AAAA,EAEA,IAAI,WAAoB;AACpB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,cAAmC;AACnC,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,cAAuB;AACvB,WAAO,KAAK,iBAAiB;AAAA,EACjC;AAAA,EAEA,IAAI,iBAA0C;AAC1C,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,iBAAiD;AACjD,WAAO,KAAK;AAAA,EAChB;AACJ;AAAA,CAEO,CAAUA,6BAAV;AAwBI,EAAMA,yBAAA,gBAAgD;AAAA,IACzD,sBAAsB;AAAA,MAClB,iBAAK,WAAW;AAAA;AAAA,MAChB,iBAAK,WAAW;AAAA,IACpB;AAAA,IACA,6BAA6B;AAAA;AAAA,IAC7B,iBAAiB,OAAQ;AAAA;AAAA,EAC7B;AAAA,GA/Ba;",
5
+ "names": ["BdxSessionConfiguration"]
6
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Bytes } from "#general";
7
+ /**
8
+ * Class to represent a File designator from Matter.
9
+ * Specification wise this is a bytes object, but to store in a storage we need a string name.
10
+ * This class provides a way to convert between the two.
11
+ */
12
+ export declare class FileDesignator {
13
+ #private;
14
+ /** Create a FileDesignator from a string or bytes object. */
15
+ constructor(fd: string | Bytes);
16
+ /** Return the bytes representation of the FileDesignator. */
17
+ get bytes(): Bytes;
18
+ /** Return the textual/string representation of the FileDesignator. */
19
+ get text(): string;
20
+ }
21
+ //# sourceMappingURL=FileDesignator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileDesignator.d.ts","sourceRoot":"","sources":["../../../src/bdx/FileDesignator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC;;;;GAIG;AACH,qBAAa,cAAc;;IAGvB,6DAA6D;gBACjD,EAAE,EAAE,MAAM,GAAG,KAAK;IAQ9B,6DAA6D;IAC7D,IAAI,KAAK,IAAI,KAAK,CAEjB;IAED,sEAAsE;IACtE,IAAI,IAAI,IAAI,MAAM,CAgBjB;CACJ"}
@@ -0,0 +1,62 @@
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 FileDesignator_exports = {};
20
+ __export(FileDesignator_exports, {
21
+ FileDesignator: () => FileDesignator
22
+ });
23
+ module.exports = __toCommonJS(FileDesignator_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 FileDesignator {
31
+ #fd;
32
+ /** Create a FileDesignator from a string or bytes object. */
33
+ constructor(fd) {
34
+ if (typeof fd === "string") {
35
+ this.#fd = import_general.Bytes.fromString(fd);
36
+ } else {
37
+ this.#fd = fd;
38
+ }
39
+ }
40
+ /** Return the bytes representation of the FileDesignator. */
41
+ get bytes() {
42
+ return this.#fd;
43
+ }
44
+ /** Return the textual/string representation of the FileDesignator. */
45
+ get text() {
46
+ const fileDesignatorData = import_general.Bytes.of(this.#fd);
47
+ const isValidName = fileDesignatorData.every(
48
+ (byte) => byte >= 65 && byte <= 90 || // A-Z
49
+ byte >= 97 && byte <= 122 || // a-z
50
+ byte >= 48 && byte <= 57 || // 0..9
51
+ byte === 46 || // "."
52
+ byte === 45
53
+ // "-"
54
+ );
55
+ if (isValidName) {
56
+ return fileDesignatorData.reduce((name, byte) => name + String.fromCharCode(byte), "");
57
+ } else {
58
+ return `0x${import_general.Bytes.toHex(fileDesignatorData)}`;
59
+ }
60
+ }
61
+ }
62
+ //# sourceMappingURL=FileDesignator.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bdx/FileDesignator.ts"],
4
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,qBAAsB;AANtB;AAAA;AAAA;AAAA;AAAA;AAaO,MAAM,eAAe;AAAA,EACxB;AAAA;AAAA,EAGA,YAAY,IAAoB;AAC5B,QAAI,OAAO,OAAO,UAAU;AACxB,WAAK,MAAM,qBAAM,WAAW,EAAE;AAAA,IAClC,OAAO;AACH,WAAK,MAAM;AAAA,IACf;AAAA,EACJ;AAAA;AAAA,EAGA,IAAI,QAAe;AACf,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA,EAGA,IAAI,OAAe;AACf,UAAM,qBAAqB,qBAAM,GAAG,KAAK,GAAG;AAE5C,UAAM,cAAc,mBAAmB;AAAA,MACnC,UACK,QAAQ,MAAQ,QAAQ;AAAA,MACxB,QAAQ,MAAQ,QAAQ;AAAA,MACxB,QAAQ,MAAQ,QAAQ;AAAA,MACzB,SAAS;AAAA,MACT,SAAS;AAAA;AAAA,IACjB;AACA,QAAI,aAAa;AACb,aAAO,mBAAmB,OAAO,CAAC,MAAM,SAAS,OAAO,OAAO,aAAa,IAAI,GAAG,EAAE;AAAA,IACzF,OAAO;AACH,aAAO,KAAK,qBAAM,MAAM,kBAAkB,CAAC;AAAA,IAC/C;AAAA,EACJ;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
+ import { Bytes, StorageContext } from "#general";
7
+ import { FileDesignator } from "./FileDesignator.js";
8
+ /** A FileDesignator that points to a persisted file in a given StorageContext. */
9
+ export declare class PersistedFileDesignator extends FileDesignator {
10
+ #private;
11
+ constructor(fd: string | Bytes, storage: StorageContext);
12
+ exists(): import("#general").MaybePromise<boolean>;
13
+ openBlob(): Promise<Blob>;
14
+ writeFromStream(stream: ReadableStream<Bytes>): import("#general").MaybePromise<void>;
15
+ }
16
+ //# sourceMappingURL=PersistedFileDesignator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PersistedFileDesignator.d.ts","sourceRoot":"","sources":["../../../src/bdx/PersistedFileDesignator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAuB,cAAc,EAAE,MAAM,UAAU,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,kFAAkF;AAClF,qBAAa,uBAAwB,SAAQ,cAAc;;gBAI3C,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE,OAAO,EAAE,cAAc;IAKvD,MAAM;IAIA,QAAQ;IAad,eAAe,CAAC,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC;CAGhD"}
@@ -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 PersistedFileDesignator_exports = {};
20
+ __export(PersistedFileDesignator_exports, {
21
+ PersistedFileDesignator: () => PersistedFileDesignator
22
+ });
23
+ module.exports = __toCommonJS(PersistedFileDesignator_exports);
24
+ var import_general = require("#general");
25
+ var import_FileDesignator = require("./FileDesignator.js");
26
+ /**
27
+ * @license
28
+ * Copyright 2022-2025 Matter.js Authors
29
+ * SPDX-License-Identifier: Apache-2.0
30
+ */
31
+ class PersistedFileDesignator extends import_FileDesignator.FileDesignator {
32
+ #storage;
33
+ #blob;
34
+ constructor(fd, storage) {
35
+ super(fd);
36
+ this.#storage = storage;
37
+ }
38
+ exists() {
39
+ return this.#storage.has(this.text);
40
+ }
41
+ async openBlob() {
42
+ if (this.#blob === void 0) {
43
+ const blobName = this.text;
44
+ if (!this.#storage.has(blobName)) {
45
+ throw new import_general.ImplementationError(
46
+ "File designator must point to an existing file in the storage to send data"
47
+ );
48
+ }
49
+ this.#blob = await this.#storage.openBlob(blobName);
50
+ }
51
+ return this.#blob;
52
+ }
53
+ writeFromStream(stream) {
54
+ return this.#storage.writeBlobFromStream(this.text, stream);
55
+ }
56
+ }
57
+ //# sourceMappingURL=PersistedFileDesignator.js.map