@matter/protocol 0.16.0-alpha.0-20251217-038f88085 → 0.16.0-alpha.0-20251221-21acf226d

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 (472) hide show
  1. package/dist/cjs/action/client/ClientBdx.d.ts +17 -0
  2. package/dist/cjs/action/client/ClientBdx.d.ts.map +1 -0
  3. package/dist/cjs/action/client/ClientBdx.js +22 -0
  4. package/dist/cjs/action/client/ClientBdx.js.map +6 -0
  5. package/dist/cjs/action/client/ClientInteraction.d.ts +10 -1
  6. package/dist/cjs/action/client/ClientInteraction.d.ts.map +1 -1
  7. package/dist/cjs/action/client/ClientInteraction.js +25 -2
  8. package/dist/cjs/action/client/ClientInteraction.js.map +1 -1
  9. package/dist/cjs/action/client/QueuedClientInteraction.d.ts +11 -3
  10. package/dist/cjs/action/client/QueuedClientInteraction.d.ts.map +1 -1
  11. package/dist/cjs/action/client/QueuedClientInteraction.js +6 -2
  12. package/dist/cjs/action/client/QueuedClientInteraction.js.map +1 -1
  13. package/dist/cjs/action/client/index.d.ts +1 -0
  14. package/dist/cjs/action/client/index.d.ts.map +1 -1
  15. package/dist/cjs/action/client/index.js +1 -0
  16. package/dist/cjs/action/client/index.js.map +1 -1
  17. package/dist/cjs/action/request/Read.d.ts.map +1 -1
  18. package/dist/cjs/action/request/Read.js +2 -2
  19. package/dist/cjs/action/request/Read.js.map +1 -1
  20. package/dist/cjs/action/request/Write.js +4 -3
  21. package/dist/cjs/action/request/Write.js.map +1 -1
  22. package/dist/cjs/advertisement/ble/BleAdvertisement.d.ts +1 -1
  23. package/dist/cjs/advertisement/ble/BleAdvertisement.d.ts.map +1 -1
  24. package/dist/cjs/advertisement/ble/BleAdvertisement.js +2 -2
  25. package/dist/cjs/advertisement/ble/BleAdvertisement.js.map +1 -1
  26. package/dist/cjs/advertisement/mdns/CommissionableMdnsAdvertisement.d.ts +1 -1
  27. package/dist/cjs/advertisement/mdns/CommissionableMdnsAdvertisement.js +1 -1
  28. package/dist/cjs/advertisement/mdns/CommissionableMdnsAdvertisement.js.map +1 -1
  29. package/dist/cjs/advertisement/mdns/OperationalMdnsAdvertisement.d.ts.map +1 -1
  30. package/dist/cjs/advertisement/mdns/OperationalMdnsAdvertisement.js +3 -5
  31. package/dist/cjs/advertisement/mdns/OperationalMdnsAdvertisement.js.map +1 -1
  32. package/dist/cjs/bdx/BdxClient.d.ts +2 -0
  33. package/dist/cjs/bdx/BdxClient.d.ts.map +1 -1
  34. package/dist/cjs/bdx/BdxClient.js +6 -0
  35. package/dist/cjs/bdx/BdxClient.js.map +1 -1
  36. package/dist/cjs/bdx/BdxError.d.ts +2 -0
  37. package/dist/cjs/bdx/BdxError.d.ts.map +1 -1
  38. package/dist/cjs/bdx/BdxError.js +2 -0
  39. package/dist/cjs/bdx/BdxError.js.map +1 -1
  40. package/dist/cjs/bdx/BdxMessenger.d.ts +5 -1
  41. package/dist/cjs/bdx/BdxMessenger.d.ts.map +1 -1
  42. package/dist/cjs/bdx/BdxMessenger.js +12 -4
  43. package/dist/cjs/bdx/BdxMessenger.js.map +1 -1
  44. package/dist/cjs/bdx/BdxProtocol.d.ts +14 -7
  45. package/dist/cjs/bdx/BdxProtocol.d.ts.map +1 -1
  46. package/dist/cjs/bdx/BdxProtocol.js +81 -19
  47. package/dist/cjs/bdx/BdxProtocol.js.map +1 -1
  48. package/dist/cjs/bdx/BdxSession.d.ts +10 -3
  49. package/dist/cjs/bdx/BdxSession.d.ts.map +1 -1
  50. package/dist/cjs/bdx/BdxSession.js +33 -8
  51. package/dist/cjs/bdx/BdxSession.js.map +1 -1
  52. package/dist/cjs/bdx/BdxSessionConfiguration.d.ts +16 -1
  53. package/dist/cjs/bdx/BdxSessionConfiguration.d.ts.map +1 -1
  54. package/dist/cjs/bdx/BdxSessionConfiguration.js +6 -1
  55. package/dist/cjs/bdx/BdxSessionConfiguration.js.map +1 -1
  56. package/dist/cjs/bdx/FileDesignator.d.ts +15 -1
  57. package/dist/cjs/bdx/FileDesignator.d.ts.map +1 -1
  58. package/dist/cjs/bdx/FileDesignator.js +28 -2
  59. package/dist/cjs/bdx/FileDesignator.js.map +1 -1
  60. package/dist/cjs/bdx/PersistedFileDesignator.d.ts +10 -2
  61. package/dist/cjs/bdx/PersistedFileDesignator.d.ts.map +1 -1
  62. package/dist/cjs/bdx/PersistedFileDesignator.js +23 -5
  63. package/dist/cjs/bdx/PersistedFileDesignator.js.map +1 -1
  64. package/dist/cjs/bdx/ScopedStorage.d.ts +18 -0
  65. package/dist/cjs/bdx/ScopedStorage.d.ts.map +1 -0
  66. package/dist/cjs/bdx/ScopedStorage.js +36 -0
  67. package/dist/cjs/bdx/ScopedStorage.js.map +6 -0
  68. package/dist/cjs/bdx/bdx-session-initiator.d.ts.map +1 -1
  69. package/dist/cjs/bdx/bdx-session-initiator.js +10 -2
  70. package/dist/cjs/bdx/bdx-session-initiator.js.map +1 -1
  71. package/dist/cjs/bdx/flow/DrivenSendingFlow.d.ts.map +1 -1
  72. package/dist/cjs/bdx/flow/DrivenSendingFlow.js +2 -0
  73. package/dist/cjs/bdx/flow/DrivenSendingFlow.js.map +1 -1
  74. package/dist/cjs/bdx/flow/DrivingReceivingFlow.d.ts.map +1 -1
  75. package/dist/cjs/bdx/flow/DrivingReceivingFlow.js +1 -0
  76. package/dist/cjs/bdx/flow/DrivingReceivingFlow.js.map +1 -1
  77. package/dist/cjs/bdx/flow/Flow.d.ts +7 -0
  78. package/dist/cjs/bdx/flow/Flow.d.ts.map +1 -1
  79. package/dist/cjs/bdx/flow/Flow.js +22 -1
  80. package/dist/cjs/bdx/flow/Flow.js.map +1 -1
  81. package/dist/cjs/bdx/flow/FollowingReceivingFlow.d.ts.map +1 -1
  82. package/dist/cjs/bdx/flow/FollowingReceivingFlow.js +3 -0
  83. package/dist/cjs/bdx/flow/FollowingReceivingFlow.js.map +1 -1
  84. package/dist/cjs/bdx/flow/FollowingSendingFlow.d.ts.map +1 -1
  85. package/dist/cjs/bdx/flow/FollowingSendingFlow.js +1 -0
  86. package/dist/cjs/bdx/flow/FollowingSendingFlow.js.map +1 -1
  87. package/dist/cjs/bdx/flow/OutboundFlow.d.ts.map +1 -1
  88. package/dist/cjs/bdx/flow/OutboundFlow.js +1 -0
  89. package/dist/cjs/bdx/flow/OutboundFlow.js.map +1 -1
  90. package/dist/cjs/bdx/index.d.ts +1 -0
  91. package/dist/cjs/bdx/index.d.ts.map +1 -1
  92. package/dist/cjs/bdx/index.js +1 -0
  93. package/dist/cjs/bdx/index.js.map +1 -1
  94. package/dist/cjs/certificate/kinds/Icac.d.ts.map +1 -1
  95. package/dist/cjs/certificate/kinds/Icac.js +1 -7
  96. package/dist/cjs/certificate/kinds/Icac.js.map +1 -1
  97. package/dist/cjs/certificate/kinds/Rcac.d.ts +1 -0
  98. package/dist/cjs/certificate/kinds/Rcac.d.ts.map +1 -1
  99. package/dist/cjs/certificate/kinds/Rcac.js +3 -0
  100. package/dist/cjs/certificate/kinds/Rcac.js.map +1 -1
  101. package/dist/cjs/certificate/kinds/definitions/operational.d.ts +1 -1
  102. package/dist/cjs/certificate/kinds/definitions/operational.js +1 -1
  103. package/dist/cjs/certificate/kinds/definitions/operational.js.map +1 -1
  104. package/dist/cjs/common/FailsafeContext.js +2 -2
  105. package/dist/cjs/common/FailsafeContext.js.map +1 -1
  106. package/dist/cjs/dcl/DclClient.d.ts.map +1 -1
  107. package/dist/cjs/dcl/DclClient.js +1 -2
  108. package/dist/cjs/dcl/DclClient.js.map +1 -1
  109. package/dist/cjs/dcl/DclOtaUpdateService.d.ts +30 -31
  110. package/dist/cjs/dcl/DclOtaUpdateService.d.ts.map +1 -1
  111. package/dist/cjs/dcl/DclOtaUpdateService.js +191 -92
  112. package/dist/cjs/dcl/DclOtaUpdateService.js.map +2 -2
  113. package/dist/cjs/dcl/index.d.ts +0 -3
  114. package/dist/cjs/dcl/index.d.ts.map +1 -1
  115. package/dist/cjs/dcl/index.js +0 -3
  116. package/dist/cjs/dcl/index.js.map +1 -1
  117. package/dist/cjs/fabric/Fabric.d.ts +53 -9
  118. package/dist/cjs/fabric/Fabric.d.ts.map +1 -1
  119. package/dist/cjs/fabric/Fabric.js +59 -32
  120. package/dist/cjs/fabric/Fabric.js.map +1 -1
  121. package/dist/cjs/fabric/FabricAuthority.js +1 -1
  122. package/dist/cjs/fabric/FabricAuthority.js.map +1 -1
  123. package/dist/cjs/fabric/FabricManager.d.ts +14 -5
  124. package/dist/cjs/fabric/FabricManager.d.ts.map +1 -1
  125. package/dist/cjs/fabric/FabricManager.js +63 -42
  126. package/dist/cjs/fabric/FabricManager.js.map +1 -1
  127. package/dist/cjs/groups/FabricGroups.d.ts.map +1 -1
  128. package/dist/cjs/groups/FabricGroups.js +4 -8
  129. package/dist/cjs/groups/FabricGroups.js.map +1 -1
  130. package/dist/cjs/index.d.ts +1 -0
  131. package/dist/cjs/index.d.ts.map +1 -1
  132. package/dist/cjs/index.js +1 -0
  133. package/dist/cjs/index.js.map +1 -1
  134. package/dist/cjs/interaction/InteractionMessenger.d.ts +1 -106
  135. package/dist/cjs/interaction/InteractionMessenger.d.ts.map +1 -1
  136. package/dist/cjs/interaction/InteractionMessenger.js +2 -143
  137. package/dist/cjs/interaction/InteractionMessenger.js.map +2 -2
  138. package/dist/cjs/interaction/index.d.ts +0 -1
  139. package/dist/cjs/interaction/index.d.ts.map +1 -1
  140. package/dist/cjs/interaction/index.js +0 -1
  141. package/dist/cjs/interaction/index.js.map +1 -1
  142. package/dist/cjs/mdns/MdnsClient.d.ts +4 -4
  143. package/dist/cjs/mdns/MdnsClient.d.ts.map +1 -1
  144. package/dist/cjs/mdns/MdnsClient.js +12 -15
  145. package/dist/cjs/mdns/MdnsClient.js.map +1 -1
  146. package/dist/cjs/mdns/MdnsConsts.d.ts +3 -3
  147. package/dist/cjs/mdns/MdnsConsts.d.ts.map +1 -1
  148. package/dist/cjs/mdns/MdnsConsts.js +3 -2
  149. package/dist/cjs/mdns/MdnsConsts.js.map +1 -1
  150. package/dist/{esm/dcl → cjs/ota}/OtaImageHeader.d.ts.map +1 -1
  151. package/dist/cjs/{dcl → ota}/OtaImageHeader.js.map +1 -1
  152. package/dist/cjs/{dcl → ota}/OtaImageReader.d.ts.map +1 -1
  153. package/dist/cjs/{dcl → ota}/OtaImageReader.js +0 -2
  154. package/dist/cjs/ota/OtaImageReader.js.map +6 -0
  155. package/dist/{esm/dcl → cjs/ota}/OtaImageWriter.d.ts +1 -1
  156. package/dist/cjs/{dcl → ota}/OtaImageWriter.d.ts.map +1 -1
  157. package/dist/cjs/{dcl → ota}/OtaImageWriter.js.map +1 -1
  158. package/dist/cjs/ota/index.d.ts +9 -0
  159. package/dist/cjs/ota/index.d.ts.map +1 -0
  160. package/dist/cjs/ota/index.js +26 -0
  161. package/dist/cjs/ota/index.js.map +6 -0
  162. package/dist/cjs/peer/ControllerCommissioner.d.ts.map +1 -1
  163. package/dist/cjs/peer/ControllerCommissioner.js +5 -0
  164. package/dist/cjs/peer/ControllerCommissioner.js.map +1 -1
  165. package/dist/cjs/peer/ControllerCommissioningFlow.d.ts +11 -3
  166. package/dist/cjs/peer/ControllerCommissioningFlow.d.ts.map +1 -1
  167. package/dist/cjs/peer/ControllerCommissioningFlow.js +119 -40
  168. package/dist/cjs/peer/ControllerCommissioningFlow.js.map +1 -1
  169. package/dist/cjs/peer/PeerSet.d.ts.map +1 -1
  170. package/dist/cjs/peer/PeerSet.js +17 -10
  171. package/dist/cjs/peer/PeerSet.js.map +1 -1
  172. package/dist/cjs/protocol/DeviceAdvertiser.js +3 -3
  173. package/dist/cjs/protocol/DeviceAdvertiser.js.map +1 -1
  174. package/dist/cjs/protocol/ExchangeProvider.d.ts +2 -2
  175. package/dist/cjs/protocol/ExchangeProvider.d.ts.map +1 -1
  176. package/dist/cjs/protocol/ExchangeProvider.js +2 -2
  177. package/dist/cjs/protocol/ExchangeProvider.js.map +1 -1
  178. package/dist/cjs/protocol/MessageExchange.js +3 -3
  179. package/dist/cjs/protocol/MessageExchange.js.map +1 -1
  180. package/dist/cjs/protocol/ProtocolMocks.d.ts +2 -2
  181. package/dist/cjs/protocol/ProtocolMocks.d.ts.map +1 -1
  182. package/dist/cjs/protocol/ProtocolMocks.js +1 -1
  183. package/dist/cjs/protocol/ProtocolMocks.js.map +1 -1
  184. package/dist/cjs/session/NodeSession.d.ts.map +1 -1
  185. package/dist/cjs/session/NodeSession.js +2 -2
  186. package/dist/cjs/session/NodeSession.js.map +1 -1
  187. package/dist/cjs/session/Session.d.ts.map +1 -1
  188. package/dist/cjs/session/Session.js +1 -0
  189. package/dist/cjs/session/Session.js.map +1 -1
  190. package/dist/cjs/session/SessionManager.js +2 -2
  191. package/dist/cjs/session/SessionManager.js.map +1 -1
  192. package/dist/cjs/session/SessionParameters.d.ts.map +1 -1
  193. package/dist/cjs/session/SessionParameters.js +7 -1
  194. package/dist/cjs/session/SessionParameters.js.map +1 -1
  195. package/dist/cjs/session/pase/PaseServer.d.ts.map +1 -1
  196. package/dist/cjs/session/pase/PaseServer.js +1 -0
  197. package/dist/cjs/session/pase/PaseServer.js.map +1 -1
  198. package/dist/esm/action/client/ClientBdx.d.ts +17 -0
  199. package/dist/esm/action/client/ClientBdx.d.ts.map +1 -0
  200. package/dist/esm/action/client/ClientBdx.js +6 -0
  201. package/dist/esm/action/client/ClientBdx.js.map +6 -0
  202. package/dist/esm/action/client/ClientInteraction.d.ts +10 -1
  203. package/dist/esm/action/client/ClientInteraction.d.ts.map +1 -1
  204. package/dist/esm/action/client/ClientInteraction.js +24 -1
  205. package/dist/esm/action/client/ClientInteraction.js.map +1 -1
  206. package/dist/esm/action/client/QueuedClientInteraction.d.ts +11 -3
  207. package/dist/esm/action/client/QueuedClientInteraction.d.ts.map +1 -1
  208. package/dist/esm/action/client/QueuedClientInteraction.js +5 -1
  209. package/dist/esm/action/client/QueuedClientInteraction.js.map +1 -1
  210. package/dist/esm/action/client/index.d.ts +1 -0
  211. package/dist/esm/action/client/index.d.ts.map +1 -1
  212. package/dist/esm/action/client/index.js +1 -0
  213. package/dist/esm/action/client/index.js.map +1 -1
  214. package/dist/esm/action/request/Read.d.ts.map +1 -1
  215. package/dist/esm/action/request/Read.js +2 -2
  216. package/dist/esm/action/request/Read.js.map +1 -1
  217. package/dist/esm/action/request/Write.js +4 -3
  218. package/dist/esm/action/request/Write.js.map +1 -1
  219. package/dist/esm/advertisement/ble/BleAdvertisement.d.ts +1 -1
  220. package/dist/esm/advertisement/ble/BleAdvertisement.d.ts.map +1 -1
  221. package/dist/esm/advertisement/ble/BleAdvertisement.js +2 -2
  222. package/dist/esm/advertisement/ble/BleAdvertisement.js.map +1 -1
  223. package/dist/esm/advertisement/mdns/CommissionableMdnsAdvertisement.d.ts +1 -1
  224. package/dist/esm/advertisement/mdns/CommissionableMdnsAdvertisement.js +1 -1
  225. package/dist/esm/advertisement/mdns/CommissionableMdnsAdvertisement.js.map +1 -1
  226. package/dist/esm/advertisement/mdns/OperationalMdnsAdvertisement.d.ts.map +1 -1
  227. package/dist/esm/advertisement/mdns/OperationalMdnsAdvertisement.js +4 -6
  228. package/dist/esm/advertisement/mdns/OperationalMdnsAdvertisement.js.map +1 -1
  229. package/dist/esm/bdx/BdxClient.d.ts +2 -0
  230. package/dist/esm/bdx/BdxClient.d.ts.map +1 -1
  231. package/dist/esm/bdx/BdxClient.js +6 -0
  232. package/dist/esm/bdx/BdxClient.js.map +1 -1
  233. package/dist/esm/bdx/BdxError.d.ts +2 -0
  234. package/dist/esm/bdx/BdxError.d.ts.map +1 -1
  235. package/dist/esm/bdx/BdxError.js +2 -0
  236. package/dist/esm/bdx/BdxError.js.map +1 -1
  237. package/dist/esm/bdx/BdxMessenger.d.ts +5 -1
  238. package/dist/esm/bdx/BdxMessenger.d.ts.map +1 -1
  239. package/dist/esm/bdx/BdxMessenger.js +14 -5
  240. package/dist/esm/bdx/BdxMessenger.js.map +1 -1
  241. package/dist/esm/bdx/BdxProtocol.d.ts +14 -7
  242. package/dist/esm/bdx/BdxProtocol.d.ts.map +1 -1
  243. package/dist/esm/bdx/BdxProtocol.js +82 -20
  244. package/dist/esm/bdx/BdxProtocol.js.map +1 -1
  245. package/dist/esm/bdx/BdxSession.d.ts +10 -3
  246. package/dist/esm/bdx/BdxSession.d.ts.map +1 -1
  247. package/dist/esm/bdx/BdxSession.js +34 -9
  248. package/dist/esm/bdx/BdxSession.js.map +1 -1
  249. package/dist/esm/bdx/BdxSessionConfiguration.d.ts +16 -1
  250. package/dist/esm/bdx/BdxSessionConfiguration.d.ts.map +1 -1
  251. package/dist/esm/bdx/BdxSessionConfiguration.js +6 -1
  252. package/dist/esm/bdx/BdxSessionConfiguration.js.map +1 -1
  253. package/dist/esm/bdx/FileDesignator.d.ts +15 -1
  254. package/dist/esm/bdx/FileDesignator.d.ts.map +1 -1
  255. package/dist/esm/bdx/FileDesignator.js +29 -3
  256. package/dist/esm/bdx/FileDesignator.js.map +1 -1
  257. package/dist/esm/bdx/PersistedFileDesignator.d.ts +10 -2
  258. package/dist/esm/bdx/PersistedFileDesignator.d.ts.map +1 -1
  259. package/dist/esm/bdx/PersistedFileDesignator.js +24 -6
  260. package/dist/esm/bdx/PersistedFileDesignator.js.map +1 -1
  261. package/dist/esm/bdx/ScopedStorage.d.ts +18 -0
  262. package/dist/esm/bdx/ScopedStorage.d.ts.map +1 -0
  263. package/dist/esm/bdx/ScopedStorage.js +16 -0
  264. package/dist/esm/bdx/ScopedStorage.js.map +6 -0
  265. package/dist/esm/bdx/bdx-session-initiator.d.ts.map +1 -1
  266. package/dist/esm/bdx/bdx-session-initiator.js +10 -2
  267. package/dist/esm/bdx/bdx-session-initiator.js.map +1 -1
  268. package/dist/esm/bdx/flow/DrivenSendingFlow.d.ts.map +1 -1
  269. package/dist/esm/bdx/flow/DrivenSendingFlow.js +2 -0
  270. package/dist/esm/bdx/flow/DrivenSendingFlow.js.map +1 -1
  271. package/dist/esm/bdx/flow/DrivingReceivingFlow.d.ts.map +1 -1
  272. package/dist/esm/bdx/flow/DrivingReceivingFlow.js +1 -0
  273. package/dist/esm/bdx/flow/DrivingReceivingFlow.js.map +1 -1
  274. package/dist/esm/bdx/flow/Flow.d.ts +7 -0
  275. package/dist/esm/bdx/flow/Flow.d.ts.map +1 -1
  276. package/dist/esm/bdx/flow/Flow.js +23 -2
  277. package/dist/esm/bdx/flow/Flow.js.map +1 -1
  278. package/dist/esm/bdx/flow/FollowingReceivingFlow.d.ts.map +1 -1
  279. package/dist/esm/bdx/flow/FollowingReceivingFlow.js +3 -0
  280. package/dist/esm/bdx/flow/FollowingReceivingFlow.js.map +1 -1
  281. package/dist/esm/bdx/flow/FollowingSendingFlow.d.ts.map +1 -1
  282. package/dist/esm/bdx/flow/FollowingSendingFlow.js +1 -0
  283. package/dist/esm/bdx/flow/FollowingSendingFlow.js.map +1 -1
  284. package/dist/esm/bdx/flow/OutboundFlow.d.ts.map +1 -1
  285. package/dist/esm/bdx/flow/OutboundFlow.js +1 -0
  286. package/dist/esm/bdx/flow/OutboundFlow.js.map +1 -1
  287. package/dist/esm/bdx/index.d.ts +1 -0
  288. package/dist/esm/bdx/index.d.ts.map +1 -1
  289. package/dist/esm/bdx/index.js +1 -0
  290. package/dist/esm/bdx/index.js.map +1 -1
  291. package/dist/esm/certificate/kinds/Icac.d.ts.map +1 -1
  292. package/dist/esm/certificate/kinds/Icac.js +1 -7
  293. package/dist/esm/certificate/kinds/Icac.js.map +1 -1
  294. package/dist/esm/certificate/kinds/Rcac.d.ts +1 -0
  295. package/dist/esm/certificate/kinds/Rcac.d.ts.map +1 -1
  296. package/dist/esm/certificate/kinds/Rcac.js +3 -0
  297. package/dist/esm/certificate/kinds/Rcac.js.map +1 -1
  298. package/dist/esm/certificate/kinds/definitions/operational.d.ts +1 -1
  299. package/dist/esm/certificate/kinds/definitions/operational.js +1 -1
  300. package/dist/esm/certificate/kinds/definitions/operational.js.map +1 -1
  301. package/dist/esm/common/FailsafeContext.js +2 -2
  302. package/dist/esm/common/FailsafeContext.js.map +1 -1
  303. package/dist/esm/dcl/DclClient.d.ts.map +1 -1
  304. package/dist/esm/dcl/DclClient.js +1 -2
  305. package/dist/esm/dcl/DclClient.js.map +1 -1
  306. package/dist/esm/dcl/DclOtaUpdateService.d.ts +30 -31
  307. package/dist/esm/dcl/DclOtaUpdateService.d.ts.map +1 -1
  308. package/dist/esm/dcl/DclOtaUpdateService.js +191 -93
  309. package/dist/esm/dcl/DclOtaUpdateService.js.map +2 -2
  310. package/dist/esm/dcl/index.d.ts +0 -3
  311. package/dist/esm/dcl/index.d.ts.map +1 -1
  312. package/dist/esm/dcl/index.js +0 -3
  313. package/dist/esm/dcl/index.js.map +1 -1
  314. package/dist/esm/fabric/Fabric.d.ts +53 -9
  315. package/dist/esm/fabric/Fabric.d.ts.map +1 -1
  316. package/dist/esm/fabric/Fabric.js +67 -33
  317. package/dist/esm/fabric/Fabric.js.map +1 -1
  318. package/dist/esm/fabric/FabricAuthority.js +1 -1
  319. package/dist/esm/fabric/FabricAuthority.js.map +1 -1
  320. package/dist/esm/fabric/FabricManager.d.ts +14 -5
  321. package/dist/esm/fabric/FabricManager.d.ts.map +1 -1
  322. package/dist/esm/fabric/FabricManager.js +66 -43
  323. package/dist/esm/fabric/FabricManager.js.map +1 -1
  324. package/dist/esm/groups/FabricGroups.d.ts.map +1 -1
  325. package/dist/esm/groups/FabricGroups.js +5 -9
  326. package/dist/esm/groups/FabricGroups.js.map +1 -1
  327. package/dist/esm/index.d.ts +1 -0
  328. package/dist/esm/index.d.ts.map +1 -1
  329. package/dist/esm/index.js +1 -0
  330. package/dist/esm/index.js.map +1 -1
  331. package/dist/esm/interaction/InteractionMessenger.d.ts +1 -106
  332. package/dist/esm/interaction/InteractionMessenger.d.ts.map +1 -1
  333. package/dist/esm/interaction/InteractionMessenger.js +2 -144
  334. package/dist/esm/interaction/InteractionMessenger.js.map +2 -2
  335. package/dist/esm/interaction/index.d.ts +0 -1
  336. package/dist/esm/interaction/index.d.ts.map +1 -1
  337. package/dist/esm/interaction/index.js +0 -1
  338. package/dist/esm/interaction/index.js.map +1 -1
  339. package/dist/esm/mdns/MdnsClient.d.ts +4 -4
  340. package/dist/esm/mdns/MdnsClient.d.ts.map +1 -1
  341. package/dist/esm/mdns/MdnsClient.js +13 -17
  342. package/dist/esm/mdns/MdnsClient.js.map +1 -1
  343. package/dist/esm/mdns/MdnsConsts.d.ts +3 -3
  344. package/dist/esm/mdns/MdnsConsts.d.ts.map +1 -1
  345. package/dist/esm/mdns/MdnsConsts.js +3 -2
  346. package/dist/esm/mdns/MdnsConsts.js.map +1 -1
  347. package/dist/{cjs/dcl → esm/ota}/OtaImageHeader.d.ts.map +1 -1
  348. package/dist/esm/{dcl → ota}/OtaImageHeader.js.map +1 -1
  349. package/dist/esm/{dcl → ota}/OtaImageReader.d.ts.map +1 -1
  350. package/dist/esm/{dcl → ota}/OtaImageReader.js +0 -3
  351. package/dist/esm/ota/OtaImageReader.js.map +6 -0
  352. package/dist/{cjs/dcl → esm/ota}/OtaImageWriter.d.ts +1 -1
  353. package/dist/esm/{dcl → ota}/OtaImageWriter.d.ts.map +1 -1
  354. package/dist/esm/{dcl → ota}/OtaImageWriter.js.map +1 -1
  355. package/dist/esm/ota/index.d.ts +9 -0
  356. package/dist/esm/ota/index.d.ts.map +1 -0
  357. package/dist/esm/ota/index.js +9 -0
  358. package/dist/esm/ota/index.js.map +6 -0
  359. package/dist/esm/peer/ControllerCommissioner.d.ts.map +1 -1
  360. package/dist/esm/peer/ControllerCommissioner.js +5 -0
  361. package/dist/esm/peer/ControllerCommissioner.js.map +1 -1
  362. package/dist/esm/peer/ControllerCommissioningFlow.d.ts +11 -3
  363. package/dist/esm/peer/ControllerCommissioningFlow.d.ts.map +1 -1
  364. package/dist/esm/peer/ControllerCommissioningFlow.js +119 -41
  365. package/dist/esm/peer/ControllerCommissioningFlow.js.map +1 -1
  366. package/dist/esm/peer/PeerSet.d.ts.map +1 -1
  367. package/dist/esm/peer/PeerSet.js +17 -10
  368. package/dist/esm/peer/PeerSet.js.map +1 -1
  369. package/dist/esm/protocol/DeviceAdvertiser.js +3 -3
  370. package/dist/esm/protocol/DeviceAdvertiser.js.map +1 -1
  371. package/dist/esm/protocol/ExchangeProvider.d.ts +2 -2
  372. package/dist/esm/protocol/ExchangeProvider.d.ts.map +1 -1
  373. package/dist/esm/protocol/ExchangeProvider.js +2 -2
  374. package/dist/esm/protocol/ExchangeProvider.js.map +1 -1
  375. package/dist/esm/protocol/MessageExchange.js +3 -3
  376. package/dist/esm/protocol/MessageExchange.js.map +1 -1
  377. package/dist/esm/protocol/ProtocolMocks.d.ts +2 -2
  378. package/dist/esm/protocol/ProtocolMocks.d.ts.map +1 -1
  379. package/dist/esm/protocol/ProtocolMocks.js +11 -2
  380. package/dist/esm/protocol/ProtocolMocks.js.map +1 -1
  381. package/dist/esm/session/NodeSession.d.ts.map +1 -1
  382. package/dist/esm/session/NodeSession.js +3 -3
  383. package/dist/esm/session/NodeSession.js.map +1 -1
  384. package/dist/esm/session/Session.d.ts.map +1 -1
  385. package/dist/esm/session/Session.js +1 -0
  386. package/dist/esm/session/Session.js.map +1 -1
  387. package/dist/esm/session/SessionManager.js +2 -2
  388. package/dist/esm/session/SessionManager.js.map +1 -1
  389. package/dist/esm/session/SessionParameters.d.ts.map +1 -1
  390. package/dist/esm/session/SessionParameters.js +7 -1
  391. package/dist/esm/session/SessionParameters.js.map +1 -1
  392. package/dist/esm/session/pase/PaseServer.d.ts.map +1 -1
  393. package/dist/esm/session/pase/PaseServer.js +1 -0
  394. package/dist/esm/session/pase/PaseServer.js.map +1 -1
  395. package/package.json +6 -6
  396. package/src/action/client/ClientBdx.ts +19 -0
  397. package/src/action/client/ClientInteraction.ts +34 -4
  398. package/src/action/client/QueuedClientInteraction.ts +16 -12
  399. package/src/action/client/index.ts +1 -0
  400. package/src/action/request/Read.ts +8 -2
  401. package/src/action/request/Write.ts +3 -3
  402. package/src/advertisement/ble/BleAdvertisement.ts +4 -4
  403. package/src/advertisement/mdns/CommissionableMdnsAdvertisement.ts +1 -1
  404. package/src/advertisement/mdns/OperationalMdnsAdvertisement.ts +4 -6
  405. package/src/bdx/BdxClient.ts +8 -0
  406. package/src/bdx/BdxError.ts +2 -0
  407. package/src/bdx/BdxMessenger.ts +16 -5
  408. package/src/bdx/BdxProtocol.ts +104 -22
  409. package/src/bdx/BdxSession.ts +38 -16
  410. package/src/bdx/BdxSessionConfiguration.ts +24 -2
  411. package/src/bdx/FileDesignator.ts +31 -2
  412. package/src/bdx/PersistedFileDesignator.ts +35 -8
  413. package/src/bdx/ScopedStorage.ts +25 -0
  414. package/src/bdx/bdx-session-initiator.ts +11 -2
  415. package/src/bdx/flow/DrivenSendingFlow.ts +3 -0
  416. package/src/bdx/flow/DrivingReceivingFlow.ts +1 -0
  417. package/src/bdx/flow/Flow.ts +29 -2
  418. package/src/bdx/flow/FollowingReceivingFlow.ts +3 -0
  419. package/src/bdx/flow/FollowingSendingFlow.ts +2 -0
  420. package/src/bdx/flow/OutboundFlow.ts +1 -0
  421. package/src/bdx/index.ts +1 -0
  422. package/src/certificate/kinds/Icac.ts +4 -1
  423. package/src/certificate/kinds/Rcac.ts +4 -0
  424. package/src/certificate/kinds/definitions/operational.ts +1 -1
  425. package/src/common/FailsafeContext.ts +2 -2
  426. package/src/dcl/DclClient.ts +1 -2
  427. package/src/dcl/DclOtaUpdateService.ts +266 -125
  428. package/src/dcl/index.ts +0 -3
  429. package/src/fabric/Fabric.ts +118 -39
  430. package/src/fabric/FabricAuthority.ts +1 -1
  431. package/src/fabric/FabricManager.ts +76 -49
  432. package/src/groups/FabricGroups.ts +5 -9
  433. package/src/index.ts +1 -0
  434. package/src/interaction/InteractionMessenger.ts +2 -186
  435. package/src/interaction/index.ts +0 -1
  436. package/src/mdns/MdnsClient.ts +14 -19
  437. package/src/mdns/MdnsConsts.ts +5 -4
  438. package/src/{dcl → ota}/OtaImageReader.ts +1 -5
  439. package/src/{dcl → ota}/OtaImageWriter.ts +1 -1
  440. package/src/ota/index.ts +9 -0
  441. package/src/peer/ControllerCommissioner.ts +7 -0
  442. package/src/peer/ControllerCommissioningFlow.ts +161 -54
  443. package/src/peer/PeerSet.ts +25 -12
  444. package/src/protocol/DeviceAdvertiser.ts +5 -5
  445. package/src/protocol/ExchangeProvider.ts +3 -3
  446. package/src/protocol/MessageExchange.ts +3 -3
  447. package/src/protocol/ProtocolMocks.ts +13 -4
  448. package/src/session/NodeSession.ts +3 -3
  449. package/src/session/Session.ts +1 -0
  450. package/src/session/SessionManager.ts +2 -2
  451. package/src/session/SessionParameters.ts +10 -2
  452. package/src/session/pase/PaseServer.ts +2 -1
  453. package/dist/cjs/dcl/OtaImageReader.js.map +0 -6
  454. package/dist/cjs/interaction/SubscriptionClient.d.ts +0 -39
  455. package/dist/cjs/interaction/SubscriptionClient.d.ts.map +0 -1
  456. package/dist/cjs/interaction/SubscriptionClient.js +0 -93
  457. package/dist/cjs/interaction/SubscriptionClient.js.map +0 -6
  458. package/dist/esm/dcl/OtaImageReader.js.map +0 -6
  459. package/dist/esm/interaction/SubscriptionClient.d.ts +0 -39
  460. package/dist/esm/interaction/SubscriptionClient.d.ts.map +0 -1
  461. package/dist/esm/interaction/SubscriptionClient.js +0 -73
  462. package/dist/esm/interaction/SubscriptionClient.js.map +0 -6
  463. package/src/interaction/SubscriptionClient.ts +0 -104
  464. /package/dist/cjs/{dcl → ota}/OtaImageHeader.d.ts +0 -0
  465. /package/dist/cjs/{dcl → ota}/OtaImageHeader.js +0 -0
  466. /package/dist/cjs/{dcl → ota}/OtaImageReader.d.ts +0 -0
  467. /package/dist/cjs/{dcl → ota}/OtaImageWriter.js +0 -0
  468. /package/dist/esm/{dcl → ota}/OtaImageHeader.d.ts +0 -0
  469. /package/dist/esm/{dcl → ota}/OtaImageHeader.js +0 -0
  470. /package/dist/esm/{dcl → ota}/OtaImageReader.d.ts +0 -0
  471. /package/dist/esm/{dcl → ota}/OtaImageWriter.js +0 -0
  472. /package/src/{dcl → ota}/OtaImageHeader.ts +0 -0
