@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,73 @@
|
|
|
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 { ServiceDescription } from "#advertisement/ServiceDescription.js";
|
|
9
|
+
import { PtrRecord } from "#general";
|
|
10
|
+
import {
|
|
11
|
+
getCommissionerDeviceQname,
|
|
12
|
+
MATTER_COMMISSIONER_SERVICE_QNAME,
|
|
13
|
+
SERVICE_DISCOVERY_QNAME,
|
|
14
|
+
} from "#mdns/MdnsConsts.js";
|
|
15
|
+
import { MdnsAdvertisement } from "./MdnsAdvertisement.js";
|
|
16
|
+
import type { MdnsAdvertiser } from "./MdnsAdvertiser.js";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Advertise a node as a commissioner service.
|
|
20
|
+
*/
|
|
21
|
+
export class CommissionerMdnsAdvertisement extends MdnsAdvertisement<ServiceDescription.Commissioner> {
|
|
22
|
+
instanceId: string;
|
|
23
|
+
|
|
24
|
+
constructor(advertiser: MdnsAdvertiser, description: ServiceDescription.Commissioner) {
|
|
25
|
+
const instanceId = advertiser.createInstanceId();
|
|
26
|
+
const qname = getCommissionerDeviceQname(instanceId);
|
|
27
|
+
|
|
28
|
+
super(advertiser, qname, description);
|
|
29
|
+
|
|
30
|
+
this.instanceId = instanceId;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
override get ptrRecords() {
|
|
34
|
+
const { deviceType, vendorId } = this.description;
|
|
35
|
+
|
|
36
|
+
const vendorQname = `_V${vendorId}._sub.${MATTER_COMMISSIONER_SERVICE_QNAME}`;
|
|
37
|
+
|
|
38
|
+
const records = [
|
|
39
|
+
PtrRecord(SERVICE_DISCOVERY_QNAME, MATTER_COMMISSIONER_SERVICE_QNAME),
|
|
40
|
+
PtrRecord(MATTER_COMMISSIONER_SERVICE_QNAME, vendorQname),
|
|
41
|
+
PtrRecord(vendorQname, this.qname),
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
if (deviceType !== undefined) {
|
|
45
|
+
const deviceTypeQname = `_T${deviceType}._sub.${MATTER_COMMISSIONER_SERVICE_QNAME}`;
|
|
46
|
+
|
|
47
|
+
records.push(PtrRecord(SERVICE_DISCOVERY_QNAME, deviceTypeQname));
|
|
48
|
+
records.push(PtrRecord(deviceTypeQname, this.qname));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return records;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
override get txtValues() {
|
|
55
|
+
const { vendorId, productId, deviceType, name: deviceName } = this.description;
|
|
56
|
+
|
|
57
|
+
const values: Record<string, unknown> = {
|
|
58
|
+
DN: deviceName /* Device Name */,
|
|
59
|
+
DT: deviceType /* Device Type */,
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
if (!this.isPrivacyMasked) {
|
|
63
|
+
values.VP = `${vendorId}+${productId}`; /* Vendor / Product */
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return values;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
override isDuplicate(other: Advertisement) {
|
|
70
|
+
// Only one commissioning advertisement allowed per advertiser
|
|
71
|
+
return other.isCommissioning();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Advertisement } from "#advertisement/Advertisement.js";
|
|
8
|
+
import type { Advertiser } from "#advertisement/Advertiser.js";
|
|
9
|
+
import type { ServiceDescription } from "#advertisement/ServiceDescription.js";
|
|
10
|
+
import { SupportedTransportsSchema } from "#common/SupportedTransportsBitmap.js";
|
|
11
|
+
import { AAAARecord, ARecord, DnsRecord, Logger, NetworkInterfaceDetails, SrvRecord, Time, TxtRecord } from "#general";
|
|
12
|
+
import type { MdnsServer } from "#mdns/MdnsServer.js";
|
|
13
|
+
import { SessionIntervals } from "#session/SessionIntervals.js";
|
|
14
|
+
import type { MdnsAdvertiser } from "./MdnsAdvertiser.js";
|
|
15
|
+
|
|
16
|
+
const logger = Logger.get("MdnsAdvertisement");
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Base class for MDNS advertisements.
|
|
20
|
+
*
|
|
21
|
+
* Individual classes specialize for each type of service.
|
|
22
|
+
*/
|
|
23
|
+
export abstract class MdnsAdvertisement<T extends ServiceDescription = ServiceDescription> extends Advertisement<T> {
|
|
24
|
+
declare advertiser: MdnsAdvertiser;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The device qname.
|
|
28
|
+
*/
|
|
29
|
+
qname: string;
|
|
30
|
+
|
|
31
|
+
#isPrivacyMasked: boolean;
|
|
32
|
+
#stopAt?: number;
|
|
33
|
+
|
|
34
|
+
constructor(advertiser: MdnsAdvertiser, qname: string, description: T) {
|
|
35
|
+
description = {
|
|
36
|
+
...description,
|
|
37
|
+
...SessionIntervals(description),
|
|
38
|
+
};
|
|
39
|
+
super(advertiser, `mdns:${qname}`, description, { omitPrivateDetails: advertiser.omitPrivateDetails });
|
|
40
|
+
this.qname = qname;
|
|
41
|
+
this.#isPrivacyMasked = this.isPrivacyMasked;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
protected abstract ptrRecords: DnsRecord[];
|
|
45
|
+
|
|
46
|
+
protected get txtValues(): Record<string, unknown> {
|
|
47
|
+
return {};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
override async run(context: Advertisement.ActivityContext, event: Advertiser.BroadcastEvent = "startup") {
|
|
51
|
+
this.#stopAt = undefined;
|
|
52
|
+
let number = 0;
|
|
53
|
+
for (const retryInterval of this.advertiser.broadcastScheduleFor(this, event)) {
|
|
54
|
+
if (this.#stopAt !== undefined && this.#stopAt <= Time.nowMs()) {
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
number++;
|
|
59
|
+
logger.debug("Broadcast", this.dict({ number, next: retryInterval }));
|
|
60
|
+
await this.broadcast();
|
|
61
|
+
await context.sleep("MDNS repeat", retryInterval);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Broadcast a single announcement immediately.
|
|
67
|
+
*/
|
|
68
|
+
async broadcast() {
|
|
69
|
+
if (!this.#isPrivacyMasked && this.isPrivacyMasked) {
|
|
70
|
+
this.#isPrivacyMasked = true;
|
|
71
|
+
await this.advertiser.server.setRecordsGenerator(this.service, this.#recordsGenerator);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
await this.advertiser.server.broadcast(this.service);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Broadcast expiration announcement immediately.
|
|
79
|
+
*/
|
|
80
|
+
async expire() {
|
|
81
|
+
logger.info("Unpublishing", this.dict({ time: this.duration }));
|
|
82
|
+
await this.advertiser.server.expireAnnouncements(this.service);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
override serviceConnected() {
|
|
86
|
+
const { broadcastAfterConnection } = this.advertiser.broadcastConfigFor(this);
|
|
87
|
+
|
|
88
|
+
if (broadcastAfterConnection === undefined) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (broadcastAfterConnection <= 0) {
|
|
93
|
+
this.stop();
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
this.#stopAt = Time.nowMs() + broadcastAfterConnection;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
override serviceDisconnected() {
|
|
101
|
+
this.start("reconnect");
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
protected override async onCreate() {
|
|
105
|
+
// Use Promise.resolve() to initialize on next microtick so the constructor completes before invocation
|
|
106
|
+
await Promise.resolve().then(() => {
|
|
107
|
+
// Install the records generator. This will be used for broadcast and to respond to queries
|
|
108
|
+
logger.info("Publishing", this.dict());
|
|
109
|
+
return this.advertiser.server.setRecordsGenerator(this.service, this.#recordsGenerator);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
protected override async onClose() {
|
|
114
|
+
// The MDNS server doesn't currently track which answers have been sent so just expire unconditionally
|
|
115
|
+
await this.expire();
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
get #recordsGenerator(): MdnsServer.RecordGenerator {
|
|
119
|
+
return (_intf, addrs) => this.#recordsFor(addrs);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
#recordsFor(addrs: NetworkInterfaceDetails) {
|
|
123
|
+
const hostname = addrs.mac.replace(/:/g, "").toUpperCase() + "0000.local";
|
|
124
|
+
|
|
125
|
+
const records: DnsRecord[] = [
|
|
126
|
+
...this.ptrRecords,
|
|
127
|
+
SrvRecord(this.qname, { priority: 0, weight: 0, port: this.advertiser.port, target: hostname }),
|
|
128
|
+
TxtRecord(
|
|
129
|
+
this.qname,
|
|
130
|
+
Object.entries(this.#txtValues)
|
|
131
|
+
.filter(([, v]) => v !== undefined)
|
|
132
|
+
.map(([k, v]) => `${k}=${v}`),
|
|
133
|
+
),
|
|
134
|
+
];
|
|
135
|
+
|
|
136
|
+
for (const addr of addrs.ipV6) {
|
|
137
|
+
records.push(AAAARecord(hostname, addr));
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (this.advertiser.server.supportsIpv4) {
|
|
141
|
+
for (const addr of addrs.ipV4) {
|
|
142
|
+
records.push(ARecord(hostname, addr));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return records;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
get #txtValues() {
|
|
150
|
+
const values: Record<string, unknown> = {
|
|
151
|
+
SII: this.description.idleIntervalMs /* Session Idle Interval */,
|
|
152
|
+
SAI: this.description.activeIntervalMs /* Session Active Interval */,
|
|
153
|
+
SAT: this.description.activeThresholdMs /* Session Active Threshold */,
|
|
154
|
+
...this.txtValues,
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
if (this.description.tcp !== undefined) {
|
|
158
|
+
values.T = SupportedTransportsSchema.encode(this.description.tcp); /* TCP support */
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if (this.description.icd !== undefined) {
|
|
162
|
+
values.ICD = this.description.icd; /* ICD support */
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return values;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Advertiser } from "#advertisement/Advertiser.js";
|
|
8
|
+
import { ServiceDescription } from "#advertisement/ServiceDescription.js";
|
|
9
|
+
import { Bytes, Crypto, ImplementationError, InternalError, RetrySchedule, STANDARD_MATTER_PORT } from "#general";
|
|
10
|
+
import type { MdnsServer } from "#mdns/MdnsServer.js";
|
|
11
|
+
import { DatatypeModel, FieldElement } from "#model";
|
|
12
|
+
import { MAXIMUM_COMMISSIONING_TIMEOUT_S } from "#types";
|
|
13
|
+
import { CommissionableMdnsAdvertisement } from "./CommissionableMdnsAdvertisement.js";
|
|
14
|
+
import { CommissionerMdnsAdvertisement } from "./CommissionerMdnsAdvertisement.js";
|
|
15
|
+
import type { MdnsAdvertisement } from "./MdnsAdvertisement.js";
|
|
16
|
+
import { OperationalMdnsAdvertisement } from "./OperationalMdnsAdvertisement.js";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* An {@link Advertiser} that advertises using an in-process MDNS implementation.
|
|
20
|
+
*/
|
|
21
|
+
export class MdnsAdvertiser extends Advertiser {
|
|
22
|
+
readonly port: number;
|
|
23
|
+
readonly omitPrivateDetails: boolean;
|
|
24
|
+
|
|
25
|
+
#schedules = new Array<{ config: MdnsAdvertiser.BroadcastSchedule; schedule?: RetrySchedule }>();
|
|
26
|
+
|
|
27
|
+
constructor(
|
|
28
|
+
readonly crypto: Crypto,
|
|
29
|
+
readonly server: MdnsServer,
|
|
30
|
+
options?: MdnsAdvertiser.Options,
|
|
31
|
+
) {
|
|
32
|
+
super();
|
|
33
|
+
|
|
34
|
+
this.port = options?.port ?? STANDARD_MATTER_PORT;
|
|
35
|
+
this.omitPrivateDetails = options?.omitPrivateDetails ?? false;
|
|
36
|
+
|
|
37
|
+
let hasDefaultSchedule = false;
|
|
38
|
+
let hasRetransmitSchedule = false;
|
|
39
|
+
if (options?.schedules) {
|
|
40
|
+
for (const schedule of options.schedules) {
|
|
41
|
+
if (schedule.serviceKind === undefined) {
|
|
42
|
+
if (schedule.event === undefined) {
|
|
43
|
+
hasDefaultSchedule = true;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (schedule.event === "retransmit") {
|
|
47
|
+
hasRetransmitSchedule = true;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
this.#schedules.push({ config: schedule });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (!hasRetransmitSchedule) {
|
|
56
|
+
this.#schedules.push({ config: MdnsAdvertiser.RetransmissionBroadcastSchedule });
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (!hasDefaultSchedule) {
|
|
60
|
+
this.#schedules.push({ config: MdnsAdvertiser.DefaultBroadcastSchedule });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Create an advertisement for the specific service.
|
|
66
|
+
*/
|
|
67
|
+
override getAdvertisement(description: ServiceDescription): MdnsAdvertisement | undefined {
|
|
68
|
+
switch (description.kind) {
|
|
69
|
+
case "operational":
|
|
70
|
+
return (
|
|
71
|
+
(this.advertisementForFabric(description.fabric) as MdnsAdvertisement | undefined) ??
|
|
72
|
+
new OperationalMdnsAdvertisement(this, description)
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
case "commissionable":
|
|
76
|
+
return new CommissionableMdnsAdvertisement(this, description);
|
|
77
|
+
|
|
78
|
+
case "commissioner":
|
|
79
|
+
return new CommissionerMdnsAdvertisement(this, description);
|
|
80
|
+
|
|
81
|
+
default:
|
|
82
|
+
throw new ImplementationError(
|
|
83
|
+
`Unsupported service description kind "${(description as ServiceDescription).kind}`,
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Generate a random 8-byte Matter instance identifier.
|
|
90
|
+
*/
|
|
91
|
+
createInstanceId() {
|
|
92
|
+
return Bytes.toHex(this.crypto.randomBytes(8)).toUpperCase();
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Retrieve the broadcast schedule for a specific advertisement.
|
|
97
|
+
*/
|
|
98
|
+
broadcastScheduleFor(advertisement: MdnsAdvertisement, event?: Advertiser.BroadcastEvent) {
|
|
99
|
+
const entry = this.#scheduleFor(advertisement, event);
|
|
100
|
+
|
|
101
|
+
if (entry.schedule === undefined) {
|
|
102
|
+
entry.schedule = new RetrySchedule(
|
|
103
|
+
this.crypto,
|
|
104
|
+
RetrySchedule.Configuration(MdnsAdvertiser.DefaultBroadcastSchedule, entry.config),
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return entry.schedule;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Retrieve broadcast configuration for a specific advertisement.
|
|
113
|
+
*/
|
|
114
|
+
broadcastConfigFor(advertisement: MdnsAdvertisement, event?: Advertiser.BroadcastEvent) {
|
|
115
|
+
return this.#scheduleFor(advertisement, event).config;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
#scheduleFor(advertisement: MdnsAdvertisement, event?: Advertiser.BroadcastEvent) {
|
|
119
|
+
if (!event) {
|
|
120
|
+
event = "startup";
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
for (const entry of this.#schedules) {
|
|
124
|
+
const { serviceKind, event: event2 } = entry.config;
|
|
125
|
+
|
|
126
|
+
if (serviceKind !== undefined && serviceKind !== advertisement.description.kind) {
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (event2 !== undefined && event2 !== event) {
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return entry;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
throw new InternalError("Default retry schedule not present");
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export namespace MdnsAdvertiser {
|
|
142
|
+
/**
|
|
143
|
+
* MDNS advertisement configuration options.
|
|
144
|
+
*/
|
|
145
|
+
export interface Options {
|
|
146
|
+
/**
|
|
147
|
+
* The port of the Matter service to advertise.
|
|
148
|
+
*
|
|
149
|
+
* Defaults to 5540.
|
|
150
|
+
*/
|
|
151
|
+
readonly port?: number;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Omit the vendor and product ID from announcements for privacy reasons.
|
|
155
|
+
*/
|
|
156
|
+
readonly omitPrivateDetails?: boolean;
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Broadcast schedule.
|
|
160
|
+
*
|
|
161
|
+
* These control the intervals at which the server broadcasts the advertisement. Note that order is important;
|
|
162
|
+
* more specific schedules should appear first.
|
|
163
|
+
*
|
|
164
|
+
* By default all broadcasts are configured using {@link DefaultBroadcastSchedule}.
|
|
165
|
+
*/
|
|
166
|
+
readonly schedules?: readonly BroadcastSchedule[];
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Schedule for automatic broadcasts.
|
|
171
|
+
*
|
|
172
|
+
* Schedules apply conditionally with {@link DefaultBroadcastSchedule} as the fallback.
|
|
173
|
+
*/
|
|
174
|
+
export interface BroadcastSchedule extends RetrySchedule.Configuration {
|
|
175
|
+
/**
|
|
176
|
+
* Limit this schedule to a particular service kind.
|
|
177
|
+
*/
|
|
178
|
+
readonly serviceKind?: ServiceDescription["kind"];
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Limit this schedule to initial broadcast or broadcast when reconnecting.
|
|
182
|
+
*/
|
|
183
|
+
readonly event?: Advertiser.BroadcastEvent;
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Extra time to broadcast after establishing an operational connection.
|
|
187
|
+
*
|
|
188
|
+
* Set to zero to terminate broadcast immediately after connection. If undefined broadcasts will continue until
|
|
189
|
+
* terminated by {@link timeout} or {@link maximumCount}.
|
|
190
|
+
*/
|
|
191
|
+
readonly broadcastAfterConnection?: number;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Default schedule for automatic broadcast.
|
|
196
|
+
*/
|
|
197
|
+
export const DefaultBroadcastSchedule: BroadcastSchedule = {
|
|
198
|
+
// Mandated by MDNS specification
|
|
199
|
+
initialInterval: 1_000,
|
|
200
|
+
|
|
201
|
+
// Maximum commissioning timeout per Matter specification 5.4.2.3.1, although
|
|
202
|
+
timeout: MAXIMUM_COMMISSIONING_TIMEOUT_S * 1000,
|
|
203
|
+
|
|
204
|
+
// Minimum per MDNS specification
|
|
205
|
+
backoffFactor: 2,
|
|
206
|
+
|
|
207
|
+
// Technically this may result in us emitting more than 8 packets which is the maximum per the MDNS
|
|
208
|
+
// specification but extra packets will only come every 90 seconds
|
|
209
|
+
maximumInterval: 90_000,
|
|
210
|
+
|
|
211
|
+
// Not in any specification AFAIK but common sense to reduce thundering herd
|
|
212
|
+
jitterFactor: 0.25,
|
|
213
|
+
|
|
214
|
+
// Generally operational broadcast is unnecessary once an operational connection is established
|
|
215
|
+
broadcastAfterConnection: 0,
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Default schedule for retransmission broadcast.
|
|
220
|
+
*/
|
|
221
|
+
export const RetransmissionBroadcastSchedule: BroadcastSchedule = {
|
|
222
|
+
event: "retransmit",
|
|
223
|
+
|
|
224
|
+
// Retransmission events occur for every packet retry so limit count to 1
|
|
225
|
+
maximumCount: 1,
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Data model for MDNS advertiser configuration.
|
|
230
|
+
*/
|
|
231
|
+
export const OptionsSchema = new DatatypeModel(
|
|
232
|
+
{ name: "MdnsAdvertiserOptions", type: "struct" },
|
|
233
|
+
FieldElement({ name: "omitPrivateDetails", type: "bool" }),
|
|
234
|
+
FieldElement(
|
|
235
|
+
{ name: "schedules", type: "list" },
|
|
236
|
+
FieldElement(
|
|
237
|
+
{ name: "entry", type: "struct" },
|
|
238
|
+
FieldElement({ name: "initialInterval", type: "uint32" }),
|
|
239
|
+
FieldElement({ name: "timeout", type: "uint32" }),
|
|
240
|
+
FieldElement({ name: "backoffFactor", type: "uint8" }),
|
|
241
|
+
FieldElement({ name: "maximumInterval", type: "uint32" }),
|
|
242
|
+
FieldElement({ name: "jitterFactor", type: "single" }),
|
|
243
|
+
FieldElement({ name: "serviceKind", type: "string" }),
|
|
244
|
+
FieldElement({ name: "event", type: "string" }),
|
|
245
|
+
),
|
|
246
|
+
),
|
|
247
|
+
);
|
|
248
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
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 { ServiceDescription } from "#advertisement/ServiceDescription.js";
|
|
9
|
+
import { Bytes, PtrRecord } from "#general";
|
|
10
|
+
import {
|
|
11
|
+
getFabricQname,
|
|
12
|
+
getOperationalDeviceQname,
|
|
13
|
+
MATTER_SERVICE_QNAME,
|
|
14
|
+
SERVICE_DISCOVERY_QNAME,
|
|
15
|
+
} from "#mdns/MdnsConsts.js";
|
|
16
|
+
import { NodeId } from "#types";
|
|
17
|
+
import { MdnsAdvertisement } from "./MdnsAdvertisement.js";
|
|
18
|
+
import type { MdnsAdvertiser } from "./MdnsAdvertiser.js";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Advertise a node as a fabric member.
|
|
22
|
+
*/
|
|
23
|
+
export class OperationalMdnsAdvertisement extends MdnsAdvertisement<ServiceDescription.Operational> {
|
|
24
|
+
constructor(advertiser: MdnsAdvertiser, description: ServiceDescription.Operational) {
|
|
25
|
+
const {
|
|
26
|
+
fabric: { operationalId, nodeId },
|
|
27
|
+
} = description;
|
|
28
|
+
|
|
29
|
+
const qname = getOperationalDeviceQname(Bytes.toHex(operationalId).toUpperCase(), NodeId.toHexString(nodeId));
|
|
30
|
+
|
|
31
|
+
super(advertiser, qname, description);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
override get ptrRecords() {
|
|
35
|
+
const operationalIdString = Bytes.toHex(this.description.fabric.operationalId).toUpperCase();
|
|
36
|
+
const fabricQname = getFabricQname(operationalIdString);
|
|
37
|
+
|
|
38
|
+
return [
|
|
39
|
+
PtrRecord(SERVICE_DISCOVERY_QNAME, MATTER_SERVICE_QNAME),
|
|
40
|
+
PtrRecord(SERVICE_DISCOVERY_QNAME, fabricQname),
|
|
41
|
+
PtrRecord(MATTER_SERVICE_QNAME, this.qname),
|
|
42
|
+
PtrRecord(fabricQname, this.qname),
|
|
43
|
+
];
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
override isDuplicate(other: Advertisement) {
|
|
47
|
+
// There may only be one operational advertisement per service per advertiser
|
|
48
|
+
return other.isOperational() && other.service === this.service;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export * from "./CommissionableMdnsAdvertisement.js";
|
|
8
|
+
export * from "./CommissionerMdnsAdvertisement.js";
|
|
9
|
+
export * from "./MdnsAdvertisement.js";
|
|
10
|
+
export * from "./MdnsAdvertiser.js";
|
|
11
|
+
export * from "./OperationalMdnsAdvertisement.js";
|
package/src/ble/Ble.ts
CHANGED
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { Channel, ChannelType, MatterError, NetInterface, NoProviderError, TransportInterface } from "#general";
|
|
8
|
-
import { InstanceBroadcaster } from "../common/InstanceBroadcaster.js";
|
|
9
8
|
import { Scanner } from "../common/Scanner.js";
|
|
10
9
|
import { BLE_MAX_MATTER_PAYLOAD_SIZE } from "./BleConsts.js";
|
|
11
10
|
|
|
@@ -23,10 +22,14 @@ export abstract class Ble {
|
|
|
23
22
|
return this.get !== BleDisabled;
|
|
24
23
|
}
|
|
25
24
|
|
|
26
|
-
abstract
|
|
27
|
-
abstract
|
|
28
|
-
abstract
|
|
29
|
-
|
|
25
|
+
abstract get peripheralInterface(): BlePeripheralInterface;
|
|
26
|
+
abstract get centralInterface(): NetInterface;
|
|
27
|
+
abstract get scanner(): Scanner;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface BlePeripheralInterface extends TransportInterface {
|
|
31
|
+
advertise(advertiseData: Uint8Array, additionalAdvertisementData?: Uint8Array, intervalMs?: number): Promise<void>;
|
|
32
|
+
stopAdvertising(): Promise<void>;
|
|
30
33
|
}
|
|
31
34
|
|
|
32
35
|
export abstract class BleChannel<T> implements Channel<T> {
|
package/src/ble/BleConsts.ts
CHANGED
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
import { MAX_UDP_MESSAGE_SIZE } from "#general";
|
|
8
8
|
|
|
9
9
|
/** @see {@link MatterSpecification.v11.Core} § 4.17.3.2 */
|
|
10
|
-
export const
|
|
10
|
+
export const BLE_MATTER_SERVICE_UUID_SHORT = "fff6";
|
|
11
|
+
export const BLE_MATTER_SERVICE_UUID = "0000FFF6-0000-1000-8000-00805F9B34FB";
|
|
11
12
|
export const BLE_MATTER_C1_CHARACTERISTIC_UUID = "18EE2EF5-263D-4559-959F-4F9C429F9D11";
|
|
12
13
|
export const BLE_MATTER_C2_CHARACTERISTIC_UUID = "18EE2EF5-263D-4559-959F-4F9C429F9D12";
|
|
13
14
|
export const BLE_MATTER_C3_CHARACTERISTIC_UUID = "64630238-8772-45F2-B87D-748A83218F04";
|
package/src/codec/BtpCodec.ts
CHANGED
|
@@ -283,6 +283,7 @@ export class BtpCodec {
|
|
|
283
283
|
vendorId: number,
|
|
284
284
|
productId: number,
|
|
285
285
|
hasAdditionalAdvertisementData = false,
|
|
286
|
+
isExtendedAnnouncement = false,
|
|
286
287
|
) {
|
|
287
288
|
const writer = new DataWriter(Endian.Little);
|
|
288
289
|
writer.writeUInt8(0x02);
|
|
@@ -293,9 +294,9 @@ export class BtpCodec {
|
|
|
293
294
|
writer.writeUInt16(0xfff6);
|
|
294
295
|
writer.writeUInt8(0x00);
|
|
295
296
|
writer.writeUInt16(discriminator);
|
|
296
|
-
writer.writeUInt16(vendorId);
|
|
297
|
-
writer.writeUInt16(productId);
|
|
298
|
-
writer.writeUInt8(hasAdditionalAdvertisementData ?
|
|
297
|
+
writer.writeUInt16(isExtendedAnnouncement ? 0 : vendorId);
|
|
298
|
+
writer.writeUInt16(isExtendedAnnouncement ? 0 : productId);
|
|
299
|
+
writer.writeUInt8((hasAdditionalAdvertisementData ? 1 : 0) | (isExtendedAnnouncement ? 2 : 0));
|
|
299
300
|
return writer.toByteArray();
|
|
300
301
|
}
|
|
301
302
|
|
package/src/common/Scanner.ts
CHANGED
|
@@ -5,25 +5,9 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { BasicSet, ChannelType, Environment, Environmental, Lifespan, ServerAddress, ServerAddressIp } from "#general";
|
|
8
|
-
import {
|
|
8
|
+
import { DiscoveryCapabilitiesBitmap, NodeId, TypeFromPartialBitSchema, VendorId } from "#types";
|
|
9
9
|
import { Fabric } from "../fabric/Fabric.js";
|
|
10
10
|
|
|
11
|
-
export const SupportedTransportsBitmap = {
|
|
12
|
-
// Bit 0 is reserved
|
|
13
|
-
/**
|
|
14
|
-
* TCP Client
|
|
15
|
-
* The advertising Node implements the TCP Client mode and MAY connect to a peer Node that is a TCP Server.
|
|
16
|
-
*/
|
|
17
|
-
tcpClient: BitFlag(1),
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* TCP Server
|
|
21
|
-
* The advertising Node implements the TCP Server mode and SHALL listen for incoming TCP connections.
|
|
22
|
-
*/
|
|
23
|
-
tcpServer: BitFlag(2),
|
|
24
|
-
};
|
|
25
|
-
export const SupportedTransportsSchema = BitmapSchema(SupportedTransportsBitmap);
|
|
26
|
-
|
|
27
11
|
/**
|
|
28
12
|
* All information exposed by a commissionable device via announcements.
|
|
29
13
|
* The properties are named identical as in the Matter specification.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { BitFlag, BitmapSchema, TypeFromBitSchema } from "@matter/types";
|
|
8
|
+
|
|
9
|
+
export const SupportedTransportsBitmap = {
|
|
10
|
+
// Bit 0 is reserved
|
|
11
|
+
/**
|
|
12
|
+
* TCP Client
|
|
13
|
+
* The advertising Node implements the TCP Client mode and MAY connect to a peer Node that is a TCP Server.
|
|
14
|
+
*/
|
|
15
|
+
tcpClient: BitFlag(1),
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* TCP Server
|
|
19
|
+
* The advertising Node implements the TCP Server mode and SHALL listen for incoming TCP connections.
|
|
20
|
+
*/
|
|
21
|
+
tcpServer: BitFlag(2),
|
|
22
|
+
};
|
|
23
|
+
export const SupportedTransportsSchema = BitmapSchema(SupportedTransportsBitmap);
|
|
24
|
+
|
|
25
|
+
export interface SupportedTransportsBitmap extends TypeFromBitSchema<typeof SupportedTransportsBitmap> {}
|
package/src/common/index.ts
CHANGED
|
@@ -8,6 +8,6 @@ export * from "../peer/PeerAddress.js";
|
|
|
8
8
|
export * from "./ExpandedPath.js";
|
|
9
9
|
export * from "./FailsafeContext.js";
|
|
10
10
|
export * from "./FailsafeTimer.js";
|
|
11
|
-
export * from "./InstanceBroadcaster.js";
|
|
12
11
|
export * from "./OperationalCredentialsTypes.js";
|
|
13
12
|
export * from "./Scanner.js";
|
|
13
|
+
export * from "./SupportedTransportsBitmap.js";
|
package/src/fabric/Fabric.ts
CHANGED
|
@@ -214,6 +214,14 @@ export class Fabric {
|
|
|
214
214
|
this.#sessions.delete(session);
|
|
215
215
|
}
|
|
216
216
|
|
|
217
|
+
hasSessionForPeer(peerNodeId: NodeId) {
|
|
218
|
+
for (const session of this.#sessions) {
|
|
219
|
+
if (session.peerNodeId === peerNodeId) {
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
217
225
|
addRemoveCallback(callback: () => MaybePromise<void>) {
|
|
218
226
|
this.#removeCallbacks.push(callback);
|
|
219
227
|
}
|