@matter/protocol 0.16.0-alpha.0-20250809-ee8375bcb → 0.16.0-alpha.0-20250812-285b75d83
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/advertisement/Advertisement.d.ts +119 -0
- package/dist/cjs/advertisement/Advertisement.d.ts.map +1 -0
- package/dist/cjs/advertisement/Advertisement.js +267 -0
- package/dist/cjs/advertisement/Advertisement.js.map +6 -0
- package/dist/cjs/advertisement/Advertiser.d.ts +50 -0
- package/dist/cjs/advertisement/Advertiser.d.ts.map +1 -0
- package/dist/cjs/advertisement/Advertiser.js +81 -0
- package/dist/cjs/advertisement/Advertiser.js.map +6 -0
- package/dist/cjs/advertisement/CommissioningMode.d.ts +11 -0
- package/dist/cjs/advertisement/CommissioningMode.d.ts.map +1 -0
- package/dist/cjs/advertisement/CommissioningMode.js +35 -0
- package/dist/cjs/advertisement/CommissioningMode.js.map +6 -0
- package/dist/cjs/{common/InstanceBroadcaster.d.ts → advertisement/PairingHintBitmap.d.ts} +3 -69
- package/dist/cjs/advertisement/PairingHintBitmap.d.ts.map +1 -0
- package/dist/cjs/{common/InstanceBroadcaster.js → advertisement/PairingHintBitmap.js} +5 -12
- package/dist/cjs/advertisement/PairingHintBitmap.js.map +6 -0
- package/dist/cjs/advertisement/ServiceDescription.d.ts +70 -0
- package/dist/cjs/advertisement/ServiceDescription.d.ts.map +1 -0
- package/dist/cjs/advertisement/ServiceDescription.js +61 -0
- package/dist/cjs/advertisement/ServiceDescription.js.map +6 -0
- package/dist/cjs/advertisement/ble/BleAdvertisement.d.ts +16 -0
- package/dist/cjs/advertisement/ble/BleAdvertisement.d.ts.map +1 -0
- package/dist/cjs/advertisement/ble/BleAdvertisement.js +85 -0
- package/dist/cjs/advertisement/ble/BleAdvertisement.js.map +6 -0
- package/dist/cjs/advertisement/ble/BleAdvertiser.d.ts +66 -0
- package/dist/cjs/advertisement/ble/BleAdvertiser.d.ts.map +1 -0
- package/dist/cjs/advertisement/ble/BleAdvertiser.js +83 -0
- package/dist/cjs/advertisement/ble/BleAdvertiser.js.map +6 -0
- package/dist/cjs/advertisement/ble/index.d.ts +8 -0
- package/dist/cjs/advertisement/ble/index.d.ts.map +1 -0
- package/dist/cjs/advertisement/ble/index.js +25 -0
- package/dist/cjs/advertisement/ble/index.js.map +6 -0
- package/dist/cjs/advertisement/index.d.ts +13 -0
- package/dist/cjs/advertisement/index.d.ts.map +1 -0
- package/dist/cjs/advertisement/index.js +30 -0
- package/dist/cjs/advertisement/index.js.map +6 -0
- package/dist/cjs/advertisement/mdns/CommissionableMdnsAdvertisement.d.ts +21 -0
- package/dist/cjs/advertisement/mdns/CommissionableMdnsAdvertisement.d.ts.map +1 -0
- package/dist/cjs/advertisement/mdns/CommissionableMdnsAdvertisement.js +104 -0
- package/dist/cjs/advertisement/mdns/CommissionableMdnsAdvertisement.js.map +6 -0
- package/dist/cjs/advertisement/mdns/CommissionerMdnsAdvertisement.d.ts +20 -0
- package/dist/cjs/advertisement/mdns/CommissionerMdnsAdvertisement.d.ts.map +1 -0
- package/dist/cjs/advertisement/mdns/CommissionerMdnsAdvertisement.js +70 -0
- package/dist/cjs/advertisement/mdns/CommissionerMdnsAdvertisement.js.map +6 -0
- package/dist/cjs/advertisement/mdns/MdnsAdvertisement.d.ts +40 -0
- package/dist/cjs/advertisement/mdns/MdnsAdvertisement.d.ts.map +1 -0
- package/dist/cjs/advertisement/mdns/MdnsAdvertisement.js +145 -0
- package/dist/cjs/advertisement/mdns/MdnsAdvertisement.js.map +6 -0
- package/dist/cjs/advertisement/mdns/MdnsAdvertiser.d.ts +99 -0
- package/dist/cjs/advertisement/mdns/MdnsAdvertiser.d.ts.map +1 -0
- package/dist/cjs/advertisement/mdns/MdnsAdvertiser.js +166 -0
- package/dist/cjs/advertisement/mdns/MdnsAdvertiser.js.map +6 -0
- package/dist/cjs/advertisement/mdns/OperationalMdnsAdvertisement.d.ts +18 -0
- package/dist/cjs/advertisement/mdns/OperationalMdnsAdvertisement.d.ts.map +1 -0
- package/dist/cjs/advertisement/mdns/OperationalMdnsAdvertisement.js +55 -0
- package/dist/cjs/advertisement/mdns/OperationalMdnsAdvertisement.js.map +6 -0
- package/dist/cjs/advertisement/mdns/index.d.ts +11 -0
- package/dist/cjs/advertisement/mdns/index.d.ts.map +1 -0
- package/dist/cjs/advertisement/mdns/index.js +28 -0
- package/dist/cjs/advertisement/mdns/index.js.map +6 -0
- package/dist/cjs/ble/Ble.d.ts +7 -5
- package/dist/cjs/ble/Ble.d.ts.map +1 -1
- package/dist/cjs/ble/Ble.js.map +1 -1
- package/dist/cjs/ble/BleConsts.d.ts +2 -1
- package/dist/cjs/ble/BleConsts.d.ts.map +1 -1
- package/dist/cjs/ble/BleConsts.js +3 -1
- package/dist/cjs/ble/BleConsts.js.map +1 -1
- package/dist/cjs/codec/BtpCodec.d.ts +1 -1
- package/dist/cjs/codec/BtpCodec.d.ts.map +1 -1
- package/dist/cjs/codec/BtpCodec.js +4 -4
- package/dist/cjs/codec/BtpCodec.js.map +1 -1
- package/dist/cjs/common/Scanner.d.ts +1 -25
- package/dist/cjs/common/Scanner.d.ts.map +1 -1
- package/dist/cjs/common/Scanner.js +1 -18
- package/dist/cjs/common/Scanner.js.map +1 -1
- package/dist/cjs/common/SupportedTransportsBitmap.d.ts +33 -0
- package/dist/cjs/common/SupportedTransportsBitmap.d.ts.map +1 -0
- package/dist/cjs/common/SupportedTransportsBitmap.js +45 -0
- package/dist/cjs/common/SupportedTransportsBitmap.js.map +6 -0
- package/dist/cjs/common/index.d.ts +1 -1
- package/dist/cjs/common/index.d.ts.map +1 -1
- package/dist/cjs/common/index.js +1 -1
- package/dist/cjs/common/index.js.map +1 -1
- package/dist/cjs/fabric/Fabric.d.ts +1 -0
- package/dist/cjs/fabric/Fabric.d.ts.map +1 -1
- package/dist/cjs/fabric/Fabric.js +7 -0
- package/dist/cjs/fabric/Fabric.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/{esm/mdns/MdnsScanner.d.ts → cjs/mdns/MdnsClient.d.ts} +11 -14
- package/dist/cjs/mdns/MdnsClient.d.ts.map +1 -0
- package/dist/cjs/mdns/{MdnsScanner.js → MdnsClient.js} +35 -90
- package/dist/cjs/mdns/MdnsClient.js.map +6 -0
- package/dist/cjs/mdns/MdnsConsts.d.ts +11 -2
- package/dist/cjs/mdns/MdnsConsts.d.ts.map +1 -1
- package/dist/cjs/mdns/MdnsConsts.js +31 -4
- package/dist/cjs/mdns/MdnsConsts.js.map +1 -1
- package/dist/cjs/mdns/MdnsServer.d.ts +13 -22
- package/dist/cjs/mdns/MdnsServer.d.ts.map +1 -1
- package/dist/cjs/mdns/MdnsServer.js +53 -150
- package/dist/cjs/mdns/MdnsServer.js.map +2 -2
- package/dist/cjs/mdns/MdnsService.d.ts +4 -5
- package/dist/cjs/mdns/MdnsService.d.ts.map +1 -1
- package/dist/cjs/mdns/MdnsService.js +22 -23
- package/dist/cjs/mdns/MdnsService.js.map +1 -1
- package/dist/cjs/mdns/MdnsSocket.d.ts +32 -0
- package/dist/cjs/mdns/MdnsSocket.d.ts.map +1 -0
- package/dist/cjs/mdns/MdnsSocket.js +144 -0
- package/dist/cjs/mdns/MdnsSocket.js.map +6 -0
- package/dist/cjs/mdns/index.d.ts +2 -3
- package/dist/cjs/mdns/index.d.ts.map +1 -1
- package/dist/cjs/mdns/index.js +2 -3
- package/dist/cjs/mdns/index.js.map +1 -1
- package/dist/cjs/peer/ControllerCommissioner.js +2 -2
- package/dist/cjs/peer/ControllerCommissioner.js.map +1 -1
- package/dist/cjs/peer/ControllerDiscovery.d.ts +3 -3
- package/dist/cjs/peer/ControllerDiscovery.d.ts.map +1 -1
- package/dist/cjs/peer/ControllerDiscovery.js.map +1 -1
- package/dist/cjs/peer/PeerSet.d.ts.map +1 -1
- package/dist/cjs/peer/PeerSet.js +10 -5
- package/dist/cjs/peer/PeerSet.js.map +1 -1
- package/dist/cjs/protocol/DeviceAdvertiser.d.ts +23 -18
- package/dist/cjs/protocol/DeviceAdvertiser.d.ts.map +1 -1
- package/dist/cjs/protocol/DeviceAdvertiser.js +130 -129
- package/dist/cjs/protocol/DeviceAdvertiser.js.map +1 -1
- package/dist/cjs/protocol/DeviceCommissioner.d.ts +0 -1
- package/dist/cjs/protocol/DeviceCommissioner.d.ts.map +1 -1
- package/dist/cjs/protocol/DeviceCommissioner.js +44 -44
- package/dist/cjs/protocol/DeviceCommissioner.js.map +1 -1
- package/dist/cjs/protocol/ExchangeManager.js +1 -1
- package/dist/cjs/protocol/ExchangeManager.js.map +1 -1
- package/dist/cjs/protocol/MessageExchange.d.ts +1 -1
- package/dist/cjs/protocol/MessageExchange.d.ts.map +1 -1
- package/dist/cjs/protocol/MessageExchange.js +6 -8
- package/dist/cjs/protocol/MessageExchange.js.map +1 -1
- package/dist/cjs/protocol/ProtocolHandler.d.ts +4 -0
- package/dist/cjs/protocol/ProtocolHandler.d.ts.map +1 -1
- package/dist/cjs/protocol/ProtocolStatusMessage.d.ts +8 -4
- package/dist/cjs/protocol/ProtocolStatusMessage.d.ts.map +1 -1
- package/dist/cjs/protocol/ProtocolStatusMessage.js +23 -8
- package/dist/cjs/protocol/ProtocolStatusMessage.js.map +1 -1
- package/dist/cjs/securechannel/SecureChannelMessenger.js +2 -2
- package/dist/cjs/securechannel/SecureChannelMessenger.js.map +1 -1
- package/dist/cjs/securechannel/SecureChannelProtocol.js +1 -1
- package/dist/cjs/securechannel/SecureChannelProtocol.js.map +1 -1
- package/dist/cjs/securechannel/SecureChannelStatusMessageSchema.d.ts +3 -3
- package/dist/cjs/securechannel/SecureChannelStatusMessageSchema.d.ts.map +1 -1
- package/dist/cjs/securechannel/SecureChannelStatusMessageSchema.js +3 -3
- package/dist/cjs/securechannel/SecureChannelStatusMessageSchema.js.map +1 -1
- package/dist/cjs/session/NodeSession.d.ts +1 -0
- package/dist/cjs/session/NodeSession.d.ts.map +1 -1
- package/dist/cjs/session/NodeSession.js +3 -0
- package/dist/cjs/session/NodeSession.js.map +1 -1
- package/dist/cjs/session/Session.d.ts +3 -33
- package/dist/cjs/session/Session.d.ts.map +1 -1
- package/dist/cjs/session/Session.js +4 -9
- package/dist/cjs/session/Session.js.map +1 -1
- package/dist/cjs/session/SessionIntervals.d.ts +36 -0
- package/dist/cjs/session/SessionIntervals.d.ts.map +1 -0
- package/dist/cjs/session/SessionIntervals.js +51 -0
- package/dist/cjs/session/SessionIntervals.js.map +6 -0
- package/dist/cjs/session/SessionManager.d.ts +1 -1
- package/dist/cjs/session/SessionManager.d.ts.map +1 -1
- package/dist/cjs/session/SessionManager.js +11 -12
- package/dist/cjs/session/SessionManager.js.map +1 -1
- package/dist/cjs/session/pase/PaseMessages.js +2 -2
- package/dist/cjs/session/pase/PaseMessages.js.map +1 -1
- package/dist/esm/advertisement/Advertisement.d.ts +119 -0
- package/dist/esm/advertisement/Advertisement.d.ts.map +1 -0
- package/dist/esm/advertisement/Advertisement.js +247 -0
- package/dist/esm/advertisement/Advertisement.js.map +6 -0
- package/dist/esm/advertisement/Advertiser.d.ts +50 -0
- package/dist/esm/advertisement/Advertiser.d.ts.map +1 -0
- package/dist/esm/advertisement/Advertiser.js +61 -0
- package/dist/esm/advertisement/Advertiser.js.map +6 -0
- package/dist/esm/advertisement/CommissioningMode.d.ts +11 -0
- package/dist/esm/advertisement/CommissioningMode.d.ts.map +1 -0
- package/dist/esm/advertisement/CommissioningMode.js +15 -0
- package/dist/esm/advertisement/CommissioningMode.js.map +6 -0
- package/dist/esm/{common/InstanceBroadcaster.d.ts → advertisement/PairingHintBitmap.d.ts} +3 -69
- package/dist/esm/advertisement/PairingHintBitmap.d.ts.map +1 -0
- package/dist/esm/{common/InstanceBroadcaster.js → advertisement/PairingHintBitmap.js} +2 -9
- package/dist/esm/{common/InstanceBroadcaster.js.map → advertisement/PairingHintBitmap.js.map} +3 -3
- package/dist/esm/advertisement/ServiceDescription.d.ts +70 -0
- package/dist/esm/advertisement/ServiceDescription.d.ts.map +1 -0
- package/dist/esm/advertisement/ServiceDescription.js +41 -0
- package/dist/esm/advertisement/ServiceDescription.js.map +6 -0
- package/dist/esm/advertisement/ble/BleAdvertisement.d.ts +16 -0
- package/dist/esm/advertisement/ble/BleAdvertisement.d.ts.map +1 -0
- package/dist/esm/advertisement/ble/BleAdvertisement.js +65 -0
- package/dist/esm/advertisement/ble/BleAdvertisement.js.map +6 -0
- package/dist/esm/advertisement/ble/BleAdvertiser.d.ts +66 -0
- package/dist/esm/advertisement/ble/BleAdvertiser.d.ts.map +1 -0
- package/dist/esm/advertisement/ble/BleAdvertiser.js +63 -0
- package/dist/esm/advertisement/ble/BleAdvertiser.js.map +6 -0
- package/dist/esm/advertisement/ble/index.d.ts +8 -0
- package/dist/esm/advertisement/ble/index.d.ts.map +1 -0
- package/dist/esm/advertisement/ble/index.js +8 -0
- package/dist/esm/advertisement/ble/index.js.map +6 -0
- package/dist/esm/advertisement/index.d.ts +13 -0
- package/dist/esm/advertisement/index.d.ts.map +1 -0
- package/dist/esm/advertisement/index.js +13 -0
- package/dist/esm/advertisement/index.js.map +6 -0
- package/dist/esm/advertisement/mdns/CommissionableMdnsAdvertisement.d.ts +21 -0
- package/dist/esm/advertisement/mdns/CommissionableMdnsAdvertisement.d.ts.map +1 -0
- package/dist/esm/advertisement/mdns/CommissionableMdnsAdvertisement.js +95 -0
- package/dist/esm/advertisement/mdns/CommissionableMdnsAdvertisement.js.map +6 -0
- package/dist/esm/advertisement/mdns/CommissionerMdnsAdvertisement.d.ts +20 -0
- package/dist/esm/advertisement/mdns/CommissionerMdnsAdvertisement.d.ts.map +1 -0
- package/dist/esm/advertisement/mdns/CommissionerMdnsAdvertisement.js +54 -0
- package/dist/esm/advertisement/mdns/CommissionerMdnsAdvertisement.js.map +6 -0
- package/dist/esm/advertisement/mdns/MdnsAdvertisement.d.ts +40 -0
- package/dist/esm/advertisement/mdns/MdnsAdvertisement.d.ts.map +1 -0
- package/dist/esm/advertisement/mdns/MdnsAdvertisement.js +125 -0
- package/dist/esm/advertisement/mdns/MdnsAdvertisement.js.map +6 -0
- package/dist/esm/advertisement/mdns/MdnsAdvertiser.d.ts +99 -0
- package/dist/esm/advertisement/mdns/MdnsAdvertiser.d.ts.map +1 -0
- package/dist/esm/advertisement/mdns/MdnsAdvertiser.js +146 -0
- package/dist/esm/advertisement/mdns/MdnsAdvertiser.js.map +6 -0
- package/dist/esm/advertisement/mdns/OperationalMdnsAdvertisement.d.ts +18 -0
- package/dist/esm/advertisement/mdns/OperationalMdnsAdvertisement.d.ts.map +1 -0
- package/dist/esm/advertisement/mdns/OperationalMdnsAdvertisement.js +40 -0
- package/dist/esm/advertisement/mdns/OperationalMdnsAdvertisement.js.map +6 -0
- package/dist/esm/advertisement/mdns/index.d.ts +11 -0
- package/dist/esm/advertisement/mdns/index.d.ts.map +1 -0
- package/dist/esm/advertisement/mdns/index.js +11 -0
- package/dist/esm/advertisement/mdns/index.js.map +6 -0
- package/dist/esm/ble/Ble.d.ts +7 -5
- package/dist/esm/ble/Ble.d.ts.map +1 -1
- package/dist/esm/ble/Ble.js.map +1 -1
- package/dist/esm/ble/BleConsts.d.ts +2 -1
- package/dist/esm/ble/BleConsts.d.ts.map +1 -1
- package/dist/esm/ble/BleConsts.js +3 -1
- package/dist/esm/ble/BleConsts.js.map +1 -1
- package/dist/esm/codec/BtpCodec.d.ts +1 -1
- package/dist/esm/codec/BtpCodec.d.ts.map +1 -1
- package/dist/esm/codec/BtpCodec.js +4 -4
- package/dist/esm/codec/BtpCodec.js.map +1 -1
- package/dist/esm/common/Scanner.d.ts +1 -25
- package/dist/esm/common/Scanner.d.ts.map +1 -1
- package/dist/esm/common/Scanner.js +1 -18
- package/dist/esm/common/Scanner.js.map +1 -1
- package/dist/esm/common/SupportedTransportsBitmap.d.ts +33 -0
- package/dist/esm/common/SupportedTransportsBitmap.d.ts.map +1 -0
- package/dist/esm/common/SupportedTransportsBitmap.js +25 -0
- package/dist/esm/common/SupportedTransportsBitmap.js.map +6 -0
- package/dist/esm/common/index.d.ts +1 -1
- package/dist/esm/common/index.d.ts.map +1 -1
- package/dist/esm/common/index.js +1 -1
- package/dist/esm/fabric/Fabric.d.ts +1 -0
- package/dist/esm/fabric/Fabric.d.ts.map +1 -1
- package/dist/esm/fabric/Fabric.js +7 -0
- package/dist/esm/fabric/Fabric.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/{cjs/mdns/MdnsScanner.d.ts → esm/mdns/MdnsClient.d.ts} +11 -14
- package/dist/esm/mdns/MdnsClient.d.ts.map +1 -0
- package/dist/esm/mdns/{MdnsScanner.js → MdnsClient.js} +34 -92
- package/dist/esm/mdns/MdnsClient.js.map +6 -0
- package/dist/esm/mdns/MdnsConsts.d.ts +11 -2
- package/dist/esm/mdns/MdnsConsts.d.ts.map +1 -1
- package/dist/esm/mdns/MdnsConsts.js +31 -4
- package/dist/esm/mdns/MdnsConsts.js.map +1 -1
- package/dist/esm/mdns/MdnsServer.d.ts +13 -22
- package/dist/esm/mdns/MdnsServer.d.ts.map +1 -1
- package/dist/esm/mdns/MdnsServer.js +55 -155
- package/dist/esm/mdns/MdnsServer.js.map +2 -2
- package/dist/esm/mdns/MdnsService.d.ts +4 -5
- package/dist/esm/mdns/MdnsService.d.ts.map +1 -1
- package/dist/esm/mdns/MdnsService.js +22 -24
- package/dist/esm/mdns/MdnsService.js.map +1 -1
- package/dist/esm/mdns/MdnsSocket.d.ts +32 -0
- package/dist/esm/mdns/MdnsSocket.d.ts.map +1 -0
- package/dist/esm/mdns/MdnsSocket.js +133 -0
- package/dist/esm/mdns/MdnsSocket.js.map +6 -0
- package/dist/esm/mdns/index.d.ts +2 -3
- package/dist/esm/mdns/index.d.ts.map +1 -1
- package/dist/esm/mdns/index.js +2 -3
- package/dist/esm/mdns/index.js.map +1 -1
- package/dist/esm/peer/ControllerCommissioner.js +2 -2
- package/dist/esm/peer/ControllerCommissioner.js.map +1 -1
- package/dist/esm/peer/ControllerDiscovery.d.ts +3 -3
- package/dist/esm/peer/ControllerDiscovery.d.ts.map +1 -1
- package/dist/esm/peer/ControllerDiscovery.js.map +1 -1
- package/dist/esm/peer/PeerSet.d.ts.map +1 -1
- package/dist/esm/peer/PeerSet.js +10 -5
- package/dist/esm/peer/PeerSet.js.map +1 -1
- package/dist/esm/protocol/DeviceAdvertiser.d.ts +23 -18
- package/dist/esm/protocol/DeviceAdvertiser.d.ts.map +1 -1
- package/dist/esm/protocol/DeviceAdvertiser.js +131 -139
- package/dist/esm/protocol/DeviceAdvertiser.js.map +1 -1
- package/dist/esm/protocol/DeviceCommissioner.d.ts +0 -1
- package/dist/esm/protocol/DeviceCommissioner.d.ts.map +1 -1
- package/dist/esm/protocol/DeviceCommissioner.js +47 -47
- package/dist/esm/protocol/DeviceCommissioner.js.map +1 -1
- package/dist/esm/protocol/ExchangeManager.js +1 -1
- package/dist/esm/protocol/ExchangeManager.js.map +1 -1
- package/dist/esm/protocol/MessageExchange.d.ts +1 -1
- package/dist/esm/protocol/MessageExchange.d.ts.map +1 -1
- package/dist/esm/protocol/MessageExchange.js +6 -12
- package/dist/esm/protocol/MessageExchange.js.map +1 -1
- package/dist/esm/protocol/ProtocolHandler.d.ts +4 -0
- package/dist/esm/protocol/ProtocolHandler.d.ts.map +1 -1
- package/dist/esm/protocol/ProtocolStatusMessage.d.ts +8 -4
- package/dist/esm/protocol/ProtocolStatusMessage.d.ts.map +1 -1
- package/dist/esm/protocol/ProtocolStatusMessage.js +24 -9
- package/dist/esm/protocol/ProtocolStatusMessage.js.map +1 -1
- package/dist/esm/securechannel/SecureChannelMessenger.js +3 -3
- package/dist/esm/securechannel/SecureChannelMessenger.js.map +1 -1
- package/dist/esm/securechannel/SecureChannelProtocol.js +2 -2
- package/dist/esm/securechannel/SecureChannelProtocol.js.map +1 -1
- package/dist/esm/securechannel/SecureChannelStatusMessageSchema.d.ts +3 -3
- package/dist/esm/securechannel/SecureChannelStatusMessageSchema.d.ts.map +1 -1
- package/dist/esm/securechannel/SecureChannelStatusMessageSchema.js +3 -3
- package/dist/esm/securechannel/SecureChannelStatusMessageSchema.js.map +1 -1
- package/dist/esm/session/NodeSession.d.ts +1 -0
- package/dist/esm/session/NodeSession.d.ts.map +1 -1
- package/dist/esm/session/NodeSession.js +3 -0
- package/dist/esm/session/NodeSession.js.map +1 -1
- package/dist/esm/session/Session.d.ts +3 -33
- package/dist/esm/session/Session.d.ts.map +1 -1
- package/dist/esm/session/Session.js +4 -9
- package/dist/esm/session/Session.js.map +1 -1
- package/dist/esm/session/SessionIntervals.d.ts +36 -0
- package/dist/esm/session/SessionIntervals.d.ts.map +1 -0
- package/dist/esm/session/SessionIntervals.js +31 -0
- package/dist/esm/session/SessionIntervals.js.map +6 -0
- package/dist/esm/session/SessionManager.d.ts +1 -1
- package/dist/esm/session/SessionManager.d.ts.map +1 -1
- package/dist/esm/session/SessionManager.js +10 -14
- package/dist/esm/session/SessionManager.js.map +1 -1
- package/dist/esm/session/pase/PaseMessages.js +1 -1
- package/package.json +6 -6
- package/src/advertisement/Advertisement.ts +348 -0
- package/src/advertisement/Advertiser.ts +83 -0
- package/src/advertisement/CommissioningMode.ts +11 -0
- package/src/{common/InstanceBroadcaster.ts → advertisement/PairingHintBitmap.ts} +1 -92
- package/src/advertisement/ServiceDescription.ts +110 -0
- package/src/advertisement/ble/BleAdvertisement.ts +90 -0
- package/src/advertisement/ble/BleAdvertiser.ts +116 -0
- package/src/advertisement/ble/index.ts +8 -0
- package/src/advertisement/index.ts +13 -0
- package/src/advertisement/mdns/CommissionableMdnsAdvertisement.ts +118 -0
- package/src/advertisement/mdns/CommissionerMdnsAdvertisement.ts +73 -0
- package/src/advertisement/mdns/MdnsAdvertisement.ts +167 -0
- package/src/advertisement/mdns/MdnsAdvertiser.ts +248 -0
- package/src/advertisement/mdns/OperationalMdnsAdvertisement.ts +50 -0
- package/src/advertisement/mdns/index.ts +11 -0
- package/src/ble/Ble.ts +8 -5
- package/src/ble/BleConsts.ts +2 -1
- package/src/codec/BtpCodec.ts +4 -3
- package/src/common/Scanner.ts +1 -17
- package/src/common/SupportedTransportsBitmap.ts +25 -0
- package/src/common/index.ts +1 -1
- package/src/fabric/Fabric.ts +8 -0
- package/src/index.ts +1 -0
- package/src/mdns/{MdnsScanner.ts → MdnsClient.ts} +34 -103
- package/src/mdns/MdnsConsts.ts +27 -2
- package/src/mdns/MdnsServer.ts +76 -198
- package/src/mdns/MdnsService.ts +24 -27
- package/src/mdns/MdnsSocket.ts +179 -0
- package/src/mdns/index.ts +2 -3
- package/src/peer/ControllerCommissioner.ts +2 -2
- package/src/peer/ControllerDiscovery.ts +3 -3
- package/src/peer/PeerSet.ts +15 -9
- package/src/protocol/DeviceAdvertiser.ts +161 -151
- package/src/protocol/DeviceCommissioner.ts +65 -75
- package/src/protocol/ExchangeManager.ts +1 -1
- package/src/protocol/MessageExchange.ts +8 -14
- package/src/protocol/ProtocolHandler.ts +7 -0
- package/src/protocol/ProtocolStatusMessage.ts +26 -10
- package/src/securechannel/SecureChannelMessenger.ts +3 -3
- package/src/securechannel/SecureChannelProtocol.ts +2 -2
- package/src/securechannel/SecureChannelStatusMessageSchema.ts +3 -3
- package/src/session/NodeSession.ts +4 -0
- package/src/session/Session.ts +6 -42
- package/src/session/SessionIntervals.ts +57 -0
- package/src/session/SessionManager.ts +9 -13
- package/src/session/pase/PaseMessages.ts +1 -1
- package/dist/cjs/common/InstanceBroadcaster.d.ts.map +0 -1
- package/dist/cjs/common/InstanceBroadcaster.js.map +0 -6
- package/dist/cjs/mdns/MdnsBroadcaster.d.ts +0 -34
- package/dist/cjs/mdns/MdnsBroadcaster.d.ts.map +0 -1
- package/dist/cjs/mdns/MdnsBroadcaster.js +0 -365
- package/dist/cjs/mdns/MdnsBroadcaster.js.map +0 -6
- package/dist/cjs/mdns/MdnsInstanceBroadcaster.d.ts +0 -28
- package/dist/cjs/mdns/MdnsInstanceBroadcaster.d.ts.map +0 -1
- package/dist/cjs/mdns/MdnsInstanceBroadcaster.js +0 -87
- package/dist/cjs/mdns/MdnsInstanceBroadcaster.js.map +0 -6
- package/dist/cjs/mdns/MdnsScanner.d.ts.map +0 -1
- package/dist/cjs/mdns/MdnsScanner.js.map +0 -6
- package/dist/esm/common/InstanceBroadcaster.d.ts.map +0 -1
- package/dist/esm/mdns/MdnsBroadcaster.d.ts +0 -34
- package/dist/esm/mdns/MdnsBroadcaster.d.ts.map +0 -1
- package/dist/esm/mdns/MdnsBroadcaster.js +0 -378
- package/dist/esm/mdns/MdnsBroadcaster.js.map +0 -6
- package/dist/esm/mdns/MdnsInstanceBroadcaster.d.ts +0 -28
- package/dist/esm/mdns/MdnsInstanceBroadcaster.d.ts.map +0 -1
- package/dist/esm/mdns/MdnsInstanceBroadcaster.js +0 -67
- package/dist/esm/mdns/MdnsInstanceBroadcaster.js.map +0 -6
- package/dist/esm/mdns/MdnsScanner.d.ts.map +0 -1
- package/dist/esm/mdns/MdnsScanner.js.map +0 -6
- package/src/mdns/MdnsBroadcaster.ts +0 -451
- package/src/mdns/MdnsInstanceBroadcaster.ts +0 -88
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { Fabric } from "#fabric/Fabric.js";
|
|
8
|
+
import { Advertisement } from "./Advertisement.js";
|
|
9
|
+
import type { ServiceDescription } from "./ServiceDescription.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* A component that advertises a Matter service.
|
|
13
|
+
*/
|
|
14
|
+
export abstract class Advertiser {
|
|
15
|
+
#advertisements = new Set<Advertisement>();
|
|
16
|
+
#isClosed = false;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Begin advertising on configured schedule.
|
|
20
|
+
*
|
|
21
|
+
* Note that so long as the advertisement is installed the device will continue to respond to MDNS queries even if
|
|
22
|
+
* the advertisement schedule is elapsed.
|
|
23
|
+
*
|
|
24
|
+
* Returns undefined if the advertiser does not support this type of advertisement.
|
|
25
|
+
*/
|
|
26
|
+
advertise(description: ServiceDescription, event: Advertiser.BroadcastEvent): Advertisement | undefined {
|
|
27
|
+
if (this.#isClosed) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const ad = this.getAdvertisement(description);
|
|
32
|
+
if (ad) {
|
|
33
|
+
ad.start(event);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return ad;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Create a new advertiser or retrieve existing advertiser.
|
|
41
|
+
*/
|
|
42
|
+
protected abstract getAdvertisement(description: ServiceDescription): Advertisement | undefined;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Destroy the instance.
|
|
46
|
+
*/
|
|
47
|
+
async close() {
|
|
48
|
+
this.#isClosed = true;
|
|
49
|
+
await Advertisement.closeAll(this.#advertisements);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* The set of advertisements active for this advertiser.
|
|
54
|
+
*/
|
|
55
|
+
get advertisements() {
|
|
56
|
+
return this.#advertisements;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Obtain the active advertisement for {@link fabric}, if any.
|
|
61
|
+
*/
|
|
62
|
+
advertisementForFabric(fabric: Fabric) {
|
|
63
|
+
for (const ad of this.#advertisements) {
|
|
64
|
+
if (ad.isOperational() && ad.description.fabric === fabric) {
|
|
65
|
+
return ad;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Select advertisements using a predicate.
|
|
72
|
+
*/
|
|
73
|
+
filter(predicate: (ad: Advertisement) => boolean) {
|
|
74
|
+
return [...this.#advertisements].filter(predicate);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export namespace Advertiser {
|
|
79
|
+
/**
|
|
80
|
+
* A hint for scheduling regarding why broadcast is initiated.
|
|
81
|
+
*/
|
|
82
|
+
export type BroadcastEvent = "startup" | "reconnect" | "retransmit";
|
|
83
|
+
}
|
|
@@ -4,8 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { BitFlag, BitmapSchema
|
|
8
|
-
import { Fabric } from "../fabric/Fabric.js";
|
|
7
|
+
import { BitFlag, BitmapSchema } from "@matter/types";
|
|
9
8
|
|
|
10
9
|
export const PairingHintBitmap = {
|
|
11
10
|
/**
|
|
@@ -128,93 +127,3 @@ export const PairingHintBitmap = {
|
|
|
128
127
|
};
|
|
129
128
|
|
|
130
129
|
export const PairingHintBitmapSchema = BitmapSchema(PairingHintBitmap);
|
|
131
|
-
|
|
132
|
-
export interface CommissioningModeInstanceData extends ProductDescription {
|
|
133
|
-
/** Device discriminator for commissionable announcements. */
|
|
134
|
-
discriminator: number;
|
|
135
|
-
|
|
136
|
-
/** Session Idle Interval of the device for commissionable announcements. */
|
|
137
|
-
sessionIdleInterval?: number;
|
|
138
|
-
|
|
139
|
-
/** Session Active Interval of the device for commissionable announcements. */
|
|
140
|
-
sessionActiveInterval?: number;
|
|
141
|
-
|
|
142
|
-
/** Duration of time the node should stay active after the last network activity. **/
|
|
143
|
-
sessionActiveThreshold?: number;
|
|
144
|
-
|
|
145
|
-
/** Pairing hint of the device for commissionable announcements. */
|
|
146
|
-
pairingHint?: TypeFromPartialBitSchema<typeof PairingHintBitmap>;
|
|
147
|
-
|
|
148
|
-
/** Pairing instruction of the device for commissionable announcements. */
|
|
149
|
-
pairingInstructions?: string;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
export type CommissionerInstanceData = {
|
|
153
|
-
/** Device name for commissionable announcements. */
|
|
154
|
-
deviceName: string;
|
|
155
|
-
|
|
156
|
-
/** Device type for commissionable announcements. */
|
|
157
|
-
vendorId: VendorId;
|
|
158
|
-
|
|
159
|
-
/** Vendor ID for commissionable announcements. */
|
|
160
|
-
productId: number;
|
|
161
|
-
|
|
162
|
-
/** Device type for commissionable announcements. */
|
|
163
|
-
deviceType?: number;
|
|
164
|
-
|
|
165
|
-
/** Session Idle Interval of the device for commissionable announcements. */
|
|
166
|
-
sessionIdleInterval?: number;
|
|
167
|
-
|
|
168
|
-
/** Session Active Interval of the device for commissionable announcements. */
|
|
169
|
-
sessionActiveInterval?: number;
|
|
170
|
-
|
|
171
|
-
/** This key defines the duration of time the node stays Active after the last network activity. **/
|
|
172
|
-
sessionActiveThreshold?: number;
|
|
173
|
-
};
|
|
174
|
-
|
|
175
|
-
export type OperationalInstanceData = {
|
|
176
|
-
/** Session Idle Interval of the device for operational announcements. */
|
|
177
|
-
sessionIdleInterval?: number;
|
|
178
|
-
|
|
179
|
-
/** Session Active Interval of the device for operational announcements. */
|
|
180
|
-
sessionActiveInterval?: number;
|
|
181
|
-
|
|
182
|
-
/** This key defines the duration of time the node stays Active after the last network activity. **/
|
|
183
|
-
sessionActiveThreshold?: number;
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
export enum CommissioningMode {
|
|
187
|
-
NotCommissioning = 0,
|
|
188
|
-
Basic = 1,
|
|
189
|
-
Enhanced = 2,
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
/** Interface for classes that allow to announce one Matter instance. */
|
|
193
|
-
export interface InstanceBroadcaster {
|
|
194
|
-
/** Set a commissionable mode and details to announce a commissionable device. */
|
|
195
|
-
setCommissionMode(mode: CommissioningMode, deviceData: CommissioningModeInstanceData): Promise<void>;
|
|
196
|
-
|
|
197
|
-
/**
|
|
198
|
-
* Set operational details to Announce an operational device which is already commissioned.
|
|
199
|
-
* Use expireCommissioningAnnouncements = true when Fabrics are changed after a n commissioning process.
|
|
200
|
-
*/
|
|
201
|
-
setFabrics(fabrics: Fabric[], expireCommissioningAnnouncements?: boolean): Promise<void>;
|
|
202
|
-
|
|
203
|
-
/** Set commissioner details to announce a commissioner service for User directed commissioning (UDC). */
|
|
204
|
-
setCommissionerInfo(commissionerData: CommissionerInstanceData): Promise<void>;
|
|
205
|
-
|
|
206
|
-
/** Send out announcements for this instance. */
|
|
207
|
-
announce(): Promise<void>;
|
|
208
|
-
|
|
209
|
-
/** Expire the announcement for this operative instance. */
|
|
210
|
-
expireFabricAnnouncement(): Promise<void>;
|
|
211
|
-
|
|
212
|
-
/** Expire the announcement for this commissioning instance. */
|
|
213
|
-
expireCommissioningAnnouncement(): Promise<void>;
|
|
214
|
-
|
|
215
|
-
/** Expire all announcements. */
|
|
216
|
-
expireAllAnnouncements(): Promise<void>;
|
|
217
|
-
|
|
218
|
-
/** Destroy the instance */
|
|
219
|
-
close(): Promise<void>;
|
|
220
|
-
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { PairingHintBitmap } from "#advertisement/PairingHintBitmap.js";
|
|
8
|
+
import { SupportedTransportsBitmap } from "#common/SupportedTransportsBitmap.js";
|
|
9
|
+
import type { Fabric } from "#fabric/Fabric.js";
|
|
10
|
+
import { SessionIntervals } from "#session/SessionIntervals.js";
|
|
11
|
+
import type { ProductDescription, TypeFromPartialBitSchema } from "@matter/types";
|
|
12
|
+
import { IcdManagement } from "@matter/types/clusters/icd-management";
|
|
13
|
+
import { CommissioningMode } from "./CommissioningMode.js";
|
|
14
|
+
|
|
15
|
+
export type ServiceDescription =
|
|
16
|
+
| ServiceDescription.Operational
|
|
17
|
+
| ServiceDescription.Commissionable
|
|
18
|
+
| ServiceDescription.Commissioner;
|
|
19
|
+
|
|
20
|
+
export namespace ServiceDescription {
|
|
21
|
+
export function isCommissioning(description: ServiceDescription): description is Commissionable | Commissioner {
|
|
22
|
+
return description.kind === "commissionable" || description.kind === "commissioner";
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function isOperational(description: ServiceDescription): description is Operational {
|
|
26
|
+
return description.kind === "operational";
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface Base extends Partial<SessionIntervals> {
|
|
30
|
+
/**
|
|
31
|
+
* The IP port for the Matter protocol.
|
|
32
|
+
*/
|
|
33
|
+
port?: number;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Indicate support for TCP.
|
|
37
|
+
*/
|
|
38
|
+
tcp?: SupportedTransportsBitmap;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Indicate support for ICD.
|
|
42
|
+
*/
|
|
43
|
+
icd?: IcdManagement.OperatingMode;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface Commissionable extends Base, ProductDescription {
|
|
47
|
+
readonly kind: "commissionable";
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The commissioning mode.
|
|
51
|
+
*/
|
|
52
|
+
readonly mode: CommissioningMode;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Device discriminator for commissionable announcements.
|
|
56
|
+
*/
|
|
57
|
+
readonly discriminator: number;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Pairing hint of the device for commissionable announcements.
|
|
61
|
+
*/
|
|
62
|
+
readonly pairingHint?: TypeFromPartialBitSchema<typeof PairingHintBitmap>;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Pairing instruction of the device for commissionable announcements.
|
|
66
|
+
*/
|
|
67
|
+
readonly pairingInstructions?: string;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function Commissionable(definition: Omit<Commissionable, "kind">): Commissionable {
|
|
71
|
+
return {
|
|
72
|
+
...definition,
|
|
73
|
+
kind: "commissionable",
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export interface Operational extends Base {
|
|
78
|
+
readonly kind: "operational";
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The advertised fabric.
|
|
82
|
+
*/
|
|
83
|
+
readonly fabric: Fabric;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export function Operational(definition: Omit<Operational, "kind">): Operational {
|
|
87
|
+
return {
|
|
88
|
+
...definition,
|
|
89
|
+
kind: "operational",
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export interface Commissioner extends Omit<ProductDescription, "deviceType">, Base {
|
|
94
|
+
readonly kind: "commissioner";
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* The device type.
|
|
98
|
+
*
|
|
99
|
+
* This is optional for commissioner advertisement.
|
|
100
|
+
*/
|
|
101
|
+
readonly deviceType?: number;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export function Commissioner(definition: Omit<Commissioner, "kind">): Commissioner {
|
|
105
|
+
return {
|
|
106
|
+
...definition,
|
|
107
|
+
kind: "commissioner",
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { BtpCodec } from "#codec/BtpCodec.js";
|
|
8
|
+
import { Advertisement } from "../Advertisement.js";
|
|
9
|
+
import { ServiceDescription } from "../ServiceDescription.js";
|
|
10
|
+
import type { BleAdvertiser } from "./BleAdvertiser.js";
|
|
11
|
+
|
|
12
|
+
// Period for "fast" broadcast. See core spec 5.4.2.5.3
|
|
13
|
+
const EARLY_INTERVAL_SLEEP = 30_000;
|
|
14
|
+
|
|
15
|
+
// Period for "medium" broadcast. See core spec 5.4.2.5.3
|
|
16
|
+
const LATE_INTERVAL_SLEEP = 15 * 60_000 - EARLY_INTERVAL_SLEEP;
|
|
17
|
+
|
|
18
|
+
// Period for "extended" broadcast. See core spec 5.4.2.5.3
|
|
19
|
+
const EXTENDED_INTERVAL_SLEEP = 48 * 60 * 60_000 - LATE_INTERVAL_SLEEP;
|
|
20
|
+
|
|
21
|
+
export class BleAdvertisement extends Advertisement<ServiceDescription.Commissionable> {
|
|
22
|
+
declare advertiser: BleAdvertiser;
|
|
23
|
+
|
|
24
|
+
constructor(advertiser: BleAdvertiser, description: ServiceDescription.Commissionable) {
|
|
25
|
+
super(advertiser, "ble:commissioning", description);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
protected override async run(context: Advertisement.ActivityContext) {
|
|
29
|
+
const {
|
|
30
|
+
peripheral,
|
|
31
|
+
config: { earlyInterval, lateInterval, extendedInterval },
|
|
32
|
+
} = this.advertiser;
|
|
33
|
+
|
|
34
|
+
let aad = this.advertiser.config.aad;
|
|
35
|
+
|
|
36
|
+
let timeout = this.advertiser.config.timeout;
|
|
37
|
+
|
|
38
|
+
let advertisementData = this.#encodedAdvertisement;
|
|
39
|
+
|
|
40
|
+
let isExtended = false;
|
|
41
|
+
|
|
42
|
+
const intervals = [
|
|
43
|
+
{ sleepTime: EARLY_INTERVAL_SLEEP, broadcastInterval: earlyInterval },
|
|
44
|
+
{ sleepTime: LATE_INTERVAL_SLEEP, broadcastInterval: lateInterval },
|
|
45
|
+
{ sleepTime: EXTENDED_INTERVAL_SLEEP, broadcastInterval: extendedInterval },
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
try {
|
|
49
|
+
for (const { sleepTime, broadcastInterval } of intervals) {
|
|
50
|
+
// Recreate advertisement data for extended announcement
|
|
51
|
+
if (!isExtended && this.isPrivacyMasked) {
|
|
52
|
+
isExtended = true;
|
|
53
|
+
advertisementData = this.#encodedAdvertisement;
|
|
54
|
+
aad = undefined;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Configure BLE peripheral broadcasts at specified interval
|
|
58
|
+
await peripheral.advertise(advertisementData, aad, broadcastInterval);
|
|
59
|
+
|
|
60
|
+
// Wait for timeout at this broadcast interval
|
|
61
|
+
await context.sleep("BLE advertisement interval", Math.min(timeout, sleepTime));
|
|
62
|
+
|
|
63
|
+
timeout -= sleepTime;
|
|
64
|
+
if ((timeout -= sleepTime) <= 0) {
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
} finally {
|
|
69
|
+
await peripheral.stopAdvertising();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
get #encodedAdvertisement() {
|
|
74
|
+
const { discriminator, vendorId, productId } = this.description;
|
|
75
|
+
const { isPrivacyMasked: isExtendedAnnouncement } = this;
|
|
76
|
+
|
|
77
|
+
return BtpCodec.encodeBleAdvertisementData(
|
|
78
|
+
discriminator,
|
|
79
|
+
isExtendedAnnouncement ? 0 : vendorId,
|
|
80
|
+
isExtendedAnnouncement ? 0 : productId,
|
|
81
|
+
!isExtendedAnnouncement && !!this.advertiser.config.aad?.length,
|
|
82
|
+
isExtendedAnnouncement,
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
isDuplicate() {
|
|
87
|
+
// We only allow a single advertisement per BLE interface
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { BlePeripheralInterface } from "#ble/Ble.js";
|
|
8
|
+
import { ImplementationError } from "#general";
|
|
9
|
+
import { DatatypeModel, FieldElement } from "#model";
|
|
10
|
+
import { MAXIMUM_COMMISSIONING_TIMEOUT_S } from "#types";
|
|
11
|
+
import { Advertisement } from "../Advertisement.js";
|
|
12
|
+
import { Advertiser } from "../Advertiser.js";
|
|
13
|
+
import { CommissioningMode } from "../CommissioningMode.js";
|
|
14
|
+
import { ServiceDescription } from "../ServiceDescription.js";
|
|
15
|
+
import { BleAdvertisement } from "./BleAdvertisement.js";
|
|
16
|
+
|
|
17
|
+
export class BleAdvertiser extends Advertiser {
|
|
18
|
+
#peripheral: BlePeripheralInterface;
|
|
19
|
+
#config: BleAdvertiser.Configuration;
|
|
20
|
+
#isClosed = false;
|
|
21
|
+
|
|
22
|
+
constructor(peripheral: BlePeripheralInterface, options?: BleAdvertiser.Options) {
|
|
23
|
+
super();
|
|
24
|
+
|
|
25
|
+
this.#peripheral = peripheral;
|
|
26
|
+
this.#config = BleAdvertiser.Configuration(options);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
get peripheral() {
|
|
30
|
+
return this.#peripheral;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
get config() {
|
|
34
|
+
return this.#config;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
getAdvertisement(description: ServiceDescription): Advertisement | undefined {
|
|
38
|
+
this.#assertOpen();
|
|
39
|
+
|
|
40
|
+
if (description.kind !== "commissionable" || description.mode !== CommissioningMode.Basic) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return new BleAdvertisement(this, description);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
#assertOpen() {
|
|
48
|
+
if (this.#isClosed) {
|
|
49
|
+
throw new ImplementationError("Illegal operation on closed BleBroadcaster");
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export namespace BleAdvertiser {
|
|
55
|
+
/**
|
|
56
|
+
* Advertisement configuration.
|
|
57
|
+
*
|
|
58
|
+
* All intervals are in milliseconds.
|
|
59
|
+
*/
|
|
60
|
+
export interface Configuration {
|
|
61
|
+
/**
|
|
62
|
+
* Additional advertisement data.
|
|
63
|
+
*/
|
|
64
|
+
readonly aad?: Uint8Array;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Advertisement timeout.
|
|
68
|
+
*/
|
|
69
|
+
readonly timeout: number;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Transmission interval for first 30 seconds.
|
|
73
|
+
*
|
|
74
|
+
* Per core spec 5.4.2.5.3 should be 20-60ms.
|
|
75
|
+
*/
|
|
76
|
+
readonly earlyInterval: number;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Transmission interval after first 30 seconds but before 15 minutes.
|
|
80
|
+
*
|
|
81
|
+
* Per core spec 5.4.2.5.3 should be 150-1285ms.
|
|
82
|
+
*/
|
|
83
|
+
readonly lateInterval: number;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Transmission interval after 15 minutes.
|
|
87
|
+
*
|
|
88
|
+
* Per core spec 5.4.2.5.3 should be ~1285ms.
|
|
89
|
+
*/
|
|
90
|
+
readonly extendedInterval: number;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export interface Options extends Partial<Configuration> {}
|
|
94
|
+
|
|
95
|
+
export function Configuration(options?: Options) {
|
|
96
|
+
return {
|
|
97
|
+
timeout: MAXIMUM_COMMISSIONING_TIMEOUT_S,
|
|
98
|
+
earlyInterval: 20,
|
|
99
|
+
lateInterval: 150,
|
|
100
|
+
extendedInterval: 1285,
|
|
101
|
+
...options,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Data model for BLE advertiser configuration.
|
|
107
|
+
*/
|
|
108
|
+
export const OptionsSchema = new DatatypeModel(
|
|
109
|
+
{ name: "BleAdvertiserOptions", type: "struct" },
|
|
110
|
+
FieldElement({ name: "add", type: "octstr" }),
|
|
111
|
+
FieldElement({ name: "timeout", type: "uint32" }),
|
|
112
|
+
FieldElement({ name: "earlyInterval", type: "uint32" }),
|
|
113
|
+
FieldElement({ name: "lateInterval", type: "uint32" }),
|
|
114
|
+
FieldElement({ name: "extendedInterval", type: "uint32" }),
|
|
115
|
+
);
|
|
116
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export * from "./Advertisement.js";
|
|
8
|
+
export * from "./Advertiser.js";
|
|
9
|
+
export * from "./ble/index.js";
|
|
10
|
+
export * from "./CommissioningMode.js";
|
|
11
|
+
export * from "./mdns/index.js";
|
|
12
|
+
export * from "./PairingHintBitmap.js";
|
|
13
|
+
export * from "./ServiceDescription.js";
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { Advertisement } from "#advertisement/Advertisement.js";
|
|
8
|
+
import { PairingHintBitmapSchema } from "#advertisement/PairingHintBitmap.js";
|
|
9
|
+
import { ServiceDescription } from "#advertisement/ServiceDescription.js";
|
|
10
|
+
import { ImplementationError, PtrRecord } from "#general";
|
|
11
|
+
import {
|
|
12
|
+
DEFAULT_PAIRING_HINT,
|
|
13
|
+
getCommissionableDeviceQname,
|
|
14
|
+
getCommissioningModeQname,
|
|
15
|
+
getDeviceTypeQname,
|
|
16
|
+
getLongDiscriminatorQname,
|
|
17
|
+
getShortDiscriminatorQname,
|
|
18
|
+
getVendorQname,
|
|
19
|
+
MATTER_COMMISSION_SERVICE_QNAME,
|
|
20
|
+
PAIRING_HINTS_REQUIRING_INSTRUCTION,
|
|
21
|
+
SERVICE_DISCOVERY_QNAME,
|
|
22
|
+
} from "#mdns/MdnsConsts.js";
|
|
23
|
+
import { MdnsAdvertisement } from "./MdnsAdvertisement.js";
|
|
24
|
+
import type { MdnsAdvertiser } from "./MdnsAdvertiser.js";
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Advertise a node as commissionable.
|
|
28
|
+
*/
|
|
29
|
+
export class CommissionableMdnsAdvertisement extends MdnsAdvertisement<ServiceDescription.Commissionable> {
|
|
30
|
+
instanceId: string;
|
|
31
|
+
|
|
32
|
+
constructor(advertiser: MdnsAdvertiser, description: ServiceDescription.Commissionable) {
|
|
33
|
+
const instanceId = advertiser.createInstanceId();
|
|
34
|
+
const qname = getCommissionableDeviceQname(instanceId);
|
|
35
|
+
|
|
36
|
+
super(advertiser, qname, description);
|
|
37
|
+
|
|
38
|
+
this.instanceId = instanceId;
|
|
39
|
+
|
|
40
|
+
this.#validatePairingInstructions();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
override get ptrRecords() {
|
|
44
|
+
const { discriminator, deviceType, vendorId } = this.description;
|
|
45
|
+
|
|
46
|
+
const shortDiscriminator = (discriminator >> 8) & 0x0f;
|
|
47
|
+
const vendorQname = getVendorQname(vendorId);
|
|
48
|
+
const deviceTypeQname = getDeviceTypeQname(deviceType);
|
|
49
|
+
const shortDiscriminatorQname = getShortDiscriminatorQname(shortDiscriminator);
|
|
50
|
+
const longDiscriminatorQname = getLongDiscriminatorQname(discriminator);
|
|
51
|
+
const commissionModeQname = getCommissioningModeQname();
|
|
52
|
+
|
|
53
|
+
const records = [
|
|
54
|
+
PtrRecord(SERVICE_DISCOVERY_QNAME, MATTER_COMMISSION_SERVICE_QNAME),
|
|
55
|
+
PtrRecord(SERVICE_DISCOVERY_QNAME, deviceTypeQname),
|
|
56
|
+
PtrRecord(SERVICE_DISCOVERY_QNAME, shortDiscriminatorQname),
|
|
57
|
+
PtrRecord(SERVICE_DISCOVERY_QNAME, longDiscriminatorQname),
|
|
58
|
+
PtrRecord(SERVICE_DISCOVERY_QNAME, commissionModeQname),
|
|
59
|
+
PtrRecord(MATTER_COMMISSION_SERVICE_QNAME, this.qname),
|
|
60
|
+
PtrRecord(deviceTypeQname, this.qname),
|
|
61
|
+
PtrRecord(shortDiscriminatorQname, this.qname),
|
|
62
|
+
PtrRecord(longDiscriminatorQname, this.qname),
|
|
63
|
+
PtrRecord(commissionModeQname, this.qname),
|
|
64
|
+
];
|
|
65
|
+
|
|
66
|
+
if (!this.isPrivacyMasked) {
|
|
67
|
+
records.push(PtrRecord(SERVICE_DISCOVERY_QNAME, vendorQname), PtrRecord(vendorQname, this.qname));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return records;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
override get txtValues() {
|
|
74
|
+
const {
|
|
75
|
+
vendorId,
|
|
76
|
+
productId,
|
|
77
|
+
deviceType,
|
|
78
|
+
name,
|
|
79
|
+
discriminator,
|
|
80
|
+
mode,
|
|
81
|
+
pairingHint = DEFAULT_PAIRING_HINT,
|
|
82
|
+
pairingInstructions,
|
|
83
|
+
} = this.description;
|
|
84
|
+
|
|
85
|
+
const values: Record<string, unknown> = {
|
|
86
|
+
DN: name /* Device Name */,
|
|
87
|
+
DT: deviceType /* Device Type */,
|
|
88
|
+
D: discriminator /* Discriminator */,
|
|
89
|
+
CM: mode /* Commission Mode */,
|
|
90
|
+
PH: PairingHintBitmapSchema.encode(pairingHint) /* Pairing Hint */,
|
|
91
|
+
PI: pairingInstructions /* Pairing Instruction */,
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
if (!this.isPrivacyMasked) {
|
|
95
|
+
values.VP = `${vendorId}+${productId}`; /* Vendor / Product */
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return values;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
override isDuplicate(other: Advertisement) {
|
|
102
|
+
// Only one commissioning advertisement allowed per advertiser
|
|
103
|
+
return other.isCommissioning();
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
#validatePairingInstructions() {
|
|
107
|
+
const { pairingHint, pairingInstructions } = this.description;
|
|
108
|
+
|
|
109
|
+
const needsInstructions =
|
|
110
|
+
pairingHint && PAIRING_HINTS_REQUIRING_INSTRUCTION.find(hint => pairingHint[hint] === true);
|
|
111
|
+
|
|
112
|
+
if (needsInstructions && !pairingInstructions) {
|
|
113
|
+
throw new ImplementationError(
|
|
114
|
+
`Pairing instructions required for pairing hint of type "${needsInstructions}"`,
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|