@@ -5,8 +5,8 @@
5
5
  */
6
6
 
7
7
  import { PersistedFileDesignator } from "#bdx/PersistedFileDesignator.js";
8
+ import { ScopedStorage } from "#bdx/ScopedStorage.js";
8
9
  import {
9
- Bytes,
10
10
  Construction,
11
11
  Crypto,
12
12
  Diagnostic,
@@ -22,8 +22,8 @@ import {
22
22
  StorageService,
23
23
  } from "#general";
24
24
  import { DeviceSoftwareVersionModelDclSchema, VendorId } from "#types";
25
+ import { OtaImageReader } from "../ota/OtaImageReader.js";
25
26
  import { DclClient, MatterDclError } from "./DclClient.js";
26
- import { OtaImageReader } from "./OtaImageReader.js";
27
27
 
28
28
  const logger = Logger.get("DclOtaUpdateService");
29
29
 
@@ -42,7 +42,7 @@ export type OtaUpdateInfo = DeviceSoftwareVersionModelDclSchema;
42
42
 
43
43
  const OTA_DOWNLOAD_TIMEOUT = Minutes(5);
44
44
 
45
- const OTA_FILENAME_REGEX = /^([0-9a-f]+)-([0-9a-f]+)-(prod|test)$/i;
45
+ const OTA_FILENAME_REGEX = /^[0-9a-f]+[./][0-9a-f]+[./](?:prod|test)$/i;
46
46
 
47
47
  /**
48
48
  * Service to query and manage OTA updates from the Distributed Compliance Ledger (DCL), but also allows to inject own
@@ -55,7 +55,7 @@ const OTA_FILENAME_REGEX = /^([0-9a-f]+)-([0-9a-f]+)-(prod|test)$/i;
55
55
  export class DclOtaUpdateService {
56
56
  readonly #construction: Construction<DclOtaUpdateService>;
57
57
  readonly #crypto: Crypto;
58
- #storage?: StorageContext;
58
+ #storage?: ScopedStorage;
59
59
 
60
60
  get construction() {
61
61
  return this.#construction;
@@ -67,7 +67,10 @@ export class DclOtaUpdateService {
67
67
 
68
68
  // THe construction is async and will be enforced when needed
69
69
  this.#construction = Construction(this, async () => {
70
- this.#storage = (await environment.get(StorageService).open("ota")).createContext("bin");
70
+ this.#storage = new ScopedStorage(
71
+ (await environment.get(StorageService).open("ota")).createContext("bin"),
72
+ "ota",
73
+ );
71
74
  });
72
75
  }
73
76
 
@@ -75,25 +78,57 @@ export class DclOtaUpdateService {
75
78
  return new DclOtaUpdateService(env);
76
79
  }
77
80
 
81
+ get storage() {
82
+ this.construction.assert();
83
+ return this.#storage!;
84
+ }
85
+
78
86
  /**
79
87
  * Check DCL for available software updates for a device, defined by it's vendor ID, product ID and current
80
88
  * software version. If a target software version is provided, only that version is checked for applicability and
81
89
  * ignoring other newer versions.
82
- *
83
- * @param vendorId - Vendor ID of the device
84
- * @param productId - Product ID of the device
85
- * @param currentSoftwareVersion - Current software version of the device
86
- * @param isProduction - Whether to check production DCL (true) or test DCL (false)
87
- * @param targetSoftwareVersion - Optional specific version to check. If not provided, checks for any newer version.
88
- * @returns Update information if an update is available, undefined otherwise
89
90
  */
90
- async checkForUpdate(
91
- vendorId: number,
92
- productId: number,
93
- currentSoftwareVersion: number,
94
- isProduction = true,
95
- targetSoftwareVersion?: number,
96
- ) {
91
+ async checkForUpdate(options: {
92
+ vendorId: number;
93
+ productId: number;
94
+ currentSoftwareVersion: number;
95
+ includeStoredUpdates?: boolean;
96
+ isProduction?: boolean;
97
+ targetSoftwareVersion?: number;
98
+ }) {
99
+ const {
100
+ vendorId,
101
+ productId,
102
+ currentSoftwareVersion,
103
+ includeStoredUpdates = false,
104
+ isProduction = true,
105
+ targetSoftwareVersion,
106
+ } = options;
107
+
108
+ let localUpdateFound: DeviceSoftwareVersionModelDclSchema | undefined = undefined;
109
+ if (includeStoredUpdates) {
110
+ const localUpdates = await this.find({
111
+ vendorId,
112
+ productId,
113
+ isProduction,
114
+ currentVersion: currentSoftwareVersion,
115
+ });
116
+ if (localUpdates.length) {
117
+ localUpdateFound = {
118
+ ...localUpdates[0],
119
+ vid: VendorId(vendorId),
120
+ pid: productId,
121
+ cdVersionNumber: 0,
122
+ softwareVersionValid: true,
123
+ schemaVersion: 1,
124
+ minApplicableSoftwareVersion: localUpdates[0].minApplicableSoftwareVersion ?? 0,
125
+ maxApplicableSoftwareVersion:
126
+ localUpdates[0].maxApplicableSoftwareVersion ?? localUpdates[0].softwareVersion - 1,
127
+ };
128
+ logger.debug(`Found local update`, Diagnostic.dict(localUpdateFound));
129
+ }
130
+ }
131
+
97
132
  const dclClient = new DclClient(isProduction);
98
133
 
99
134
  const diagnosticInfo = {
@@ -106,6 +141,16 @@ export class DclOtaUpdateService {
106
141
  try {
107
142
  // If a specific target version is requested, check only that version
108
143
  if (targetSoftwareVersion !== undefined) {
144
+ if (localUpdateFound !== undefined && localUpdateFound.softwareVersion === targetSoftwareVersion) {
145
+ logger.debug(
146
+ `Update already available locally for specific version`,
147
+ Diagnostic.dict({
148
+ ...diagnosticInfo,
149
+ target: targetSoftwareVersion,
150
+ }),
151
+ );
152
+ return localUpdateFound;
153
+ }
109
154
  logger.debug(
110
155
  `Checking update in DCL for specific version`,
111
156
  Diagnostic.dict({
@@ -125,30 +170,49 @@ export class DclOtaUpdateService {
125
170
  // Otherwise, get all available versions and find the best applicable one
126
171
  const softwareVersions = await dclClient.fetchModelVersionsByVidPid(vendorId, productId);
127
172
 
128
- // Filter for versions higher than current, sort to check highest version number first
173
+ // Filter for versions higher than the current, sort to check the highest version number first
129
174
  const newerVersions = softwareVersions
130
175
  .filter(version => version > currentSoftwareVersion)
131
176
  .sort((a, b) => b - a);
132
177
 
133
178
  if (newerVersions.length === 0) {
134
179
  logger.debug(`No newer versions available in DCL`, Diagnostic.dict(diagnosticInfo));
180
+
181
+ if (localUpdateFound !== undefined) {
182
+ logger.info(`Other update already available locally`, Diagnostic.dict(diagnosticInfo));
183
+ return localUpdateFound;
184
+ }
135
185
  return;
136
186
  }
137
187
 
138
188
  logger.debug(`Found ${newerVersions.length} newer version(s) in DCL`, Diagnostic.dict(diagnosticInfo));
139
189
 
140
- // Check each version starting from highest, find first applicable one
190
+ // Check each version starting from highest, find the first applicable one
141
191
  for (const version of newerVersions) {
142
- const updateInfo = await this.#checkSpecificVersion(
143
- dclClient,
144
- vendorId,
145
- productId,
146
- version,
147
- currentSoftwareVersion,
148
- );
149
- if (updateInfo !== undefined) {
150
- logger.info(`Update available in DCL`, Diagnostic.dict({ new: version, ...diagnosticInfo }));
151
- return updateInfo;
192
+ try {
193
+ const updateInfo = await this.#checkSpecificVersion(
194
+ dclClient,
195
+ vendorId,
196
+ productId,
197
+ version,
198
+ currentSoftwareVersion,
199
+ );
200
+ if (updateInfo !== undefined) {
201
+ logger.info(`Update available in DCL`, Diagnostic.dict({ new: version, ...diagnosticInfo }));
202
+
203
+ if (
204
+ localUpdateFound !== undefined &&
205
+ localUpdateFound.softwareVersion > updateInfo.softwareVersion
206
+ ) {
207
+ logger.info(`Newer update already available locally`, Diagnostic.dict(diagnosticInfo));
208
+ return localUpdateFound;
209
+ }
210
+
211
+ return updateInfo;
212
+ }
213
+ } catch (error) {
214
+ MatterDclError.accept(error);
215
+ logger.info(`Failed to check for update for VID: ${vendorId}, PID: ${productId}: ${error.message}`);
152
216
  }
153
217
  }
154
218
 
@@ -157,6 +221,11 @@ export class DclOtaUpdateService {
157
221
  MatterDclError.accept(error);
158
222
  logger.info(`Failed to check for updates for VID: ${vendorId}, PID: ${productId}: ${error.message}`);
159
223
  }
224
+
225
+ if (localUpdateFound !== undefined) {
226
+ logger.info(`Other update already available locally`, Diagnostic.dict(diagnosticInfo));
227
+ return localUpdateFound;
228
+ }
160
229
  }
161
230
 
162
231
  async #verifyUpdate(updateInfo: OtaUpdateInfo, fileDesignator: PersistedFileDesignator) {
@@ -193,7 +262,7 @@ export class DclOtaUpdateService {
193
262
  }
194
263
 
195
264
  #fileName(vid: number, pid: number, isProduction: boolean) {
196
- return `${vid.toString(16)}-${pid.toString(16)}-${isProduction ? "prod" : "test"}`;
265
+ return `${vid.toString(16)}.${pid.toString(16)}.${isProduction ? "prod" : "test"}`;
197
266
  }
198
267
 
199
268
  /**
@@ -270,17 +339,13 @@ export class DclOtaUpdateService {
270
339
  prod: isProduction,
271
340
  };
272
341
 
273
- if (!otaUrl?.trim()) {
274
- throw new OtaUpdateError("No OTA URL provided in update info");
275
- }
276
-
277
- // Generate filename with production/test indicator (version not included as we always use latest)
342
+ // Generate filename with production/test indicator (a version not included as we always use latest)
278
343
  const filename = this.#fileName(vid, pid, isProduction);
279
344
  const fileDesignator = new PersistedFileDesignator(filename, storage);
280
345
 
281
346
  if (await fileDesignator.exists()) {
282
347
  if (!force) {
283
- // File exists, and we do not force overwrite it, validate it
348
+ // File exists, and we do not force to overwrite it, validate it
284
349
  try {
285
350
  await this.#verifyUpdate(updateInfo, fileDesignator);
286
351
  logger.info(`Existing OTA image validated successfully`, Diagnostic.dict(diagnosticInfo));
@@ -293,6 +358,10 @@ export class DclOtaUpdateService {
293
358
  await fileDesignator.delete();
294
359
  }
295
360
 
361
+ if (!otaUrl?.trim()) {
362
+ throw new OtaUpdateError("No OTA URL provided in update info");
363
+ }
364
+
296
365
  // Validate protocol
297
366
  let url: URL;
298
367
  try {
@@ -468,9 +537,6 @@ export class DclOtaUpdateService {
468
537
  cdVersionNumber: options?.cdVersionNumber ?? 1,
469
538
  softwareVersionValid: options?.softwareVersionValid ?? true,
470
539
  otaUrl,
471
- otaFileSize: header.payloadSize,
472
- otaChecksum: Bytes.toBase64(header.imageDigest),
473
- otaChecksumType: header.imageDigestType,
474
540
  // Use header values if present, otherwise use provided options or defaults
475
541
  minApplicableSoftwareVersion:
476
542
  header.minApplicableSoftwareVersion ?? options?.minApplicableSoftwareVersion ?? 0,
@@ -511,16 +577,6 @@ export class DclOtaUpdateService {
511
577
  * @param fileUrl - HTTPS URL to the OTA image file
512
578
  * @param options - Optional parameters for DCL-specific fields not in OTA header
513
579
  * @returns OtaUpdateInfo with file URL and header data
514
- *
515
- * @example
516
- * ```typescript
517
- * const service = new DclOtaUpdateService(environment);
518
- * const updateInfo = await service.createUpdateInfoFromFile(
519
- * "https://example.com/ota-image.bin",
520
- * { cdVersionNumber: 1 }
521
- * );
522
- * const fileDesignator = await service.downloadUpdate(updateInfo, true);
523
- * ```
524
580
  */
525
581
  async createUpdateInfoFromFile(
526
582
  fileUrl: string,
@@ -579,71 +635,12 @@ export class DclOtaUpdateService {
579
635
  * @param options.isProduction - Filter by production (true) or test (false) mode
580
636
  * @returns Array of downloaded update information
581
637
  */
582
- async find(options?: { vendorId?: number; productId?: number; isProduction?: boolean }) {
638
+ async find(options: DclOtaUpdateService.FindOptions = {}) {
583
639
  if (this.#storage === undefined) {
584
640
  await this.construction;
585
641
  }
586
- const storage = this.#storage!;
587
642
 
588
- // Get all keys from storage
589
- const keys = await storage.keys();
590
- logger.debug(`Scanning stored OTA files, found ${keys.length} total files`);
591
-
592
- // Parse and filter files matching pattern: {vid-hex}-{pid-hex}-{prod|test}
593
- const results = new Array<{
594
- filename: string;
595
- vendorId: number;
596
- productId: number;
597
- softwareVersion: number;
598
- softwareVersionString: string;
599
- mode: "prod" | "test";
600
- size: number;
601
- }>();
602
-
603
- for (const key of keys) {
604
- const match = key.match(OTA_FILENAME_REGEX);
605
- logger.debug(`Checking stored OTA file: ${key}: match=${match !== null}`);
606
- if (!match) {
607
- continue;
608
- }
609
-
610
- const [, vidHex, pidHex, mode] = match;
611
- const vendorId = parseInt(vidHex, 16);
612
- const productId = parseInt(pidHex, 16);
613
- const isProduction = mode === "prod";
614
-
615
- // Apply filters
616
- if (options?.vendorId !== undefined && vendorId !== options.vendorId) {
617
- continue;
618
- }
619
- if (options?.productId !== undefined && productId !== options.productId) {
620
- continue;
621
- }
622
- if (options?.isProduction !== undefined && isProduction !== options.isProduction) {
623
- continue;
624
- }
625
-
626
- try {
627
- // Read header to get software version and size
628
- const fileDesignator = new PersistedFileDesignator(key, storage);
629
- const blob = await fileDesignator.openBlob();
630
- const reader = blob.stream().getReader();
631
-
632
- const header = await OtaImageReader.header(reader);
633
-
634
- results.push({
635
- filename: key,
636
- vendorId,
637
- productId,
638
- softwareVersion: header.softwareVersion,
639
- softwareVersionString: header.softwareVersionString,
640
- mode: mode as "prod" | "test",
641
- size: blob.size,
642
- });
643
- } catch (error) {
644
- logger.warn(`Failed to read OTA file ${key}:`, error);
645
- }
646
- }
643
+ const results = await this.#findEntries(this.#storage!.context, options);
647
644
 
648
645
  // Sort by vendor ID, product ID, mode, and version
649
646
  results.sort((a, b) => {
@@ -656,6 +653,127 @@ export class DclOtaUpdateService {
656
653
  return results;
657
654
  }
658
655
 
656
+ async #findEntries(
657
+ context: StorageContext,
658
+ options: DclOtaUpdateService.FindOptions,
659
+ ): Promise<DclOtaUpdateService.OtaUpdateListEntry[]> {
660
+ const { vendorId } = options;
661
+ if (vendorId !== undefined) {
662
+ const vendorEntries = await this.#findVendorEntries(context.createContext(vendorId.toString(16)), options);
663
+ return vendorEntries.map(entry => ({
664
+ ...entry,
665
+ vendorId,
666
+ filename: this.#fileName(vendorId, entry.productId, entry.mode === "prod"),
667
+ }));
668
+ }
669
+
670
+ const result = new Array<DclOtaUpdateService.OtaUpdateListEntry>();
671
+
672
+ for (const vendorIdHex of await context.contexts()) {
673
+ const vendorId = parseInt(vendorIdHex, 16);
674
+ const vendorEntries = await this.#findVendorEntries(context.createContext(vendorIdHex), options);
675
+ result.push(
676
+ ...vendorEntries.map(entry => ({
677
+ ...entry,
678
+ vendorId,
679
+ filename: this.#fileName(vendorId, entry.productId, entry.mode === "prod"),
680
+ })),
681
+ );
682
+ }
683
+
684
+ return result;
685
+ }
686
+
687
+ async #findVendorEntries(vendorContext: StorageContext, options: DclOtaUpdateService.FindOptions) {
688
+ const { productId } = options;
689
+
690
+ if (productId !== undefined) {
691
+ const productEntries = await this.#findVendorProductEntries(
692
+ vendorContext.createContext(productId.toString(16)),
693
+ options,
694
+ );
695
+ return productEntries.map(entry => ({ ...entry, productId }));
696
+ }
697
+
698
+ const result = new Array<Omit<DclOtaUpdateService.OtaUpdateListEntry, "vendorId" | "filename">>();
699
+
700
+ for (const productIdHex of await vendorContext.contexts()) {
701
+ const productId = parseInt(productIdHex, 16);
702
+ const productEntries = await this.#findVendorProductEntries(
703
+ vendorContext.createContext(productIdHex),
704
+ options,
705
+ );
706
+ result.push(...productEntries.map(entry => ({ ...entry, productId })));
707
+ }
708
+
709
+ return result;
710
+ }
711
+
712
+ async #findVendorProductEntries(productContext: StorageContext, options: DclOtaUpdateService.FindOptions) {
713
+ const { isProduction } = options;
714
+
715
+ const result = new Array<Omit<DclOtaUpdateService.OtaUpdateListEntry, "vendorId" | "productId" | "filename">>();
716
+
717
+ if (isProduction !== false && (await productContext.has("prod"))) {
718
+ const prodResult = await this.#checkEntry(new PersistedFileDesignator("prod", productContext), options);
719
+ if (prodResult !== undefined) {
720
+ result.push({
721
+ ...prodResult,
722
+ mode: "prod",
723
+ });
724
+ }
725
+ }
726
+ if (isProduction !== true && (await productContext.has("test"))) {
727
+ const testResult = await this.#checkEntry(new PersistedFileDesignator("test", productContext), options);
728
+ if (testResult !== undefined) {
729
+ result.push({
730
+ ...testResult,
731
+ mode: "test",
732
+ });
733
+ }
734
+ }
735
+
736
+ return result;
737
+ }
738
+
739
+ async #checkEntry(fileDesignator: PersistedFileDesignator, options: DclOtaUpdateService.FindOptions) {
740
+ try {
741
+ // Read header to get software version and size
742
+ const blob = await fileDesignator.openBlob();
743
+ const reader = blob.stream().getReader();
744
+
745
+ const header = await OtaImageReader.header(reader);
746
+
747
+ const { currentVersion } = options;
748
+ if (currentVersion !== undefined) {
749
+ // The current version must be within the applicable range if specified
750
+ if (
751
+ header.minApplicableSoftwareVersion !== undefined &&
752
+ currentVersion < header.minApplicableSoftwareVersion
753
+ ) {
754
+ return;
755
+ }
756
+
757
+ if (
758
+ header.maxApplicableSoftwareVersion !== undefined &&
759
+ currentVersion > header.maxApplicableSoftwareVersion
760
+ ) {
761
+ return;
762
+ }
763
+ }
764
+
765
+ return {
766
+ softwareVersion: header.softwareVersion,
767
+ softwareVersionString: header.softwareVersionString,
768
+ minApplicableSoftwareVersion: header.minApplicableSoftwareVersion,
769
+ maxApplicableSoftwareVersion: header.maxApplicableSoftwareVersion,
770
+ size: blob.size,
771
+ };
772
+ } catch (error) {
773
+ logger.warn(`Failed to read OTA file ${fileDesignator.text}:`, error);
774
+ }
775
+ }
776
+
659
777
  /** Get a PersistedFileDesignator for a stored OTA update file by filename. */
660
778
  async fileDesignatorForUpdate(filename: string) {
661
779
  if (!OTA_FILENAME_REGEX.test(filename)) {
@@ -665,9 +783,8 @@ export class DclOtaUpdateService {
665
783
  if (this.#storage === undefined) {
666
784
  await this.construction;
667
785
  }
668
- const storage = this.#storage!;
669
786
 
670
- const fileDesignator = new PersistedFileDesignator(filename, storage);
787
+ const fileDesignator = new PersistedFileDesignator(filename, this.#storage!);
671
788
  if (!(await fileDesignator.exists())) {
672
789
  throw new OtaUpdateError(`OTA file not found: ${filename}`);
673
790
  }
@@ -694,15 +811,15 @@ export class DclOtaUpdateService {
694
811
  }
695
812
  const storage = this.#storage!;
696
813
 
697
- const { vendorId, productId, isProduction = true } = options;
814
+ const { vendorId, productId, isProduction } = options;
698
815
  let { filename } = options;
699
816
 
700
- if (!filename && vendorId !== undefined && productId !== undefined) {
817
+ if (filename == undefined && vendorId !== undefined && productId !== undefined && isProduction !== undefined) {
701
818
  filename = this.#fileName(vendorId, productId, isProduction);
702
819
  }
703
820
 
704
- if (filename) {
705
- // Delete specific file by name
821
+ if (filename !== undefined) {
822
+ // Delete a specific file by name
706
823
  try {
707
824
  const fileDesignator = await this.fileDesignatorForUpdate(filename);
708
825
  await fileDesignator.delete();
@@ -721,17 +838,20 @@ export class DclOtaUpdateService {
721
838
 
722
839
  // Delete all files for the vendor with the specified mode
723
840
  const vendorHex = vendorId.toString(16);
724
- const mode = isProduction ? "prod" : "test";
725
- const pattern = new RegExp(`^${vendorHex}-[0-9a-f]+-${mode}$`, "i");
726
841
 
727
- const keys = await storage.keys();
842
+ const vendorStorage = storage.context.createContext(vendorHex);
728
843
  let deletedCount = 0;
729
844
 
730
- for (const key of keys) {
731
- if (pattern.test(key)) {
732
- const fileDesignator = new PersistedFileDesignator(key, storage);
845
+ for (const key of await vendorStorage.contexts()) {
846
+ const prodStorage = vendorStorage.createContext(key);
847
+ if (isProduction !== false && (await prodStorage.has("prod"))) {
848
+ const fileDesignator = new PersistedFileDesignator("prod", prodStorage);
849
+ await fileDesignator.delete();
850
+ deletedCount++;
851
+ }
852
+ if (isProduction !== true && (await prodStorage.has("test"))) {
853
+ const fileDesignator = new PersistedFileDesignator("test", prodStorage);
733
854
  await fileDesignator.delete();
734
- logger.info(`Deleted OTA file: ${key}`);
735
855
  deletedCount++;
736
856
  }
737
857
  }
@@ -739,3 +859,24 @@ export class DclOtaUpdateService {
739
859
  return deletedCount;
740
860
  }
741
861
  }
862
+
863
+ export namespace DclOtaUpdateService {
864
+ export type OtaUpdateListEntry = {
865
+ filename: string;
866
+ vendorId: number;
867
+ productId: number;
868
+ softwareVersion: number;
869
+ softwareVersionString: string;
870
+ minApplicableSoftwareVersion?: number;
871
+ maxApplicableSoftwareVersion?: number;
872
+ mode: "prod" | "test";
873
+ size: number;
874
+ };
875
+
876
+ export interface FindOptions {
877
+ vendorId?: number;
878
+ productId?: number;
879
+ isProduction?: boolean;
880
+ currentVersion?: number;
881
+ }
882
+ }
package/src/dcl/index.ts CHANGED
@@ -9,6 +9,3 @@ export * from "./DclClient.js";
9
9
  export * from "./DclOtaUpdateService.js";
10
10
  export * from "./DclRestApiTypes.js";
11
11
  export * from "./DclVendorInfoService.js";
12
- export * from "./OtaImageHeader.js";
13
- export * from "./OtaImageReader.js";
14
- export * from "./OtaImageWriter.js";