matterbridge 3.4.3-dev-20251209-e6cb85f → 3.4.3
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/README.md +2 -3
- package/dist/broadcastServer.d.ts +144 -0
- package/dist/broadcastServer.d.ts.map +1 -0
- package/dist/broadcastServer.js +119 -0
- package/dist/broadcastServer.js.map +1 -0
- package/dist/broadcastServerTypes.d.ts +841 -0
- package/dist/broadcastServerTypes.d.ts.map +1 -0
- package/dist/broadcastServerTypes.js +24 -0
- package/dist/broadcastServerTypes.js.map +1 -0
- package/dist/cli.d.ts +30 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +97 -1
- package/dist/cli.js.map +1 -0
- package/dist/cliEmitter.d.ts +50 -0
- package/dist/cliEmitter.d.ts.map +1 -0
- package/dist/cliEmitter.js +37 -0
- package/dist/cliEmitter.js.map +1 -0
- package/dist/cliHistory.d.ts +48 -0
- package/dist/cliHistory.d.ts.map +1 -0
- package/dist/cliHistory.js +38 -0
- package/dist/cliHistory.js.map +1 -0
- package/dist/clusters/export.d.ts +2 -0
- package/dist/clusters/export.d.ts.map +1 -0
- package/dist/clusters/export.js +2 -0
- package/dist/clusters/export.js.map +1 -0
- package/dist/deviceManager.d.ts +135 -0
- package/dist/deviceManager.d.ts.map +1 -0
- package/dist/deviceManager.js +113 -1
- package/dist/deviceManager.js.map +1 -0
- package/dist/devices/airConditioner.d.ts +98 -0
- package/dist/devices/airConditioner.d.ts.map +1 -0
- package/dist/devices/airConditioner.js +57 -0
- package/dist/devices/airConditioner.js.map +1 -0
- package/dist/devices/batteryStorage.d.ts +48 -0
- package/dist/devices/batteryStorage.d.ts.map +1 -0
- package/dist/devices/batteryStorage.js +48 -1
- package/dist/devices/batteryStorage.js.map +1 -0
- package/dist/devices/cooktop.d.ts +61 -0
- package/dist/devices/cooktop.d.ts.map +1 -0
- package/dist/devices/cooktop.js +56 -0
- package/dist/devices/cooktop.js.map +1 -0
- package/dist/devices/dishwasher.d.ts +71 -0
- package/dist/devices/dishwasher.d.ts.map +1 -0
- package/dist/devices/dishwasher.js +57 -0
- package/dist/devices/dishwasher.js.map +1 -0
- package/dist/devices/evse.d.ts +76 -0
- package/dist/devices/evse.d.ts.map +1 -0
- package/dist/devices/evse.js +74 -10
- package/dist/devices/evse.js.map +1 -0
- package/dist/devices/export.d.ts +17 -0
- package/dist/devices/export.d.ts.map +1 -0
- package/dist/devices/export.js +5 -0
- package/dist/devices/export.js.map +1 -0
- package/dist/devices/extractorHood.d.ts +46 -0
- package/dist/devices/extractorHood.d.ts.map +1 -0
- package/dist/devices/extractorHood.js +43 -0
- package/dist/devices/extractorHood.js.map +1 -0
- package/dist/devices/heatPump.d.ts +47 -0
- package/dist/devices/heatPump.d.ts.map +1 -0
- package/dist/devices/heatPump.js +50 -2
- package/dist/devices/heatPump.js.map +1 -0
- package/dist/devices/laundryDryer.d.ts +67 -0
- package/dist/devices/laundryDryer.d.ts.map +1 -0
- package/dist/devices/laundryDryer.js +62 -3
- package/dist/devices/laundryDryer.js.map +1 -0
- package/dist/devices/laundryWasher.d.ts +81 -0
- package/dist/devices/laundryWasher.d.ts.map +1 -0
- package/dist/devices/laundryWasher.js +70 -4
- package/dist/devices/laundryWasher.js.map +1 -0
- package/dist/devices/microwaveOven.d.ts +168 -0
- package/dist/devices/microwaveOven.d.ts.map +1 -0
- package/dist/devices/microwaveOven.js +88 -5
- package/dist/devices/microwaveOven.js.map +1 -0
- package/dist/devices/oven.d.ts +105 -0
- package/dist/devices/oven.d.ts.map +1 -0
- package/dist/devices/oven.js +85 -0
- package/dist/devices/oven.js.map +1 -0
- package/dist/devices/refrigerator.d.ts +118 -0
- package/dist/devices/refrigerator.d.ts.map +1 -0
- package/dist/devices/refrigerator.js +102 -0
- package/dist/devices/refrigerator.js.map +1 -0
- package/dist/devices/roboticVacuumCleaner.d.ts +112 -0
- package/dist/devices/roboticVacuumCleaner.d.ts.map +1 -0
- package/dist/devices/roboticVacuumCleaner.js +100 -9
- package/dist/devices/roboticVacuumCleaner.js.map +1 -0
- package/dist/devices/solarPower.d.ts +40 -0
- package/dist/devices/solarPower.d.ts.map +1 -0
- package/dist/devices/solarPower.js +38 -0
- package/dist/devices/solarPower.js.map +1 -0
- package/dist/devices/speaker.d.ts +87 -0
- package/dist/devices/speaker.d.ts.map +1 -0
- package/dist/devices/speaker.js +84 -0
- package/dist/devices/speaker.js.map +1 -0
- package/dist/devices/temperatureControl.d.ts +166 -0
- package/dist/devices/temperatureControl.d.ts.map +1 -0
- package/dist/devices/temperatureControl.js +24 -3
- package/dist/devices/temperatureControl.js.map +1 -0
- package/dist/devices/waterHeater.d.ts +111 -0
- package/dist/devices/waterHeater.d.ts.map +1 -0
- package/dist/devices/waterHeater.js +82 -2
- package/dist/devices/waterHeater.js.map +1 -0
- package/dist/dgram/coap.d.ts +205 -0
- package/dist/dgram/coap.d.ts.map +1 -0
- package/dist/dgram/coap.js +126 -13
- package/dist/dgram/coap.js.map +1 -0
- package/dist/dgram/dgram.d.ts +141 -0
- package/dist/dgram/dgram.d.ts.map +1 -0
- package/dist/dgram/dgram.js +114 -2
- package/dist/dgram/dgram.js.map +1 -0
- package/dist/dgram/mb_coap.d.ts +24 -0
- package/dist/dgram/mb_coap.d.ts.map +1 -0
- package/dist/dgram/mb_coap.js +41 -3
- package/dist/dgram/mb_coap.js.map +1 -0
- package/dist/dgram/mb_mdns.d.ts +24 -0
- package/dist/dgram/mb_mdns.d.ts.map +1 -0
- package/dist/dgram/mb_mdns.js +80 -15
- package/dist/dgram/mb_mdns.js.map +1 -0
- package/dist/dgram/mdns.d.ts +290 -0
- package/dist/dgram/mdns.d.ts.map +1 -0
- package/dist/dgram/mdns.js +299 -137
- package/dist/dgram/mdns.js.map +1 -0
- package/dist/dgram/multicast.d.ts +67 -0
- package/dist/dgram/multicast.d.ts.map +1 -0
- package/dist/dgram/multicast.js +62 -1
- package/dist/dgram/multicast.js.map +1 -0
- package/dist/dgram/unicast.d.ts +56 -0
- package/dist/dgram/unicast.d.ts.map +1 -0
- package/dist/dgram/unicast.js +54 -0
- package/dist/dgram/unicast.js.map +1 -0
- package/dist/frontend.d.ts +238 -0
- package/dist/frontend.d.ts.map +1 -0
- package/dist/frontend.js +455 -35
- package/dist/frontend.js.map +1 -0
- package/dist/frontendTypes.d.ts +529 -0
- package/dist/frontendTypes.d.ts.map +1 -0
- package/dist/frontendTypes.js +45 -0
- package/dist/frontendTypes.js.map +1 -0
- package/dist/helpers.d.ts +48 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +53 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/jestutils/export.d.ts +2 -0
- package/dist/jestutils/export.d.ts.map +1 -0
- package/dist/jestutils/export.js +1 -0
- package/dist/jestutils/export.js.map +1 -0
- package/dist/jestutils/jestHelpers.d.ts +345 -0
- package/dist/jestutils/jestHelpers.d.ts.map +1 -0
- package/dist/jestutils/jestHelpers.js +371 -14
- package/dist/jestutils/jestHelpers.js.map +1 -0
- package/dist/logger/export.d.ts +2 -0
- package/dist/logger/export.d.ts.map +1 -0
- package/dist/logger/export.js +1 -0
- package/dist/logger/export.js.map +1 -0
- package/dist/matter/behaviors.d.ts +2 -0
- package/dist/matter/behaviors.d.ts.map +1 -0
- package/dist/matter/behaviors.js +2 -0
- package/dist/matter/behaviors.js.map +1 -0
- package/dist/matter/clusters.d.ts +2 -0
- package/dist/matter/clusters.d.ts.map +1 -0
- package/dist/matter/clusters.js +2 -0
- package/dist/matter/clusters.js.map +1 -0
- package/dist/matter/devices.d.ts +2 -0
- package/dist/matter/devices.d.ts.map +1 -0
- package/dist/matter/devices.js +2 -0
- package/dist/matter/devices.js.map +1 -0
- package/dist/matter/endpoints.d.ts +2 -0
- package/dist/matter/endpoints.d.ts.map +1 -0
- package/dist/matter/endpoints.js +2 -0
- package/dist/matter/endpoints.js.map +1 -0
- package/dist/matter/export.d.ts +5 -0
- package/dist/matter/export.d.ts.map +1 -0
- package/dist/matter/export.js +3 -0
- package/dist/matter/export.js.map +1 -0
- package/dist/matter/types.d.ts +3 -0
- package/dist/matter/types.d.ts.map +1 -0
- package/dist/matter/types.js +3 -0
- package/dist/matter/types.js.map +1 -0
- package/dist/matterNode.d.ts +342 -0
- package/dist/matterNode.d.ts.map +1 -0
- package/dist/matterNode.js +369 -8
- package/dist/matterNode.js.map +1 -0
- package/dist/matterbridge.d.ts +492 -0
- package/dist/matterbridge.d.ts.map +1 -0
- package/dist/matterbridge.js +811 -46
- package/dist/matterbridge.js.map +1 -0
- package/dist/matterbridgeAccessoryPlatform.d.ts +41 -0
- package/dist/matterbridgeAccessoryPlatform.d.ts.map +1 -0
- package/dist/matterbridgeAccessoryPlatform.js +38 -0
- package/dist/matterbridgeAccessoryPlatform.js.map +1 -0
- package/dist/matterbridgeBehaviors.d.ts +2404 -0
- package/dist/matterbridgeBehaviors.d.ts.map +1 -0
- package/dist/matterbridgeBehaviors.js +68 -5
- package/dist/matterbridgeBehaviors.js.map +1 -0
- package/dist/matterbridgeDeviceTypes.d.ts +698 -0
- package/dist/matterbridgeDeviceTypes.d.ts.map +1 -0
- package/dist/matterbridgeDeviceTypes.js +635 -14
- package/dist/matterbridgeDeviceTypes.js.map +1 -0
- package/dist/matterbridgeDynamicPlatform.d.ts +41 -0
- package/dist/matterbridgeDynamicPlatform.d.ts.map +1 -0
- package/dist/matterbridgeDynamicPlatform.js +38 -0
- package/dist/matterbridgeDynamicPlatform.js.map +1 -0
- package/dist/matterbridgeEndpoint.d.ts +1507 -0
- package/dist/matterbridgeEndpoint.d.ts.map +1 -0
- package/dist/matterbridgeEndpoint.js +1444 -53
- package/dist/matterbridgeEndpoint.js.map +1 -0
- package/dist/matterbridgeEndpointHelpers.d.ts +787 -0
- package/dist/matterbridgeEndpointHelpers.d.ts.map +1 -0
- package/dist/matterbridgeEndpointHelpers.js +483 -20
- package/dist/matterbridgeEndpointHelpers.js.map +1 -0
- package/dist/matterbridgeEndpointTypes.d.ts +166 -0
- package/dist/matterbridgeEndpointTypes.d.ts.map +1 -0
- package/dist/matterbridgeEndpointTypes.js +25 -0
- package/dist/matterbridgeEndpointTypes.js.map +1 -0
- package/dist/matterbridgePlatform.d.ts +539 -0
- package/dist/matterbridgePlatform.d.ts.map +1 -0
- package/dist/matterbridgePlatform.js +451 -1
- package/dist/matterbridgePlatform.js.map +1 -0
- package/dist/matterbridgeTypes.d.ts +251 -0
- package/dist/matterbridgeTypes.d.ts.map +1 -0
- package/dist/matterbridgeTypes.js +26 -0
- package/dist/matterbridgeTypes.js.map +1 -0
- package/dist/pluginManager.d.ts +372 -0
- package/dist/pluginManager.d.ts.map +1 -0
- package/dist/pluginManager.js +341 -5
- package/dist/pluginManager.js.map +1 -0
- package/dist/shelly.d.ts +181 -0
- package/dist/shelly.d.ts.map +1 -0
- package/dist/shelly.js +178 -7
- package/dist/shelly.js.map +1 -0
- package/dist/storage/export.d.ts +2 -0
- package/dist/storage/export.d.ts.map +1 -0
- package/dist/storage/export.js +1 -0
- package/dist/storage/export.js.map +1 -0
- package/dist/update.d.ts +84 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +93 -1
- package/dist/update.js.map +1 -0
- package/dist/utils/colorUtils.d.ts +101 -0
- package/dist/utils/colorUtils.d.ts.map +1 -0
- package/dist/utils/colorUtils.js +97 -2
- package/dist/utils/colorUtils.js.map +1 -0
- package/dist/utils/commandLine.d.ts +66 -0
- package/dist/utils/commandLine.d.ts.map +1 -0
- package/dist/utils/commandLine.js +60 -0
- package/dist/utils/commandLine.js.map +1 -0
- package/dist/utils/copyDirectory.d.ts +35 -0
- package/dist/utils/copyDirectory.d.ts.map +1 -0
- package/dist/utils/copyDirectory.js +37 -0
- package/dist/utils/copyDirectory.js.map +1 -0
- package/dist/utils/createDirectory.d.ts +34 -0
- package/dist/utils/createDirectory.d.ts.map +1 -0
- package/dist/utils/createDirectory.js +33 -0
- package/dist/utils/createDirectory.js.map +1 -0
- package/dist/utils/createZip.d.ts +39 -0
- package/dist/utils/createZip.d.ts.map +1 -0
- package/dist/utils/createZip.js +47 -2
- package/dist/utils/createZip.js.map +1 -0
- package/dist/utils/deepCopy.d.ts +32 -0
- package/dist/utils/deepCopy.d.ts.map +1 -0
- package/dist/utils/deepCopy.js +39 -0
- package/dist/utils/deepCopy.js.map +1 -0
- package/dist/utils/deepEqual.d.ts +54 -0
- package/dist/utils/deepEqual.d.ts.map +1 -0
- package/dist/utils/deepEqual.js +72 -1
- package/dist/utils/deepEqual.js.map +1 -0
- package/dist/utils/error.d.ts +45 -0
- package/dist/utils/error.d.ts.map +1 -0
- package/dist/utils/error.js +42 -0
- package/dist/utils/error.js.map +1 -0
- package/dist/utils/export.d.ts +13 -0
- package/dist/utils/export.d.ts.map +1 -0
- package/dist/utils/export.js +1 -0
- package/dist/utils/export.js.map +1 -0
- package/dist/utils/format.d.ts +53 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +49 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/hex.d.ts +89 -0
- package/dist/utils/hex.d.ts.map +1 -0
- package/dist/utils/hex.js +124 -0
- package/dist/utils/hex.js.map +1 -0
- package/dist/utils/inspector.d.ts +87 -0
- package/dist/utils/inspector.d.ts.map +1 -0
- package/dist/utils/inspector.js +69 -1
- package/dist/utils/inspector.js.map +1 -0
- package/dist/utils/isvalid.d.ts +103 -0
- package/dist/utils/isvalid.d.ts.map +1 -0
- package/dist/utils/isvalid.js +101 -0
- package/dist/utils/isvalid.js.map +1 -0
- package/dist/utils/network.d.ts +111 -0
- package/dist/utils/network.d.ts.map +1 -0
- package/dist/utils/network.js +96 -5
- package/dist/utils/network.js.map +1 -0
- package/dist/utils/spawn.d.ts +33 -0
- package/dist/utils/spawn.d.ts.map +1 -0
- package/dist/utils/spawn.js +71 -1
- package/dist/utils/spawn.js.map +1 -0
- package/dist/utils/tracker.d.ts +108 -0
- package/dist/utils/tracker.d.ts.map +1 -0
- package/dist/utils/tracker.js +64 -1
- package/dist/utils/tracker.js.map +1 -0
- package/dist/utils/wait.d.ts +54 -0
- package/dist/utils/wait.d.ts.map +1 -0
- package/dist/utils/wait.js +60 -8
- package/dist/utils/wait.js.map +1 -0
- package/dist/workerGlobalPrefix.d.ts +25 -0
- package/dist/workerGlobalPrefix.d.ts.map +1 -0
- package/dist/workerGlobalPrefix.js +37 -5
- package/dist/workerGlobalPrefix.js.map +1 -0
- package/dist/workerTypes.d.ts +52 -0
- package/dist/workerTypes.d.ts.map +1 -0
- package/dist/workerTypes.js +24 -0
- package/dist/workerTypes.js.map +1 -0
- package/dist/workers.d.ts +69 -0
- package/dist/workers.d.ts.map +1 -0
- package/dist/workers.js +68 -4
- package/dist/workers.js.map +1 -0
- package/npm-shrinkwrap.json +2 -2
- package/package.json +2 -1
- package/scripts/data_model.mjs +2058 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dgram.d.ts","sourceRoot":"","sources":["../../src/dgram/dgram.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,YAAY,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAIvC,OAAO,EAAE,UAAU,EAAoD,MAAM,kBAAkB,CAAC;AAEhG;;GAEG;AACH,UAAU,WAAW;IACnB,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACtB,KAAK,EAAE,EAAE,CAAC;IACV,OAAO,EAAE,EAAE,CAAC;IACZ,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAChD,SAAS,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAClC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC/D,KAAK,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC9B,KAAK,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;CAC/B;AAED;;GAEG;AACH,qBAAa,KAAM,SAAQ,YAAY,CAAC,WAAW,CAAC;IAClD,GAAG,aAAC;IACJ,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;IACrB,KAAK,UAAS;IACd,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;;;;;OAQG;gBACS,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,GAAE,OAAO,GAAG,SAAgB,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM;IA0C/I;;;;;;OAMG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAc3D,OAAO,CAAC,KAAK,EAAE,KAAK;IAIpB,OAAO;IAIP,SAAS;IAIT,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAI7D,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU;IAI9C,WAAW,CAAC,OAAO,EAAE,WAAW;IAKhC,OAAO,CAAC,OAAO,EAAE,WAAW;IAK5B;;;;;;;OAOG;IACH,uBAAuB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAwCtE;;;;;;;OAOG;IACH,uBAAuB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IA0DtE;;;;OAIG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAW9B;;;;;OAKG;IACH,cAAc,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM;IAe9C;;;;;OAKG;IACH,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAchE;;;;;OAKG;IACH,UAAU,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAkBxD;;;;;;OAMG;IACH,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS;IAUvG;;;;OAIG;IACH,uBAAuB,IAAI,MAAM;IAIjC;;OAEG;IACH,qBAAqB;CAYtB"}
|
package/dist/dgram/dgram.js
CHANGED
|
@@ -1,7 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description This file contains the class Dgram.
|
|
3
|
+
* @file dgram.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
|
+
// Node.js imports
|
|
1
24
|
import dgram from 'node:dgram';
|
|
2
25
|
import EventEmitter from 'node:events';
|
|
3
26
|
import os from 'node:os';
|
|
27
|
+
// AnsiLogger imports
|
|
4
28
|
import { AnsiLogger, BLUE, db, idn, nf, rs } from 'node-ansi-logger';
|
|
29
|
+
/**
|
|
30
|
+
* This class implements a dgram socket.
|
|
31
|
+
*/
|
|
5
32
|
export class Dgram extends EventEmitter {
|
|
6
33
|
log;
|
|
7
34
|
socket;
|
|
@@ -10,9 +37,18 @@ export class Dgram extends EventEmitter {
|
|
|
10
37
|
interfaceName;
|
|
11
38
|
interfaceAddress;
|
|
12
39
|
interfaceNetmask;
|
|
40
|
+
/**
|
|
41
|
+
* Creates an instance of Dgram.
|
|
42
|
+
*
|
|
43
|
+
* @param {string} name - The name of the socket.
|
|
44
|
+
* @param {'udp4' | 'udp6'} socketType - The type of the socket (IPv4 or IPv6).
|
|
45
|
+
* @param {boolean | undefined} reuseAddr - Whether to allow address reuse.
|
|
46
|
+
* @param {string} [interfaceName] - The name of the network interface to bind to.
|
|
47
|
+
* @param {string} [interfaceAddress] - The address of the network interface to bind to.
|
|
48
|
+
*/
|
|
13
49
|
constructor(name, socketType, reuseAddr = true, interfaceName, interfaceAddress) {
|
|
14
50
|
super();
|
|
15
|
-
this.log = new AnsiLogger({ logName: name, logTimestampFormat: 4
|
|
51
|
+
this.log = new AnsiLogger({ logName: name, logTimestampFormat: 4 /* TimestampFormat.TIME_MILLIS */, logLevel: "debug" /* LogLevel.DEBUG */ });
|
|
16
52
|
this.socket = dgram.createSocket({ type: socketType, reuseAddr });
|
|
17
53
|
this.socketType = socketType;
|
|
18
54
|
this.interfaceName = interfaceName;
|
|
@@ -46,6 +82,13 @@ export class Dgram extends EventEmitter {
|
|
|
46
82
|
this.onListening(address);
|
|
47
83
|
});
|
|
48
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Sends a message to the specified server.
|
|
87
|
+
*
|
|
88
|
+
* @param {Buffer} msg - The message buffer to send.
|
|
89
|
+
* @param {string} serverAddress - The IPv4 address of the destination server.
|
|
90
|
+
* @param {number} serverPort - The port of the destination server.
|
|
91
|
+
*/
|
|
49
92
|
send(msg, serverAddress, serverPort) {
|
|
50
93
|
this.socket.send(msg, 0, msg.length, serverPort, serverAddress, (error) => {
|
|
51
94
|
if (error) {
|
|
@@ -83,18 +126,30 @@ export class Dgram extends EventEmitter {
|
|
|
83
126
|
this.log.info(`Socket ready on ${BLUE}${address.family}${nf} ${BLUE}${address.address}${nf}:${BLUE}${address.port}${nf}`);
|
|
84
127
|
this.emit('ready', address);
|
|
85
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* Retrieves the IPv4 address of the specified network interface or the first external IPv4 interface if no interface is specified.
|
|
131
|
+
* Throws an error if no suitable interface or address is found.
|
|
132
|
+
*
|
|
133
|
+
* @param {string} networkInterface - The name of the network interface to retrieve the IPv4 address from. If not specified, the first external IPv4 interface will be used.
|
|
134
|
+
* @returns {string | undefined} The IPv4 address of the specified network interface or the first external IPv4 interface.
|
|
135
|
+
* @throws {Error} if no suitable interface or address is found.
|
|
136
|
+
*/
|
|
86
137
|
getIpv4InterfaceAddress(networkInterface) {
|
|
138
|
+
// Normalize the interface name: treat an empty string as undefined.
|
|
87
139
|
if (networkInterface === '')
|
|
88
140
|
networkInterface = undefined;
|
|
89
141
|
const interfaces = os.networkInterfaces();
|
|
142
|
+
// If a specific interface is provided but not found, warn and fall back.
|
|
90
143
|
if (networkInterface && !interfaces[networkInterface]) {
|
|
91
144
|
this.log.warn(`Interface "${networkInterface}" not found. Using first external IPv4 interface.`);
|
|
92
145
|
networkInterface = undefined;
|
|
93
146
|
}
|
|
147
|
+
// If no interface was specified or the provided one doesn't exist, find the first external IPv4 interface.
|
|
94
148
|
if (!networkInterface) {
|
|
95
149
|
for (const [interfaceName, interfaceDetails] of Object.entries(interfaces)) {
|
|
96
150
|
if (!interfaceDetails)
|
|
97
151
|
continue;
|
|
152
|
+
// Check if at least one external IPv4 address exists on this interface.
|
|
98
153
|
for (const detail of interfaceDetails) {
|
|
99
154
|
if (detail.family === 'IPv4' && !detail.internal) {
|
|
100
155
|
networkInterface = interfaceName;
|
|
@@ -108,6 +163,7 @@ export class Dgram extends EventEmitter {
|
|
|
108
163
|
if (!networkInterface) {
|
|
109
164
|
throw new Error(`Didn't find an external IPv4 network interface`);
|
|
110
165
|
}
|
|
166
|
+
// Select the first external IPv4 address from the interface.
|
|
111
167
|
const addresses = interfaces[networkInterface];
|
|
112
168
|
const ipv4Address = addresses?.find((addr) => addr.family === 'IPv4' && !addr.internal);
|
|
113
169
|
if (!ipv4Address) {
|
|
@@ -115,14 +171,25 @@ export class Dgram extends EventEmitter {
|
|
|
115
171
|
}
|
|
116
172
|
return ipv4Address.address;
|
|
117
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* Retrieves the IPv6 address of the specified network interface or the first external IPv6 interface if no interface is specified.
|
|
176
|
+
* Throws an error if no suitable interface or address is found.
|
|
177
|
+
*
|
|
178
|
+
* @param {string} [networkInterface] - The name of the network interface to retrieve the IPv6 address from. If not specified, the first external IPv6 interface will be used.
|
|
179
|
+
* @returns {string | undefined} The IPv6 address of the specified network interface or the first external IPv6 interface.
|
|
180
|
+
* @throws {Error} If no suitable interface or address is found.
|
|
181
|
+
*/
|
|
118
182
|
getIpv6InterfaceAddress(networkInterface) {
|
|
183
|
+
// Normalize the interface name: treat an empty string as undefined.
|
|
119
184
|
if (networkInterface === '')
|
|
120
185
|
networkInterface = undefined;
|
|
121
186
|
const interfaces = os.networkInterfaces();
|
|
187
|
+
// If a specific interface is provided, verify it exists. Otherwise, warn and use the first external IPv6 interface.
|
|
122
188
|
if (networkInterface && !interfaces[networkInterface]) {
|
|
123
189
|
this.log.warn(`Interface "${networkInterface}" not found. Using first external IPv6 interface.`);
|
|
124
190
|
networkInterface = undefined;
|
|
125
191
|
}
|
|
192
|
+
// If no network interface was specified, search for the first external IPv6 interface.
|
|
126
193
|
if (!networkInterface) {
|
|
127
194
|
for (const [interfaceName, interfaceDetails] of Object.entries(interfaces)) {
|
|
128
195
|
if (!interfaceDetails)
|
|
@@ -141,18 +208,21 @@ export class Dgram extends EventEmitter {
|
|
|
141
208
|
throw new Error(`Didn't find an external IPv6 network interface`);
|
|
142
209
|
}
|
|
143
210
|
const addresses = interfaces[networkInterface];
|
|
211
|
+
// Try to find a link-local address and use scopeid
|
|
144
212
|
const linkLocalAddress = addresses?.find((addr) => addr.family === 'IPv6' && !addr.internal && addr.address.startsWith('fe80'));
|
|
145
213
|
if (linkLocalAddress) {
|
|
146
214
|
this.log.debug('Found IPv6 link-local address');
|
|
147
215
|
return linkLocalAddress.scopeid ? `${linkLocalAddress.address}%${process.platform !== 'win32' ? networkInterface : linkLocalAddress.scopeid}` : linkLocalAddress.address;
|
|
148
216
|
}
|
|
149
217
|
this.log.debug('No IPv6 link-local address found');
|
|
218
|
+
// Try to find a unique local address
|
|
150
219
|
const ulaAddress = addresses?.find((addr) => addr.family === 'IPv6' && !addr.internal && addr.address.startsWith('fd') && addr.netmask === 'ffff:ffff:ffff:ffff::');
|
|
151
220
|
if (ulaAddress) {
|
|
152
221
|
this.log.debug('Found IPv6 Unique Local Addresses (ULA) unicast address');
|
|
153
222
|
return ulaAddress.address;
|
|
154
223
|
}
|
|
155
224
|
this.log.debug('No IPv6 Unique Local Addresses (ULA) unicast address found');
|
|
225
|
+
// Try to find a unique local address
|
|
156
226
|
const uniqueLocalAddress = addresses?.find((addr) => addr.family === 'IPv6' && !addr.internal && addr.address.startsWith('fd'));
|
|
157
227
|
if (uniqueLocalAddress) {
|
|
158
228
|
this.log.debug('Found IPv6 Unique Local Addresses (ULA) address');
|
|
@@ -161,6 +231,11 @@ export class Dgram extends EventEmitter {
|
|
|
161
231
|
this.log.debug('No IPv6 Unique Local Addresses (ULA) address found');
|
|
162
232
|
throw new Error(`Interface ${networkInterface} does not have a suitable external IPv6 address`);
|
|
163
233
|
}
|
|
234
|
+
/**
|
|
235
|
+
* Retrieves the names of all available network interfaces.
|
|
236
|
+
*
|
|
237
|
+
* @returns {string[]} An array of network interface names.
|
|
238
|
+
*/
|
|
164
239
|
getInterfacesNames() {
|
|
165
240
|
const interfaces = os.networkInterfaces();
|
|
166
241
|
const interfaceNames = [];
|
|
@@ -171,6 +246,12 @@ export class Dgram extends EventEmitter {
|
|
|
171
246
|
}
|
|
172
247
|
return interfaceNames;
|
|
173
248
|
}
|
|
249
|
+
/**
|
|
250
|
+
* Retrieves the scope ID of the first found IPv6 address on the specified network interface or on any interface if none is specified.
|
|
251
|
+
*
|
|
252
|
+
* @param {string} [interfaceName] - The name of the network interface. If not provided, the first found IPv6 address will be used.
|
|
253
|
+
* @returns {string} The scope ID of the first found IPv6 address or an empty string.
|
|
254
|
+
*/
|
|
174
255
|
getIpv6ScopeId(interfaceName) {
|
|
175
256
|
const interfaces = os.networkInterfaces();
|
|
176
257
|
for (const name in interfaces) {
|
|
@@ -180,17 +261,24 @@ export class Dgram extends EventEmitter {
|
|
|
180
261
|
if (iface) {
|
|
181
262
|
const ipv6Address = iface.find((addr) => addr.family === 'IPv6' && !addr.internal && addr.scopeid);
|
|
182
263
|
if (ipv6Address) {
|
|
183
|
-
return process.platform === 'win32' ? '%' + String(ipv6Address.scopeid) : '%' + name;
|
|
264
|
+
return process.platform === 'win32' ? '%' + String(ipv6Address.scopeid) : '%' + name; // Use the scope ID for Windows, or the interface name for non-Windows platforms
|
|
184
265
|
}
|
|
185
266
|
}
|
|
186
267
|
}
|
|
187
268
|
return '';
|
|
188
269
|
}
|
|
270
|
+
/**
|
|
271
|
+
* Retrieves the interface name from the scope id of an IPv6 address.
|
|
272
|
+
*
|
|
273
|
+
* @param {number} scopeId - The scope id of the IPv6 address.
|
|
274
|
+
* @returns {string | undefined} The interface name or undefined if not found.
|
|
275
|
+
*/
|
|
189
276
|
getInterfaceNameFromScopeId(scopeId) {
|
|
190
277
|
const nets = os.networkInterfaces();
|
|
191
278
|
for (const ifaceName in nets) {
|
|
192
279
|
const addresses = nets[ifaceName] || [];
|
|
193
280
|
for (const addr of addresses) {
|
|
281
|
+
// Check for IPv6 addresses with a matching scope id.
|
|
194
282
|
if (addr.family === 'IPv6' && addr.scopeid === scopeId) {
|
|
195
283
|
return ifaceName;
|
|
196
284
|
}
|
|
@@ -198,8 +286,16 @@ export class Dgram extends EventEmitter {
|
|
|
198
286
|
}
|
|
199
287
|
return undefined;
|
|
200
288
|
}
|
|
289
|
+
/**
|
|
290
|
+
* Retrieves the netmask of the specified interface address.
|
|
291
|
+
*
|
|
292
|
+
* @param {string} interfaceAddress - The interface address for which to retrieve the netmask.
|
|
293
|
+
* @returns {string | undefined} The netmask of the specified interface address or undefined if not found.
|
|
294
|
+
*/
|
|
201
295
|
getNetmask(interfaceAddress) {
|
|
296
|
+
// Remove zone index if present (e.g. for IPv6 "fe80::1%eth0")
|
|
202
297
|
const cleanedAddress = interfaceAddress.includes('%') ? interfaceAddress.split('%')[0] : interfaceAddress;
|
|
298
|
+
// Iterate over all interfaces.
|
|
203
299
|
const nets = os.networkInterfaces();
|
|
204
300
|
for (const ifaceName in nets) {
|
|
205
301
|
const ifaceAddresses = nets[ifaceName];
|
|
@@ -213,6 +309,13 @@ export class Dgram extends EventEmitter {
|
|
|
213
309
|
}
|
|
214
310
|
return undefined;
|
|
215
311
|
}
|
|
312
|
+
/**
|
|
313
|
+
* Computes the broadcast address given an IPv4 address and netmask.
|
|
314
|
+
*
|
|
315
|
+
* @param {string | undefined} [ipAddress] - The IPv4 address e.g. "192.168.1.20"
|
|
316
|
+
* @param {string | undefined} [netmask] - The IPv4 netmask e.g. "255.255.255.0"
|
|
317
|
+
* @returns {string | undefined} The computed broadcast address, e.g. "192.168.1.255"
|
|
318
|
+
*/
|
|
216
319
|
getIpv4BroadcastAddress(ipAddress, netmask) {
|
|
217
320
|
if (!ipAddress || !netmask) {
|
|
218
321
|
return undefined;
|
|
@@ -222,9 +325,17 @@ export class Dgram extends EventEmitter {
|
|
|
222
325
|
const broadcastParts = ipParts.map((octet, i) => (octet & maskParts[i]) | (255 - maskParts[i]));
|
|
223
326
|
return broadcastParts.join('.');
|
|
224
327
|
}
|
|
328
|
+
/**
|
|
329
|
+
* Returns the broadcast IPv6 address.
|
|
330
|
+
*
|
|
331
|
+
* @returns {string} The broadcast IPv6 address, e.g. "ff02::1"
|
|
332
|
+
*/
|
|
225
333
|
getIpv6BroadcastAddress() {
|
|
226
334
|
return 'ff02::1';
|
|
227
335
|
}
|
|
336
|
+
/**
|
|
337
|
+
* Logs all available network interfaces and their details.
|
|
338
|
+
*/
|
|
228
339
|
listNetworkInterfaces() {
|
|
229
340
|
const interfaces = os.networkInterfaces();
|
|
230
341
|
for (const [name, addresses] of Object.entries(interfaces)) {
|
|
@@ -237,3 +348,4 @@ export class Dgram extends EventEmitter {
|
|
|
237
348
|
}
|
|
238
349
|
}
|
|
239
350
|
}
|
|
351
|
+
//# sourceMappingURL=dgram.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dgram.js","sourceRoot":"","sources":["../../src/dgram/dgram.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description This file contains the bin mb_coap for the class Coap.
|
|
3
|
+
* @file src/dgram/mb_coap.ts
|
|
4
|
+
* @author Luca Liguori
|
|
5
|
+
* @created 2025-07-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
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=mb_coap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mb_coap.d.ts","sourceRoot":"","sources":["../../src/dgram/mb_coap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG"}
|
package/dist/dgram/mb_coap.js
CHANGED
|
@@ -1,28 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description This file contains the bin mb_coap for the class Coap.
|
|
3
|
+
* @file src/dgram/mb_coap.ts
|
|
4
|
+
* @author Luca Liguori
|
|
5
|
+
* @created 2025-07-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
|
+
// Net imports
|
|
1
24
|
import { COAP_MULTICAST_IPV4_ADDRESS, COAP_MULTICAST_IPV6_ADDRESS, COAP_MULTICAST_PORT } from './multicast.js';
|
|
2
25
|
import { Coap, COAP_OPTION_URI_PATH } from './coap.js';
|
|
26
|
+
// istanbul ignore next
|
|
3
27
|
{
|
|
4
28
|
const coapIpv4 = new Coap('CoAP Server udp4', COAP_MULTICAST_IPV4_ADDRESS, COAP_MULTICAST_PORT, 'udp4', true);
|
|
5
29
|
const coapIpv6 = new Coap('CoAP Server udp6', COAP_MULTICAST_IPV6_ADDRESS, COAP_MULTICAST_PORT, 'udp6', true);
|
|
6
30
|
coapIpv4.listNetworkInterfaces();
|
|
31
|
+
/**
|
|
32
|
+
* Cleanup and log device information before exiting.
|
|
33
|
+
*/
|
|
7
34
|
function cleanupAndLogAndExit() {
|
|
8
35
|
if (process.argv.includes('--coap-udp4'))
|
|
9
36
|
coapIpv4.stop();
|
|
10
37
|
if (process.argv.includes('--coap-udp6'))
|
|
11
38
|
coapIpv6.stop();
|
|
39
|
+
// eslint-disable-next-line n/no-process-exit
|
|
12
40
|
process.exit(0);
|
|
13
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Queries mDNS services over UDP IPv4 and sends a response for a specific service instance.
|
|
44
|
+
* This function sends a query for Shelly, HTTP, and services, and responds with the appropriate PTR records.
|
|
45
|
+
*/
|
|
14
46
|
const requestUdp4 = () => {
|
|
15
47
|
coapIpv4.sendRequest(32000, [
|
|
16
48
|
{ number: COAP_OPTION_URI_PATH, value: Buffer.from('cit') },
|
|
17
49
|
{ number: COAP_OPTION_URI_PATH, value: Buffer.from('d') },
|
|
18
50
|
], {}, undefined, COAP_MULTICAST_IPV4_ADDRESS, COAP_MULTICAST_PORT);
|
|
19
51
|
};
|
|
52
|
+
/**
|
|
53
|
+
* Queries mDNS services over UDP IPv4 and sends a response for a specific service instance.
|
|
54
|
+
* This function sends a query for Shelly, HTTP, and services, and responds with the appropriate PTR records.
|
|
55
|
+
*/
|
|
20
56
|
const requestUdp6 = () => {
|
|
21
57
|
coapIpv6.sendRequest(32000, [
|
|
22
58
|
{ number: COAP_OPTION_URI_PATH, value: Buffer.from('cit') },
|
|
23
59
|
{ number: COAP_OPTION_URI_PATH, value: Buffer.from('d') },
|
|
24
60
|
], {}, undefined, COAP_MULTICAST_IPV6_ADDRESS, COAP_MULTICAST_PORT);
|
|
25
61
|
};
|
|
62
|
+
// Handle Ctrl+C (SIGINT) to stop and log devices
|
|
26
63
|
process.on('SIGINT', () => {
|
|
27
64
|
cleanupAndLogAndExit();
|
|
28
65
|
});
|
|
@@ -30,7 +67,7 @@ import { Coap, COAP_OPTION_URI_PATH } from './coap.js';
|
|
|
30
67
|
coapIpv4.on('ready', (address) => {
|
|
31
68
|
coapIpv4.log.info(`coapIpv4 server ready on ${address.family} ${address.address}:${address.port}`);
|
|
32
69
|
if (!process.argv.includes('--coap-request'))
|
|
33
|
-
return;
|
|
70
|
+
return; // Skip querying if --coap-request is not specified
|
|
34
71
|
requestUdp4();
|
|
35
72
|
setInterval(() => {
|
|
36
73
|
requestUdp4();
|
|
@@ -40,7 +77,7 @@ import { Coap, COAP_OPTION_URI_PATH } from './coap.js';
|
|
|
40
77
|
coapIpv6.on('ready', (address) => {
|
|
41
78
|
coapIpv6.log.info(`coapIpv6 server ready on ${address.family} ${address.address}:${address.port}`);
|
|
42
79
|
if (!process.argv.includes('--coap-request'))
|
|
43
|
-
return;
|
|
80
|
+
return; // Skip querying if --coap-request is not specified
|
|
44
81
|
requestUdp6();
|
|
45
82
|
setInterval(() => {
|
|
46
83
|
requestUdp6();
|
|
@@ -48,5 +85,6 @@ import { Coap, COAP_OPTION_URI_PATH } from './coap.js';
|
|
|
48
85
|
});
|
|
49
86
|
setTimeout(() => {
|
|
50
87
|
cleanupAndLogAndExit();
|
|
51
|
-
}, 600000);
|
|
88
|
+
}, 600000); // 10 minutes timeout to exit if no activity
|
|
52
89
|
}
|
|
90
|
+
//# sourceMappingURL=mb_coap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mb_coap.js","sourceRoot":"","sources":["../../src/dgram/mb_coap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description This file contains the bin mb_mdns for the class Mdns.
|
|
3
|
+
* @file src/dgram/mb_mdns.ts
|
|
4
|
+
* @author Luca Liguori
|
|
5
|
+
* @created 2025-07-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
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=mb_mdns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mb_mdns.d.ts","sourceRoot":"","sources":["../../src/dgram/mb_mdns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG"}
|
package/dist/dgram/mb_mdns.js
CHANGED
|
@@ -1,8 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description This file contains the bin mb_mdns for the class Mdns.
|
|
3
|
+
* @file src/dgram/mb_mdns.ts
|
|
4
|
+
* @author Luca Liguori
|
|
5
|
+
* @created 2025-07-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
|
+
// Matterbridge
|
|
1
24
|
import { getParameter, getStringArrayParameter, hasParameter } from '../utils/commandLine.js';
|
|
25
|
+
// Net imports
|
|
2
26
|
import { MDNS_MULTICAST_IPV4_ADDRESS, MDNS_MULTICAST_IPV6_ADDRESS, MDNS_MULTICAST_PORT } from './multicast.js';
|
|
3
27
|
import { Mdns } from './mdns.js';
|
|
28
|
+
// istanbul ignore next
|
|
4
29
|
{
|
|
5
30
|
if (hasParameter('h') || hasParameter('help')) {
|
|
31
|
+
// eslint-disable-next-line no-console
|
|
6
32
|
console.log(`Usage: mb_mdns [options]
|
|
7
33
|
|
|
8
34
|
Options:
|
|
@@ -30,17 +56,18 @@ Examples:
|
|
|
30
56
|
# Query for mDNS devices every 10s on a specific interface
|
|
31
57
|
mb_mdns --interfaceName eth0 --query
|
|
32
58
|
`);
|
|
59
|
+
// eslint-disable-next-line n/no-process-exit
|
|
33
60
|
process.exit(0);
|
|
34
61
|
}
|
|
35
62
|
const mdnsIpv4 = new Mdns('mDNS Server udp4', MDNS_MULTICAST_IPV4_ADDRESS, MDNS_MULTICAST_PORT, 'udp4', true, getParameter('interfaceName'), getParameter('ipv4InterfaceAddress') || '0.0.0.0', getParameter('outgoingIpv4InterfaceAddress'));
|
|
36
63
|
const mdnsIpv6 = new Mdns('mDNS Server udp6', MDNS_MULTICAST_IPV6_ADDRESS, MDNS_MULTICAST_PORT, 'udp6', true, getParameter('interfaceName'), getParameter('ipv6InterfaceAddress') || '::', getParameter('outgoingIpv6InterfaceAddress'));
|
|
37
64
|
if (hasParameter('v') || hasParameter('verbose')) {
|
|
38
|
-
mdnsIpv4.log.logLevel = "debug"
|
|
39
|
-
mdnsIpv6.log.logLevel = "debug"
|
|
65
|
+
mdnsIpv4.log.logLevel = "debug" /* LogLevel.DEBUG */;
|
|
66
|
+
mdnsIpv6.log.logLevel = "debug" /* LogLevel.DEBUG */;
|
|
40
67
|
}
|
|
41
68
|
else {
|
|
42
|
-
mdnsIpv4.log.logLevel = "info"
|
|
43
|
-
mdnsIpv6.log.logLevel = "info"
|
|
69
|
+
mdnsIpv4.log.logLevel = "info" /* LogLevel.INFO */;
|
|
70
|
+
mdnsIpv6.log.logLevel = "info" /* LogLevel.INFO */;
|
|
44
71
|
}
|
|
45
72
|
mdnsIpv4.listNetworkInterfaces();
|
|
46
73
|
const filters = getStringArrayParameter('filter');
|
|
@@ -48,37 +75,56 @@ Examples:
|
|
|
48
75
|
mdnsIpv4.filters.push(...filters);
|
|
49
76
|
mdnsIpv6.filters.push(...filters);
|
|
50
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Cleanup and log device information before exiting.
|
|
80
|
+
*/
|
|
51
81
|
function cleanupAndLogAndExit() {
|
|
52
82
|
mdnsIpv4.stop();
|
|
53
83
|
mdnsIpv6.stop();
|
|
54
84
|
mdnsIpv4.logDevices();
|
|
55
85
|
mdnsIpv6.logDevices();
|
|
86
|
+
// eslint-disable-next-line n/no-process-exit
|
|
56
87
|
process.exit(0);
|
|
57
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Queries mDNS services over UDP IPv4 and sends a response for a specific service instance.
|
|
91
|
+
* This function sends a query for Shelly, HTTP, and services, and responds with the appropriate PTR records.
|
|
92
|
+
*/
|
|
58
93
|
const queryUdp4 = () => {
|
|
59
94
|
mdnsIpv4.sendQuery([
|
|
60
|
-
{ name: '_matter._tcp.local', type: 12
|
|
61
|
-
{ name: '_shelly._tcp.local', type: 12
|
|
62
|
-
{ name: '_http._tcp.local', type: 12
|
|
63
|
-
{ name: '_services._dns-sd._udp.local', type: 12
|
|
95
|
+
{ name: '_matter._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: false },
|
|
96
|
+
{ name: '_shelly._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: false },
|
|
97
|
+
{ name: '_http._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: false },
|
|
98
|
+
{ name: '_services._dns-sd._udp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: false },
|
|
64
99
|
]);
|
|
65
100
|
};
|
|
101
|
+
/**
|
|
102
|
+
* Sends an mDNS advertisement for the HTTP service over UDP IPv4.
|
|
103
|
+
*/
|
|
66
104
|
const advertiseUdp4 = () => {
|
|
67
105
|
const ptrRdata = mdnsIpv4.encodeDnsName('matterbridge._http._tcp.local');
|
|
68
|
-
mdnsIpv4.sendResponse('_http._tcp.local', 12
|
|
106
|
+
mdnsIpv4.sendResponse('_http._tcp.local', 12 /* DnsRecordType.PTR */, 1 /* DnsClass.IN */, 120, ptrRdata);
|
|
69
107
|
};
|
|
108
|
+
/**
|
|
109
|
+
* Queries mDNS services over UDP IPv6 and sends a response for a specific service instance.
|
|
110
|
+
* This function sends a query for Shelly, HTTP, and services, and responds with the appropriate PTR records.
|
|
111
|
+
*/
|
|
70
112
|
const queryUdp6 = () => {
|
|
71
113
|
mdnsIpv6.sendQuery([
|
|
72
|
-
{ name: '_matter._tcp.local', type: 12
|
|
73
|
-
{ name: '_shelly._tcp.local', type: 12
|
|
74
|
-
{ name: '_http._tcp.local', type: 12
|
|
75
|
-
{ name: '_services._dns-sd._udp.local', type: 12
|
|
114
|
+
{ name: '_matter._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
|
|
115
|
+
{ name: '_shelly._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
|
|
116
|
+
{ name: '_http._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
|
|
117
|
+
{ name: '_services._dns-sd._udp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
|
|
76
118
|
]);
|
|
77
119
|
};
|
|
120
|
+
/**
|
|
121
|
+
* Sends an mDNS advertisement for the HTTP service over UDP IPv6.
|
|
122
|
+
*/
|
|
78
123
|
const advertiseUdp6 = () => {
|
|
79
124
|
const ptrRdata = mdnsIpv6.encodeDnsName('matterbridge._http._tcp.local');
|
|
80
|
-
mdnsIpv6.sendResponse('_http._tcp.local', 12
|
|
125
|
+
mdnsIpv6.sendResponse('_http._tcp.local', 12 /* DnsRecordType.PTR */, 1 /* DnsClass.IN */, 120, ptrRdata);
|
|
81
126
|
};
|
|
127
|
+
// Handle Ctrl+C (SIGINT) to stop and log devices
|
|
82
128
|
process.on('SIGINT', () => {
|
|
83
129
|
cleanupAndLogAndExit();
|
|
84
130
|
});
|
|
@@ -116,5 +162,24 @@ Examples:
|
|
|
116
162
|
});
|
|
117
163
|
setTimeout(() => {
|
|
118
164
|
cleanupAndLogAndExit();
|
|
119
|
-
}, 600000);
|
|
165
|
+
}, 600000); // 10 minutes timeout to exit if no activity
|
|
120
166
|
}
|
|
167
|
+
/*
|
|
168
|
+
avahi-browse -pr _matterc._udp for advertise
|
|
169
|
+
avahi-browse -pr _matter._tcp for query
|
|
170
|
+
|
|
171
|
+
avahi-browse -pr _matterc._udp | sed 's/^/[commissioner] /' &
|
|
172
|
+
avahi-browse -pr _matter._tcp | sed 's/^/[device] /' &
|
|
173
|
+
wait
|
|
174
|
+
|
|
175
|
+
for advertise
|
|
176
|
+
sudo tcpdump -i eth0 -nn -s0 udp port 5353 | grep _matterc._udp
|
|
177
|
+
for query
|
|
178
|
+
sudo tcpdump -i eth0 -nn -s0 udp port 5353 | grep _matter._tcp
|
|
179
|
+
for matterbridge
|
|
180
|
+
sudo tcpdump -i eth0 -nn -s0 udp port 5353 | grep matterbridge._http._tcp.local
|
|
181
|
+
|
|
182
|
+
Example (filter commissioner service on specific Wi-Fi interface):
|
|
183
|
+
mb_mdns --interfaceName "Wi-Fi" --filter _matterc._udp
|
|
184
|
+
*/
|
|
185
|
+
//# sourceMappingURL=mb_mdns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mb_mdns.js","sourceRoot":"","sources":["../../src/dgram/mb_mdns.ts"],"names":[],"mappings":"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"}
|