matterbridge 3.4.7 → 3.5.0-dev-20260113-29ad318
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/CHANGELOG.md +10 -0
- package/dist/broadcastServer.d.ts +0 -115
- package/dist/broadcastServer.js +0 -117
- package/dist/broadcastServerTypes.d.ts +0 -43
- package/dist/broadcastServerTypes.js +0 -24
- package/dist/cli.d.ts +0 -24
- package/dist/cli.js +1 -97
- package/dist/cliEmitter.d.ts +0 -36
- package/dist/cliEmitter.js +0 -37
- package/dist/cliHistory.d.ts +0 -42
- package/dist/cliHistory.js +0 -38
- package/dist/clusters/export.d.ts +0 -1
- package/dist/clusters/export.js +0 -2
- package/dist/deviceManager.d.ts +0 -108
- package/dist/deviceManager.js +1 -113
- package/dist/devices/airConditioner.d.ts +0 -75
- package/dist/devices/airConditioner.js +0 -57
- package/dist/devices/batteryStorage.d.ts +0 -43
- package/dist/devices/batteryStorage.js +1 -48
- package/dist/devices/cooktop.d.ts +0 -55
- package/dist/devices/cooktop.js +0 -56
- package/dist/devices/dishwasher.d.ts +0 -55
- package/dist/devices/dishwasher.js +0 -57
- package/dist/devices/evse.d.ts +0 -57
- package/dist/devices/evse.js +10 -74
- package/dist/devices/export.d.ts +0 -1
- package/dist/devices/export.js +0 -5
- package/dist/devices/extractorHood.d.ts +0 -41
- package/dist/devices/extractorHood.js +0 -43
- package/dist/devices/heatPump.d.ts +0 -43
- package/dist/devices/heatPump.js +2 -50
- package/dist/devices/laundryDryer.d.ts +0 -58
- package/dist/devices/laundryDryer.js +3 -62
- package/dist/devices/laundryWasher.d.ts +0 -64
- package/dist/devices/laundryWasher.js +4 -70
- package/dist/devices/microwaveOven.d.ts +1 -77
- package/dist/devices/microwaveOven.js +5 -88
- package/dist/devices/oven.d.ts +0 -82
- package/dist/devices/oven.js +0 -85
- package/dist/devices/refrigerator.d.ts +0 -100
- package/dist/devices/refrigerator.js +0 -102
- package/dist/devices/roboticVacuumCleaner.d.ts +0 -83
- package/dist/devices/roboticVacuumCleaner.js +9 -100
- package/dist/devices/solarPower.d.ts +0 -36
- package/dist/devices/solarPower.js +0 -38
- package/dist/devices/speaker.d.ts +0 -79
- package/dist/devices/speaker.js +0 -84
- package/dist/devices/temperatureControl.d.ts +0 -21
- package/dist/devices/temperatureControl.js +3 -24
- package/dist/devices/waterHeater.d.ts +0 -74
- package/dist/devices/waterHeater.js +2 -82
- package/dist/dgram/coap.d.ts +0 -171
- package/dist/dgram/coap.js +13 -126
- package/dist/dgram/dgram.d.ts +0 -99
- package/dist/dgram/dgram.js +2 -114
- package/dist/dgram/mb_coap.d.ts +0 -23
- package/dist/dgram/mb_coap.js +3 -41
- package/dist/dgram/mb_mdns.d.ts +0 -23
- package/dist/dgram/mb_mdns.js +24 -80
- package/dist/dgram/mdns.d.ts +4 -187
- package/dist/dgram/mdns.js +139 -371
- package/dist/dgram/multicast.d.ts +0 -49
- package/dist/dgram/multicast.js +1 -62
- package/dist/dgram/unicast.d.ts +0 -53
- package/dist/dgram/unicast.js +0 -60
- package/dist/frontend.d.ts +0 -187
- package/dist/frontend.js +38 -485
- package/dist/frontendTypes.d.ts +0 -57
- package/dist/frontendTypes.js +0 -45
- package/dist/helpers.d.ts +0 -43
- package/dist/helpers.js +0 -53
- package/dist/index.d.ts +0 -23
- package/dist/index.js +0 -25
- package/dist/jestutils/export.d.ts +0 -1
- package/dist/jestutils/export.js +0 -1
- package/dist/jestutils/jestHelpers.d.ts +0 -255
- package/dist/jestutils/jestHelpers.js +14 -371
- package/dist/logger/export.d.ts +0 -1
- package/dist/logger/export.js +0 -1
- package/dist/matter/behaviors.d.ts +0 -1
- package/dist/matter/behaviors.js +0 -2
- package/dist/matter/clusters.d.ts +0 -1
- package/dist/matter/clusters.js +0 -2
- package/dist/matter/devices.d.ts +0 -1
- package/dist/matter/devices.js +0 -2
- package/dist/matter/endpoints.d.ts +0 -1
- package/dist/matter/endpoints.js +0 -2
- package/dist/matter/export.d.ts +0 -1
- package/dist/matter/export.js +0 -3
- package/dist/matter/types.d.ts +0 -1
- package/dist/matter/types.js +0 -3
- package/dist/matterNode.d.ts +0 -258
- package/dist/matterNode.js +8 -369
- package/dist/matterbridge.d.ts +0 -353
- package/dist/matterbridge.js +46 -824
- package/dist/matterbridgeAccessoryPlatform.d.ts +0 -36
- package/dist/matterbridgeAccessoryPlatform.js +0 -38
- package/dist/matterbridgeBehaviors.d.ts +0 -24
- package/dist/matterbridgeBehaviors.js +5 -68
- package/dist/matterbridgeDeviceTypes.d.ts +0 -603
- package/dist/matterbridgeDeviceTypes.js +14 -635
- package/dist/matterbridgeDynamicPlatform.d.ts +0 -36
- package/dist/matterbridgeDynamicPlatform.js +0 -38
- package/dist/matterbridgeEndpoint.d.ts +0 -1332
- package/dist/matterbridgeEndpoint.js +53 -1457
- package/dist/matterbridgeEndpointHelpers.d.ts +0 -425
- package/dist/matterbridgeEndpointHelpers.js +20 -483
- package/dist/matterbridgeEndpointTypes.d.ts +0 -70
- package/dist/matterbridgeEndpointTypes.js +0 -25
- package/dist/matterbridgePlatform.d.ts +0 -425
- package/dist/matterbridgePlatform.js +1 -451
- package/dist/matterbridgeTypes.d.ts +0 -46
- package/dist/matterbridgeTypes.js +0 -26
- package/dist/pluginManager.d.ts +0 -305
- package/dist/pluginManager.js +5 -341
- package/dist/shelly.d.ts +0 -157
- package/dist/shelly.js +7 -178
- package/dist/storage/export.d.ts +0 -1
- package/dist/storage/export.js +0 -1
- package/dist/update.d.ts +0 -75
- package/dist/update.js +1 -93
- package/dist/utils/colorUtils.d.ts +0 -77
- package/dist/utils/colorUtils.js +2 -97
- package/dist/utils/commandLine.d.ts +0 -60
- package/dist/utils/commandLine.js +0 -60
- package/dist/utils/copyDirectory.d.ts +0 -33
- package/dist/utils/copyDirectory.js +0 -37
- package/dist/utils/createDirectory.d.ts +0 -32
- package/dist/utils/createDirectory.js +0 -33
- package/dist/utils/createZip.d.ts +0 -38
- package/dist/utils/createZip.js +2 -47
- package/dist/utils/deepCopy.d.ts +0 -31
- package/dist/utils/deepCopy.js +0 -39
- package/dist/utils/deepEqual.d.ts +0 -53
- package/dist/utils/deepEqual.js +1 -72
- package/dist/utils/error.d.ts +0 -42
- package/dist/utils/error.js +0 -42
- package/dist/utils/export.d.ts +0 -1
- package/dist/utils/export.js +0 -1
- package/dist/utils/format.d.ts +0 -49
- package/dist/utils/format.js +0 -49
- package/dist/utils/hex.d.ts +0 -85
- package/dist/utils/hex.js +0 -124
- package/dist/utils/inspector.d.ts +0 -63
- package/dist/utils/inspector.js +1 -69
- package/dist/utils/isValid.d.ts +0 -93
- package/dist/utils/isValid.js +0 -93
- package/dist/utils/network.d.ts +0 -116
- package/dist/utils/network.js +5 -126
- package/dist/utils/spawn.d.ts +0 -32
- package/dist/utils/spawn.js +1 -71
- package/dist/utils/tracker.d.ts +0 -56
- package/dist/utils/tracker.js +1 -64
- package/dist/utils/wait.d.ts +0 -51
- package/dist/utils/wait.js +8 -60
- package/dist/workerGlobalPrefix.d.ts +0 -24
- package/dist/workerGlobalPrefix.js +5 -37
- package/dist/workerTypes.d.ts +0 -25
- package/dist/workerTypes.js +0 -24
- package/dist/workers.d.ts +0 -61
- package/dist/workers.js +4 -68
- package/npm-shrinkwrap.json +1500 -11420
- package/package.json +10 -7
- package/dist/broadcastServer.d.ts.map +0 -1
- package/dist/broadcastServer.js.map +0 -1
- package/dist/broadcastServerTypes.d.ts.map +0 -1
- package/dist/broadcastServerTypes.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/cliEmitter.d.ts.map +0 -1
- package/dist/cliEmitter.js.map +0 -1
- package/dist/cliHistory.d.ts.map +0 -1
- package/dist/cliHistory.js.map +0 -1
- package/dist/clusters/export.d.ts.map +0 -1
- package/dist/clusters/export.js.map +0 -1
- package/dist/deviceManager.d.ts.map +0 -1
- package/dist/deviceManager.js.map +0 -1
- package/dist/devices/airConditioner.d.ts.map +0 -1
- package/dist/devices/airConditioner.js.map +0 -1
- package/dist/devices/batteryStorage.d.ts.map +0 -1
- package/dist/devices/batteryStorage.js.map +0 -1
- package/dist/devices/cooktop.d.ts.map +0 -1
- package/dist/devices/cooktop.js.map +0 -1
- package/dist/devices/dishwasher.d.ts.map +0 -1
- package/dist/devices/dishwasher.js.map +0 -1
- package/dist/devices/evse.d.ts.map +0 -1
- package/dist/devices/evse.js.map +0 -1
- package/dist/devices/export.d.ts.map +0 -1
- package/dist/devices/export.js.map +0 -1
- package/dist/devices/extractorHood.d.ts.map +0 -1
- package/dist/devices/extractorHood.js.map +0 -1
- package/dist/devices/heatPump.d.ts.map +0 -1
- package/dist/devices/heatPump.js.map +0 -1
- package/dist/devices/laundryDryer.d.ts.map +0 -1
- package/dist/devices/laundryDryer.js.map +0 -1
- package/dist/devices/laundryWasher.d.ts.map +0 -1
- package/dist/devices/laundryWasher.js.map +0 -1
- package/dist/devices/microwaveOven.d.ts.map +0 -1
- package/dist/devices/microwaveOven.js.map +0 -1
- package/dist/devices/oven.d.ts.map +0 -1
- package/dist/devices/oven.js.map +0 -1
- package/dist/devices/refrigerator.d.ts.map +0 -1
- package/dist/devices/refrigerator.js.map +0 -1
- package/dist/devices/roboticVacuumCleaner.d.ts.map +0 -1
- package/dist/devices/roboticVacuumCleaner.js.map +0 -1
- package/dist/devices/solarPower.d.ts.map +0 -1
- package/dist/devices/solarPower.js.map +0 -1
- package/dist/devices/speaker.d.ts.map +0 -1
- package/dist/devices/speaker.js.map +0 -1
- package/dist/devices/temperatureControl.d.ts.map +0 -1
- package/dist/devices/temperatureControl.js.map +0 -1
- package/dist/devices/waterHeater.d.ts.map +0 -1
- package/dist/devices/waterHeater.js.map +0 -1
- package/dist/dgram/coap.d.ts.map +0 -1
- package/dist/dgram/coap.js.map +0 -1
- package/dist/dgram/dgram.d.ts.map +0 -1
- package/dist/dgram/dgram.js.map +0 -1
- package/dist/dgram/mb_coap.d.ts.map +0 -1
- package/dist/dgram/mb_coap.js.map +0 -1
- package/dist/dgram/mb_mdns.d.ts.map +0 -1
- package/dist/dgram/mb_mdns.js.map +0 -1
- package/dist/dgram/mdns.d.ts.map +0 -1
- package/dist/dgram/mdns.js.map +0 -1
- package/dist/dgram/multicast.d.ts.map +0 -1
- package/dist/dgram/multicast.js.map +0 -1
- package/dist/dgram/unicast.d.ts.map +0 -1
- package/dist/dgram/unicast.js.map +0 -1
- package/dist/frontend.d.ts.map +0 -1
- package/dist/frontend.js.map +0 -1
- package/dist/frontendTypes.d.ts.map +0 -1
- package/dist/frontendTypes.js.map +0 -1
- package/dist/helpers.d.ts.map +0 -1
- package/dist/helpers.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/jestutils/export.d.ts.map +0 -1
- package/dist/jestutils/export.js.map +0 -1
- package/dist/jestutils/jestHelpers.d.ts.map +0 -1
- package/dist/jestutils/jestHelpers.js.map +0 -1
- package/dist/logger/export.d.ts.map +0 -1
- package/dist/logger/export.js.map +0 -1
- package/dist/matter/behaviors.d.ts.map +0 -1
- package/dist/matter/behaviors.js.map +0 -1
- package/dist/matter/clusters.d.ts.map +0 -1
- package/dist/matter/clusters.js.map +0 -1
- package/dist/matter/devices.d.ts.map +0 -1
- package/dist/matter/devices.js.map +0 -1
- package/dist/matter/endpoints.d.ts.map +0 -1
- package/dist/matter/endpoints.js.map +0 -1
- package/dist/matter/export.d.ts.map +0 -1
- package/dist/matter/export.js.map +0 -1
- package/dist/matter/types.d.ts.map +0 -1
- package/dist/matter/types.js.map +0 -1
- package/dist/matterNode.d.ts.map +0 -1
- package/dist/matterNode.js.map +0 -1
- package/dist/matterbridge.d.ts.map +0 -1
- package/dist/matterbridge.js.map +0 -1
- package/dist/matterbridgeAccessoryPlatform.d.ts.map +0 -1
- package/dist/matterbridgeAccessoryPlatform.js.map +0 -1
- package/dist/matterbridgeBehaviors.d.ts.map +0 -1
- package/dist/matterbridgeBehaviors.js.map +0 -1
- package/dist/matterbridgeDeviceTypes.d.ts.map +0 -1
- package/dist/matterbridgeDeviceTypes.js.map +0 -1
- package/dist/matterbridgeDynamicPlatform.d.ts.map +0 -1
- package/dist/matterbridgeDynamicPlatform.js.map +0 -1
- package/dist/matterbridgeEndpoint.d.ts.map +0 -1
- package/dist/matterbridgeEndpoint.js.map +0 -1
- package/dist/matterbridgeEndpointHelpers.d.ts.map +0 -1
- package/dist/matterbridgeEndpointHelpers.js.map +0 -1
- package/dist/matterbridgeEndpointTypes.d.ts.map +0 -1
- package/dist/matterbridgeEndpointTypes.js.map +0 -1
- package/dist/matterbridgePlatform.d.ts.map +0 -1
- package/dist/matterbridgePlatform.js.map +0 -1
- package/dist/matterbridgeTypes.d.ts.map +0 -1
- package/dist/matterbridgeTypes.js.map +0 -1
- package/dist/pluginManager.d.ts.map +0 -1
- package/dist/pluginManager.js.map +0 -1
- package/dist/shelly.d.ts.map +0 -1
- package/dist/shelly.js.map +0 -1
- package/dist/storage/export.d.ts.map +0 -1
- package/dist/storage/export.js.map +0 -1
- package/dist/update.d.ts.map +0 -1
- package/dist/update.js.map +0 -1
- package/dist/utils/colorUtils.d.ts.map +0 -1
- package/dist/utils/colorUtils.js.map +0 -1
- package/dist/utils/commandLine.d.ts.map +0 -1
- package/dist/utils/commandLine.js.map +0 -1
- package/dist/utils/copyDirectory.d.ts.map +0 -1
- package/dist/utils/copyDirectory.js.map +0 -1
- package/dist/utils/createDirectory.d.ts.map +0 -1
- package/dist/utils/createDirectory.js.map +0 -1
- package/dist/utils/createZip.d.ts.map +0 -1
- package/dist/utils/createZip.js.map +0 -1
- package/dist/utils/deepCopy.d.ts.map +0 -1
- package/dist/utils/deepCopy.js.map +0 -1
- package/dist/utils/deepEqual.d.ts.map +0 -1
- package/dist/utils/deepEqual.js.map +0 -1
- package/dist/utils/error.d.ts.map +0 -1
- package/dist/utils/error.js.map +0 -1
- package/dist/utils/export.d.ts.map +0 -1
- package/dist/utils/export.js.map +0 -1
- package/dist/utils/format.d.ts.map +0 -1
- package/dist/utils/format.js.map +0 -1
- package/dist/utils/hex.d.ts.map +0 -1
- package/dist/utils/hex.js.map +0 -1
- package/dist/utils/inspector.d.ts.map +0 -1
- package/dist/utils/inspector.js.map +0 -1
- package/dist/utils/isValid.d.ts.map +0 -1
- package/dist/utils/isValid.js.map +0 -1
- package/dist/utils/network.d.ts.map +0 -1
- package/dist/utils/network.js.map +0 -1
- package/dist/utils/spawn.d.ts.map +0 -1
- package/dist/utils/spawn.js.map +0 -1
- package/dist/utils/tracker.d.ts.map +0 -1
- package/dist/utils/tracker.js.map +0 -1
- package/dist/utils/wait.d.ts.map +0 -1
- package/dist/utils/wait.js.map +0 -1
- package/dist/workerGlobalPrefix.d.ts.map +0 -1
- package/dist/workerGlobalPrefix.js.map +0 -1
- package/dist/workerTypes.d.ts.map +0 -1
- package/dist/workerTypes.js.map +0 -1
- package/dist/workers.d.ts.map +0 -1
- package/dist/workers.js.map +0 -1
- package/frontend/index.html +0 -15
- package/frontend/package-lock.json +0 -7553
- package/packages/dgram/LICENSE +0 -202
- package/packages/dgram/dist/coap.d.ts +0 -205
- package/packages/dgram/dist/coap.d.ts.map +0 -1
- package/packages/dgram/dist/coap.js +0 -365
- package/packages/dgram/dist/coap.js.map +0 -1
- package/packages/dgram/dist/dgram.d.ts +0 -144
- package/packages/dgram/dist/dgram.d.ts.map +0 -1
- package/packages/dgram/dist/dgram.js +0 -367
- package/packages/dgram/dist/dgram.js.map +0 -1
- package/packages/dgram/dist/export.d.ts +0 -6
- package/packages/dgram/dist/export.d.ts.map +0 -1
- package/packages/dgram/dist/export.js +0 -6
- package/packages/dgram/dist/export.js.map +0 -1
- package/packages/dgram/dist/mdns.d.ts +0 -371
- package/packages/dgram/dist/mdns.d.ts.map +0 -1
- package/packages/dgram/dist/mdns.js +0 -934
- package/packages/dgram/dist/mdns.js.map +0 -1
- package/packages/dgram/dist/multicast.d.ts +0 -67
- package/packages/dgram/dist/multicast.d.ts.map +0 -1
- package/packages/dgram/dist/multicast.js +0 -180
- package/packages/dgram/dist/multicast.js.map +0 -1
- package/packages/dgram/dist/unicast.d.ts +0 -64
- package/packages/dgram/dist/unicast.d.ts.map +0 -1
- package/packages/dgram/dist/unicast.js +0 -100
- package/packages/dgram/dist/unicast.js.map +0 -1
- package/packages/dgram/package.json +0 -110
- package/packages/jest-utils/LICENSE +0 -202
- package/packages/jest-utils/dist/export.d.ts +0 -2
- package/packages/jest-utils/dist/export.d.ts.map +0 -1
- package/packages/jest-utils/dist/export.js +0 -2
- package/packages/jest-utils/dist/export.js.map +0 -1
- package/packages/jest-utils/dist/jestHelpers.d.ts +0 -77
- package/packages/jest-utils/dist/jestHelpers.d.ts.map +0 -1
- package/packages/jest-utils/dist/jestHelpers.js +0 -138
- package/packages/jest-utils/dist/jestHelpers.js.map +0 -1
- package/packages/jest-utils/package.json +0 -109
- package/packages/utils/LICENSE +0 -202
- package/packages/utils/dist/colorUtils.d.ts +0 -101
- package/packages/utils/dist/colorUtils.d.ts.map +0 -1
- package/packages/utils/dist/colorUtils.js +0 -282
- package/packages/utils/dist/colorUtils.js.map +0 -1
- package/packages/utils/dist/commandLine.d.ts +0 -66
- package/packages/utils/dist/commandLine.d.ts.map +0 -1
- package/packages/utils/dist/commandLine.js +0 -123
- package/packages/utils/dist/commandLine.js.map +0 -1
- package/packages/utils/dist/copyDirectory.d.ts +0 -35
- package/packages/utils/dist/copyDirectory.d.ts.map +0 -1
- package/packages/utils/dist/copyDirectory.js +0 -76
- package/packages/utils/dist/copyDirectory.js.map +0 -1
- package/packages/utils/dist/createDirectory.d.ts +0 -34
- package/packages/utils/dist/createDirectory.d.ts.map +0 -1
- package/packages/utils/dist/createDirectory.js +0 -54
- package/packages/utils/dist/createDirectory.js.map +0 -1
- package/packages/utils/dist/createZip.d.ts +0 -39
- package/packages/utils/dist/createZip.d.ts.map +0 -1
- package/packages/utils/dist/createZip.js +0 -114
- package/packages/utils/dist/createZip.js.map +0 -1
- package/packages/utils/dist/deepCopy.d.ts +0 -32
- package/packages/utils/dist/deepCopy.d.ts.map +0 -1
- package/packages/utils/dist/deepCopy.js +0 -79
- package/packages/utils/dist/deepCopy.js.map +0 -1
- package/packages/utils/dist/deepEqual.d.ts +0 -54
- package/packages/utils/dist/deepEqual.d.ts.map +0 -1
- package/packages/utils/dist/deepEqual.js +0 -130
- package/packages/utils/dist/deepEqual.js.map +0 -1
- package/packages/utils/dist/error.d.ts +0 -45
- package/packages/utils/dist/error.d.ts.map +0 -1
- package/packages/utils/dist/error.js +0 -54
- package/packages/utils/dist/error.js.map +0 -1
- package/packages/utils/dist/export.d.ts +0 -16
- package/packages/utils/dist/export.d.ts.map +0 -1
- package/packages/utils/dist/export.js +0 -16
- package/packages/utils/dist/export.js.map +0 -1
- package/packages/utils/dist/format.d.ts +0 -53
- package/packages/utils/dist/format.d.ts.map +0 -1
- package/packages/utils/dist/format.js +0 -78
- package/packages/utils/dist/format.js.map +0 -1
- package/packages/utils/dist/githubVersion.d.ts +0 -43
- package/packages/utils/dist/githubVersion.d.ts.map +0 -1
- package/packages/utils/dist/githubVersion.js +0 -70
- package/packages/utils/dist/githubVersion.js.map +0 -1
- package/packages/utils/dist/hex.d.ts +0 -89
- package/packages/utils/dist/hex.d.ts.map +0 -1
- package/packages/utils/dist/hex.js +0 -242
- package/packages/utils/dist/hex.js.map +0 -1
- package/packages/utils/dist/inspector.d.ts +0 -87
- package/packages/utils/dist/inspector.d.ts.map +0 -1
- package/packages/utils/dist/inspector.js +0 -268
- package/packages/utils/dist/inspector.js.map +0 -1
- package/packages/utils/dist/isValid.d.ts +0 -103
- package/packages/utils/dist/isValid.d.ts.map +0 -1
- package/packages/utils/dist/isValid.js +0 -162
- package/packages/utils/dist/isValid.js.map +0 -1
- package/packages/utils/dist/network.d.ts +0 -105
- package/packages/utils/dist/network.d.ts.map +0 -1
- package/packages/utils/dist/network.js +0 -201
- package/packages/utils/dist/network.js.map +0 -1
- package/packages/utils/dist/npmRoot.d.ts +0 -29
- package/packages/utils/dist/npmRoot.d.ts.map +0 -1
- package/packages/utils/dist/npmRoot.js +0 -41
- package/packages/utils/dist/npmRoot.js.map +0 -1
- package/packages/utils/dist/npmVersion.d.ts +0 -33
- package/packages/utils/dist/npmVersion.d.ts.map +0 -1
- package/packages/utils/dist/npmVersion.js +0 -76
- package/packages/utils/dist/npmVersion.js.map +0 -1
- package/packages/utils/dist/tracker.d.ts +0 -108
- package/packages/utils/dist/tracker.d.ts.map +0 -1
- package/packages/utils/dist/tracker.js +0 -264
- package/packages/utils/dist/tracker.js.map +0 -1
- package/packages/utils/dist/wait.d.ts +0 -54
- package/packages/utils/dist/wait.d.ts.map +0 -1
- package/packages/utils/dist/wait.js +0 -125
- package/packages/utils/dist/wait.js.map +0 -1
- package/packages/utils/package.json +0 -110
- package/packages/vitest-utils/LICENSE +0 -202
- package/packages/vitest-utils/dist/export.d.ts +0 -2
- package/packages/vitest-utils/dist/export.d.ts.map +0 -1
- package/packages/vitest-utils/dist/export.js +0 -2
- package/packages/vitest-utils/dist/export.js.map +0 -1
- package/packages/vitest-utils/dist/vitestHelpers.d.ts +0 -58
- package/packages/vitest-utils/dist/vitestHelpers.d.ts.map +0 -1
- package/packages/vitest-utils/dist/vitestHelpers.js +0 -119
- package/packages/vitest-utils/dist/vitestHelpers.js.map +0 -1
- package/packages/vitest-utils/package.json +0 -109
package/dist/dgram/mdns.js
CHANGED
|
@@ -1,30 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @description This file contains the class Mdns.
|
|
3
|
-
* @file mdns.ts
|
|
4
|
-
* @author Luca Liguori
|
|
5
|
-
* @created 2025-03-22
|
|
6
|
-
* @version 1.0.0
|
|
7
|
-
* @license Apache-2.0
|
|
8
|
-
*
|
|
9
|
-
* Copyright 2025, 2026, 2027 Luca Liguori.
|
|
10
|
-
*
|
|
11
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
12
|
-
* you may not use this file except in compliance with the License.
|
|
13
|
-
* You may obtain a copy of the License at
|
|
14
|
-
*
|
|
15
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
16
|
-
*
|
|
17
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
18
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
19
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
20
|
-
* See the License for the specific language governing permissions and
|
|
21
|
-
* limitations under the License.
|
|
22
|
-
*/
|
|
23
|
-
// AnsiLogger imports
|
|
24
1
|
import { BLUE, CYAN, db, GREEN, idn, MAGENTA, nf, rs } from 'node-ansi-logger';
|
|
25
|
-
// Utils imports
|
|
26
2
|
import { hasParameter } from '../utils/commandLine.js';
|
|
27
|
-
// Net imports
|
|
28
3
|
import { Multicast } from './multicast.js';
|
|
29
4
|
export var DnsRecordType;
|
|
30
5
|
(function (DnsRecordType) {
|
|
@@ -116,7 +91,6 @@ export var DnsRecordType;
|
|
|
116
91
|
DnsRecordType[DnsRecordType["DOA"] = 259] = "DOA";
|
|
117
92
|
DnsRecordType[DnsRecordType["AMTRELAY"] = 260] = "AMTRELAY";
|
|
118
93
|
DnsRecordType[DnsRecordType["ZONEVERSION"] = 261] = "ZONEVERSION";
|
|
119
|
-
// 262-32767 are unassigned/reserved
|
|
120
94
|
DnsRecordType[DnsRecordType["TA"] = 32768] = "TA";
|
|
121
95
|
DnsRecordType[DnsRecordType["DLV"] = 32769] = "DLV";
|
|
122
96
|
})(DnsRecordType || (DnsRecordType = {}));
|
|
@@ -130,65 +104,34 @@ export var DnsClass;
|
|
|
130
104
|
export var DnsClassFlag;
|
|
131
105
|
(function (DnsClassFlag) {
|
|
132
106
|
DnsClassFlag[DnsClassFlag["FLUSH"] = 32768] = "FLUSH";
|
|
133
|
-
// eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values
|
|
134
107
|
DnsClassFlag[DnsClassFlag["QU"] = 32768] = "QU";
|
|
135
108
|
})(DnsClassFlag || (DnsClassFlag = {}));
|
|
136
|
-
/**
|
|
137
|
-
* Checks if a given message is an mDNS message.
|
|
138
|
-
*
|
|
139
|
-
* @param {Buffer} message - The message buffer to check.
|
|
140
|
-
* @returns {boolean} True if the message is an mDNS message, false otherwise.
|
|
141
|
-
*/
|
|
142
109
|
export function isMdns(message) {
|
|
143
110
|
if (!message || message.length < 12)
|
|
144
111
|
return false;
|
|
145
112
|
const id = message.readUInt16BE(0);
|
|
146
113
|
return id === 0;
|
|
147
114
|
}
|
|
148
|
-
/**
|
|
149
|
-
* Checks if a given mDNS message is a query.
|
|
150
|
-
*
|
|
151
|
-
* @param {Buffer} message - The mDNS message buffer to check.
|
|
152
|
-
* @returns {boolean} True if the message is a query, false otherwise.
|
|
153
|
-
*/
|
|
154
115
|
export function isMdnsQuery(message) {
|
|
155
116
|
if (message.length < 12)
|
|
156
117
|
return false;
|
|
157
118
|
const id = message.readUInt16BE(0);
|
|
158
119
|
const flags = message.readUInt16BE(2);
|
|
159
|
-
const qr = (flags & 0x8000) >> 15;
|
|
120
|
+
const qr = (flags & 0x8000) >> 15;
|
|
160
121
|
return id == 0 && qr === 0;
|
|
161
122
|
}
|
|
162
|
-
/**
|
|
163
|
-
* Checks if a given mDNS message is a query.
|
|
164
|
-
*
|
|
165
|
-
* @param {Buffer} message - The mDNS message buffer to check.
|
|
166
|
-
* @returns {boolean} True if the message is a query, false otherwise.
|
|
167
|
-
*/
|
|
168
123
|
export function isMdnsResponse(message) {
|
|
169
124
|
if (message.length < 12)
|
|
170
125
|
return false;
|
|
171
126
|
const id = message.readUInt16BE(0);
|
|
172
127
|
const flags = message.readUInt16BE(2);
|
|
173
|
-
const qr = (flags & 0x8000) >> 15;
|
|
128
|
+
const qr = (flags & 0x8000) >> 15;
|
|
174
129
|
return id == 0 && qr === 1;
|
|
175
130
|
}
|
|
176
131
|
export class Mdns extends Multicast {
|
|
177
132
|
deviceQueries = new Map();
|
|
178
133
|
deviceResponses = new Map();
|
|
179
134
|
filters = [];
|
|
180
|
-
/**
|
|
181
|
-
* Creates an instance of the Mdns class.
|
|
182
|
-
*
|
|
183
|
-
* @param {string} name - The internal name of the mDNS server for the logs.
|
|
184
|
-
* @param {string} multicastAddress - The multicast address for mDNS (i.e. 224.0.0.251 for udp4 or ff02::fb for udp6).
|
|
185
|
-
* @param {number} multicastPort - The port for mDNS (i.e. 5353).
|
|
186
|
-
* @param {('udp4' | 'udp6')} socketType - The type of socket to create (either 'udp4' or 'udp6').
|
|
187
|
-
* @param {boolean} [reuseAddr] - Whether to reuse the address. Defaults to true.
|
|
188
|
-
* @param {string} [interfaceName] - The optional name of the network interface to use.
|
|
189
|
-
* @param {string} [interfaceAddress] - The optional IP address of the network interface to use.
|
|
190
|
-
* @param {string} [outgoingInterfaceAddress] - The address of the outgoing network interface.
|
|
191
|
-
*/
|
|
192
135
|
constructor(name, multicastAddress, multicastPort, socketType, reuseAddr = true, interfaceName, interfaceAddress, outgoingInterfaceAddress) {
|
|
193
136
|
super(name, multicastAddress, multicastPort, socketType, reuseAddr, interfaceName, interfaceAddress, outgoingInterfaceAddress);
|
|
194
137
|
}
|
|
@@ -208,17 +151,16 @@ export class Mdns extends Multicast {
|
|
|
208
151
|
this.onQuery(rinfo, result);
|
|
209
152
|
}
|
|
210
153
|
else {
|
|
211
|
-
const ptr = result.answers?.find((record) => record.name === '_shelly._tcp.local' && record.type === 12
|
|
212
|
-
result.answers?.find((record) => record.name === '_http._tcp.local' && record.type === 12
|
|
213
|
-
result.answers?.find((record) => record.type === 12
|
|
214
|
-
result.answers?.find((record) => record.type === 16
|
|
154
|
+
const ptr = result.answers?.find((record) => record.name === '_shelly._tcp.local' && record.type === 12) ||
|
|
155
|
+
result.answers?.find((record) => record.name === '_http._tcp.local' && record.type === 12) ||
|
|
156
|
+
result.answers?.find((record) => record.type === 12) ||
|
|
157
|
+
result.answers?.find((record) => record.type === 16) ||
|
|
215
158
|
result.answers
|
|
216
159
|
? result.answers[0]
|
|
217
|
-
: undefined;
|
|
218
|
-
this.deviceResponses.set(rinfo.address, { rinfo, response: result, dataPTR: ptr?.type === 12
|
|
160
|
+
: undefined;
|
|
161
|
+
this.deviceResponses.set(rinfo.address, { rinfo, response: result, dataPTR: ptr?.type === 12 ? ptr?.data : ptr?.name });
|
|
219
162
|
this.onResponse(rinfo, result);
|
|
220
163
|
}
|
|
221
|
-
// Apply filters if any
|
|
222
164
|
if (this.filters.length > 0) {
|
|
223
165
|
this.log.debug(`mDNS message filtered out by filters: ${this.filters.join(', ')}`);
|
|
224
166
|
for (const filter of this.filters) {
|
|
@@ -240,28 +182,20 @@ export class Mdns extends Multicast {
|
|
|
240
182
|
this.log.error(`Error decoding mDNS message: ${error instanceof Error ? error.message : error}`);
|
|
241
183
|
}
|
|
242
184
|
}
|
|
243
|
-
/**
|
|
244
|
-
* Decodes an mDNS message, including the header, question section, answer section,
|
|
245
|
-
* authority section, and additional section.
|
|
246
|
-
*
|
|
247
|
-
* @param {Buffer} msg - The raw mDNS message buffer.
|
|
248
|
-
* @returns {MdnsMessage} An object representing the decoded mDNS message.
|
|
249
|
-
* @throws {Error} if the message is too short.
|
|
250
|
-
*/
|
|
251
185
|
decodeMdnsMessage(msg) {
|
|
252
186
|
if (msg.length < 12) {
|
|
253
187
|
throw new Error('mDNS message too short');
|
|
254
188
|
}
|
|
255
189
|
const id = msg.readUInt16BE(0);
|
|
256
190
|
const flags = msg.readUInt16BE(2);
|
|
257
|
-
const qr = (flags & 0x8000) >> 15;
|
|
258
|
-
const opcode = (flags & 0x7800) >> 11;
|
|
259
|
-
const aa = Boolean(flags & 0x0400);
|
|
260
|
-
const tc = Boolean(flags & 0x0200);
|
|
261
|
-
const rd = Boolean(flags & 0x0100);
|
|
262
|
-
const ra = Boolean(flags & 0x0080);
|
|
263
|
-
const z = (flags & 0x0070) >> 4;
|
|
264
|
-
const rcode = flags & 0x000f;
|
|
191
|
+
const qr = (flags & 0x8000) >> 15;
|
|
192
|
+
const opcode = (flags & 0x7800) >> 11;
|
|
193
|
+
const aa = Boolean(flags & 0x0400);
|
|
194
|
+
const tc = Boolean(flags & 0x0200);
|
|
195
|
+
const rd = Boolean(flags & 0x0100);
|
|
196
|
+
const ra = Boolean(flags & 0x0080);
|
|
197
|
+
const z = (flags & 0x0070) >> 4;
|
|
198
|
+
const rcode = flags & 0x000f;
|
|
265
199
|
const qdCount = msg.readUInt16BE(4);
|
|
266
200
|
const anCount = msg.readUInt16BE(6);
|
|
267
201
|
const nsCount = msg.readUInt16BE(8);
|
|
@@ -286,7 +220,6 @@ export class Mdns extends Multicast {
|
|
|
286
220
|
additionals: [],
|
|
287
221
|
};
|
|
288
222
|
let offset = 12;
|
|
289
|
-
// Decode the question section.
|
|
290
223
|
for (let i = 0; i < qdCount; i++) {
|
|
291
224
|
const qnameResult = this.decodeDnsName(msg, offset);
|
|
292
225
|
const qname = qnameResult.name;
|
|
@@ -297,19 +230,16 @@ export class Mdns extends Multicast {
|
|
|
297
230
|
offset += 2;
|
|
298
231
|
mdnsMessage.questions?.push({ name: qname, type: qtype, class: qclass });
|
|
299
232
|
}
|
|
300
|
-
// Decode the answer section.
|
|
301
233
|
for (let i = 0; i < anCount; i++) {
|
|
302
234
|
const rrResult = this.decodeResourceRecord(msg, offset);
|
|
303
235
|
mdnsMessage.answers?.push(rrResult.record);
|
|
304
236
|
offset = rrResult.newOffset;
|
|
305
237
|
}
|
|
306
|
-
// Decode the authority (NS) section.
|
|
307
238
|
for (let i = 0; i < nsCount; i++) {
|
|
308
239
|
const rrResult = this.decodeResourceRecord(msg, offset);
|
|
309
240
|
mdnsMessage.authorities?.push(rrResult.record);
|
|
310
241
|
offset = rrResult.newOffset;
|
|
311
242
|
}
|
|
312
|
-
// Decode the additional records section.
|
|
313
243
|
for (let i = 0; i < arCount; i++) {
|
|
314
244
|
const rrResult = this.decodeResourceRecord(msg, offset);
|
|
315
245
|
mdnsMessage.additionals?.push(rrResult.record);
|
|
@@ -317,25 +247,15 @@ export class Mdns extends Multicast {
|
|
|
317
247
|
}
|
|
318
248
|
return mdnsMessage;
|
|
319
249
|
}
|
|
320
|
-
/**
|
|
321
|
-
* Decodes a DNS name from a buffer, handling compression.
|
|
322
|
-
*
|
|
323
|
-
* @param {Buffer} msg - The full mDNS message buffer.
|
|
324
|
-
* @param {number} offset - The offset at which the DNS name starts.
|
|
325
|
-
* @returns {{ name: string; newOffset: number }} An object with the decoded name and the new offset.
|
|
326
|
-
* @throws {Error} if the offset exceeds the buffer length or too many iterations are performed.
|
|
327
|
-
*/
|
|
328
250
|
decodeDnsName(msg, offset) {
|
|
329
251
|
const labels = [];
|
|
330
252
|
let jumped = false;
|
|
331
253
|
let originalOffset = offset;
|
|
332
|
-
let iterations = 0;
|
|
254
|
+
let iterations = 0;
|
|
333
255
|
while (true) {
|
|
334
|
-
// Safety guard: prevent infinite loops in malformed messages.
|
|
335
256
|
if (iterations++ > 1000) {
|
|
336
257
|
throw new Error('Too many iterations while decoding DNS name. Possible malformed message.');
|
|
337
258
|
}
|
|
338
|
-
// Check that offset is within buffer bounds.
|
|
339
259
|
if (offset >= msg.length) {
|
|
340
260
|
throw new Error('Offset exceeds buffer length while decoding DNS name.');
|
|
341
261
|
}
|
|
@@ -344,9 +264,7 @@ export class Mdns extends Multicast {
|
|
|
344
264
|
offset++;
|
|
345
265
|
break;
|
|
346
266
|
}
|
|
347
|
-
// Check for pointer (first two bits are 11)
|
|
348
267
|
if ((len & 0xc0) === 0xc0) {
|
|
349
|
-
// Ensure the pointer has two bytes available.
|
|
350
268
|
if (offset + 1 >= msg.length) {
|
|
351
269
|
throw new Error('Incomplete pointer encountered while decoding DNS name.');
|
|
352
270
|
}
|
|
@@ -359,7 +277,6 @@ export class Mdns extends Multicast {
|
|
|
359
277
|
continue;
|
|
360
278
|
}
|
|
361
279
|
offset++;
|
|
362
|
-
// Check that the label length doesn't go beyond the buffer.
|
|
363
280
|
if (offset + len > msg.length) {
|
|
364
281
|
throw new Error('Label length exceeds buffer bounds while decoding DNS name.');
|
|
365
282
|
}
|
|
@@ -368,15 +285,6 @@ export class Mdns extends Multicast {
|
|
|
368
285
|
}
|
|
369
286
|
return { name: labels.join('.'), newOffset: jumped ? originalOffset : offset };
|
|
370
287
|
}
|
|
371
|
-
/**
|
|
372
|
-
* Encodes a domain name into the DNS label format.
|
|
373
|
-
*
|
|
374
|
-
* For example, "example.local" becomes:
|
|
375
|
-
* [7] "example" [5] "local" [0]
|
|
376
|
-
*
|
|
377
|
-
* @param {string} name - The domain name to encode.
|
|
378
|
-
* @returns {Buffer} The encoded domain name as a Buffer.
|
|
379
|
-
*/
|
|
380
288
|
encodeDnsName(name) {
|
|
381
289
|
const labels = name.split('.');
|
|
382
290
|
const buffers = labels.map((label) => {
|
|
@@ -384,25 +292,8 @@ export class Mdns extends Multicast {
|
|
|
384
292
|
lenBuf.writeUInt8(label.length, 0);
|
|
385
293
|
return Buffer.concat([lenBuf, Buffer.from(label)]);
|
|
386
294
|
});
|
|
387
|
-
// Append the null byte to terminate the name.
|
|
388
295
|
return Buffer.concat([...buffers, Buffer.from([0])]);
|
|
389
296
|
}
|
|
390
|
-
/**
|
|
391
|
-
* Encodes TXT record RDATA.
|
|
392
|
-
*
|
|
393
|
-
* In DNS/mDNS, TXT RDATA is a sequence of one or more <character-string>,
|
|
394
|
-
* each encoded as: [length byte][UTF-8 bytes].
|
|
395
|
-
*
|
|
396
|
-
* @param {string[]} txt - Array of TXT entries, e.g. ["key=value", "path=/"].
|
|
397
|
-
* @returns {Buffer} Encoded TXT RDATA.
|
|
398
|
-
* @throws {Error} If any entry exceeds 255 bytes.
|
|
399
|
-
*
|
|
400
|
-
* @example
|
|
401
|
-
* const txtRdata = mdns.encodeTxtRdata(['txtvers=1', 'path=/']);
|
|
402
|
-
* mdns.sendResponse([
|
|
403
|
-
* { name: 'example._http._tcp.local', rtype: DnsRecordType.TXT, rclass: DnsClass.IN | DnsClassFlag.FLUSH, ttl: 120, rdata: txtRdata },
|
|
404
|
-
* ]);
|
|
405
|
-
*/
|
|
406
297
|
encodeTxtRdata(txt) {
|
|
407
298
|
const parts = txt.map((entry) => {
|
|
408
299
|
const value = Buffer.from(entry, 'utf8');
|
|
@@ -412,21 +303,6 @@ export class Mdns extends Multicast {
|
|
|
412
303
|
});
|
|
413
304
|
return Buffer.concat(parts);
|
|
414
305
|
}
|
|
415
|
-
/**
|
|
416
|
-
* Encodes SRV record RDATA.
|
|
417
|
-
*
|
|
418
|
-
* SRV RDATA layout (RFC 2782):
|
|
419
|
-
* - priority (2 bytes)
|
|
420
|
-
* - weight (2 bytes)
|
|
421
|
-
* - port (2 bytes)
|
|
422
|
-
* - target (DNS name)
|
|
423
|
-
*
|
|
424
|
-
* @param {number} priority - SRV priority.
|
|
425
|
-
* @param {number} weight - SRV weight.
|
|
426
|
-
* @param {number} port - Service port.
|
|
427
|
-
* @param {string} target - Target hostname (e.g. "matterbridge.local").
|
|
428
|
-
* @returns {Buffer} Encoded SRV RDATA.
|
|
429
|
-
*/
|
|
430
306
|
encodeSrvRdata(priority, weight, port, target) {
|
|
431
307
|
const fixed = Buffer.alloc(6);
|
|
432
308
|
fixed.writeUInt16BE(priority, 0);
|
|
@@ -434,13 +310,6 @@ export class Mdns extends Multicast {
|
|
|
434
310
|
fixed.writeUInt16BE(port, 4);
|
|
435
311
|
return Buffer.concat([fixed, this.encodeDnsName(target)]);
|
|
436
312
|
}
|
|
437
|
-
/**
|
|
438
|
-
* Encodes an IPv4 address for an A record RDATA (4 bytes).
|
|
439
|
-
*
|
|
440
|
-
* @param {string} ipv4 - IPv4 address, e.g. "192.168.1.10".
|
|
441
|
-
* @returns {Buffer} 4-byte buffer.
|
|
442
|
-
* @throws {Error} If the address is not a valid dotted-quad.
|
|
443
|
-
*/
|
|
444
313
|
encodeA(ipv4) {
|
|
445
314
|
const parts = ipv4.split('.').map((p) => Number(p));
|
|
446
315
|
if (parts.length !== 4 || parts.some((n) => !Number.isInteger(n) || n < 0 || n > 255)) {
|
|
@@ -448,19 +317,8 @@ export class Mdns extends Multicast {
|
|
|
448
317
|
}
|
|
449
318
|
return Buffer.from(parts);
|
|
450
319
|
}
|
|
451
|
-
/**
|
|
452
|
-
* Encodes an IPv6 address for an AAAA record RDATA (16 bytes).
|
|
453
|
-
*
|
|
454
|
-
* Supports the "::" zero-compression form and ignores an optional scope id
|
|
455
|
-
* suffix (e.g. "fe80::1%12" or "fe80::1%eth0").
|
|
456
|
-
*
|
|
457
|
-
* @param {string} ipv6WithOptionalScope - IPv6 address (optionally with scope id).
|
|
458
|
-
* @returns {Buffer} 16-byte buffer.
|
|
459
|
-
* @throws {Error} If the address is not a valid IPv6 literal.
|
|
460
|
-
*/
|
|
461
320
|
encodeAAAA(ipv6WithOptionalScope) {
|
|
462
321
|
const ipv6 = ipv6WithOptionalScope.split('%')[0];
|
|
463
|
-
// Expand IPv6 to 8 groups of 16-bit words.
|
|
464
322
|
const [left, right] = ipv6.split('::');
|
|
465
323
|
const leftParts = left ? left.split(':').filter(Boolean) : [];
|
|
466
324
|
const rightParts = right ? right.split(':').filter(Boolean) : [];
|
|
@@ -489,19 +347,10 @@ export class Mdns extends Multicast {
|
|
|
489
347
|
return [(word >> 8) & 0xff, word & 0xff];
|
|
490
348
|
}));
|
|
491
349
|
}
|
|
492
|
-
/**
|
|
493
|
-
* Decodes a DNS resource record.
|
|
494
|
-
*
|
|
495
|
-
* @param {Buffer} msg - The full mDNS message buffer.
|
|
496
|
-
* @param {number} offset - The offset at which the resource record starts.
|
|
497
|
-
* @returns {{ record: MdnsRecord; newOffset: number }} An object containing the decoded record and the new offset.
|
|
498
|
-
*/
|
|
499
350
|
decodeResourceRecord(msg, offset) {
|
|
500
|
-
// Decode the NAME field (which may be compressed)
|
|
501
351
|
const nameResult = this.decodeDnsName(msg, offset);
|
|
502
352
|
const name = nameResult.name;
|
|
503
353
|
offset = nameResult.newOffset;
|
|
504
|
-
// Read TYPE (16 bits), CLASS (16 bits), TTL (32 bits), and RDLENGTH (16 bits)
|
|
505
354
|
const type = msg.readUInt16BE(offset);
|
|
506
355
|
offset += 2;
|
|
507
356
|
const rrclass = msg.readUInt16BE(offset);
|
|
@@ -511,14 +360,12 @@ export class Mdns extends Multicast {
|
|
|
511
360
|
const rdlength = msg.readUInt16BE(offset);
|
|
512
361
|
offset += 2;
|
|
513
362
|
let data = '';
|
|
514
|
-
if (type === 12
|
|
515
|
-
// PTR record (type 12): decode its RDATA as a domain name.
|
|
363
|
+
if (type === 12) {
|
|
516
364
|
const ptrResult = this.decodeDnsName(msg, offset);
|
|
517
365
|
data = ptrResult.name;
|
|
518
366
|
offset += rdlength;
|
|
519
367
|
}
|
|
520
|
-
else if (type === 16
|
|
521
|
-
// TXT record: may consist of one or more length-prefixed strings.
|
|
368
|
+
else if (type === 16) {
|
|
522
369
|
const txtStrings = [];
|
|
523
370
|
const end = offset + rdlength;
|
|
524
371
|
while (offset < end) {
|
|
@@ -530,8 +377,7 @@ export class Mdns extends Multicast {
|
|
|
530
377
|
}
|
|
531
378
|
data = txtStrings.join(', ');
|
|
532
379
|
}
|
|
533
|
-
else if (type === 33
|
|
534
|
-
// SRV record (type === 33): consists of 2 bytes for priority, 2 for weight, 2 for port, followed by the target domain name.
|
|
380
|
+
else if (type === 33) {
|
|
535
381
|
const priority = msg.readUInt16BE(offset);
|
|
536
382
|
const weight = msg.readUInt16BE(offset + 2);
|
|
537
383
|
const port = msg.readUInt16BE(offset + 4);
|
|
@@ -545,16 +391,13 @@ export class Mdns extends Multicast {
|
|
|
545
391
|
});
|
|
546
392
|
offset = srvTargetResult.newOffset;
|
|
547
393
|
}
|
|
548
|
-
else if (type === 1
|
|
549
|
-
// A record (type 1): an IPv4 address stored in 4 bytes.
|
|
394
|
+
else if (type === 1) {
|
|
550
395
|
const ipBytes = msg.slice(offset, offset + 4);
|
|
551
396
|
data = Array.from(ipBytes).join('.');
|
|
552
397
|
offset += 4;
|
|
553
398
|
}
|
|
554
|
-
else if (type === 28
|
|
555
|
-
// AAAA record (type 28): IPv6 address stored in 16 bytes.
|
|
399
|
+
else if (type === 28) {
|
|
556
400
|
const ipBytes = msg.slice(offset, offset + 16);
|
|
557
|
-
// Convert the 16 bytes into an IPv6 address string (colon-separated)
|
|
558
401
|
const ipv6Parts = [];
|
|
559
402
|
for (let i = 0; i < 16; i += 2) {
|
|
560
403
|
ipv6Parts.push(ipBytes.readUInt16BE(i).toString(16));
|
|
@@ -562,14 +405,10 @@ export class Mdns extends Multicast {
|
|
|
562
405
|
data = ipv6Parts.join(':');
|
|
563
406
|
offset += 16;
|
|
564
407
|
}
|
|
565
|
-
else if (type === 47
|
|
566
|
-
// NSEC record: RDATA consists of:
|
|
567
|
-
// - Next Domain Name (in DNS label format)
|
|
568
|
-
// - Type Bit Maps (variable length)
|
|
408
|
+
else if (type === 47) {
|
|
569
409
|
const { name: nextDomain, newOffset } = this.decodeDnsName(msg, offset);
|
|
570
410
|
const nextDomainLength = newOffset - offset;
|
|
571
411
|
offset = newOffset;
|
|
572
|
-
// Calculate the remaining length for the type bit maps.
|
|
573
412
|
const bitmapLength = rdlength - nextDomainLength;
|
|
574
413
|
const bitmapData = msg.slice(offset, offset + bitmapLength);
|
|
575
414
|
const types = [];
|
|
@@ -596,7 +435,6 @@ export class Mdns extends Multicast {
|
|
|
596
435
|
offset += bitmapLength;
|
|
597
436
|
}
|
|
598
437
|
else {
|
|
599
|
-
// Fall back
|
|
600
438
|
data = msg.slice(offset, offset + rdlength).toString('hex');
|
|
601
439
|
offset += rdlength;
|
|
602
440
|
}
|
|
@@ -605,30 +443,19 @@ export class Mdns extends Multicast {
|
|
|
605
443
|
newOffset: offset,
|
|
606
444
|
};
|
|
607
445
|
}
|
|
608
|
-
/**
|
|
609
|
-
* Sends a DNS query with multiple questions.
|
|
610
|
-
*
|
|
611
|
-
* @param {Array<{ name: string; type: number; class: number; unicastResponse?: boolean }>} questions - Array of questions
|
|
612
|
-
* to include in the query.
|
|
613
|
-
* @returns {Buffer<ArrayBuffer>} The constructed query buffer.
|
|
614
|
-
*
|
|
615
|
-
* @remarks
|
|
616
|
-
* Each question should have a name (e.g., "_http._tcp.local"), type (e.g., DnsRecordType.PTR), class (e.g., DnsClass.IN),
|
|
617
|
-
* and an optional unicastResponse flag (this will add the DnsClassFlag.QU flag to the query).
|
|
618
|
-
*/
|
|
619
446
|
sendQuery(questions) {
|
|
620
447
|
const header = Buffer.alloc(12);
|
|
621
|
-
header.writeUInt16BE(0, 0);
|
|
622
|
-
header.writeUInt16BE(0, 2);
|
|
623
|
-
header.writeUInt16BE(questions.length, 4);
|
|
624
|
-
header.writeUInt16BE(0, 6);
|
|
625
|
-
header.writeUInt16BE(0, 8);
|
|
626
|
-
header.writeUInt16BE(0, 10);
|
|
448
|
+
header.writeUInt16BE(0, 0);
|
|
449
|
+
header.writeUInt16BE(0, 2);
|
|
450
|
+
header.writeUInt16BE(questions.length, 4);
|
|
451
|
+
header.writeUInt16BE(0, 6);
|
|
452
|
+
header.writeUInt16BE(0, 8);
|
|
453
|
+
header.writeUInt16BE(0, 10);
|
|
627
454
|
const questionBuffers = questions.map(({ name, type: qtype, class: qclass, unicastResponse = false }) => {
|
|
628
455
|
const qname = this.encodeDnsName(name);
|
|
629
456
|
const qfields = Buffer.alloc(4);
|
|
630
457
|
qfields.writeUInt16BE(qtype, 0);
|
|
631
|
-
qfields.writeUInt16BE(unicastResponse ? qclass | 32768
|
|
458
|
+
qfields.writeUInt16BE(unicastResponse ? qclass | 32768 : qclass, 2);
|
|
632
459
|
return Buffer.concat([qname, qfields]);
|
|
633
460
|
});
|
|
634
461
|
const query = Buffer.concat([header, ...questionBuffers]);
|
|
@@ -648,52 +475,31 @@ export class Mdns extends Multicast {
|
|
|
648
475
|
});
|
|
649
476
|
return query;
|
|
650
477
|
}
|
|
651
|
-
/**
|
|
652
|
-
* Constructs an mDNS response packet and sends it to the multicast address and port.
|
|
653
|
-
*
|
|
654
|
-
* @param {Array<{ name: string; rtype: number; rclass: number; ttl: number; rdata: Buffer }>} answers - Array of answer records.
|
|
655
|
-
* @returns {Buffer<ArrayBuffer>} The constructed response buffer.
|
|
656
|
-
*
|
|
657
|
-
* @example
|
|
658
|
-
* const ptrRdata = mdnsIpv4.encodeDnsName('matterbridge._http._tcp.local');
|
|
659
|
-
* mdnsIpv4.sendResponse([{ name: '_http._tcp.local', rtype: DnsRecordType.PTR, rclass: DnsClass.IN, ttl: 120, rdata: ptrRdata }]);
|
|
660
|
-
*/
|
|
661
478
|
sendResponse(answers) {
|
|
662
479
|
if (!Array.isArray(answers) || answers.length === 0) {
|
|
663
480
|
throw new Error('sendResponse requires a non-empty answers array');
|
|
664
481
|
}
|
|
665
|
-
// Create a 12-byte DNS header.
|
|
666
482
|
const header = Buffer.alloc(12);
|
|
667
|
-
header.writeUInt16BE(0, 0);
|
|
668
|
-
// Set flags: QR (response) bit and AA (authoritative answer) bit.
|
|
483
|
+
header.writeUInt16BE(0, 0);
|
|
669
484
|
header.writeUInt16BE(0x8400, 2);
|
|
670
|
-
header.writeUInt16BE(0, 4);
|
|
671
|
-
header.writeUInt16BE(answers.length, 6);
|
|
672
|
-
header.writeUInt16BE(0, 8);
|
|
673
|
-
header.writeUInt16BE(0, 10);
|
|
485
|
+
header.writeUInt16BE(0, 4);
|
|
486
|
+
header.writeUInt16BE(answers.length, 6);
|
|
487
|
+
header.writeUInt16BE(0, 8);
|
|
488
|
+
header.writeUInt16BE(0, 10);
|
|
674
489
|
const answerBuffers = answers.map(({ name, rtype, rclass, ttl, rdata }) => {
|
|
675
|
-
// Encode the domain name in DNS label format.
|
|
676
490
|
const aname = this.encodeDnsName(name);
|
|
677
|
-
// Prepare the fixed part of the answer record:
|
|
678
|
-
// - 2 bytes for qtype,
|
|
679
|
-
// - 2 bytes for qclass,
|
|
680
|
-
// - 4 bytes for TTL,
|
|
681
|
-
// - 2 bytes for RDLENGTH (length of the rdata).
|
|
682
491
|
const answerFixed = Buffer.alloc(10);
|
|
683
|
-
answerFixed.writeUInt16BE(rtype, 0);
|
|
684
|
-
answerFixed.writeUInt16BE(rclass, 2);
|
|
685
|
-
answerFixed.writeUInt32BE(ttl, 4);
|
|
686
|
-
answerFixed.writeUInt16BE(rdata.length, 8);
|
|
687
|
-
// Concatenate the answer: encoded name, fixed fields, and resource data.
|
|
492
|
+
answerFixed.writeUInt16BE(rtype, 0);
|
|
493
|
+
answerFixed.writeUInt16BE(rclass, 2);
|
|
494
|
+
answerFixed.writeUInt32BE(ttl, 4);
|
|
495
|
+
answerFixed.writeUInt16BE(rdata.length, 8);
|
|
688
496
|
return Buffer.concat([aname, answerFixed, rdata]);
|
|
689
497
|
});
|
|
690
|
-
// Concatenate header and answers to form the complete mDNS response packet.
|
|
691
498
|
const response = Buffer.concat([header, ...answerBuffers]);
|
|
692
499
|
if (hasParameter('v') || hasParameter('verbose')) {
|
|
693
500
|
const decoded = this.decodeMdnsMessage(response);
|
|
694
501
|
this.logMdnsMessage(decoded, undefined, 'Sending response mDNS message');
|
|
695
502
|
}
|
|
696
|
-
// Send the response packet via the socket.
|
|
697
503
|
this.socket.send(response, 0, response.length, this.multicastPort, this.multicastAddress, (error) => {
|
|
698
504
|
if (error) {
|
|
699
505
|
this.log.error(`Dgram mDNS server failed to send response message: ${error instanceof Error ? error.message : error}`);
|
|
@@ -706,128 +512,116 @@ export class Mdns extends Multicast {
|
|
|
706
512
|
});
|
|
707
513
|
return response;
|
|
708
514
|
}
|
|
709
|
-
/**
|
|
710
|
-
* Converts a DNS record type numeric value to its string representation.
|
|
711
|
-
*
|
|
712
|
-
* @param {number} type - The numeric DNS record type.
|
|
713
|
-
* @returns {string} The string representation of the record type.
|
|
714
|
-
*/
|
|
715
515
|
dnsTypeToString(type) {
|
|
716
516
|
const typeMap = {
|
|
717
|
-
[1
|
|
718
|
-
[2
|
|
719
|
-
[3
|
|
720
|
-
[4
|
|
721
|
-
[5
|
|
722
|
-
[6
|
|
723
|
-
[7
|
|
724
|
-
[8
|
|
725
|
-
[9
|
|
726
|
-
[10
|
|
727
|
-
[11
|
|
728
|
-
[12
|
|
729
|
-
[13
|
|
730
|
-
[14
|
|
731
|
-
[15
|
|
732
|
-
[16
|
|
733
|
-
[17
|
|
734
|
-
[18
|
|
735
|
-
[19
|
|
736
|
-
[20
|
|
737
|
-
[21
|
|
738
|
-
[22
|
|
739
|
-
[23
|
|
740
|
-
[24
|
|
741
|
-
[25
|
|
742
|
-
[26
|
|
743
|
-
[27
|
|
744
|
-
[28
|
|
745
|
-
[29
|
|
746
|
-
[30
|
|
747
|
-
[31
|
|
748
|
-
[32
|
|
749
|
-
[33
|
|
750
|
-
[34
|
|
751
|
-
[35
|
|
752
|
-
[36
|
|
753
|
-
[37
|
|
754
|
-
[38
|
|
755
|
-
[39
|
|
756
|
-
[40
|
|
757
|
-
[41
|
|
758
|
-
[42
|
|
759
|
-
[43
|
|
760
|
-
[44
|
|
761
|
-
[45
|
|
762
|
-
[46
|
|
763
|
-
[47
|
|
764
|
-
[48
|
|
765
|
-
[49
|
|
766
|
-
[50
|
|
767
|
-
[51
|
|
768
|
-
[52
|
|
769
|
-
[53
|
|
770
|
-
[55
|
|
771
|
-
[56
|
|
772
|
-
[57
|
|
773
|
-
[58
|
|
774
|
-
[59
|
|
775
|
-
[60
|
|
776
|
-
[61
|
|
777
|
-
[62
|
|
778
|
-
[63
|
|
779
|
-
[64
|
|
780
|
-
[65
|
|
781
|
-
[99
|
|
782
|
-
[100
|
|
783
|
-
[101
|
|
784
|
-
[102
|
|
785
|
-
[103
|
|
786
|
-
[104
|
|
787
|
-
[105
|
|
788
|
-
[106
|
|
789
|
-
[107
|
|
790
|
-
[108
|
|
791
|
-
[109
|
|
792
|
-
[249
|
|
793
|
-
[250
|
|
794
|
-
[251
|
|
795
|
-
[252
|
|
796
|
-
[253
|
|
797
|
-
[254
|
|
798
|
-
[255
|
|
799
|
-
[256
|
|
800
|
-
[257
|
|
801
|
-
[258
|
|
802
|
-
[259
|
|
803
|
-
[260
|
|
804
|
-
[261
|
|
805
|
-
[32768
|
|
806
|
-
[32769
|
|
517
|
+
[1]: 'A',
|
|
518
|
+
[2]: 'NS',
|
|
519
|
+
[3]: 'MD',
|
|
520
|
+
[4]: 'MF',
|
|
521
|
+
[5]: 'CNAME',
|
|
522
|
+
[6]: 'SOA',
|
|
523
|
+
[7]: 'MB',
|
|
524
|
+
[8]: 'MG',
|
|
525
|
+
[9]: 'MR',
|
|
526
|
+
[10]: 'NULL',
|
|
527
|
+
[11]: 'WKS',
|
|
528
|
+
[12]: 'PTR',
|
|
529
|
+
[13]: 'HINFO',
|
|
530
|
+
[14]: 'MINFO',
|
|
531
|
+
[15]: 'MX',
|
|
532
|
+
[16]: 'TXT',
|
|
533
|
+
[17]: 'RP',
|
|
534
|
+
[18]: 'AFSDB',
|
|
535
|
+
[19]: 'X25',
|
|
536
|
+
[20]: 'ISDN',
|
|
537
|
+
[21]: 'RT',
|
|
538
|
+
[22]: 'NSAP',
|
|
539
|
+
[23]: 'NSAP_PTR',
|
|
540
|
+
[24]: 'SIG',
|
|
541
|
+
[25]: 'KEY',
|
|
542
|
+
[26]: 'PX',
|
|
543
|
+
[27]: 'GPOS',
|
|
544
|
+
[28]: 'AAAA',
|
|
545
|
+
[29]: 'LOC',
|
|
546
|
+
[30]: 'NXT',
|
|
547
|
+
[31]: 'EID',
|
|
548
|
+
[32]: 'NIMLOC',
|
|
549
|
+
[33]: 'SRV',
|
|
550
|
+
[34]: 'ATMA',
|
|
551
|
+
[35]: 'NAPTR',
|
|
552
|
+
[36]: 'KX',
|
|
553
|
+
[37]: 'CERT',
|
|
554
|
+
[38]: 'A6',
|
|
555
|
+
[39]: 'DNAME',
|
|
556
|
+
[40]: 'SINK',
|
|
557
|
+
[41]: 'OPT',
|
|
558
|
+
[42]: 'APL',
|
|
559
|
+
[43]: 'DS',
|
|
560
|
+
[44]: 'SSHFP',
|
|
561
|
+
[45]: 'IPSECKEY',
|
|
562
|
+
[46]: 'RRSIG',
|
|
563
|
+
[47]: 'NSEC',
|
|
564
|
+
[48]: 'DNSKEY',
|
|
565
|
+
[49]: 'DHCID',
|
|
566
|
+
[50]: 'NSEC3',
|
|
567
|
+
[51]: 'NSEC3PARAM',
|
|
568
|
+
[52]: 'TLSA',
|
|
569
|
+
[53]: 'SMIMEA',
|
|
570
|
+
[55]: 'HIP',
|
|
571
|
+
[56]: 'NINFO',
|
|
572
|
+
[57]: 'RKEY',
|
|
573
|
+
[58]: 'TALINK',
|
|
574
|
+
[59]: 'CDS',
|
|
575
|
+
[60]: 'CDNSKEY',
|
|
576
|
+
[61]: 'OPENPGPKEY',
|
|
577
|
+
[62]: 'CSYNC',
|
|
578
|
+
[63]: 'ZONEMD',
|
|
579
|
+
[64]: 'SVCB',
|
|
580
|
+
[65]: 'HTTPS',
|
|
581
|
+
[99]: 'SPF',
|
|
582
|
+
[100]: 'UINFO',
|
|
583
|
+
[101]: 'UID',
|
|
584
|
+
[102]: 'GID',
|
|
585
|
+
[103]: 'UNSPEC',
|
|
586
|
+
[104]: 'NID',
|
|
587
|
+
[105]: 'L32',
|
|
588
|
+
[106]: 'L64',
|
|
589
|
+
[107]: 'LP',
|
|
590
|
+
[108]: 'EUI48',
|
|
591
|
+
[109]: 'EUI64',
|
|
592
|
+
[249]: 'TKEY',
|
|
593
|
+
[250]: 'TSIG',
|
|
594
|
+
[251]: 'IXFR',
|
|
595
|
+
[252]: 'AXFR',
|
|
596
|
+
[253]: 'MAILB',
|
|
597
|
+
[254]: 'MAILA',
|
|
598
|
+
[255]: 'ANY',
|
|
599
|
+
[256]: 'URI',
|
|
600
|
+
[257]: 'CAA',
|
|
601
|
+
[258]: 'AVC',
|
|
602
|
+
[259]: 'DOA',
|
|
603
|
+
[260]: 'AMTRELAY',
|
|
604
|
+
[261]: 'ZONEVERSION',
|
|
605
|
+
[32768]: 'TA',
|
|
606
|
+
[32769]: 'DLV',
|
|
807
607
|
};
|
|
808
608
|
return typeMap[type] ?? `TYPE${type}`;
|
|
809
609
|
}
|
|
810
|
-
/**
|
|
811
|
-
* Converts a DNS response class numeric value to its string representation.
|
|
812
|
-
*
|
|
813
|
-
* @param {number} cls - The numeric DNS class.
|
|
814
|
-
* @returns {string} The string representation of the DNS class.
|
|
815
|
-
*/
|
|
816
610
|
dnsResponseClassToString(cls) {
|
|
817
|
-
const isFlush = !!(cls & 32768
|
|
611
|
+
const isFlush = !!(cls & 32768);
|
|
818
612
|
const baseClass = cls & 0x7fff;
|
|
819
613
|
let classStr;
|
|
820
614
|
switch (baseClass) {
|
|
821
|
-
case 1
|
|
615
|
+
case 1:
|
|
822
616
|
classStr = 'IN';
|
|
823
617
|
break;
|
|
824
|
-
case 3
|
|
618
|
+
case 3:
|
|
825
619
|
classStr = 'CH';
|
|
826
620
|
break;
|
|
827
|
-
case 4
|
|
621
|
+
case 4:
|
|
828
622
|
classStr = 'HS';
|
|
829
623
|
break;
|
|
830
|
-
case 255
|
|
624
|
+
case 255:
|
|
831
625
|
classStr = 'ANY';
|
|
832
626
|
break;
|
|
833
627
|
default:
|
|
@@ -835,28 +629,21 @@ export class Mdns extends Multicast {
|
|
|
835
629
|
}
|
|
836
630
|
return isFlush ? `${classStr}|FLUSH` : classStr;
|
|
837
631
|
}
|
|
838
|
-
/**
|
|
839
|
-
* Converts a DNS question class to a human-readable string.
|
|
840
|
-
* Adds support for mDNS QU (unicast-response) bit.
|
|
841
|
-
*
|
|
842
|
-
* @param {number} cls - The numeric question class.
|
|
843
|
-
* @returns {string} The string representation, e.g. "IN|QU"
|
|
844
|
-
*/
|
|
845
632
|
dnsQuestionClassToString(cls) {
|
|
846
|
-
const isQU = !!(cls & 32768
|
|
633
|
+
const isQU = !!(cls & 32768);
|
|
847
634
|
const baseClass = cls & 0x7fff;
|
|
848
635
|
let classStr;
|
|
849
636
|
switch (baseClass) {
|
|
850
|
-
case 1
|
|
637
|
+
case 1:
|
|
851
638
|
classStr = 'IN';
|
|
852
639
|
break;
|
|
853
|
-
case 3
|
|
640
|
+
case 3:
|
|
854
641
|
classStr = 'CH';
|
|
855
642
|
break;
|
|
856
|
-
case 4
|
|
643
|
+
case 4:
|
|
857
644
|
classStr = 'HS';
|
|
858
645
|
break;
|
|
859
|
-
case 255
|
|
646
|
+
case 255:
|
|
860
647
|
classStr = 'ANY';
|
|
861
648
|
break;
|
|
862
649
|
default:
|
|
@@ -864,13 +651,6 @@ export class Mdns extends Multicast {
|
|
|
864
651
|
}
|
|
865
652
|
return isQU ? `${classStr}|QU` : classStr;
|
|
866
653
|
}
|
|
867
|
-
/**
|
|
868
|
-
* Logs the decoded mDNS message header.
|
|
869
|
-
*
|
|
870
|
-
* @param {MdnsMessage} msg - The mDNS message header object.
|
|
871
|
-
* @param {AnsiLogger} [log] - The logger to use (defaults to this.log).
|
|
872
|
-
* @param {string} [text] - Optional additional text to include in the log.
|
|
873
|
-
*/
|
|
874
654
|
logMdnsMessage(msg, log = this.log, text = 'Decoded mDNS message') {
|
|
875
655
|
log.info(`${text}: ID ${MAGENTA}${msg.id}${nf}, QR ${GREEN}${msg.qr === 0 ? 'Query' : 'Response'}${nf}, OPCODE ${MAGENTA}${msg.opcode}${nf}, AA ${MAGENTA}${msg.aa}${nf}, TC ${MAGENTA}${msg.tc}${nf}, RD ${MAGENTA}${msg.rd}${nf}, RA ${MAGENTA}${msg.ra}${nf}, Z ${MAGENTA}${msg.z}${nf}, RCODE ${MAGENTA}${msg.rcode}${nf}, QDCount ${MAGENTA}${msg.qdCount}${nf}, ANCount ${MAGENTA}${msg.anCount}${nf}, NSCount ${MAGENTA}${msg.nsCount}${nf}, ARCount ${MAGENTA}${msg.arCount}${nf}`);
|
|
876
656
|
msg.questions?.forEach((question) => {
|
|
@@ -887,14 +667,9 @@ export class Mdns extends Multicast {
|
|
|
887
667
|
});
|
|
888
668
|
log.info(`---\n`);
|
|
889
669
|
}
|
|
890
|
-
/**
|
|
891
|
-
* Logs the discovered devices from the mDNS queries and responses.
|
|
892
|
-
*/
|
|
893
670
|
logDevices() {
|
|
894
671
|
this.log.info(`Discovered query devices: ${MAGENTA}${this.deviceQueries.size}${nf}`);
|
|
895
|
-
// Collect devices into an array
|
|
896
672
|
const deviceQueryArray = Array.from(this.deviceQueries.entries());
|
|
897
|
-
// Sort the array by numeric value of the IP address
|
|
898
673
|
deviceQueryArray.sort(([addressA], [addressB]) => {
|
|
899
674
|
const partsA = addressA.split('.').map(Number);
|
|
900
675
|
const partsB = addressB.split('.').map(Number);
|
|
@@ -903,17 +678,13 @@ export class Mdns extends Multicast {
|
|
|
903
678
|
if (diff !== 0)
|
|
904
679
|
return diff;
|
|
905
680
|
}
|
|
906
|
-
// istanbul ignore next
|
|
907
681
|
return 0;
|
|
908
682
|
});
|
|
909
|
-
// Log the sorted devices
|
|
910
683
|
deviceQueryArray.forEach(([rinfo, response]) => {
|
|
911
684
|
this.log.info(`- ${MAGENTA}${rinfo}${nf} family ${BLUE}${response.rinfo.family}${nf} address ${BLUE}${response.rinfo.address}${nf} port ${BLUE}${response.rinfo.port}${nf}`);
|
|
912
685
|
});
|
|
913
686
|
this.log.info(`Discovered response devices: ${MAGENTA}${this.deviceResponses.size}${nf}`);
|
|
914
|
-
// Collect devices into an array
|
|
915
687
|
const deviceResponseArray = Array.from(this.deviceResponses.entries());
|
|
916
|
-
// Sort the array by numeric value of the IP address
|
|
917
688
|
deviceResponseArray.sort(([addressA], [addressB]) => {
|
|
918
689
|
const partsA = addressA.split(/[:.]/).map((part) => parseInt(part, 16));
|
|
919
690
|
const partsB = addressB.split(/[:.]/).map((part) => parseInt(part, 16));
|
|
@@ -922,13 +693,10 @@ export class Mdns extends Multicast {
|
|
|
922
693
|
if (diff !== 0)
|
|
923
694
|
return diff;
|
|
924
695
|
}
|
|
925
|
-
// istanbul ignore next
|
|
926
696
|
return 0;
|
|
927
697
|
});
|
|
928
|
-
// Log the sorted devices
|
|
929
698
|
deviceResponseArray.forEach(([rinfo, response]) => {
|
|
930
699
|
this.log.info(`- ${MAGENTA}${rinfo}${nf} family ${BLUE}${response.rinfo.family}${nf} address ${BLUE}${response.rinfo.address}${nf} port ${BLUE}${response.rinfo.port}${nf} PTR ${GREEN}${response.dataPTR}${nf}`);
|
|
931
700
|
});
|
|
932
701
|
}
|
|
933
702
|
}
|
|
934
|
-
//# sourceMappingURL=mdns.js.map
|