@matter/protocol 0.16.0-alpha.0-20250807-37b08c9bb → 0.16.0-alpha.0-20250810-5c91a95d2
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/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 +55 -140
- 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/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/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 +57 -145
- 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/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 +9 -9
- 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/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 +79 -184
- 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/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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/protocol",
|
|
3
|
-
"version": "0.16.0-alpha.0-
|
|
3
|
+
"version": "0.16.0-alpha.0-20250810-5c91a95d2",
|
|
4
4
|
"description": "Low-level APIs for Matter interaction",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iot",
|
|
@@ -17,12 +17,12 @@
|
|
|
17
17
|
"Greg Lauckhart <greg@lauckhart.com>"
|
|
18
18
|
],
|
|
19
19
|
"bugs": {
|
|
20
|
-
"url": "https://github.com/matter-js/matter/issues"
|
|
20
|
+
"url": "https://github.com/matter-js/matter.js/issues"
|
|
21
21
|
},
|
|
22
|
-
"homepage": "https://github.com/matter-js/matter",
|
|
22
|
+
"homepage": "https://github.com/matter-js/matter.js",
|
|
23
23
|
"repository": {
|
|
24
24
|
"type": "git",
|
|
25
|
-
"url": "git+https://github.com/matter-js/matter.git"
|
|
25
|
+
"url": "git+https://github.com/matter-js/matter.js.git"
|
|
26
26
|
},
|
|
27
27
|
"scripts": {
|
|
28
28
|
"clean": "matter-build clean",
|
|
@@ -40,13 +40,13 @@
|
|
|
40
40
|
"#*": "./src/*"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@matter/general": "0.16.0-alpha.0-
|
|
44
|
-
"@matter/model": "0.16.0-alpha.0-
|
|
45
|
-
"@matter/types": "0.16.0-alpha.0-
|
|
43
|
+
"@matter/general": "0.16.0-alpha.0-20250810-5c91a95d2",
|
|
44
|
+
"@matter/model": "0.16.0-alpha.0-20250810-5c91a95d2",
|
|
45
|
+
"@matter/types": "0.16.0-alpha.0-20250810-5c91a95d2"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@matter/tools": "0.16.0-alpha.0-
|
|
49
|
-
"@matter/testing": "0.16.0-alpha.0-
|
|
48
|
+
"@matter/tools": "0.16.0-alpha.0-20250810-5c91a95d2",
|
|
49
|
+
"@matter/testing": "0.16.0-alpha.0-20250810-5c91a95d2"
|
|
50
50
|
},
|
|
51
51
|
"files": [
|
|
52
52
|
"dist/**/*",
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { asError, CancelablePromise, CanceledError, Diagnostic, Logger, MatterAggregateError, Time } from "#general";
|
|
8
|
+
import { STANDARD_COMMISSIONING_TIMEOUT_S } from "#types";
|
|
9
|
+
import type { Advertiser } from "./Advertiser.js";
|
|
10
|
+
import { ServiceDescription } from "./ServiceDescription.js";
|
|
11
|
+
|
|
12
|
+
const logger = Logger.get("Advertisement");
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* An advertisement for a discrete service.
|
|
16
|
+
*/
|
|
17
|
+
export abstract class Advertisement<T extends ServiceDescription = ServiceDescription> {
|
|
18
|
+
/**
|
|
19
|
+
* The service advertised.
|
|
20
|
+
*
|
|
21
|
+
* This is a unique ID associated with the advertisement.
|
|
22
|
+
*/
|
|
23
|
+
readonly service: string;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* The information advertised.
|
|
27
|
+
*/
|
|
28
|
+
readonly description: T;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* The {@link Advertiser} that owns this advertisement.
|
|
32
|
+
*/
|
|
33
|
+
readonly advertiser: Advertiser;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Configuration options.
|
|
37
|
+
*/
|
|
38
|
+
readonly options: Advertisement.Options;
|
|
39
|
+
|
|
40
|
+
#isBroadcasting = false;
|
|
41
|
+
#closed?: Promise<void>;
|
|
42
|
+
#startedAt = Time.nowMs();
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Current activity. This is a promise with helpers for base implementations.
|
|
46
|
+
*/
|
|
47
|
+
#activity?: ActivityContext;
|
|
48
|
+
|
|
49
|
+
constructor(advertiser: Advertiser, service: string, description: T, options?: Advertisement.Options) {
|
|
50
|
+
this.options = options ?? {};
|
|
51
|
+
this.service = service;
|
|
52
|
+
this.advertiser = advertiser;
|
|
53
|
+
this.description = description;
|
|
54
|
+
|
|
55
|
+
advertiser.advertisements.add(this);
|
|
56
|
+
|
|
57
|
+
// Initial activity just handles async setup
|
|
58
|
+
this.#start(this.onCreate.bind(this));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Begin automatic broadcast.
|
|
63
|
+
*/
|
|
64
|
+
start(event: Advertiser.BroadcastEvent) {
|
|
65
|
+
if (this.#closed) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// If we are already broadcasting, do not reset the schedule. In cases where the schedule should reset,
|
|
70
|
+
// higher-level components replace the advertisement or stop manually
|
|
71
|
+
if (this.isBroadcasting) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Run broadcast as the current activity
|
|
76
|
+
this.#start(context => this.#run(context, event));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* End automatic broadcast.
|
|
81
|
+
*/
|
|
82
|
+
stop() {
|
|
83
|
+
this.#activity?.cancel();
|
|
84
|
+
this.#isBroadcasting = false;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Notify the advertiser that a client connection to the advertised service is established.
|
|
89
|
+
*/
|
|
90
|
+
serviceConnected() {
|
|
91
|
+
// No default behavior
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Notify the advertiser that there is no client connection to the advertised service.
|
|
96
|
+
*/
|
|
97
|
+
serviceDisconnected() {
|
|
98
|
+
// No default behavior
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Close the advertisement but do not wait for the close to finish.
|
|
103
|
+
*
|
|
104
|
+
* The advertisement is still tracked by the advertiser until closed.
|
|
105
|
+
*/
|
|
106
|
+
cancel() {
|
|
107
|
+
this.close().catch(e => {
|
|
108
|
+
// This shouldn't happen because close should log errors itself
|
|
109
|
+
logger.error("Unhandled error closing advertisement for", Diagnostic.strong(this.service), e);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Close the advertisement.
|
|
115
|
+
*/
|
|
116
|
+
close() {
|
|
117
|
+
if (this.#closed) {
|
|
118
|
+
return this.#closed;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return (this.#closed = this.#close());
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
async #close() {
|
|
125
|
+
try {
|
|
126
|
+
this.#activity?.cancel();
|
|
127
|
+
await this.#activity;
|
|
128
|
+
|
|
129
|
+
try {
|
|
130
|
+
await this.onClose();
|
|
131
|
+
} catch (e) {
|
|
132
|
+
logger.error("Unhandled error closing advertisement for", Diagnostic.strong(this.service), e);
|
|
133
|
+
}
|
|
134
|
+
} finally {
|
|
135
|
+
this.advertiser.advertisements.delete(this);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Async setup logic.
|
|
141
|
+
*/
|
|
142
|
+
protected async onCreate() {
|
|
143
|
+
// Deduplicate advertisements. There may only be a single commissioning advertisement per advertiser and a
|
|
144
|
+
// single operational advertisement per advertiser+service
|
|
145
|
+
const duplicates = [...this.advertiser.advertisements].filter(this.isDuplicate.bind(this));
|
|
146
|
+
if (duplicates.length) {
|
|
147
|
+
await Advertisement.closeAll(duplicates);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Async cleanup logic.
|
|
153
|
+
*/
|
|
154
|
+
protected async onClose() {}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Indicates that broadcasts should omit private details.
|
|
158
|
+
*/
|
|
159
|
+
protected get isPrivacyMasked() {
|
|
160
|
+
// Private broadcast configured explicitly
|
|
161
|
+
if (this.options.omitPrivateDetails) {
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Extended announcement
|
|
166
|
+
if (Time.nowMs() - this.#startedAt >= STANDARD_COMMISSIONING_TIMEOUT_S * 1000) {
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Implement automatic advertising.
|
|
175
|
+
*/
|
|
176
|
+
protected abstract run(context: Advertisement.ActivityContext, event: Advertiser.BroadcastEvent): Promise<void>;
|
|
177
|
+
|
|
178
|
+
isCommissioning(): this is
|
|
179
|
+
| Advertisement<ServiceDescription.Commissionable>
|
|
180
|
+
| Advertisement<ServiceDescription.Commissioner> {
|
|
181
|
+
return ServiceDescription.isCommissioning(this.description);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
isOperational(): this is Advertisement<ServiceDescription.Operational> {
|
|
185
|
+
return ServiceDescription.isOperational(this.description);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Cancel a set of advertisements.
|
|
190
|
+
*/
|
|
191
|
+
static cancelAll(ads: Iterable<Advertisement>) {
|
|
192
|
+
for (const ad of ads) {
|
|
193
|
+
ad.cancel();
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Cancel a set of advertisements and wait for them to complete.
|
|
199
|
+
*/
|
|
200
|
+
static async closeAll(ads: Iterable<Advertisement>) {
|
|
201
|
+
await MatterAggregateError.allSettled([...ads].map(ad => ad.close()));
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Identify other advertisers for the same service. The advertiser will close these automatically.
|
|
206
|
+
*/
|
|
207
|
+
abstract isDuplicate(other: Advertisement): boolean;
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Total duration so far.
|
|
211
|
+
*/
|
|
212
|
+
get duration() {
|
|
213
|
+
return Time.nowMs() - this.#startedAt;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* True if the advertisement is actively broadcasting.
|
|
218
|
+
*/
|
|
219
|
+
get isBroadcasting() {
|
|
220
|
+
return this.#isBroadcasting;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
protected dict(values?: Record<string, unknown>) {
|
|
224
|
+
return Diagnostic.dict({ kind: this.description.kind, service: this.service, ...values });
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
#start(executor: (context: ActivityContext) => Promise<void>) {
|
|
228
|
+
// Only one activity may be active
|
|
229
|
+
const previous = this.#activity;
|
|
230
|
+
previous?.cancel();
|
|
231
|
+
|
|
232
|
+
this.#activity = new ActivityContext(async context => {
|
|
233
|
+
// Wait for previous activity to complete
|
|
234
|
+
if (previous) {
|
|
235
|
+
await previous;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Run the new activity
|
|
239
|
+
try {
|
|
240
|
+
await executor(context);
|
|
241
|
+
} finally {
|
|
242
|
+
// Clear the current activity if it's this one
|
|
243
|
+
if (this.#activity === context) {
|
|
244
|
+
this.#activity = undefined;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
async #run(context: ActivityContext, event: Advertiser.BroadcastEvent, previous?: ActivityContext) {
|
|
251
|
+
// If automatic advertisement starts when it is already active, kill the previous version
|
|
252
|
+
if (previous) {
|
|
253
|
+
await previous;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
logger.debug("Begin auto broadcast", this.dict());
|
|
257
|
+
|
|
258
|
+
// Perform advertisement
|
|
259
|
+
try {
|
|
260
|
+
this.#isBroadcasting = true;
|
|
261
|
+
await this.run(context, event);
|
|
262
|
+
} catch (e) {
|
|
263
|
+
if (!(e instanceof CanceledError)) {
|
|
264
|
+
logger.error("Unhandled error during automatic advertisement for", Diagnostic.strong(this.service), e);
|
|
265
|
+
}
|
|
266
|
+
} finally {
|
|
267
|
+
if (this.#activity === context) {
|
|
268
|
+
// We clear this flag in stop() but it will still be set if the automatic broadcast period elapses
|
|
269
|
+
this.#isBroadcasting = false;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
logger.debug("End auto broadcast", this.dict());
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
export namespace Advertisement {
|
|
278
|
+
export interface Options {
|
|
279
|
+
/**
|
|
280
|
+
* Set this to omit optional details from broadcasts that may affect privacy.
|
|
281
|
+
*
|
|
282
|
+
* Per core spec 5.4.2.3.1, the device always omits vendor ID, product ID and extended data during extended
|
|
283
|
+
* announcement. Set this value to omit this fields unconditionally.
|
|
284
|
+
*/
|
|
285
|
+
omitPrivateDetails?: boolean;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
export interface ActivityContext {
|
|
289
|
+
/**
|
|
290
|
+
* Enter cancelable sleep.
|
|
291
|
+
*
|
|
292
|
+
* Throws {@link CanceledError} if interrupted. If thrown from {@link run} this will result in the promise
|
|
293
|
+
* resolving.
|
|
294
|
+
*/
|
|
295
|
+
sleep(name: string, intervalMs: number): Promise<void>;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
class ActivityContext extends CancelablePromise implements Advertisement.ActivityContext {
|
|
300
|
+
#sleep?: CancelablePromise;
|
|
301
|
+
#cancelReason?: Error;
|
|
302
|
+
|
|
303
|
+
constructor(executor: (context: ActivityContext) => Promise<void>) {
|
|
304
|
+
let resolve, reject;
|
|
305
|
+
super((res, rej) => {
|
|
306
|
+
resolve = res;
|
|
307
|
+
reject = rej;
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
executor(this).then(resolve, cause => {
|
|
311
|
+
if (cause instanceof CanceledError) {
|
|
312
|
+
resolve!();
|
|
313
|
+
} else {
|
|
314
|
+
reject!(cause);
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
sleep(name: string, intervalMs: number) {
|
|
320
|
+
this.abortIfCanceled();
|
|
321
|
+
|
|
322
|
+
const sleep = Time.sleep(name, intervalMs).finally(() => {
|
|
323
|
+
if (this.#sleep === sleep) {
|
|
324
|
+
this.#sleep = undefined;
|
|
325
|
+
}
|
|
326
|
+
});
|
|
327
|
+
|
|
328
|
+
this.#sleep = sleep;
|
|
329
|
+
return sleep;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
protected abortIfCanceled() {
|
|
333
|
+
if (this.#cancelReason) {
|
|
334
|
+
throw this.#cancelReason;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
protected override onCancel(reason: unknown) {
|
|
339
|
+
if (this.#cancelReason) {
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
this.#cancelReason = asError(reason);
|
|
343
|
+
|
|
344
|
+
if (this.#sleep) {
|
|
345
|
+
this.#sleep.cancel(reason);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
@@ -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
|
+
}
|