@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.
- package/dist/cjs/action/client/ClientBdx.d.ts +17 -0
- package/dist/cjs/action/client/ClientBdx.d.ts.map +1 -0
- package/dist/cjs/action/client/ClientBdx.js +22 -0
- package/dist/cjs/action/client/ClientBdx.js.map +6 -0
- package/dist/cjs/action/client/ClientInteraction.d.ts +10 -1
- package/dist/cjs/action/client/ClientInteraction.d.ts.map +1 -1
- package/dist/cjs/action/client/ClientInteraction.js +25 -2
- package/dist/cjs/action/client/ClientInteraction.js.map +1 -1
- package/dist/cjs/action/client/QueuedClientInteraction.d.ts +11 -3
- package/dist/cjs/action/client/QueuedClientInteraction.d.ts.map +1 -1
- package/dist/cjs/action/client/QueuedClientInteraction.js +6 -2
- package/dist/cjs/action/client/QueuedClientInteraction.js.map +1 -1
- package/dist/cjs/action/client/index.d.ts +1 -0
- package/dist/cjs/action/client/index.d.ts.map +1 -1
- package/dist/cjs/action/client/index.js +1 -0
- package/dist/cjs/action/client/index.js.map +1 -1
- package/dist/cjs/action/request/Read.d.ts.map +1 -1
- package/dist/cjs/action/request/Read.js +2 -2
- package/dist/cjs/action/request/Read.js.map +1 -1
- package/dist/cjs/action/request/Write.js +4 -3
- package/dist/cjs/action/request/Write.js.map +1 -1
- package/dist/cjs/advertisement/ble/BleAdvertisement.d.ts +1 -1
- package/dist/cjs/advertisement/ble/BleAdvertisement.d.ts.map +1 -1
- package/dist/cjs/advertisement/ble/BleAdvertisement.js +2 -2
- package/dist/cjs/advertisement/ble/BleAdvertisement.js.map +1 -1
- package/dist/cjs/advertisement/mdns/CommissionableMdnsAdvertisement.d.ts +1 -1
- package/dist/cjs/advertisement/mdns/CommissionableMdnsAdvertisement.js +1 -1
- package/dist/cjs/advertisement/mdns/CommissionableMdnsAdvertisement.js.map +1 -1
- package/dist/cjs/advertisement/mdns/OperationalMdnsAdvertisement.d.ts.map +1 -1
- package/dist/cjs/advertisement/mdns/OperationalMdnsAdvertisement.js +3 -5
- package/dist/cjs/advertisement/mdns/OperationalMdnsAdvertisement.js.map +1 -1
- package/dist/cjs/bdx/BdxClient.d.ts +2 -0
- package/dist/cjs/bdx/BdxClient.d.ts.map +1 -1
- package/dist/cjs/bdx/BdxClient.js +6 -0
- package/dist/cjs/bdx/BdxClient.js.map +1 -1
- package/dist/cjs/bdx/BdxError.d.ts +2 -0
- package/dist/cjs/bdx/BdxError.d.ts.map +1 -1
- package/dist/cjs/bdx/BdxError.js +2 -0
- package/dist/cjs/bdx/BdxError.js.map +1 -1
- package/dist/cjs/bdx/BdxMessenger.d.ts +5 -1
- package/dist/cjs/bdx/BdxMessenger.d.ts.map +1 -1
- package/dist/cjs/bdx/BdxMessenger.js +12 -4
- package/dist/cjs/bdx/BdxMessenger.js.map +1 -1
- package/dist/cjs/bdx/BdxProtocol.d.ts +14 -7
- package/dist/cjs/bdx/BdxProtocol.d.ts.map +1 -1
- package/dist/cjs/bdx/BdxProtocol.js +81 -19
- package/dist/cjs/bdx/BdxProtocol.js.map +1 -1
- package/dist/cjs/bdx/BdxSession.d.ts +10 -3
- package/dist/cjs/bdx/BdxSession.d.ts.map +1 -1
- package/dist/cjs/bdx/BdxSession.js +33 -8
- package/dist/cjs/bdx/BdxSession.js.map +1 -1
- package/dist/cjs/bdx/BdxSessionConfiguration.d.ts +16 -1
- package/dist/cjs/bdx/BdxSessionConfiguration.d.ts.map +1 -1
- package/dist/cjs/bdx/BdxSessionConfiguration.js +6 -1
- package/dist/cjs/bdx/BdxSessionConfiguration.js.map +1 -1
- package/dist/cjs/bdx/FileDesignator.d.ts +15 -1
- package/dist/cjs/bdx/FileDesignator.d.ts.map +1 -1
- package/dist/cjs/bdx/FileDesignator.js +28 -2
- package/dist/cjs/bdx/FileDesignator.js.map +1 -1
- package/dist/cjs/bdx/PersistedFileDesignator.d.ts +10 -2
- package/dist/cjs/bdx/PersistedFileDesignator.d.ts.map +1 -1
- package/dist/cjs/bdx/PersistedFileDesignator.js +23 -5
- package/dist/cjs/bdx/PersistedFileDesignator.js.map +1 -1
- package/dist/cjs/bdx/ScopedStorage.d.ts +18 -0
- package/dist/cjs/bdx/ScopedStorage.d.ts.map +1 -0
- package/dist/cjs/bdx/ScopedStorage.js +36 -0
- package/dist/cjs/bdx/ScopedStorage.js.map +6 -0
- package/dist/cjs/bdx/bdx-session-initiator.d.ts.map +1 -1
- package/dist/cjs/bdx/bdx-session-initiator.js +10 -2
- package/dist/cjs/bdx/bdx-session-initiator.js.map +1 -1
- package/dist/cjs/bdx/flow/DrivenSendingFlow.d.ts.map +1 -1
- package/dist/cjs/bdx/flow/DrivenSendingFlow.js +2 -0
- package/dist/cjs/bdx/flow/DrivenSendingFlow.js.map +1 -1
- package/dist/cjs/bdx/flow/DrivingReceivingFlow.d.ts.map +1 -1
- package/dist/cjs/bdx/flow/DrivingReceivingFlow.js +1 -0
- package/dist/cjs/bdx/flow/DrivingReceivingFlow.js.map +1 -1
- package/dist/cjs/bdx/flow/Flow.d.ts +7 -0
- package/dist/cjs/bdx/flow/Flow.d.ts.map +1 -1
- package/dist/cjs/bdx/flow/Flow.js +22 -1
- package/dist/cjs/bdx/flow/Flow.js.map +1 -1
- package/dist/cjs/bdx/flow/FollowingReceivingFlow.d.ts.map +1 -1
- package/dist/cjs/bdx/flow/FollowingReceivingFlow.js +3 -0
- package/dist/cjs/bdx/flow/FollowingReceivingFlow.js.map +1 -1
- package/dist/cjs/bdx/flow/FollowingSendingFlow.d.ts.map +1 -1
- package/dist/cjs/bdx/flow/FollowingSendingFlow.js +1 -0
- package/dist/cjs/bdx/flow/FollowingSendingFlow.js.map +1 -1
- package/dist/cjs/bdx/flow/OutboundFlow.d.ts.map +1 -1
- package/dist/cjs/bdx/flow/OutboundFlow.js +1 -0
- package/dist/cjs/bdx/flow/OutboundFlow.js.map +1 -1
- package/dist/cjs/bdx/index.d.ts +1 -0
- package/dist/cjs/bdx/index.d.ts.map +1 -1
- package/dist/cjs/bdx/index.js +1 -0
- package/dist/cjs/bdx/index.js.map +1 -1
- package/dist/cjs/certificate/kinds/Icac.d.ts.map +1 -1
- package/dist/cjs/certificate/kinds/Icac.js +1 -7
- package/dist/cjs/certificate/kinds/Icac.js.map +1 -1
- package/dist/cjs/certificate/kinds/Rcac.d.ts +1 -0
- package/dist/cjs/certificate/kinds/Rcac.d.ts.map +1 -1
- package/dist/cjs/certificate/kinds/Rcac.js +3 -0
- package/dist/cjs/certificate/kinds/Rcac.js.map +1 -1
- package/dist/cjs/certificate/kinds/definitions/operational.d.ts +1 -1
- package/dist/cjs/certificate/kinds/definitions/operational.js +1 -1
- package/dist/cjs/certificate/kinds/definitions/operational.js.map +1 -1
- package/dist/cjs/common/FailsafeContext.js +2 -2
- package/dist/cjs/common/FailsafeContext.js.map +1 -1
- package/dist/cjs/dcl/DclClient.d.ts.map +1 -1
- package/dist/cjs/dcl/DclClient.js +1 -2
- package/dist/cjs/dcl/DclClient.js.map +1 -1
- package/dist/cjs/dcl/DclOtaUpdateService.d.ts +30 -31
- package/dist/cjs/dcl/DclOtaUpdateService.d.ts.map +1 -1
- package/dist/cjs/dcl/DclOtaUpdateService.js +191 -92
- package/dist/cjs/dcl/DclOtaUpdateService.js.map +2 -2
- package/dist/cjs/dcl/index.d.ts +0 -3
- package/dist/cjs/dcl/index.d.ts.map +1 -1
- package/dist/cjs/dcl/index.js +0 -3
- package/dist/cjs/dcl/index.js.map +1 -1
- package/dist/cjs/fabric/Fabric.d.ts +53 -9
- package/dist/cjs/fabric/Fabric.d.ts.map +1 -1
- package/dist/cjs/fabric/Fabric.js +59 -32
- package/dist/cjs/fabric/Fabric.js.map +1 -1
- package/dist/cjs/fabric/FabricAuthority.js +1 -1
- package/dist/cjs/fabric/FabricAuthority.js.map +1 -1
- package/dist/cjs/fabric/FabricManager.d.ts +14 -5
- package/dist/cjs/fabric/FabricManager.d.ts.map +1 -1
- package/dist/cjs/fabric/FabricManager.js +63 -42
- package/dist/cjs/fabric/FabricManager.js.map +1 -1
- package/dist/cjs/groups/FabricGroups.d.ts.map +1 -1
- package/dist/cjs/groups/FabricGroups.js +4 -8
- package/dist/cjs/groups/FabricGroups.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/interaction/InteractionMessenger.d.ts +1 -106
- package/dist/cjs/interaction/InteractionMessenger.d.ts.map +1 -1
- package/dist/cjs/interaction/InteractionMessenger.js +2 -143
- package/dist/cjs/interaction/InteractionMessenger.js.map +2 -2
- package/dist/cjs/interaction/index.d.ts +0 -1
- package/dist/cjs/interaction/index.d.ts.map +1 -1
- package/dist/cjs/interaction/index.js +0 -1
- package/dist/cjs/interaction/index.js.map +1 -1
- package/dist/cjs/mdns/MdnsClient.d.ts +4 -4
- package/dist/cjs/mdns/MdnsClient.d.ts.map +1 -1
- package/dist/cjs/mdns/MdnsClient.js +12 -15
- package/dist/cjs/mdns/MdnsClient.js.map +1 -1
- package/dist/cjs/mdns/MdnsConsts.d.ts +3 -3
- package/dist/cjs/mdns/MdnsConsts.d.ts.map +1 -1
- package/dist/cjs/mdns/MdnsConsts.js +3 -2
- package/dist/cjs/mdns/MdnsConsts.js.map +1 -1
- package/dist/{esm/dcl → cjs/ota}/OtaImageHeader.d.ts.map +1 -1
- package/dist/cjs/{dcl → ota}/OtaImageHeader.js.map +1 -1
- package/dist/cjs/{dcl → ota}/OtaImageReader.d.ts.map +1 -1
- package/dist/cjs/{dcl → ota}/OtaImageReader.js +0 -2
- package/dist/cjs/ota/OtaImageReader.js.map +6 -0
- package/dist/{esm/dcl → cjs/ota}/OtaImageWriter.d.ts +1 -1
- package/dist/cjs/{dcl → ota}/OtaImageWriter.d.ts.map +1 -1
- package/dist/cjs/{dcl → ota}/OtaImageWriter.js.map +1 -1
- package/dist/cjs/ota/index.d.ts +9 -0
- package/dist/cjs/ota/index.d.ts.map +1 -0
- package/dist/cjs/ota/index.js +26 -0
- package/dist/cjs/ota/index.js.map +6 -0
- package/dist/cjs/peer/ControllerCommissioner.d.ts.map +1 -1
- package/dist/cjs/peer/ControllerCommissioner.js +5 -0
- package/dist/cjs/peer/ControllerCommissioner.js.map +1 -1
- package/dist/cjs/peer/ControllerCommissioningFlow.d.ts +11 -3
- package/dist/cjs/peer/ControllerCommissioningFlow.d.ts.map +1 -1
- package/dist/cjs/peer/ControllerCommissioningFlow.js +119 -40
- package/dist/cjs/peer/ControllerCommissioningFlow.js.map +1 -1
- package/dist/cjs/peer/PeerSet.d.ts.map +1 -1
- package/dist/cjs/peer/PeerSet.js +17 -10
- package/dist/cjs/peer/PeerSet.js.map +1 -1
- package/dist/cjs/protocol/DeviceAdvertiser.js +3 -3
- package/dist/cjs/protocol/DeviceAdvertiser.js.map +1 -1
- package/dist/cjs/protocol/ExchangeProvider.d.ts +2 -2
- package/dist/cjs/protocol/ExchangeProvider.d.ts.map +1 -1
- package/dist/cjs/protocol/ExchangeProvider.js +2 -2
- package/dist/cjs/protocol/ExchangeProvider.js.map +1 -1
- package/dist/cjs/protocol/MessageExchange.js +3 -3
- package/dist/cjs/protocol/MessageExchange.js.map +1 -1
- package/dist/cjs/protocol/ProtocolMocks.d.ts +2 -2
- package/dist/cjs/protocol/ProtocolMocks.d.ts.map +1 -1
- package/dist/cjs/protocol/ProtocolMocks.js +1 -1
- package/dist/cjs/protocol/ProtocolMocks.js.map +1 -1
- package/dist/cjs/session/NodeSession.d.ts.map +1 -1
- package/dist/cjs/session/NodeSession.js +2 -2
- package/dist/cjs/session/NodeSession.js.map +1 -1
- package/dist/cjs/session/Session.d.ts.map +1 -1
- package/dist/cjs/session/Session.js +1 -0
- package/dist/cjs/session/Session.js.map +1 -1
- package/dist/cjs/session/SessionManager.js +2 -2
- package/dist/cjs/session/SessionManager.js.map +1 -1
- package/dist/cjs/session/SessionParameters.d.ts.map +1 -1
- package/dist/cjs/session/SessionParameters.js +7 -1
- package/dist/cjs/session/SessionParameters.js.map +1 -1
- package/dist/cjs/session/pase/PaseServer.d.ts.map +1 -1
- package/dist/cjs/session/pase/PaseServer.js +1 -0
- package/dist/cjs/session/pase/PaseServer.js.map +1 -1
- package/dist/esm/action/client/ClientBdx.d.ts +17 -0
- package/dist/esm/action/client/ClientBdx.d.ts.map +1 -0
- package/dist/esm/action/client/ClientBdx.js +6 -0
- package/dist/esm/action/client/ClientBdx.js.map +6 -0
- package/dist/esm/action/client/ClientInteraction.d.ts +10 -1
- package/dist/esm/action/client/ClientInteraction.d.ts.map +1 -1
- package/dist/esm/action/client/ClientInteraction.js +24 -1
- package/dist/esm/action/client/ClientInteraction.js.map +1 -1
- package/dist/esm/action/client/QueuedClientInteraction.d.ts +11 -3
- package/dist/esm/action/client/QueuedClientInteraction.d.ts.map +1 -1
- package/dist/esm/action/client/QueuedClientInteraction.js +5 -1
- package/dist/esm/action/client/QueuedClientInteraction.js.map +1 -1
- package/dist/esm/action/client/index.d.ts +1 -0
- package/dist/esm/action/client/index.d.ts.map +1 -1
- package/dist/esm/action/client/index.js +1 -0
- package/dist/esm/action/client/index.js.map +1 -1
- package/dist/esm/action/request/Read.d.ts.map +1 -1
- package/dist/esm/action/request/Read.js +2 -2
- package/dist/esm/action/request/Read.js.map +1 -1
- package/dist/esm/action/request/Write.js +4 -3
- package/dist/esm/action/request/Write.js.map +1 -1
- package/dist/esm/advertisement/ble/BleAdvertisement.d.ts +1 -1
- package/dist/esm/advertisement/ble/BleAdvertisement.d.ts.map +1 -1
- package/dist/esm/advertisement/ble/BleAdvertisement.js +2 -2
- package/dist/esm/advertisement/ble/BleAdvertisement.js.map +1 -1
- package/dist/esm/advertisement/mdns/CommissionableMdnsAdvertisement.d.ts +1 -1
- package/dist/esm/advertisement/mdns/CommissionableMdnsAdvertisement.js +1 -1
- package/dist/esm/advertisement/mdns/CommissionableMdnsAdvertisement.js.map +1 -1
- package/dist/esm/advertisement/mdns/OperationalMdnsAdvertisement.d.ts.map +1 -1
- package/dist/esm/advertisement/mdns/OperationalMdnsAdvertisement.js +4 -6
- package/dist/esm/advertisement/mdns/OperationalMdnsAdvertisement.js.map +1 -1
- package/dist/esm/bdx/BdxClient.d.ts +2 -0
- package/dist/esm/bdx/BdxClient.d.ts.map +1 -1
- package/dist/esm/bdx/BdxClient.js +6 -0
- package/dist/esm/bdx/BdxClient.js.map +1 -1
- package/dist/esm/bdx/BdxError.d.ts +2 -0
- package/dist/esm/bdx/BdxError.d.ts.map +1 -1
- package/dist/esm/bdx/BdxError.js +2 -0
- package/dist/esm/bdx/BdxError.js.map +1 -1
- package/dist/esm/bdx/BdxMessenger.d.ts +5 -1
- package/dist/esm/bdx/BdxMessenger.d.ts.map +1 -1
- package/dist/esm/bdx/BdxMessenger.js +14 -5
- package/dist/esm/bdx/BdxMessenger.js.map +1 -1
- package/dist/esm/bdx/BdxProtocol.d.ts +14 -7
- package/dist/esm/bdx/BdxProtocol.d.ts.map +1 -1
- package/dist/esm/bdx/BdxProtocol.js +82 -20
- package/dist/esm/bdx/BdxProtocol.js.map +1 -1
- package/dist/esm/bdx/BdxSession.d.ts +10 -3
- package/dist/esm/bdx/BdxSession.d.ts.map +1 -1
- package/dist/esm/bdx/BdxSession.js +34 -9
- package/dist/esm/bdx/BdxSession.js.map +1 -1
- package/dist/esm/bdx/BdxSessionConfiguration.d.ts +16 -1
- package/dist/esm/bdx/BdxSessionConfiguration.d.ts.map +1 -1
- package/dist/esm/bdx/BdxSessionConfiguration.js +6 -1
- package/dist/esm/bdx/BdxSessionConfiguration.js.map +1 -1
- package/dist/esm/bdx/FileDesignator.d.ts +15 -1
- package/dist/esm/bdx/FileDesignator.d.ts.map +1 -1
- package/dist/esm/bdx/FileDesignator.js +29 -3
- package/dist/esm/bdx/FileDesignator.js.map +1 -1
- package/dist/esm/bdx/PersistedFileDesignator.d.ts +10 -2
- package/dist/esm/bdx/PersistedFileDesignator.d.ts.map +1 -1
- package/dist/esm/bdx/PersistedFileDesignator.js +24 -6
- package/dist/esm/bdx/PersistedFileDesignator.js.map +1 -1
- package/dist/esm/bdx/ScopedStorage.d.ts +18 -0
- package/dist/esm/bdx/ScopedStorage.d.ts.map +1 -0
- package/dist/esm/bdx/ScopedStorage.js +16 -0
- package/dist/esm/bdx/ScopedStorage.js.map +6 -0
- package/dist/esm/bdx/bdx-session-initiator.d.ts.map +1 -1
- package/dist/esm/bdx/bdx-session-initiator.js +10 -2
- package/dist/esm/bdx/bdx-session-initiator.js.map +1 -1
- package/dist/esm/bdx/flow/DrivenSendingFlow.d.ts.map +1 -1
- package/dist/esm/bdx/flow/DrivenSendingFlow.js +2 -0
- package/dist/esm/bdx/flow/DrivenSendingFlow.js.map +1 -1
- package/dist/esm/bdx/flow/DrivingReceivingFlow.d.ts.map +1 -1
- package/dist/esm/bdx/flow/DrivingReceivingFlow.js +1 -0
- package/dist/esm/bdx/flow/DrivingReceivingFlow.js.map +1 -1
- package/dist/esm/bdx/flow/Flow.d.ts +7 -0
- package/dist/esm/bdx/flow/Flow.d.ts.map +1 -1
- package/dist/esm/bdx/flow/Flow.js +23 -2
- package/dist/esm/bdx/flow/Flow.js.map +1 -1
- package/dist/esm/bdx/flow/FollowingReceivingFlow.d.ts.map +1 -1
- package/dist/esm/bdx/flow/FollowingReceivingFlow.js +3 -0
- package/dist/esm/bdx/flow/FollowingReceivingFlow.js.map +1 -1
- package/dist/esm/bdx/flow/FollowingSendingFlow.d.ts.map +1 -1
- package/dist/esm/bdx/flow/FollowingSendingFlow.js +1 -0
- package/dist/esm/bdx/flow/FollowingSendingFlow.js.map +1 -1
- package/dist/esm/bdx/flow/OutboundFlow.d.ts.map +1 -1
- package/dist/esm/bdx/flow/OutboundFlow.js +1 -0
- package/dist/esm/bdx/flow/OutboundFlow.js.map +1 -1
- package/dist/esm/bdx/index.d.ts +1 -0
- package/dist/esm/bdx/index.d.ts.map +1 -1
- package/dist/esm/bdx/index.js +1 -0
- package/dist/esm/bdx/index.js.map +1 -1
- package/dist/esm/certificate/kinds/Icac.d.ts.map +1 -1
- package/dist/esm/certificate/kinds/Icac.js +1 -7
- package/dist/esm/certificate/kinds/Icac.js.map +1 -1
- package/dist/esm/certificate/kinds/Rcac.d.ts +1 -0
- package/dist/esm/certificate/kinds/Rcac.d.ts.map +1 -1
- package/dist/esm/certificate/kinds/Rcac.js +3 -0
- package/dist/esm/certificate/kinds/Rcac.js.map +1 -1
- package/dist/esm/certificate/kinds/definitions/operational.d.ts +1 -1
- package/dist/esm/certificate/kinds/definitions/operational.js +1 -1
- package/dist/esm/certificate/kinds/definitions/operational.js.map +1 -1
- package/dist/esm/common/FailsafeContext.js +2 -2
- package/dist/esm/common/FailsafeContext.js.map +1 -1
- package/dist/esm/dcl/DclClient.d.ts.map +1 -1
- package/dist/esm/dcl/DclClient.js +1 -2
- package/dist/esm/dcl/DclClient.js.map +1 -1
- package/dist/esm/dcl/DclOtaUpdateService.d.ts +30 -31
- package/dist/esm/dcl/DclOtaUpdateService.d.ts.map +1 -1
- package/dist/esm/dcl/DclOtaUpdateService.js +191 -93
- package/dist/esm/dcl/DclOtaUpdateService.js.map +2 -2
- package/dist/esm/dcl/index.d.ts +0 -3
- package/dist/esm/dcl/index.d.ts.map +1 -1
- package/dist/esm/dcl/index.js +0 -3
- package/dist/esm/dcl/index.js.map +1 -1
- package/dist/esm/fabric/Fabric.d.ts +53 -9
- package/dist/esm/fabric/Fabric.d.ts.map +1 -1
- package/dist/esm/fabric/Fabric.js +67 -33
- package/dist/esm/fabric/Fabric.js.map +1 -1
- package/dist/esm/fabric/FabricAuthority.js +1 -1
- package/dist/esm/fabric/FabricAuthority.js.map +1 -1
- package/dist/esm/fabric/FabricManager.d.ts +14 -5
- package/dist/esm/fabric/FabricManager.d.ts.map +1 -1
- package/dist/esm/fabric/FabricManager.js +66 -43
- package/dist/esm/fabric/FabricManager.js.map +1 -1
- package/dist/esm/groups/FabricGroups.d.ts.map +1 -1
- package/dist/esm/groups/FabricGroups.js +5 -9
- package/dist/esm/groups/FabricGroups.js.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/interaction/InteractionMessenger.d.ts +1 -106
- package/dist/esm/interaction/InteractionMessenger.d.ts.map +1 -1
- package/dist/esm/interaction/InteractionMessenger.js +2 -144
- package/dist/esm/interaction/InteractionMessenger.js.map +2 -2
- package/dist/esm/interaction/index.d.ts +0 -1
- package/dist/esm/interaction/index.d.ts.map +1 -1
- package/dist/esm/interaction/index.js +0 -1
- package/dist/esm/interaction/index.js.map +1 -1
- package/dist/esm/mdns/MdnsClient.d.ts +4 -4
- package/dist/esm/mdns/MdnsClient.d.ts.map +1 -1
- package/dist/esm/mdns/MdnsClient.js +13 -17
- package/dist/esm/mdns/MdnsClient.js.map +1 -1
- package/dist/esm/mdns/MdnsConsts.d.ts +3 -3
- package/dist/esm/mdns/MdnsConsts.d.ts.map +1 -1
- package/dist/esm/mdns/MdnsConsts.js +3 -2
- package/dist/esm/mdns/MdnsConsts.js.map +1 -1
- package/dist/{cjs/dcl → esm/ota}/OtaImageHeader.d.ts.map +1 -1
- package/dist/esm/{dcl → ota}/OtaImageHeader.js.map +1 -1
- package/dist/esm/{dcl → ota}/OtaImageReader.d.ts.map +1 -1
- package/dist/esm/{dcl → ota}/OtaImageReader.js +0 -3
- package/dist/esm/ota/OtaImageReader.js.map +6 -0
- package/dist/{cjs/dcl → esm/ota}/OtaImageWriter.d.ts +1 -1
- package/dist/esm/{dcl → ota}/OtaImageWriter.d.ts.map +1 -1
- package/dist/esm/{dcl → ota}/OtaImageWriter.js.map +1 -1
- package/dist/esm/ota/index.d.ts +9 -0
- package/dist/esm/ota/index.d.ts.map +1 -0
- package/dist/esm/ota/index.js +9 -0
- package/dist/esm/ota/index.js.map +6 -0
- package/dist/esm/peer/ControllerCommissioner.d.ts.map +1 -1
- package/dist/esm/peer/ControllerCommissioner.js +5 -0
- package/dist/esm/peer/ControllerCommissioner.js.map +1 -1
- package/dist/esm/peer/ControllerCommissioningFlow.d.ts +11 -3
- package/dist/esm/peer/ControllerCommissioningFlow.d.ts.map +1 -1
- package/dist/esm/peer/ControllerCommissioningFlow.js +119 -41
- package/dist/esm/peer/ControllerCommissioningFlow.js.map +1 -1
- package/dist/esm/peer/PeerSet.d.ts.map +1 -1
- package/dist/esm/peer/PeerSet.js +17 -10
- package/dist/esm/peer/PeerSet.js.map +1 -1
- package/dist/esm/protocol/DeviceAdvertiser.js +3 -3
- package/dist/esm/protocol/DeviceAdvertiser.js.map +1 -1
- package/dist/esm/protocol/ExchangeProvider.d.ts +2 -2
- package/dist/esm/protocol/ExchangeProvider.d.ts.map +1 -1
- package/dist/esm/protocol/ExchangeProvider.js +2 -2
- package/dist/esm/protocol/ExchangeProvider.js.map +1 -1
- package/dist/esm/protocol/MessageExchange.js +3 -3
- package/dist/esm/protocol/MessageExchange.js.map +1 -1
- package/dist/esm/protocol/ProtocolMocks.d.ts +2 -2
- package/dist/esm/protocol/ProtocolMocks.d.ts.map +1 -1
- package/dist/esm/protocol/ProtocolMocks.js +11 -2
- package/dist/esm/protocol/ProtocolMocks.js.map +1 -1
- package/dist/esm/session/NodeSession.d.ts.map +1 -1
- package/dist/esm/session/NodeSession.js +3 -3
- package/dist/esm/session/NodeSession.js.map +1 -1
- package/dist/esm/session/Session.d.ts.map +1 -1
- package/dist/esm/session/Session.js +1 -0
- package/dist/esm/session/Session.js.map +1 -1
- package/dist/esm/session/SessionManager.js +2 -2
- package/dist/esm/session/SessionManager.js.map +1 -1
- package/dist/esm/session/SessionParameters.d.ts.map +1 -1
- package/dist/esm/session/SessionParameters.js +7 -1
- package/dist/esm/session/SessionParameters.js.map +1 -1
- package/dist/esm/session/pase/PaseServer.d.ts.map +1 -1
- package/dist/esm/session/pase/PaseServer.js +1 -0
- package/dist/esm/session/pase/PaseServer.js.map +1 -1
- package/package.json +6 -6
- package/src/action/client/ClientBdx.ts +19 -0
- package/src/action/client/ClientInteraction.ts +34 -4
- package/src/action/client/QueuedClientInteraction.ts +16 -12
- package/src/action/client/index.ts +1 -0
- package/src/action/request/Read.ts +8 -2
- package/src/action/request/Write.ts +3 -3
- package/src/advertisement/ble/BleAdvertisement.ts +4 -4
- package/src/advertisement/mdns/CommissionableMdnsAdvertisement.ts +1 -1
- package/src/advertisement/mdns/OperationalMdnsAdvertisement.ts +4 -6
- package/src/bdx/BdxClient.ts +8 -0
- package/src/bdx/BdxError.ts +2 -0
- package/src/bdx/BdxMessenger.ts +16 -5
- package/src/bdx/BdxProtocol.ts +104 -22
- package/src/bdx/BdxSession.ts +38 -16
- package/src/bdx/BdxSessionConfiguration.ts +24 -2
- package/src/bdx/FileDesignator.ts +31 -2
- package/src/bdx/PersistedFileDesignator.ts +35 -8
- package/src/bdx/ScopedStorage.ts +25 -0
- package/src/bdx/bdx-session-initiator.ts +11 -2
- package/src/bdx/flow/DrivenSendingFlow.ts +3 -0
- package/src/bdx/flow/DrivingReceivingFlow.ts +1 -0
- package/src/bdx/flow/Flow.ts +29 -2
- package/src/bdx/flow/FollowingReceivingFlow.ts +3 -0
- package/src/bdx/flow/FollowingSendingFlow.ts +2 -0
- package/src/bdx/flow/OutboundFlow.ts +1 -0
- package/src/bdx/index.ts +1 -0
- package/src/certificate/kinds/Icac.ts +4 -1
- package/src/certificate/kinds/Rcac.ts +4 -0
- package/src/certificate/kinds/definitions/operational.ts +1 -1
- package/src/common/FailsafeContext.ts +2 -2
- package/src/dcl/DclClient.ts +1 -2
- package/src/dcl/DclOtaUpdateService.ts +266 -125
- package/src/dcl/index.ts +0 -3
- package/src/fabric/Fabric.ts +118 -39
- package/src/fabric/FabricAuthority.ts +1 -1
- package/src/fabric/FabricManager.ts +76 -49
- package/src/groups/FabricGroups.ts +5 -9
- package/src/index.ts +1 -0
- package/src/interaction/InteractionMessenger.ts +2 -186
- package/src/interaction/index.ts +0 -1
- package/src/mdns/MdnsClient.ts +14 -19
- package/src/mdns/MdnsConsts.ts +5 -4
- package/src/{dcl → ota}/OtaImageReader.ts +1 -5
- package/src/{dcl → ota}/OtaImageWriter.ts +1 -1
- package/src/ota/index.ts +9 -0
- package/src/peer/ControllerCommissioner.ts +7 -0
- package/src/peer/ControllerCommissioningFlow.ts +161 -54
- package/src/peer/PeerSet.ts +25 -12
- package/src/protocol/DeviceAdvertiser.ts +5 -5
- package/src/protocol/ExchangeProvider.ts +3 -3
- package/src/protocol/MessageExchange.ts +3 -3
- package/src/protocol/ProtocolMocks.ts +13 -4
- package/src/session/NodeSession.ts +3 -3
- package/src/session/Session.ts +1 -0
- package/src/session/SessionManager.ts +2 -2
- package/src/session/SessionParameters.ts +10 -2
- package/src/session/pase/PaseServer.ts +2 -1
- package/dist/cjs/dcl/OtaImageReader.js.map +0 -6
- package/dist/cjs/interaction/SubscriptionClient.d.ts +0 -39
- package/dist/cjs/interaction/SubscriptionClient.d.ts.map +0 -1
- package/dist/cjs/interaction/SubscriptionClient.js +0 -93
- package/dist/cjs/interaction/SubscriptionClient.js.map +0 -6
- package/dist/esm/dcl/OtaImageReader.js.map +0 -6
- package/dist/esm/interaction/SubscriptionClient.d.ts +0 -39
- package/dist/esm/interaction/SubscriptionClient.d.ts.map +0 -1
- package/dist/esm/interaction/SubscriptionClient.js +0 -73
- package/dist/esm/interaction/SubscriptionClient.js.map +0 -6
- package/src/interaction/SubscriptionClient.ts +0 -104
- /package/dist/cjs/{dcl → ota}/OtaImageHeader.d.ts +0 -0
- /package/dist/cjs/{dcl → ota}/OtaImageHeader.js +0 -0
- /package/dist/cjs/{dcl → ota}/OtaImageReader.d.ts +0 -0
- /package/dist/cjs/{dcl → ota}/OtaImageWriter.js +0 -0
- /package/dist/esm/{dcl → ota}/OtaImageHeader.d.ts +0 -0
- /package/dist/esm/{dcl → ota}/OtaImageHeader.js +0 -0
- /package/dist/esm/{dcl → ota}/OtaImageReader.d.ts +0 -0
- /package/dist/esm/{dcl → ota}/OtaImageWriter.js +0 -0
- /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 = /^
|
|
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?:
|
|
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 =
|
|
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
|
-
|
|
95
|
-
|
|
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
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
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)}
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
814
|
+
const { vendorId, productId, isProduction } = options;
|
|
698
815
|
let { filename } = options;
|
|
699
816
|
|
|
700
|
-
if (
|
|
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
|
|
842
|
+
const vendorStorage = storage.context.createContext(vendorHex);
|
|
728
843
|
let deletedCount = 0;
|
|
729
844
|
|
|
730
|
-
for (const key of
|
|
731
|
-
|
|
732
|
-
|
|
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";
|