diff --git a/.github/label-commenter-config.yml b/.github/label-commenter-config.yml index efd965b..85052f8 100644 --- a/.github/label-commenter-config.yml +++ b/.github/label-commenter-config.yml @@ -21,7 +21,9 @@ labels: Your plugin is now also eligible to display a *:heart: Donate* button on its tile in the Homebridge UI. See https://github.com/homebridge/homebridge/wiki/Donation-Links for instructions. - If for any reason in the future you can no longer maintain your plugin, please consider transferring it to our [Homebridge Plugins](https://github.com/homebridge-plugins) organization. We can take ownership until another willing developer comes along. + Interested in getting a `@homebridge-plugins/` scope for your plugin? See our [Homebridge Scoped Plugins](https://github.com/homebridge/plugins/wiki/Scoped-Plugins) program. + + If for any reason in the future you can no longer maintain your plugin, please consider transferring it to our [Homebridge Plugins](https://github.com/homebridge-plugins) organization. Don't forget to join the official [Homebridge Discord server](https://discord.gg/A7nCjbz), where plugin developers can get tips and advice from other developers and the Homebridge project team in the #plugin-development channel! diff --git a/.github/workflows/plugin-lists.yml b/.github/workflows/plugin-lists.yml new file mode 100644 index 0000000..16f933e --- /dev/null +++ b/.github/workflows/plugin-lists.yml @@ -0,0 +1,19 @@ +name: Plugin Lists + +on: + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: v22 + - name: Install Dependencies & Build + run: npm install && npm run plugin-lists:build + - name: Plugin Lists + run: npm run plugin-lists:run + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/assets/plugins-v2.min.json b/assets/plugins-v2.min.json index db65736..a664100 100644 --- a/assets/plugins-v2.min.json +++ b/assets/plugins-v2.min.json @@ -1 +1 @@ -{"@0x5e/homebridge-tuya-platform":{"i":"homebridge-tuya-platform","v":1},"@balansse/homebridge-vivint":{"v":1},"@busse/homebridge-pluggit":{"v":1},"@chazepps/homebridge-hejhome":{"i":"homebridge-hejhome","v":1},"@danielgindi/homebridge-bcp-charger":{"v":1},"@dr_chai/homebridge-airthings":{"v":1},"@elshaer/homebridge-hdl-buspro-enhanced":{"i":"homebridge-hdl-buspro-enhanced","v":1},"@hansfriedrich/homebridge-feller-wiser":{"v":1},"@hernas/homebridge-panasonic-heat-pump":{"v":1},"@hernas/homebridge-salus-sq610":{"v":1},"@homebridge-plugins/homebridge-air":{"i":"homebridge-air","m":1,"a":"donavanbecker","v":1},"@homebridge-plugins/homebridge-aladdin-connect":{"i":"homebridge-aladdin-connect","m":1,"a":"derek-miller","v":1},"@homebridge-plugins/homebridge-august":{"i":"homebridge-august","m":1,"a":"donavanbecker","v":1},"@homebridge-plugins/homebridge-camera-ffmpeg":{"i":"homebridge-camera-ffmpeg","m":1,"a":"sunookitsune","v":1},"@homebridge-plugins/homebridge-cloudflared-tunnel":{"i":"homebridge-cloudflared-tunnel","m":1,"a":"donavanbecker","v":1},"@homebridge-plugins/homebridge-ewelink":{"n":"Homebridge eWeLink","i":"homebridge-ewelink","m":1,"a":"bwp91","v":1},"@homebridge-plugins/homebridge-govee":{"i":"homebridge-govee","m":1,"a":"bwp91","v":1},"@homebridge-plugins/homebridge-lutron-caseta-leap":{"i":"homebridge-lutron-caseta-leap","m":1,"a":"thenewwazoo","v":1},"@homebridge-plugins/homebridge-meater":{"i":"homebridge-meater","m":1,"a":"donavanbecker","v":1},"@homebridge-plugins/homebridge-meross":{"i":"homebridge-meross","m":1,"a":"bwp91","v":1},"@homebridge-plugins/homebridge-noip":{"n":"Homebridge No-IP","i":"homebridge-noip","m":1,"a":"donavanbecker","v":1},"@homebridge-plugins/homebridge-plugin-update-check":{"m":1,"a":"sunookitsune","v":1},"@homebridge-plugins/homebridge-rainbird":{"i":"homebridge-rainbird","m":1,"a":"donavanbecker","v":1},"@homebridge-plugins/homebridge-resideo":{"i":"homebridge-resideo","m":1,"a":"donavanbecker","v":1},"@homebridge-plugins/homebridge-roomba":{"i":"homebridge-roomba","m":1,"a":"karlvr","v":1},"@homebridge-plugins/homebridge-smarthq":{"i":"homebridge-smarthq","m":1,"a":"donavanbecker","v":1},"@homebridge-plugins/homebridge-tado":{"i":"homebridge-tado","m":1,"a":"smart7324","v":1},"@homebridge-plugins/homebridge-unifi-network":{"m":1,"a":"derek-miller","v":1},"@homebridge-plugins/homebridge-wattbox":{"m":1,"a":"derek-miller","v":1},"@homebridge-plugins/homebridge-wemo":{"i":"homebridge-wemo","m":1,"a":"bwp91","v":1},"@jdes/homebridge-tost-corp-somfy-rts-web":{"v":1},"@milo526/homebridge-tuya-web":{"v":1},"@o-lukas/homebridge-smartthings-tv":{"v":1},"@ohmantics/homebridge-airmega":{"v":1},"@petro-kushchak/homebridge-homepod-radio":{"i":"homebridge-homepod-radio","v":1},"@pietrolubini/homebridge-ecoflow":{"i":"homebridge-ecoflow","v":1},"@pst-on-npm/homebridge-enocean":{"n":"Homebridge EnOcean","v":1},"@puchupala/homebridge-nature-remo-multi-toggle-light":{"v":1},"@rsauget/homebridge-flexom":{"v":1},"@string-bean/homebridge-drayton-wiser":{"v":1},"@switchbot/homebridge-switchbot":{"i":"homebridge-switchbot","v":1},"@ubreu/homebridge-helios-kwl":{"v":1},"@ubreu/homebridge-ibricks":{"v":1},"@vandubois/homebridge-virtual-switch":{"i":"homebridge-virtual-switch","v":1},"@xenuiswatching/homebridge-hubspace":{"v":1},"homebridge-3em-energy-meter":{"v":1},"homebridge-433-arduino":{"v":1},"homebridge-abode-lights":{"v":1},"homebridge-actron-neo":{"i":"homebridge-actron-neo","v":1},"homebridge-actron-que":{"v":1},"homebridge-adb":{"i":"homebridge-adb","v":1},"homebridge-adguardhome":{"i":"homebridge-adguardhome","v":1},"homebridge-adt-pulse":{"v":1},"homebridge-advanced-timer":{"v":1},"homebridge-aeg-robot":{"i":"homebridge-aeg-robot","v":1},"homebridge-aeg-wellbeing":{"v":1},"homebridge-agile-octopus-rates":{"v":1},"homebridge-air":{"i":"homebridge-air","m":1,"s":{"from":"homebridge-air","to":"@homebridge-plugins/homebridge-air","switch":"1.0.0"},"a":"donavanbecker","v":1},"homebridge-air-q":{"v":1},"homebridge-airconditioner-mitsubishi-au-nz":{"v":1},"homebridge-airport-express-connected":{"i":"homebridge-airport-express-connected","v":1},"homebridge-airthings":{"v":1},"homebridge-airtouch5-platform":{"v":1},"homebridge-airzone-cloud":{"v":1},"homebridge-aladdin-connect-garage-door":{"v":1},"homebridge-aladdinconnect":{"v":1},"homebridge-alexa":{"i":"homebridge-alexa","v":1},"homebridge-alexa-player":{"v":1},"homebridge-alexa-smarthome":{"v":1},"homebridge-alphaess":{"v":1},"homebridge-amazondash-mac":{"v":1},"homebridge-ambiback":{"i":"homebridge-ambiback","v":1},"homebridge-ambient-weather-sensors":{"i":"homebridge-ambient-weather-sensors","v":1},"homebridge-androidtv":{"v":1},"homebridge-anthemreceiver":{"v":1},"homebridge-apc-back-ups-hs500":{"v":1},"homebridge-appletv-enhanced":{"i":"homebridge-appletv-enhanced","v":1},"homebridge-aqara-ir-controller":{"v":1},"homebridge-aqicn":{"v":1},"homebridge-argo":{"v":1},"homebridge-arlo":{"m":1},"homebridge-atomberg-fan":{"v":1},"homebridge-august":{"i":"homebridge-august","m":1,"s":{"from":"homebridge-august","to":"@homebridge-plugins/homebridge-august","switch":"3.0.0"},"a":"donavanbecker","v":1},"homebridge-automower":{"v":1},"homebridge-automower-platform":{"v":1},"homebridge-awair2":{"v":1},"homebridge-away-mode":{"v":1},"homebridge-aws-iot":{"v":1},"homebridge-balboa-spa":{"v":1},"homebridge-batterytender":{"v":1},"homebridge-bed-control":{"v":1},"homebridge-beoplay":{"v":1},"homebridge-better-roku":{"i":"homebridge-better-roku","v":1},"homebridge-blauberg-vento":{"v":1},"homebridge-ble-thermobeacon":{"v":1},"homebridge-blinds":{"v":1},"homebridge-blinds-cmd":{"v":1},"homebridge-blink-for-home":{"v":1},"homebridge-blinkcameras":{"m":1},"homebridge-blueair-purifier":{"i":"homebridge-blueair-purifier","v":1},"homebridge-bold":{"v":1},"homebridge-bold-ble":{"v":1},"homebridge-bond":{"v":1},"homebridge-boschcontrolpanel_bgseries":{"v":1},"homebridge-bravia":{"v":1},"homebridge-bravia-tvos":{"v":1},"homebridge-brewer":{"v":1},"homebridge-broadlink-heater-cooler":{"v":1},"homebridge-browsercam":{"v":1},"homebridge-bthome":{"v":1},"homebridge-button-platform":{"v":1},"homebridge-caddx-interlogix":{"v":1},"homebridge-calendar-scheduler":{"v":1},"homebridge-camera-ffmpeg":{"s":{"from":"homebridge-camera-ffmpeg","to":"@homebridge-plugins/homebridge-camera-ffmpeg","switch":"3.1.4"},"v":1},"homebridge-camera-ui":{"v":1},"homebridge-carrier-infinity":{"v":1},"homebridge-cgd-garage-door":{"v":1},"homebridge-cleanmate":{"v":1},"homebridge-cloudflared-tunnel":{"i":"homebridge-cloudflared-tunnel","m":1,"s":{"from":"homebridge-cloudflared-tunnel","to":"@homebridge-plugins/homebridge-cloudflared-tunnel","switch":"2.0.0"},"a":"donavanbecker","v":1},"homebridge-cmd4-advantageair":{"v":1},"homebridge-comed-hourlypricing":{"i":"homebridge-comed-hourlypricing","v":1},"homebridge-comelit-platform":{"v":1},"homebridge-comelit-sb-platform":{"v":1},"homebridge-comelit-vedo-platform":{"v":1},"homebridge-config-ui":{"h":1},"homebridge-config-ui-rdp":{"h":1},"homebridge-config-ui-x":{"v":1},"homebridge-connectlife-ac":{"v":1},"homebridge-cool-automation":{"i":"homebridge-cool-automation","v":1},"homebridge-coviva-hager":{"v":1},"homebridge-cron-scheduler":{"v":1},"homebridge-cuby":{"v":1},"homebridge-daelim-smarthome":{"v":1},"homebridge-dafang-mqtt-republish":{"v":1},"homebridge-dahua-alarm":{"i":"homebridge-dahua-alarm","v":1},"homebridge-dahua-alerts":{"v":1},"homebridge-daikin-cloud":{"v":1},"homebridge-daikin-local":{"v":1},"homebridge-daikin-local-platform":{"v":1},"homebridge-daikin-oneplus":{"v":1},"homebridge-daikin-smart-ac":{"v":1},"homebridge-daikin-tempsensor-nocloud":{"v":1},"homebridge-davis":{"v":1},"homebridge-deconz":{"i":"homebridge-deconz","v":1},"homebridge-deebot":{"i":"homebridge-deebot","m":1,"v":1},"homebridge-deebotecovacs":{"v":1},"homebridge-delay-switch":{"i":"homebridge-delay-switch","v":1},"homebridge-denon-heos":{"v":1},"homebridge-denon-tv":{"v":1},"homebridge-device-alive":{"v":1},"homebridge-deye":{"v":1},"homebridge-digitalstrom-plugin":{"v":1},"homebridge-dolphin":{"i":"homebridge-dolphin","v":1},"homebridge-doorbird":{"v":1},"homebridge-dreamscreen-rm":{"i":"homebridge-dreamscreen-rm","v":1},"homebridge-dreo":{"i":"homebridge-dreo","v":1},"homebridge-dummy":{"v":1},"homebridge-dune-hd":{"i":"homebridge-dune-hd","v":1},"homebridge-dynamicapi":{"v":1},"homebridge-dyson-bp01":{"i":"homebridge-dyson-bp01","v":1},"homebridge-dyson-pure-cool":{"v":1},"homebridge-easee":{"i":"homebridge-easee","v":1},"homebridge-ecoforest-thermostat":{"i":"homebridge-ecoforest-thermostat","v":1},"homebridge-econet-rheem":{"i":"homebridge-econet-rheem","v":1},"homebridge-ecoplug":{"v":1},"homebridge-ecowitt-weather-sensors":{"i":"homebridge-ecowitt-weather-sensors","v":1},"homebridge-edomoticz":{"v":1},"homebridge-eggtimer-plugin":{"v":1},"homebridge-egreat-androidtv":{"i":"homebridge-egreat-androidtv","v":1},"homebridge-electra-smart":{"i":"homebridge-electra-smart","v":1},"homebridge-electricitymaps":{"v":1},"homebridge-elkm1":{"v":1},"homebridge-eltako-minisafe2":{"v":1},"homebridge-enphase-envoy":{"v":1},"homebridge-enviroindoor":{"v":1},"homebridge-enviroplus":{"v":1},"homebridge-envirourban":{"v":1},"homebridge-envisalink":{"v":1},"homebridge-envisalink-ademco":{"i":"homebridge-envisalink-ademco","v":1},"homebridge-eosstb":{"v":1},"homebridge-eufy-security":{"i":"homebridge-eufy-security","v":1},"homebridge-evohome":{"v":1},"homebridge-ewelink":{"n":"Homebridge eWeLink","i":"homebridge-ewelink","s":{"from":"homebridge-ewelink","to":"@homebridge-plugins/homebridge-ewelink","switch":"12.3.3"},"v":1},"homebridge-exivo":{"v":1},"homebridge-ezviz":{"v":1},"homebridge-fenix-tft-wifi":{"v":1},"homebridge-fhem":{"v":1},"homebridge-fibaro-hc3":{"v":1},"homebridge-fibaro-home-center":{"i":"homebridge-fibaro-home-center","v":1},"homebridge-flair":{"v":1},"homebridge-flobymoen":{"v":1},"homebridge-flume":{"i":"homebridge-flume","m":1,"v":1},"homebridge-fordpass":{"i":"homebridge-fordpass","v":1},"homebridge-foxess":{"v":1},"homebridge-freeathome-local-api":{"v":1},"homebridge-freebox-player-delta":{"v":1},"homebridge-frigidaire-dehumidifier":{"v":1},"homebridge-fritz-platform":{"v":1},"homebridge-ftp-motion":{"v":1},"homebridge-fujitsu-airstage":{"v":1},"homebridge-futurehome":{"i":"homebridge-futurehome","v":1},"homebridge-genie-aladdin-connect":{"s":{"from":"homebridge-genie-aladdin-connect","to":"@homebridge-plugins/homebridge-aladdin-connect","switch":"4.2.1"},"a":"derek-miller","v":1},"homebridge-glances":{"v":1},"homebridge-gogogate2":{"v":1},"homebridge-google-nest-sdm":{"v":1},"homebridge-govee":{"i":"homebridge-govee","s":{"from":"homebridge-govee","to":"@homebridge-plugins/homebridge-govee","switch":"10.15.0"},"v":1},"homebridge-gpio-doorbell":{"v":1},"homebridge-gpio-rgb-ledstrip":{"v":1},"homebridge-gpio-rgbw-ledstrip":{"v":1},"homebridge-gree-ac":{"v":1},"homebridge-green-mountain-grills":{"v":1},"homebridge-grohe-sense":{"v":1},"homebridge-gsh":{"n":"Homebridge Google Smart Home","i":"homebridge-gsh","m":1,"a":"NorthernMan54","v":1},"homebridge-haieracbridge-platform":{"v":1},"homebridge-harmony":{"v":1},"homebridge-hatch-baby-rest":{"v":1},"homebridge-hikconnect":{"v":1},"homebridge-hilo":{"v":1},"homebridge-homeconnect":{"i":"homebridge-homeconnect","v":1},"homebridge-homekit-control":{"i":"homebridge-homekit-control","v":1},"homebridge-homeqtt-alarm":{"v":1},"homebridge-homewizard-energy-socket":{"v":1},"homebridge-homewizard-power-consumption":{"v":1},"homebridge-homeworks":{"v":1},"homebridge-hsd":{"v":1},"homebridge-http-curtain":{"v":1},"homebridge-http-garage-doors":{"i":"homebridge-http-garage-doors","v":1},"homebridge-http-iot":{"v":1},"homebridge-http-json-thermometer":{"v":1},"homebridge-http-leak-sensor":{"v":1},"homebridge-http-sensors-switches":{"i":"homebridge-http-sensors-switches","v":1},"homebridge-hubitat-tonesto7":{"v":1},"homebridge-hubspace":{"v":1},"homebridge-hue":{"i":"homebridge-hue","v":1},"homebridge-hue-daylight-sync":{"v":1},"homebridge-hunter-hydrawise":{"i":"homebridge-hunter-hydrawise","v":1},"homebridge-hyperion-jub":{"v":1},"homebridge-hyundai-bluelink":{"v":1},"homebridge-i6-bigassfans":{"v":1},"homebridge-infinitude-v2":{"v":1},"homebridge-intelliclima":{"i":"homebridge-intelliclima","v":1},"homebridge-intercom-automation-hat":{"v":1},"homebridge-irobot-v2":{"v":1},"homebridge-itho-daalderop":{"v":1},"homebridge-jablotron":{"v":1},"homebridge-jewish-calendar":{"v":1},"homebridge-juicebox":{"v":1},"homebridge-kasa-hub":{"v":1},"homebridge-kasa-python":{"i":"homebridge-kasa-python","v":1},"homebridge-keylights":{"v":1},"homebridge-kiwigrid":{"v":1},"homebridge-kodi":{"i":"homebridge-kodi","v":1},"homebridge-konnected":{"v":1},"homebridge-kumo":{"v":1},"homebridge-lacrosseview":{"n":"Homebridge La Crosse View"},"homebridge-landroid":{"v":1},"homebridge-lay-z-spa":{"v":1},"homebridge-leridian-dynamics":{"i":"homebridge-leridian-dynamics","v":1},"homebridge-level-sense":{"v":1},"homebridge-leviton":{"v":1},"homebridge-levoit-air-purifier":{"v":1},"homebridge-levoit-humidifiers":{"v":1},"homebridge-lg-enervu":{"i":"homebridge-lg-enervu","v":1},"homebridge-lg-thinq":{"v":1},"homebridge-lg-thinq-ac":{"v":1},"homebridge-lgwebos-tv":{"n":"LG webOS TV","v":1},"homebridge-lifx-plugin":{"v":1},"homebridge-lighthouse":{"v":1},"homebridge-lightwaverf":{"v":1},"homebridge-linak":{"v":1},"homebridge-litter-robot-connect":{"v":1},"homebridge-logic-switch":{"v":1},"homebridge-logo-platform":{"v":1},"homebridge-loxone-control":{"i":"homebridge-loxone-control","v":1},"homebridge-loxone-proxy":{"i":"homebridge-loxone-proxy","v":1},"homebridge-lutron-caseta-leap":{"s":{"from":"homebridge-lutron-caseta-leap","to":"@homebridge-plugins/homebridge-lutron-caseta-leap","switch":"2.6.0"},"v":1},"homebridge-luxtronik2":{"v":1},"homebridge-magic-occupancy":{"v":1},"homebridge-magichome-dynamic-platform":{"v":1},"homebridge-meater":{"i":"homebridge-meater","m":1,"s":{"from":"homebridge-meater","to":"@homebridge-plugins/homebridge-meater","switch":"2.0.0"},"a":"donavanbecker","v":1},"homebridge-melcloud-control":{"v":1},"homebridge-meraki-control":{"v":1},"homebridge-mercedesme":{"v":1},"homebridge-meross":{"i":"homebridge-meross","m":1,"s":{"from":"homebridge-meross","to":"@homebridge-plugins/homebridge-meross","switch":"10.8.1"},"v":1},"homebridge-mertik-fireplace":{"v":1},"homebridge-messenger":{"v":1},"homebridge-mhacwifi1-lan":{"v":1},"homebridge-mhi-wfrac":{"i":"homebridge-mhi-wfrac","v":1},"homebridge-mi-humidifier":{"v":1},"homebridge-mi-hygrothermograph":{"v":1},"homebridge-micronova-agua-iot-stove":{"v":1},"homebridge-midea-platform":{"i":"homebridge-midea-platform","v":1},"homebridge-mieleathome":{"v":1},"homebridge-mihomegateway":{"v":1},"homebridge-milighthub-platform":{"v":1},"homebridge-miot":{"v":1},"homebridge-mobilelink":{"v":1},"homebridge-moodo":{"v":1},"homebridge-moonraker":{"v":1},"homebridge-mqtt":{"v":1},"homebridge-mqtt-ceiling-fan-remote":{"v":1},"homebridge-mqtt-tasmota":{"v":1},"homebridge-mqttsmokesensor":{"v":1},"homebridge-mqttthing":{"v":1},"homebridge-multiswitcheroo":{"v":1},"homebridge-music":{"i":"homebridge-music","v":1},"homebridge-musiccast-multiroom":{"v":1},"homebridge-my-wallbox":{"i":"homebridge-my-wallbox","v":1},"homebridge-mylink":{"v":1},"homebridge-myplace":{"v":1},"homebridge-myq":{"v":1},"homebridge-mysmartblinds-bridge":{"v":1},"homebridge-naim-audio":{"v":1},"homebridge-nb":{"i":"homebridge-nb","v":1},"homebridge-neptun-smart":{"v":1},"homebridge-ness-d16x":{"v":1},"homebridge-nest":{"i":"homebridge-nest","v":1},"homebridge-nest-cam":{"i":"homebridge-nest-cam","v":1},"homebridge-network-presence":{"v":1},"homebridge-ngbs-icon-thermostat":{"v":1},"homebridge-node-alarm-dot-com":{"v":1},"homebridge-noip":{"n":"Homebridge No-IP","i":"homebridge-noip","m":1,"s":{"from":"homebridge-noip","to":"@homebridge-plugins/homebridge-noip","switch":"4.0.0"},"a":"donavanbecker","v":1},"homebridge-nordpool-baltics":{"i":"homebridge-nordpool-baltics","v":1},"homebridge-notifyevents":{"v":1},"homebridge-nukiio":{"v":1},"homebridge-nuvo":{"v":1},"homebridge-octoprint-motion":{"v":1},"homebridge-omnik":{"v":1},"homebridge-omnilink-platform":{"i":"homebridge-omnilink-platform","v":1},"homebridge-onstar":{"v":1},"homebridge-open-sesame":{"v":1},"homebridge-openrgb":{"v":1},"homebridge-opensprinkler-api":{"v":1},"homebridge-openwebif-tv":{"v":1},"homebridge-oppo-udp":{"i":"homebridge-oppo-udp","v":1},"homebridge-orbit-irrigation":{"i":"homebridge-orbit-irrigation","v":1},"homebridge-otgw":{"i":"homebridge-otgw","v":1},"homebridge-overda-uranus":{"v":1},"homebridge-owfs":{"v":1},"homebridge-p1":{"i":"homebridge-p1","v":1},"homebridge-palgate":{"i":"homebridge-palgate","v":1},"homebridge-panasonic-ac-platform":{"i":"homebridge-panasonic-ac-platform","v":1},"homebridge-panasonic-miraie-ac-platform":{"v":1},"homebridge-pc-volume":{"v":1},"homebridge-pentair-intellicenter-ai":{"n":"Homebridge Pentair IntelliCenter AI","v":1},"homebridge-pentair-screenlogic":{"v":1},"homebridge-people-pro":{"v":1},"homebridge-petkit-pet-feeder":{"v":1},"homebridge-petkit-platform":{"v":1},"homebridge-petsafe-smart-feed":{"v":1},"homebridge-philips-air":{"v":1},"homebridge-philips-android-tv":{"v":1},"homebridge-philipsair-platform":{"v":1},"homebridge-philipstv-saphitvos":{"v":1},"homebridge-pichler-pkom4":{"v":1},"homebridge-pico":{"v":1},"homebridge-pico-w-bridge":{"v":1},"homebridge-pihole":{"v":1},"homebridge-platform-maxcube":{"v":1},"homebridge-platform-orbit":{"v":1},"homebridge-playstation":{"v":1},"homebridge-playstation-game-title":{"v":1},"homebridge-plex-webhooks":{"v":1},"homebridge-plugin-govee":{"v":1},"homebridge-plugin-update-check":{"s":{"from":"homebridge-plugin-update-check","to":"@homebridge-plugins/homebridge-plugin-update-check","switch":"1.0.2"},"v":1},"homebridge-porsche-taycan":{"i":"homebridge-porsche-taycan","v":1},"homebridge-presence-switch-msgraph":{"v":1},"homebridge-presence-switch-slack":{"v":1},"homebridge-printer":{"v":1},"homebridge-programmable-http-switch":{"v":1},"homebridge-prosegur":{"v":1},"homebridge-prusa-link":{"v":1},"homebridge-purpleair":{"v":1},"homebridge-purpleair-sensor":{"v":1},"homebridge-qolsys":{"v":1},"homebridge-ra2-select":{"v":1},"homebridge-rachio-irrigation":{"i":"homebridge-rachio-irrigation","v":1},"homebridge-rademacher-homepilot":{"v":1},"homebridge-radiora2":{"v":1},"homebridge-rainbird":{"i":"homebridge-rainbird","m":1,"s":{"from":"homebridge-rainbird","to":"@homebridge-plugins/homebridge-rainbird","switch":"3.0.0"},"a":"donavanbecker","v":1},"homebridge-ratgdo":{"i":"homebridge-ratgdo","v":1},"homebridge-red-alert-via-kumta":{"v":1},"homebridge-remootio":{"v":1},"homebridge-resideo":{"i":"homebridge-resideo","m":1,"s":{"from":"homebridge-resideo","to":"@homebridge-plugins/homebridge-resideo","switch":"3.0.0"},"a":"donavanbecker","v":1},"homebridge-rgb-ledstrip":{"v":1},"homebridge-ring":{"i":"homebridge-ring","c":"packages/homebridge-ring/","v":1},"homebridge-rinnai-controlr":{"v":1},"homebridge-rinnai-touch-platform":{"i":"homebridge-rinnai-touch-platform","v":1},"homebridge-robonect":{"i":"homebridge-robonect","v":1},"homebridge-rocket-smart-home-ui":{"h":1},"homebridge-rointe-unofficial":{"v":1},"homebridge-roomba2":{"s":{"from":"homebridge-roomba2","to":"@homebridge-plugins/homebridge-roomba","switch":"1.5.3"},"v":1},"homebridge-roomme":{"v":1},"homebridge-rpi":{"i":"homebridge-rpi","v":1},"homebridge-rpi-rf-switch":{"v":1},"homebridge-samsung-tizen":{"v":1},"homebridge-samsungtv-2014":{"v":1},"homebridge-samsungtvht":{"v":1},"homebridge-saphi-tv":{"v":1},"homebridge-schedule":{"v":1},"homebridge-scout":{"v":1},"homebridge-securitysystem":{"v":1},"homebridge-sensibo-ac":{"i":"homebridge-sensibo-ac","v":1},"homebridge-sensit-tank-monitor":{"v":1},"homebridge-sepsadsecurity":{"v":1},"homebridge-server":{"h":1},"homebridge-sharkiq":{"i":"homebridge-sharkiq","v":1},"homebridge-shelly":{"v":1},"homebridge-shelly-ng":{"v":1},"homebridge-shortcuts-buttons":{"i":"homebridge-shortcuts-buttons","v":1},"homebridge-sht3x":{"v":1},"homebridge-signalk":{"i":"homebridge-signalk","v":1},"homebridge-simplisafe3":{"v":1},"homebridge-sinricpro":{"i":"homebridge-sinricpro","v":1},"homebridge-skybell":{"v":1},"homebridge-sleepme":{"v":1},"homebridge-slide-shutter":{"v":1},"homebridge-sma-home-manager":{"v":1},"homebridge-smart-irrigation":{"v":1},"homebridge-smartcielo":{"v":1},"homebridge-smartdry":{"v":1},"homebridge-smartglass":{"v":1},"homebridge-smarthomeng":{"v":1},"homebridge-smarthq":{"a":"donavanbecker"},"homebridge-smartthings":{"v":1},"homebridge-smartthings-ik":{"v":1},"homebridge-smtp-motion":{"v":1},"homebridge-snowsense":{"i":"homebridge-snowsense","v":1},"homebridge-solaxcloud-api":{"v":1},"homebridge-solis5g-battery":{"v":1},"homebridge-somfy-hotwired":{"v":1},"homebridge-somfy-tahoma-screen":{"v":1},"homebridge-somneo":{"v":1},"homebridge-sonos":{"v":1},"homebridge-sonos-multiroom":{"v":1},"homebridge-sonos-starter-track":{"v":1},"homebridge-sony-audio":{"v":1},"homebridge-sp108e-platform":{"v":1},"homebridge-spanet":{"v":1},"homebridge-spotify-speaker":{"v":1},"homebridge-spruce-irrigation":{"v":1},"homebridge-stagekit":{"v":1},"homebridge-stagg-ekg-plus":{"v":1},"homebridge-star-projector":{"v":1},"homebridge-sternet-smart-lan":{"v":1},"homebridge-subaru":{"v":1},"homebridge-sunsa":{"v":1},"homebridge-switch-button":{"v":1},"homebridge-switchbot-bluetooth-platform":{"v":1},"homebridge-switchbot-for-mac":{"v":1},"homebridge-switchbot-sensor-ble":{"v":1},"homebridge-switcher-platform":{"i":"homebridge-switcher-platform","v":1},"homebridge-tadiran-ac":{"v":1},"homebridge-tado-ac":{"i":"homebridge-tado-ac","v":1},"homebridge-tado-platform":{"i":"homebridge-tado","m":1,"s":{"from":"homebridge-tado-platform","to":"@homebridge-plugins/homebridge-tado","switch":"6.0.14"},"v":1},"homebridge-tapo-camera":{"v":1},"homebridge-tasmota":{"i":"homebridge-tasmota","v":1},"homebridge-tasmota-control":{"v":1},"homebridge-tasmota-zbbridge":{"v":1},"homebridge-tcc":{"i":"homebridge-tcc","v":1},"homebridge-television-universal-control":{"v":1},"homebridge-temperature-sensor-dht":{"v":1},"homebridge-tempo":{"i":"homebridge-tempo","v":1},"homebridge-tempstick":{"v":1},"homebridge-tesla":{"v":1},"homebridge-tesy-heater-v2":{"v":1},"homebridge-texecom-connect":{"v":1},"homebridge-thermobit":{"m":1,"v":1},"homebridge-tibber-price":{"v":1},"homebridge-tibberswitch":{"v":1},"homebridge-tidbyt":{"v":1},"homebridge-tiko":{"i":"homebridge-tiko","v":1},"homebridge-tivo-control":{"v":1},"homebridge-to-hoobs":{"h":1},"homebridge-tovala":{"i":"homebridge-tovala","v":1},"homebridge-tp-link-access-control":{"v":1},"homebridge-tp-link-powerline":{"m":1},"homebridge-tp-link-tapo":{"v":1},"homebridge-tplink-smarthome":{"v":1},"homebridge-ttlock":{"v":1},"homebridge-tuya":{"v":1},"homebridge-tuya-ir":{"v":1},"homebridge-tuya-platform":{"v":1},"homebridge-tuya-platform-talrhvfork":{"v":1},"homebridge-twinkly-plus":{"v":1},"homebridge-uconnect":{"v":1},"homebridge-ueboom":{"v":1},"homebridge-ui":{"h":1},"homebridge-unifi-access":{"i":"homebridge-unifi-access","v":1},"homebridge-unifi-occupancy":{"v":1},"homebridge-unifi-poe-control":{"v":1},"homebridge-unifi-protect":{"i":"homebridge-unifi-protect","v":1},"homebridge-unifi-protect-camera-motion":{"v":1},"homebridge-unifi-smartpower":{"s":{"from":"homebridge-unifi-smartpower","to":"@homebridge-plugins/homebridge-unifi-network","switch":"2.3.0"},"a":"derek-miller","v":1},"homebridge-ups":{"i":"homebridge-ups","v":1},"homebridge-velux":{"i":"homebridge-velux","v":1},"homebridge-velux-active":{"v":1},"homebridge-verisure":{"v":1},"homebridge-vesync-v2":{"v":1},"homebridge-videodoorbell":{"v":1},"homebridge-vieramatic":{"v":1},"homebridge-virtual-accessories":{"i":"homebridge-virtual-accessories","v":1},"homebridge-virtual-device":{"m":1},"homebridge-volvo":{"v":1},"homebridge-washingmachine-pow":{"v":1},"homebridge-wattbox":{"s":{"from":"homebridge-wattbox","to":"@homebridge-plugins/homebridge-wattbox","switch":"3.2.0"},"a":"derek-miller","v":1},"homebridge-wattbox-ip":{"v":1},"homebridge-weather-plus":{"v":1},"homebridge-weatherflow-tempest":{"v":1},"homebridge-webos-tv":{"v":1},"homebridge-website-change-check":{"v":1},"homebridge-wemo":{"i":"homebridge-wemo","m":1,"s":{"from":"homebridge-wemo","to":"@homebridge-plugins/homebridge-wemo","switch":"7.0.0"},"v":1},"homebridge-winix-purifiers":{"v":1},"homebridge-wiser":{"v":1},"homebridge-wiz-lan":{"v":1},"homebridge-wled-ws":{"i":"homebridge-wled-ws","v":1},"homebridge-wol":{"v":1},"homebridge-ws":{"i":"homebridge-ws","v":1},"homebridge-wyze-robovac":{"v":1},"homebridge-wyze-smart-home":{"v":1},"homebridge-xbox-tv":{"v":1},"homebridge-xfinityhome":{"v":1},"homebridge-xiaomi-aqara-ac-cooler":{"v":1},"homebridge-xiaomi-fan":{"v":1},"homebridge-xiaomi-mi-air-purifier":{"v":1},"homebridge-xiaomi-roborock-vacuum":{"v":1},"homebridge-yamaha-receiver":{"i":"homebridge-yamaha-receiver","v":1},"homebridge-yeelighter":{"v":1},"homebridge-yet-another-ping":{"v":1},"homebridge-yindl":{"v":1},"homebridge-yokis-usb":{"v":1},"homebridge-yolink":{"v":1},"homebridge-z2m":{"v":1},"homebridge-zidoo-androidtv":{"i":"homebridge-zidoo-androidtv","v":1},"homebridge-zigbee-nt":{"v":1},"homebridge-zp":{"i":"homebridge-zp","v":1}} \ No newline at end of file +{"@0x5e/homebridge-tuya-platform":{"i":"homebridge-tuya-platform","v":1},"@balansse/homebridge-vivint":{"v":1},"@busse/homebridge-pluggit":{"v":1},"@chazepps/homebridge-hejhome":{"i":"homebridge-hejhome","v":1},"@danielgindi/homebridge-bcp-charger":{"v":1},"@dr_chai/homebridge-airthings":{"v":1},"@elshaer/homebridge-hdl-buspro-enhanced":{"i":"homebridge-hdl-buspro-enhanced","v":1},"@hansfriedrich/homebridge-feller-wiser":{"v":1},"@hernas/homebridge-panasonic-heat-pump":{"v":1},"@hernas/homebridge-salus-sq610":{"v":1},"@homebridge-plugins/homebridge-air":{"i":"homebridge-air","m":1,"a":"donavanbecker","v":1},"@homebridge-plugins/homebridge-aladdin-connect":{"i":"homebridge-aladdin-connect","m":1,"a":"derek-miller","v":1},"@homebridge-plugins/homebridge-august":{"i":"homebridge-august","m":1,"a":"donavanbecker","v":1},"@homebridge-plugins/homebridge-camera-ffmpeg":{"i":"homebridge-camera-ffmpeg","m":1,"a":"sunookitsune","v":1},"@homebridge-plugins/homebridge-cloudflared-tunnel":{"i":"homebridge-cloudflared-tunnel","m":1,"a":"donavanbecker","v":1},"@homebridge-plugins/homebridge-ecovacs":{"i":"homebridge-ecovacs","m":1,"a":"bwp91","v":1},"@homebridge-plugins/homebridge-ewelink":{"n":"Homebridge eWeLink","i":"homebridge-ewelink","m":1,"a":"bwp91","v":1},"@homebridge-plugins/homebridge-govee":{"i":"homebridge-govee","m":1,"a":"bwp91","v":1},"@homebridge-plugins/homebridge-lutron-caseta-leap":{"i":"homebridge-lutron-caseta-leap","m":1,"a":"thenewwazoo","v":1},"@homebridge-plugins/homebridge-meater":{"i":"homebridge-meater","m":1,"a":"donavanbecker","v":1},"@homebridge-plugins/homebridge-meross":{"i":"homebridge-meross","m":1,"a":"bwp91","v":1},"@homebridge-plugins/homebridge-noip":{"n":"Homebridge No-IP","i":"homebridge-noip","m":1,"a":"donavanbecker","v":1},"@homebridge-plugins/homebridge-plugin-update-check":{"m":1,"a":"sunookitsune","v":1},"@homebridge-plugins/homebridge-rainbird":{"i":"homebridge-rainbird","m":1,"a":"donavanbecker","v":1},"@homebridge-plugins/homebridge-resideo":{"i":"homebridge-resideo","m":1,"a":"donavanbecker","v":1},"@homebridge-plugins/homebridge-roomba":{"i":"homebridge-roomba","m":1,"a":"karlvr","v":1},"@homebridge-plugins/homebridge-sharkiq":{"i":"homebridge-sharkiq","m":1,"v":1},"@homebridge-plugins/homebridge-smarthq":{"i":"homebridge-smarthq","m":1,"a":"donavanbecker","v":1},"@homebridge-plugins/homebridge-tado":{"i":"homebridge-tado","m":1,"a":"smart7324","v":1},"@homebridge-plugins/homebridge-unifi-network":{"m":1,"a":"derek-miller","v":1},"@homebridge-plugins/homebridge-wattbox":{"m":1,"a":"derek-miller","v":1},"@homebridge-plugins/homebridge-wemo":{"i":"homebridge-wemo","m":1,"a":"bwp91","v":1},"@homebridge-pluginshomebridge-sharkiq":{"a":"Bubba8291"},"@jdes/homebridge-tost-corp-somfy-rts-web":{"v":1},"@milo526/homebridge-tuya-web":{"v":1},"@o-lukas/homebridge-smartthings-tv":{"v":1},"@ohmantics/homebridge-airmega":{"v":1},"@petro-kushchak/homebridge-homepod-radio":{"i":"homebridge-homepod-radio","v":1},"@pietrolubini/homebridge-ecoflow":{"i":"homebridge-ecoflow","v":1},"@pst-on-npm/homebridge-enocean":{"n":"Homebridge EnOcean","v":1},"@puchupala/homebridge-nature-remo-multi-toggle-light":{"v":1},"@rsauget/homebridge-flexom":{"v":1},"@string-bean/homebridge-drayton-wiser":{"v":1},"@switchbot/homebridge-switchbot":{"i":"homebridge-switchbot","v":1},"@ubreu/homebridge-helios-kwl":{"v":1},"@ubreu/homebridge-ibricks":{"v":1},"@vandubois/homebridge-virtual-switch":{"i":"homebridge-virtual-switch","v":1},"@xenuiswatching/homebridge-hubspace":{"v":1},"homebridge-3em-energy-meter":{"v":1},"homebridge-433-arduino":{"v":1},"homebridge-abode-lights":{"v":1},"homebridge-actron-neo":{"i":"homebridge-actron-neo","v":1},"homebridge-actron-que":{"v":1},"homebridge-adb":{"i":"homebridge-adb","v":1},"homebridge-adguardhome":{"i":"homebridge-adguardhome","v":1},"homebridge-adt-pulse":{"v":1},"homebridge-advanced-timer":{"v":1},"homebridge-agile-octopus-rates":{"v":1},"homebridge-air":{"m":1,"s":{"from":"homebridge-air","to":"@homebridge-plugins/homebridge-air","switch":"1.0.0"},"v":1},"homebridge-air-q":{"v":1},"homebridge-airconditioner-mitsubishi-au-nz":{"v":1},"homebridge-airport-express-connected":{"i":"homebridge-airport-express-connected","v":1},"homebridge-airthings":{"v":1},"homebridge-airtouch5-platform":{"v":1},"homebridge-airzone-cloud":{"v":1},"homebridge-alexa":{"i":"homebridge-alexa","v":1},"homebridge-alexa-player":{"v":1},"homebridge-alexa-smarthome":{"v":1},"homebridge-alphaess":{"v":1},"homebridge-amazondash-mac":{"v":1},"homebridge-ambiback":{"i":"homebridge-ambiback","v":1},"homebridge-ambient-realtime":{"i":"homebridge-ambient-realtime","v":1},"homebridge-ambient-weather-sensors":{"i":"homebridge-ambient-weather-sensors","v":1},"homebridge-androidtv":{"v":1},"homebridge-anthemreceiver":{"v":1},"homebridge-apc-back-ups-hs500":{"v":1},"homebridge-appletv-enhanced":{"i":"homebridge-appletv-enhanced","v":1},"homebridge-aqara-ir-controller":{"v":1},"homebridge-aqicn":{"v":1},"homebridge-argo":{"v":1},"homebridge-arlo":{"m":1},"homebridge-atomberg-fan":{"v":1},"homebridge-august":{"m":1,"s":{"from":"homebridge-august","to":"@homebridge-plugins/homebridge-august","switch":"3.0.0"},"v":1},"homebridge-automower":{"v":1},"homebridge-automower-platform":{"v":1},"homebridge-awair2":{"v":1},"homebridge-awattar":{"n":"Homebridge aWATTar"},"homebridge-away-mode":{"v":1},"homebridge-aws-iot":{"v":1},"homebridge-balboa-spa":{"v":1},"homebridge-bed-control":{"v":1},"homebridge-beoplay":{"v":1},"homebridge-blaq":{"n":"Homebridge blaQ","i":"homebridge-blaq","v":1},"homebridge-blauberg-vento":{"v":1},"homebridge-ble-thermobeacon":{"v":1},"homebridge-blinds":{"v":1},"homebridge-blinds-cmd":{"v":1},"homebridge-blink-for-home":{"v":1},"homebridge-blinkcameras":{"m":1},"homebridge-blueair-purifier":{"i":"homebridge-blueair-purifier","v":1},"homebridge-bold":{"v":1},"homebridge-bold-ble":{"v":1},"homebridge-bond":{"v":1},"homebridge-bondbridge":{"v":1},"homebridge-boschcontrolpanel_bgseries":{"v":1},"homebridge-bravia":{"v":1},"homebridge-bravia-tvos":{"v":1},"homebridge-brewer":{"v":1},"homebridge-browsercam":{"v":1},"homebridge-bthome":{"v":1},"homebridge-caddx-interlogix":{"v":1},"homebridge-calendar-scheduler":{"v":1},"homebridge-camera-ffmpeg":{"s":{"from":"homebridge-camera-ffmpeg","to":"@homebridge-plugins/homebridge-camera-ffmpeg","switch":"3.1.4"},"v":1},"homebridge-camera-ui":{"v":1},"homebridge-carrier-infinity":{"v":1},"homebridge-cgd-garage-door":{"v":1},"homebridge-cloudflared-tunnel":{"m":1,"s":{"from":"homebridge-cloudflared-tunnel","to":"@homebridge-plugins/homebridge-cloudflared-tunnel","switch":"2.0.0"}},"homebridge-comed-hourlypricing":{"i":"homebridge-comed-hourlypricing","v":1},"homebridge-comelit-platform":{"v":1},"homebridge-comelit-sb-platform":{"v":1},"homebridge-comelit-vedo-platform":{"v":1},"homebridge-config-ui":{"h":1},"homebridge-config-ui-rdp":{"h":1},"homebridge-config-ui-x":{"v":1},"homebridge-connectlife-ac":{"v":1},"homebridge-cool-automation":{"i":"homebridge-cool-automation","v":1},"homebridge-coviva-hager":{"v":1},"homebridge-cron-scheduler":{"v":1},"homebridge-cuby":{"v":1},"homebridge-daelim-smarthome":{"v":1},"homebridge-dafang-mqtt-republish":{"v":1},"homebridge-dahua-alarm":{"i":"homebridge-dahua-alarm","v":1},"homebridge-dahua-alerts":{"v":1},"homebridge-daikin-cloud":{"v":1},"homebridge-daikin-local":{"v":1},"homebridge-daikin-local-platform":{"v":1},"homebridge-daikin-oneplus":{"v":1},"homebridge-daikin-smart-ac":{"v":1},"homebridge-daikin-tempsensor-nocloud":{"v":1},"homebridge-davis":{"v":1},"homebridge-deconz":{"i":"homebridge-deconz","v":1},"homebridge-deebot":{"s":{"from":"homebridge-deebot","to":"@homebridge-plugins/homebridge-ecovacs","switch":"7.0.0"}},"homebridge-deebotecovacs":{"v":1},"homebridge-delay-switch":{"i":"homebridge-delay-switch","v":1},"homebridge-denon-heos":{"v":1},"homebridge-denon-tv":{"v":1},"homebridge-device-alive":{"v":1},"homebridge-deye":{"v":1},"homebridge-digitalstrom-plugin":{"v":1},"homebridge-dolphin":{"i":"homebridge-dolphin","v":1},"homebridge-doorbell-telegram-photo":{"v":1},"homebridge-doorbird":{"v":1},"homebridge-dreamscreen-rm":{"i":"homebridge-dreamscreen-rm","v":1},"homebridge-dreo":{"i":"homebridge-dreo","v":1},"homebridge-dummy":{"i":"homebridge-dummy","v":1},"homebridge-dune-hd":{"i":"homebridge-dune-hd","v":1},"homebridge-dynamicapi":{"v":1},"homebridge-dyson-bp01":{"i":"homebridge-dyson-bp01","v":1},"homebridge-dyson-pure-cool":{"v":1},"homebridge-easee":{"i":"homebridge-easee","v":1},"homebridge-ecoforest-thermostat":{"i":"homebridge-ecoforest-thermostat","v":1},"homebridge-econet-rheem":{"i":"homebridge-econet-rheem","v":1},"homebridge-ecowitt-weather-sensors":{"i":"homebridge-ecowitt-weather-sensors","v":1},"homebridge-edomoticz":{"v":1},"homebridge-eggtimer-plugin":{"v":1},"homebridge-egreat-androidtv":{"i":"homebridge-egreat-androidtv","v":1},"homebridge-electra-smart":{"i":"homebridge-electra-smart","v":1},"homebridge-electricitymaps":{"v":1},"homebridge-elkm1":{"v":1},"homebridge-eltako-minisafe2":{"v":1},"homebridge-enphase-envoy":{"v":1},"homebridge-enviroindoor":{"v":1},"homebridge-enviroplus":{"v":1},"homebridge-envirourban":{"v":1},"homebridge-envisalink":{"v":1},"homebridge-envisalink-ademco":{"i":"homebridge-envisalink-ademco","v":1},"homebridge-eosstb":{"v":1},"homebridge-eufy-security":{"i":"homebridge-eufy-security","v":1},"homebridge-evohome":{"v":1},"homebridge-ewelink":{"s":{"from":"homebridge-ewelink","to":"@homebridge-plugins/homebridge-ewelink","switch":"12.3.3"}},"homebridge-exivo":{"v":1},"homebridge-fhem":{"v":1},"homebridge-fibaro-hc3":{"v":1},"homebridge-fibaro-home-center":{"i":"homebridge-fibaro-home-center","v":1},"homebridge-flair":{"v":1},"homebridge-flobymoen":{"v":1},"homebridge-flume":{"i":"homebridge-flume","m":1,"v":1},"homebridge-fordpass":{"i":"homebridge-fordpass","v":1},"homebridge-foxess":{"v":1},"homebridge-freeathome-local-api":{"v":1},"homebridge-frigidaire-dehumidifier":{"v":1},"homebridge-fritz-platform":{"v":1},"homebridge-ftp-motion":{"v":1},"homebridge-fujitsu-airstage":{"v":1},"homebridge-futurehome":{"i":"homebridge-futurehome","v":1},"homebridge-genie-aladdin-connect":{"s":{"from":"homebridge-genie-aladdin-connect","to":"@homebridge-plugins/homebridge-aladdin-connect","switch":"4.2.1"},"v":1},"homebridge-glances":{"v":1},"homebridge-gogogate2":{"v":1},"homebridge-google-nest-sdm":{"v":1},"homebridge-govee":{"s":{"from":"homebridge-govee","to":"@homebridge-plugins/homebridge-govee","switch":"10.15.0"}},"homebridge-gpio-doorbell":{"v":1},"homebridge-gpio-rgb-ledstrip":{"v":1},"homebridge-gpio-rgbw-ledstrip":{"v":1},"homebridge-gree-ac":{"v":1},"homebridge-green-mountain-grills":{"v":1},"homebridge-grohe-sense":{"v":1},"homebridge-gsh":{"n":"Homebridge Google Smart Home","i":"homebridge-gsh","m":1,"a":"NorthernMan54","v":1},"homebridge-haieracbridge-platform":{"v":1},"homebridge-harmony":{"v":1},"homebridge-hatch-baby-rest":{"v":1},"homebridge-hikconnect":{"v":1},"homebridge-hilo":{"v":1},"homebridge-homeconnect":{"i":"homebridge-homeconnect","v":1},"homebridge-homekit-control":{"i":"homebridge-homekit-control","v":1},"homebridge-homewizard-energy-socket":{"v":1},"homebridge-homewizard-power-consumption":{"v":1},"homebridge-homeworks":{"v":1},"homebridge-hsd":{"v":1},"homebridge-http-curtain":{"v":1},"homebridge-http-garage-doors":{"i":"homebridge-http-garage-doors","v":1},"homebridge-http-json-thermometer":{"v":1},"homebridge-http-leak-sensor":{"v":1},"homebridge-http-sensors-switches":{"i":"homebridge-http-sensors-switches","v":1},"homebridge-hubitat-tonesto7":{"v":1},"homebridge-hubspace":{"v":1},"homebridge-hue":{"i":"homebridge-hue","v":1},"homebridge-hue-daylight-sync":{"v":1},"homebridge-hunter-hydrawise":{"i":"homebridge-hunter-hydrawise","v":1},"homebridge-hyperion-jub":{"v":1},"homebridge-hyundai-bluelink":{"v":1},"homebridge-i6-bigassfans":{"v":1},"homebridge-infinitude-v2":{"v":1},"homebridge-intelliclima":{"i":"homebridge-intelliclima","v":1},"homebridge-intercom":{"v":1},"homebridge-intercom-automation-hat":{"v":1},"homebridge-irobot-v2":{"v":1},"homebridge-itho-daalderop":{"v":1},"homebridge-jablotron":{"v":1},"homebridge-jci-hitachi-platform":{"v":1},"homebridge-jewish-calendar":{"v":1},"homebridge-juicebox":{"v":1},"homebridge-kasa-hub":{"v":1},"homebridge-kasa-python":{"i":"homebridge-kasa-python","v":1},"homebridge-keylights":{"v":1},"homebridge-kiwigrid":{"v":1},"homebridge-kodi":{"i":"homebridge-kodi","v":1},"homebridge-konnected":{"v":1},"homebridge-kumo":{"v":1},"homebridge-lacrosseview":{"n":"Homebridge La Crosse View"},"homebridge-landroid":{"v":1},"homebridge-lay-z-spa":{"v":1},"homebridge-leridian-dynamics":{"i":"homebridge-leridian-dynamics","v":1},"homebridge-level-sense":{"v":1},"homebridge-leviton":{"v":1},"homebridge-levoit-air-purifier":{"v":1},"homebridge-levoit-humidifiers":{"v":1},"homebridge-lg-enervu":{"i":"homebridge-lg-enervu","v":1},"homebridge-lg-thinq":{"v":1},"homebridge-lgwebos-tv":{"n":"LG webOS TV","v":1},"homebridge-lifx-plugin":{"v":1},"homebridge-lighthouse":{"v":1},"homebridge-lightwaverf":{"v":1},"homebridge-linak":{"v":1},"homebridge-litter-robot-connect":{"v":1},"homebridge-logic-switch":{"v":1},"homebridge-logo-platform":{"v":1},"homebridge-loxone-control":{"i":"homebridge-loxone-control","v":1},"homebridge-loxone-proxy":{"i":"homebridge-loxone-proxy","v":1},"homebridge-lutron-caseta-leap":{"s":{"from":"homebridge-lutron-caseta-leap","to":"@homebridge-plugins/homebridge-lutron-caseta-leap","switch":"2.6.0"},"v":1},"homebridge-luxtronik2":{"v":1},"homebridge-magic-occupancy":{"v":1},"homebridge-magichome-dynamic-platform":{"v":1},"homebridge-meater":{"m":1,"s":{"from":"homebridge-meater","to":"@homebridge-plugins/homebridge-meater","switch":"2.0.0"}},"homebridge-melcloud-control":{"v":1},"homebridge-meraki-control":{"v":1},"homebridge-mercedesme":{"v":1},"homebridge-meross":{"m":1,"s":{"from":"homebridge-meross","to":"@homebridge-plugins/homebridge-meross","switch":"10.8.1"}},"homebridge-mertik-fireplace":{"v":1},"homebridge-messenger":{"v":1},"homebridge-mhacwifi1-lan":{"v":1},"homebridge-mhi-wfrac":{"i":"homebridge-mhi-wfrac","v":1},"homebridge-mi-humidifier":{"v":1},"homebridge-mi-hygrothermograph":{"v":1},"homebridge-midea-platform":{"i":"homebridge-midea-platform","v":1},"homebridge-mieleathome":{"v":1},"homebridge-mihomegateway":{"v":1},"homebridge-milighthub-platform":{"v":1},"homebridge-miot":{"v":1},"homebridge-mobilelink":{"v":1},"homebridge-moodo":{"v":1},"homebridge-moonraker":{"v":1},"homebridge-mqtt":{"v":1},"homebridge-mqtt-ceiling-fan-remote":{"v":1},"homebridge-mqtt-tasmota":{"v":1},"homebridge-mqttsmokesensor":{"v":1},"homebridge-mqttthing":{"v":1},"homebridge-multiswitcheroo":{"v":1},"homebridge-music":{"i":"homebridge-music","v":1},"homebridge-musiccast-multiroom":{"v":1},"homebridge-my-wallbox":{"i":"homebridge-my-wallbox","v":1},"homebridge-mylink":{"v":1},"homebridge-myplace":{"v":1},"homebridge-mysmartblinds-bridge":{"v":1},"homebridge-nb":{"i":"homebridge-nb","v":1},"homebridge-neptun-smart":{"v":1},"homebridge-ness-d16x":{"v":1},"homebridge-nest":{"i":"homebridge-nest","v":1},"homebridge-nest-accfactory":{"v":1},"homebridge-network-presence":{"v":1},"homebridge-ngbs-icon-thermostat":{"v":1},"homebridge-node-alarm-dot-com":{"v":1},"homebridge-noip":{"m":1,"s":{"from":"homebridge-noip","to":"@homebridge-plugins/homebridge-noip","switch":"4.0.0"}},"homebridge-nordpool-baltics":{"i":"homebridge-nordpool-baltics","v":1},"homebridge-notifyevents":{"v":1},"homebridge-nukiio":{"v":1},"homebridge-nuvo":{"v":1},"homebridge-octoprint-motion":{"v":1},"homebridge-omnik":{"v":1},"homebridge-omnilink-platform":{"i":"homebridge-omnilink-platform","v":1},"homebridge-open-sesame":{"v":1},"homebridge-openrgb":{"v":1},"homebridge-opensprinkler-api":{"v":1},"homebridge-openwebif-tv":{"v":1},"homebridge-oppo-udp":{"i":"homebridge-oppo-udp","v":1},"homebridge-orbit-irrigation":{"i":"homebridge-orbit-irrigation","v":1},"homebridge-otgw":{"i":"homebridge-otgw","v":1},"homebridge-overda-uranus":{"v":1},"homebridge-owfs":{"v":1},"homebridge-p1":{"i":"homebridge-p1","v":1},"homebridge-palgate":{"i":"homebridge-palgate","v":1},"homebridge-panasonic-ac-platform":{"i":"homebridge-panasonic-ac-platform","v":1},"homebridge-panasonic-miraie-ac-platform":{"v":1},"homebridge-pc-volume":{"v":1},"homebridge-pentair-intellicenter-ai":{"n":"Homebridge Pentair IntelliCenter AI","v":1},"homebridge-pentair-screenlogic":{"v":1},"homebridge-people-pro":{"v":1},"homebridge-petkit-pet-feeder":{"v":1},"homebridge-petkit-platform":{"v":1},"homebridge-petsafe-smart-feed":{"v":1},"homebridge-philips-air":{"v":1},"homebridge-philips-android-tv":{"v":1},"homebridge-philipsair-platform":{"v":1},"homebridge-philipstv-saphitvos":{"v":1},"homebridge-pichler-pkom4":{"v":1},"homebridge-pico":{"v":1},"homebridge-pico-w-bridge":{"v":1},"homebridge-pihole":{"v":1},"homebridge-platform-maxcube":{"v":1},"homebridge-platform-orbit":{"v":1},"homebridge-playstation":{"v":1},"homebridge-playstation-game-title":{"v":1},"homebridge-plex-webhooks":{"v":1},"homebridge-plugin-govee":{"v":1},"homebridge-plugin-update-check":{"s":{"from":"homebridge-plugin-update-check","to":"@homebridge-plugins/homebridge-plugin-update-check","switch":"1.0.2"}},"homebridge-porsche-taycan":{"i":"homebridge-porsche-taycan","v":1},"homebridge-presence-switch-msgraph":{"v":1},"homebridge-presence-switch-slack":{"v":1},"homebridge-printer":{"v":1},"homebridge-programmable-http-switch":{"v":1},"homebridge-prosegur":{"v":1},"homebridge-prusa-link":{"v":1},"homebridge-purpleair":{"v":1},"homebridge-purpleair-sensor":{"v":1},"homebridge-qolsys":{"v":1},"homebridge-ra2-select":{"v":1},"homebridge-rachio-irrigation":{"i":"homebridge-rachio-irrigation","v":1},"homebridge-rademacher-homepilot":{"v":1},"homebridge-radiora2":{"v":1},"homebridge-rainbird":{"m":1,"s":{"from":"homebridge-rainbird","to":"@homebridge-plugins/homebridge-rainbird","switch":"3.0.0"}},"homebridge-ratgdo":{"i":"homebridge-ratgdo","v":1},"homebridge-red-alert-via-kumta":{"v":1},"homebridge-remootio":{"v":1},"homebridge-resideo":{"m":1,"s":{"from":"homebridge-resideo","to":"@homebridge-plugins/homebridge-resideo","switch":"3.0.0"}},"homebridge-rgb-ledstrip":{"v":1},"homebridge-ring":{"i":"homebridge-ring","c":"packages/homebridge-ring/","v":1},"homebridge-rinnai-controlr":{"v":1},"homebridge-rinnai-touch-platform":{"i":"homebridge-rinnai-touch-platform","v":1},"homebridge-robonect":{"i":"homebridge-robonect","v":1},"homebridge-rocket-smart-home-ui":{"h":1},"homebridge-rointe-unofficial":{"v":1},"homebridge-roomba2":{"s":{"from":"homebridge-roomba2","to":"@homebridge-plugins/homebridge-roomba","switch":"1.5.3"}},"homebridge-roomme":{"v":1},"homebridge-rpi":{"i":"homebridge-rpi","v":1},"homebridge-rpi-rf-switch":{"v":1},"homebridge-samsung-tizen":{"v":1},"homebridge-samsungtv-2014":{"v":1},"homebridge-samsungtvht":{"v":1},"homebridge-saphi-tv":{"v":1},"homebridge-schedule":{"v":1},"homebridge-scout":{"v":1},"homebridge-securitysystem":{"v":1},"homebridge-sensibo-ac":{"i":"homebridge-sensibo-ac","v":1},"homebridge-sensit-tank-monitor":{"v":1},"homebridge-sepsadsecurity":{"v":1},"homebridge-server":{"h":1},"homebridge-sharkiq":{"m":1,"s":{"from":"homebridge-sharkiq","to":"@homebridge-plugins/homebridge-sharkiq","switch":"1.3.2"}},"homebridge-shelly":{"v":1},"homebridge-shelly-ng":{"v":1},"homebridge-shortcuts-buttons":{"i":"homebridge-shortcuts-buttons","v":1},"homebridge-sht3x":{"v":1},"homebridge-signalk":{"i":"homebridge-signalk","v":1},"homebridge-simplisafe3":{"v":1},"homebridge-sinricpro":{"i":"homebridge-sinricpro","v":1},"homebridge-sleepme":{"v":1},"homebridge-sma-home-manager":{"v":1},"homebridge-smart-irrigation":{"v":1},"homebridge-smarthomeng":{"v":1},"homebridge-smartthings-ik":{"v":1},"homebridge-smtp-motion":{"v":1},"homebridge-snowsense":{"i":"homebridge-snowsense","v":1},"homebridge-solaxcloud-api":{"v":1},"homebridge-solis5g-battery":{"v":1},"homebridge-somfy-hotwired":{"v":1},"homebridge-somfy-tahoma-screen":{"v":1},"homebridge-somneo":{"v":1},"homebridge-sonos":{"v":1},"homebridge-sonos-multiroom":{"v":1},"homebridge-sonos-starter-track":{"v":1},"homebridge-sony-audio":{"v":1},"homebridge-sp108e-platform":{"v":1},"homebridge-spanet":{"v":1},"homebridge-spotify-speaker":{"v":1},"homebridge-spruce-irrigation":{"v":1},"homebridge-stagekit":{"v":1},"homebridge-stagg-ekg-plus":{"v":1},"homebridge-star-projector":{"v":1},"homebridge-sternet-smart-lan":{"v":1},"homebridge-subaru":{"v":1},"homebridge-sunsa":{"v":1},"homebridge-sunsynk":{"v":1},"homebridge-switch-button":{"v":1},"homebridge-switchbot-bluetooth-platform":{"v":1},"homebridge-switchbot-for-mac":{"v":1},"homebridge-switchbot-sensor-ble":{"v":1},"homebridge-switcher-platform":{"i":"homebridge-switcher-platform","v":1},"homebridge-tadiran-ac":{"v":1},"homebridge-tado-ac":{"i":"homebridge-tado-ac","v":1},"homebridge-tado-platform":{"m":1,"s":{"from":"homebridge-tado-platform","to":"@homebridge-plugins/homebridge-tado","switch":"6.0.14"}},"homebridge-tapo-camera":{"v":1},"homebridge-tasmota":{"i":"homebridge-tasmota","v":1},"homebridge-tasmota-control":{"v":1},"homebridge-tasmota-zbbridge":{"v":1},"homebridge-tcc":{"i":"homebridge-tcc","v":1},"homebridge-television-universal-control":{"v":1},"homebridge-temperature-sensor-dht":{"v":1},"homebridge-tempo":{"i":"homebridge-tempo","v":1},"homebridge-tempstick":{"v":1},"homebridge-tesla":{"v":1},"homebridge-tesy-heater-v2":{"v":1},"homebridge-texecom-connect":{"v":1},"homebridge-texecom-full":{"v":1},"homebridge-thermobit":{"m":1,"v":1},"homebridge-tibber-price":{"v":1},"homebridge-tibberswitch":{"v":1},"homebridge-tidbyt":{"v":1},"homebridge-tiko":{"i":"homebridge-tiko","v":1},"homebridge-tivo-control":{"v":1},"homebridge-to-hoobs":{"h":1},"homebridge-tovala":{"i":"homebridge-tovala","v":1},"homebridge-tp-link-access-control":{"v":1},"homebridge-tp-link-powerline":{"m":1},"homebridge-tplink-smarthome":{"v":1},"homebridge-tsvesync":{"v":1},"homebridge-ttlock":{"v":1},"homebridge-tuya":{"v":1},"homebridge-tuya-ir":{"v":1},"homebridge-tuya-platform":{"v":1},"homebridge-tuya-platform-talrhvfork":{"v":1},"homebridge-twinkly-plus":{"v":1},"homebridge-uconnect":{"v":1},"homebridge-ueboom":{"v":1},"homebridge-ui":{"h":1},"homebridge-unifi-access":{"i":"homebridge-unifi-access","v":1},"homebridge-unifi-occupancy":{"v":1},"homebridge-unifi-poe-control":{"v":1},"homebridge-unifi-protect":{"i":"homebridge-unifi-protect","v":1},"homebridge-unifi-protect-camera-motion":{"v":1},"homebridge-unifi-smartpower":{"s":{"from":"homebridge-unifi-smartpower","to":"@homebridge-plugins/homebridge-unifi-network","switch":"2.3.0"},"v":1},"homebridge-ups":{"i":"homebridge-ups","v":1},"homebridge-velux":{"i":"homebridge-velux","v":1},"homebridge-velux-active":{"v":1},"homebridge-verisure":{"v":1},"homebridge-videodoorbell":{"v":1},"homebridge-vieramatic":{"v":1},"homebridge-virtual-accessories":{"i":"homebridge-virtual-accessories","v":1},"homebridge-virtual-device":{"m":1},"homebridge-volvo":{"v":1},"homebridge-washingmachine-pow":{"v":1},"homebridge-wattbox":{"s":{"from":"homebridge-wattbox","to":"@homebridge-plugins/homebridge-wattbox","switch":"3.2.0"},"v":1},"homebridge-wattbox-ip":{"v":1},"homebridge-weather-plus":{"v":1},"homebridge-weatherflow-tempest":{"v":1},"homebridge-webos-tv":{"v":1},"homebridge-website-change-check":{"v":1},"homebridge-wemo":{"m":1,"s":{"from":"homebridge-wemo","to":"@homebridge-plugins/homebridge-wemo","switch":"7.0.0"}},"homebridge-winix-purifiers":{"v":1},"homebridge-wiser":{"v":1},"homebridge-wiz-lan":{"v":1},"homebridge-wled-ws":{"i":"homebridge-wled-ws","v":1},"homebridge-wol":{"v":1},"homebridge-ws":{"i":"homebridge-ws","v":1},"homebridge-wyze-robovac":{"v":1},"homebridge-wyze-smart-home":{"v":1},"homebridge-xbox-tv":{"v":1},"homebridge-xfinityhome":{"v":1},"homebridge-xiaomi-aqara-ac-cooler":{"v":1},"homebridge-xiaomi-fan":{"v":1},"homebridge-xiaomi-mi-air-purifier":{"v":1},"homebridge-xiaomi-roborock-vacuum":{"v":1},"homebridge-yamaha-receiver":{"i":"homebridge-yamaha-receiver","v":1},"homebridge-yeelighter":{"v":1},"homebridge-yet-another-ping":{"v":1},"homebridge-yindl":{"v":1},"homebridge-yolink":{"v":1},"homebridge-z2m":{"v":1},"homebridge-zidoo-androidtv":{"i":"homebridge-zidoo-androidtv","v":1},"homebridge-zigbee-nt":{"v":1},"homebridge-zp":{"i":"homebridge-zp","v":1}} \ No newline at end of file diff --git a/assets/plugins.json b/assets/plugins.json index 15b9ebf..d2f6593 100644 --- a/assets/plugins.json +++ b/assets/plugins.json @@ -179,6 +179,18 @@ "verified": true, "verifiedPlus": false }, + "@homebridge-plugins/homebridge-ecovacs": { + "name": null, + "hidden": false, + "icon": "icons/homebridge-ecovacs.png", + "maintained": true, + "newScope": false, + "scoped": "bwp91", + "author": "bwp91", + "changelog": null, + "verified": true, + "verifiedPlus": false + }, "@homebridge-plugins/homebridge-ewelink": { "name": "Homebridge eWeLink", "hidden": false, @@ -299,6 +311,18 @@ "verified": true, "verifiedPlus": false }, + "@homebridge-plugins/homebridge-sharkiq": { + "name": null, + "hidden": false, + "icon": "icons/homebridge-sharkiq.png", + "maintained": true, + "newScope": false, + "scoped": "Bubba8291", + "author": null, + "changelog": null, + "verified": true, + "verifiedPlus": false + }, "@homebridge-plugins/homebridge-smarthq": { "name": null, "hidden": false, @@ -359,6 +383,18 @@ "verified": true, "verifiedPlus": false }, + "@homebridge-pluginshomebridge-sharkiq": { + "name": null, + "hidden": false, + "icon": null, + "maintained": false, + "newScope": false, + "scoped": false, + "author": "Bubba8291", + "changelog": null, + "verified": false, + "verifiedPlus": false + }, "@jdes/homebridge-tost-corp-somfy-rts-web": { "name": null, "hidden": false, @@ -647,30 +683,6 @@ "verified": true, "verifiedPlus": false }, - "homebridge-aeg-robot": { - "name": null, - "hidden": false, - "icon": "icons/homebridge-aeg-robot.png", - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, - "homebridge-aeg-wellbeing": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, "homebridge-agile-octopus-rates": { "name": null, "hidden": false, @@ -686,7 +698,7 @@ "homebridge-air": { "name": null, "hidden": false, - "icon": "icons/homebridge-air.png", + "icon": null, "maintained": true, "newScope": { "from": "homebridge-air", @@ -694,7 +706,7 @@ "switch": "1.0.0" }, "scoped": false, - "author": "donavanbecker", + "author": null, "changelog": null, "verified": true, "verifiedPlus": false @@ -771,10 +783,10 @@ "verified": true, "verifiedPlus": false }, - "homebridge-aladdin-connect-garage-door": { + "homebridge-alexa": { "name": null, "hidden": false, - "icon": null, + "icon": "icons/homebridge-alexa.png", "maintained": false, "newScope": false, "scoped": false, @@ -783,7 +795,7 @@ "verified": true, "verifiedPlus": false }, - "homebridge-aladdinconnect": { + "homebridge-alexa-player": { "name": null, "hidden": false, "icon": null, @@ -795,19 +807,7 @@ "verified": true, "verifiedPlus": false }, - "homebridge-alexa": { - "name": null, - "hidden": false, - "icon": "icons/homebridge-alexa.png", - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, - "homebridge-alexa-player": { + "homebridge-alexa-smarthome": { "name": null, "hidden": false, "icon": null, @@ -819,7 +819,7 @@ "verified": true, "verifiedPlus": false }, - "homebridge-alexa-smarthome": { + "homebridge-alphaess": { "name": null, "hidden": false, "icon": null, @@ -831,7 +831,7 @@ "verified": true, "verifiedPlus": false }, - "homebridge-alphaess": { + "homebridge-amazondash-mac": { "name": null, "hidden": false, "icon": null, @@ -843,10 +843,10 @@ "verified": true, "verifiedPlus": false }, - "homebridge-amazondash-mac": { + "homebridge-ambiback": { "name": null, "hidden": false, - "icon": null, + "icon": "icons/homebridge-ambiback.png", "maintained": false, "newScope": false, "scoped": false, @@ -855,10 +855,10 @@ "verified": true, "verifiedPlus": false }, - "homebridge-ambiback": { + "homebridge-ambient-realtime": { "name": null, "hidden": false, - "icon": "icons/homebridge-ambiback.png", + "icon": "icons/homebridge-ambient-realtime.png", "maintained": false, "newScope": false, "scoped": false, @@ -990,7 +990,7 @@ "homebridge-august": { "name": null, "hidden": false, - "icon": "icons/homebridge-august.png", + "icon": null, "maintained": true, "newScope": { "from": "homebridge-august", @@ -998,7 +998,7 @@ "switch": "3.0.0" }, "scoped": false, - "author": "donavanbecker", + "author": null, "changelog": null, "verified": true, "verifiedPlus": false @@ -1039,8 +1039,8 @@ "verified": true, "verifiedPlus": false }, - "homebridge-away-mode": { - "name": null, + "homebridge-awattar": { + "name": "Homebridge aWATTar", "hidden": false, "icon": null, "maintained": false, @@ -1048,10 +1048,10 @@ "scoped": false, "author": null, "changelog": null, - "verified": true, + "verified": false, "verifiedPlus": false }, - "homebridge-aws-iot": { + "homebridge-away-mode": { "name": null, "hidden": false, "icon": null, @@ -1063,7 +1063,7 @@ "verified": true, "verifiedPlus": false }, - "homebridge-balboa-spa": { + "homebridge-aws-iot": { "name": null, "hidden": false, "icon": null, @@ -1075,7 +1075,7 @@ "verified": true, "verifiedPlus": false }, - "homebridge-batterytender": { + "homebridge-balboa-spa": { "name": null, "hidden": false, "icon": null, @@ -1111,10 +1111,10 @@ "verified": true, "verifiedPlus": false }, - "homebridge-better-roku": { - "name": null, + "homebridge-blaq": { + "name": "Homebridge blaQ", "hidden": false, - "icon": "icons/homebridge-better-roku.png", + "icon": "icons/homebridge-blaq.png", "maintained": false, "newScope": false, "scoped": false, @@ -1243,7 +1243,7 @@ "verified": true, "verifiedPlus": false }, - "homebridge-boschcontrolpanel_bgseries": { + "homebridge-bondbridge": { "name": null, "hidden": false, "icon": null, @@ -1255,7 +1255,7 @@ "verified": true, "verifiedPlus": false }, - "homebridge-bravia": { + "homebridge-boschcontrolpanel_bgseries": { "name": null, "hidden": false, "icon": null, @@ -1267,7 +1267,7 @@ "verified": true, "verifiedPlus": false }, - "homebridge-bravia-tvos": { + "homebridge-bravia": { "name": null, "hidden": false, "icon": null, @@ -1279,7 +1279,7 @@ "verified": true, "verifiedPlus": false }, - "homebridge-brewer": { + "homebridge-bravia-tvos": { "name": null, "hidden": false, "icon": null, @@ -1291,7 +1291,7 @@ "verified": true, "verifiedPlus": false }, - "homebridge-broadlink-heater-cooler": { + "homebridge-brewer": { "name": null, "hidden": false, "icon": null, @@ -1327,18 +1327,6 @@ "verified": true, "verifiedPlus": false }, - "homebridge-button-platform": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, "homebridge-caddx-interlogix": { "name": null, "hidden": false, @@ -1415,22 +1403,10 @@ "verified": true, "verifiedPlus": false }, - "homebridge-cleanmate": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, "homebridge-cloudflared-tunnel": { "name": null, "hidden": false, - "icon": "icons/homebridge-cloudflared-tunnel.png", + "icon": null, "maintained": true, "newScope": { "from": "homebridge-cloudflared-tunnel", @@ -1438,21 +1414,9 @@ "switch": "2.0.0" }, "scoped": false, - "author": "donavanbecker", - "changelog": null, - "verified": true, - "verifiedPlus": false - }, - "homebridge-cmd4-advantageair": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, "author": null, "changelog": null, - "verified": true, + "verified": false, "verifiedPlus": false }, "homebridge-comed-hourlypricing": { @@ -1746,13 +1710,17 @@ "homebridge-deebot": { "name": null, "hidden": false, - "icon": "icons/homebridge-deebot.png", - "maintained": true, - "newScope": false, + "icon": null, + "maintained": false, + "newScope": { + "from": "homebridge-deebot", + "to": "@homebridge-plugins/homebridge-ecovacs", + "switch": "7.0.0" + }, "scoped": false, "author": null, "changelog": null, - "verified": true, + "verified": false, "verifiedPlus": false }, "homebridge-deebotecovacs": { @@ -1851,6 +1819,18 @@ "verified": true, "verifiedPlus": false }, + "homebridge-doorbell-telegram-photo": { + "name": null, + "hidden": false, + "icon": null, + "maintained": false, + "newScope": false, + "scoped": false, + "author": null, + "changelog": null, + "verified": true, + "verifiedPlus": false + }, "homebridge-doorbird": { "name": null, "hidden": false, @@ -1890,7 +1870,7 @@ "homebridge-dummy": { "name": null, "hidden": false, - "icon": null, + "icon": "icons/homebridge-dummy.png", "maintained": false, "newScope": false, "scoped": false, @@ -1983,18 +1963,6 @@ "verified": true, "verifiedPlus": false }, - "homebridge-ecoplug": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, "homebridge-ecowitt-weather-sensors": { "name": null, "hidden": false, @@ -2200,9 +2168,9 @@ "verifiedPlus": false }, "homebridge-ewelink": { - "name": "Homebridge eWeLink", + "name": null, "hidden": false, - "icon": "icons/homebridge-ewelink.png", + "icon": null, "maintained": false, "newScope": { "from": "homebridge-ewelink", @@ -2212,7 +2180,7 @@ "scoped": false, "author": null, "changelog": null, - "verified": true, + "verified": false, "verifiedPlus": false }, "homebridge-exivo": { @@ -2227,30 +2195,6 @@ "verified": true, "verifiedPlus": false }, - "homebridge-ezviz": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, - "homebridge-fenix-tft-wifi": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, "homebridge-fhem": { "name": null, "hidden": false, @@ -2359,18 +2303,6 @@ "verified": true, "verifiedPlus": false }, - "homebridge-freebox-player-delta": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, "homebridge-frigidaire-dehumidifier": { "name": null, "hidden": false, @@ -2442,7 +2374,7 @@ "switch": "4.2.1" }, "scoped": false, - "author": "derek-miller", + "author": null, "changelog": null, "verified": true, "verifiedPlus": false @@ -2486,7 +2418,7 @@ "homebridge-govee": { "name": null, "hidden": false, - "icon": "icons/homebridge-govee.png", + "icon": null, "maintained": false, "newScope": { "from": "homebridge-govee", @@ -2496,7 +2428,7 @@ "scoped": false, "author": null, "changelog": null, - "verified": true, + "verified": false, "verifiedPlus": false }, "homebridge-gpio-doorbell": { @@ -2667,18 +2599,6 @@ "verified": true, "verifiedPlus": false }, - "homebridge-homeqtt-alarm": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, "homebridge-homewizard-energy-socket": { "name": null, "hidden": false, @@ -2751,18 +2671,6 @@ "verified": true, "verifiedPlus": false }, - "homebridge-http-iot": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, "homebridge-http-json-thermometer": { "name": null, "hidden": false, @@ -2919,6 +2827,18 @@ "verified": true, "verifiedPlus": false }, + "homebridge-intercom": { + "name": null, + "hidden": false, + "icon": null, + "maintained": false, + "newScope": false, + "scoped": false, + "author": null, + "changelog": null, + "verified": true, + "verifiedPlus": false + }, "homebridge-intercom-automation-hat": { "name": null, "hidden": false, @@ -2967,6 +2887,18 @@ "verified": true, "verifiedPlus": false }, + "homebridge-jci-hitachi-platform": { + "name": null, + "hidden": false, + "icon": null, + "maintained": false, + "newScope": false, + "scoped": false, + "author": null, + "changelog": null, + "verified": true, + "verifiedPlus": false + }, "homebridge-jewish-calendar": { "name": null, "hidden": false, @@ -3195,18 +3127,6 @@ "verified": true, "verifiedPlus": false }, - "homebridge-lg-thinq-ac": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, "homebridge-lgwebos-tv": { "name": "LG webOS TV", "hidden": false, @@ -3382,7 +3302,7 @@ "homebridge-meater": { "name": null, "hidden": false, - "icon": "icons/homebridge-meater.png", + "icon": null, "maintained": true, "newScope": { "from": "homebridge-meater", @@ -3390,9 +3310,9 @@ "switch": "2.0.0" }, "scoped": false, - "author": "donavanbecker", + "author": null, "changelog": null, - "verified": true, + "verified": false, "verifiedPlus": false }, "homebridge-melcloud-control": { @@ -3434,7 +3354,7 @@ "homebridge-meross": { "name": null, "hidden": false, - "icon": "icons/homebridge-meross.png", + "icon": null, "maintained": true, "newScope": { "from": "homebridge-meross", @@ -3444,7 +3364,7 @@ "scoped": false, "author": null, "changelog": null, - "verified": true, + "verified": false, "verifiedPlus": false }, "homebridge-mertik-fireplace": { @@ -3519,18 +3439,6 @@ "verified": true, "verifiedPlus": false }, - "homebridge-micronova-agua-iot-stove": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, "homebridge-midea-platform": { "name": null, "hidden": false, @@ -3759,18 +3667,6 @@ "verified": true, "verifiedPlus": false }, - "homebridge-myq": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, "homebridge-mysmartblinds-bridge": { "name": null, "hidden": false, @@ -3783,18 +3679,6 @@ "verified": true, "verifiedPlus": false }, - "homebridge-naim-audio": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, "homebridge-nb": { "name": null, "hidden": false, @@ -3843,10 +3727,10 @@ "verified": true, "verifiedPlus": false }, - "homebridge-nest-cam": { + "homebridge-nest-accfactory": { "name": null, "hidden": false, - "icon": "icons/homebridge-nest-cam.png", + "icon": null, "maintained": false, "newScope": false, "scoped": false, @@ -3892,9 +3776,9 @@ "verifiedPlus": false }, "homebridge-noip": { - "name": "Homebridge No-IP", + "name": null, "hidden": false, - "icon": "icons/homebridge-noip.png", + "icon": null, "maintained": true, "newScope": { "from": "homebridge-noip", @@ -3902,9 +3786,9 @@ "switch": "4.0.0" }, "scoped": false, - "author": "donavanbecker", + "author": null, "changelog": null, - "verified": true, + "verified": false, "verifiedPlus": false }, "homebridge-nordpool-baltics": { @@ -3991,18 +3875,6 @@ "verified": true, "verifiedPlus": false }, - "homebridge-onstar": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, "homebridge-open-sesame": { "name": null, "hidden": false, @@ -4424,7 +4296,7 @@ "scoped": false, "author": null, "changelog": null, - "verified": true, + "verified": false, "verifiedPlus": false }, "homebridge-porsche-taycan": { @@ -4598,7 +4470,7 @@ "homebridge-rainbird": { "name": null, "hidden": false, - "icon": "icons/homebridge-rainbird.png", + "icon": null, "maintained": true, "newScope": { "from": "homebridge-rainbird", @@ -4606,9 +4478,9 @@ "switch": "3.0.0" }, "scoped": false, - "author": "donavanbecker", + "author": null, "changelog": null, - "verified": true, + "verified": false, "verifiedPlus": false }, "homebridge-ratgdo": { @@ -4650,7 +4522,7 @@ "homebridge-resideo": { "name": null, "hidden": false, - "icon": "icons/homebridge-resideo.png", + "icon": null, "maintained": true, "newScope": { "from": "homebridge-resideo", @@ -4658,9 +4530,9 @@ "switch": "3.0.0" }, "scoped": false, - "author": "donavanbecker", + "author": null, "changelog": null, - "verified": true, + "verified": false, "verifiedPlus": false }, "homebridge-rgb-ledstrip": { @@ -4760,7 +4632,7 @@ "scoped": false, "author": null, "changelog": null, - "verified": true, + "verified": false, "verifiedPlus": false }, "homebridge-roomme": { @@ -4934,13 +4806,17 @@ "homebridge-sharkiq": { "name": null, "hidden": false, - "icon": "icons/homebridge-sharkiq.png", - "maintained": false, - "newScope": false, + "icon": null, + "maintained": true, + "newScope": { + "from": "homebridge-sharkiq", + "to": "@homebridge-plugins/homebridge-sharkiq", + "switch": "1.3.2" + }, "scoped": false, "author": null, "changelog": null, - "verified": true, + "verified": false, "verifiedPlus": false }, "homebridge-shelly": { @@ -5027,18 +4903,6 @@ "verified": true, "verifiedPlus": false }, - "homebridge-skybell": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, "homebridge-sleepme": { "name": null, "hidden": false, @@ -5051,18 +4915,6 @@ "verified": true, "verifiedPlus": false }, - "homebridge-slide-shutter": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, "homebridge-sma-home-manager": { "name": null, "hidden": false, @@ -5087,42 +4939,6 @@ "verified": true, "verifiedPlus": false }, - "homebridge-smartcielo": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, - "homebridge-smartdry": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, - "homebridge-smartglass": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, "homebridge-smarthomeng": { "name": null, "hidden": false, @@ -5135,30 +4951,6 @@ "verified": true, "verifiedPlus": false }, - "homebridge-smarthq": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": "donavanbecker", - "changelog": null, - "verified": false, - "verifiedPlus": false - }, - "homebridge-smartthings": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, "homebridge-smartthings-ik": { "name": null, "hidden": false, @@ -5423,6 +5215,18 @@ "verified": true, "verifiedPlus": false }, + "homebridge-sunsynk": { + "name": null, + "hidden": false, + "icon": null, + "maintained": false, + "newScope": false, + "scoped": false, + "author": null, + "changelog": null, + "verified": true, + "verifiedPlus": false + }, "homebridge-switch-button": { "name": null, "hidden": false, @@ -5510,7 +5314,7 @@ "homebridge-tado-platform": { "name": null, "hidden": false, - "icon": "icons/homebridge-tado.png", + "icon": null, "maintained": true, "newScope": { "from": "homebridge-tado-platform", @@ -5520,7 +5324,7 @@ "scoped": false, "author": null, "changelog": null, - "verified": true, + "verified": false, "verifiedPlus": false }, "homebridge-tapo-camera": { @@ -5667,6 +5471,18 @@ "verified": true, "verifiedPlus": false }, + "homebridge-texecom-full": { + "name": null, + "hidden": false, + "icon": null, + "maintained": false, + "newScope": false, + "scoped": false, + "author": null, + "changelog": null, + "verified": true, + "verifiedPlus": false + }, "homebridge-thermobit": { "name": null, "hidden": false, @@ -5787,7 +5603,7 @@ "verified": false, "verifiedPlus": false }, - "homebridge-tp-link-tapo": { + "homebridge-tplink-smarthome": { "name": null, "hidden": false, "icon": null, @@ -5799,7 +5615,7 @@ "verified": true, "verifiedPlus": false }, - "homebridge-tplink-smarthome": { + "homebridge-tsvesync": { "name": null, "hidden": false, "icon": null, @@ -5990,7 +5806,7 @@ "switch": "2.3.0" }, "scoped": false, - "author": "derek-miller", + "author": null, "changelog": null, "verified": true, "verifiedPlus": false @@ -6043,18 +5859,6 @@ "verified": true, "verifiedPlus": false }, - "homebridge-vesync-v2": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, "homebridge-videodoorbell": { "name": null, "hidden": false, @@ -6138,7 +5942,7 @@ "switch": "3.2.0" }, "scoped": false, - "author": "derek-miller", + "author": null, "changelog": null, "verified": true, "verifiedPlus": false @@ -6206,7 +6010,7 @@ "homebridge-wemo": { "name": null, "hidden": false, - "icon": "icons/homebridge-wemo.png", + "icon": null, "maintained": true, "newScope": { "from": "homebridge-wemo", @@ -6216,7 +6020,7 @@ "scoped": false, "author": null, "changelog": null, - "verified": true, + "verified": false, "verifiedPlus": false }, "homebridge-winix-purifiers": { @@ -6435,18 +6239,6 @@ "verified": true, "verifiedPlus": false }, - "homebridge-yokis-usb": { - "name": null, - "hidden": false, - "icon": null, - "maintained": false, - "newScope": false, - "scoped": false, - "author": null, - "changelog": null, - "verified": true, - "verifiedPlus": false - }, "homebridge-yolink": { "name": null, "hidden": false, diff --git a/assets/plugins.min.json b/assets/plugins.min.json index 3e8d186..28ffe40 100644 --- a/assets/plugins.min.json +++ b/assets/plugins.min.json @@ -1 +1 @@ -{"@0x5e/homebridge-tuya-platform":{"icon":"homebridge-tuya-platform","verified":1},"@balansse/homebridge-vivint":{"verified":1},"@busse/homebridge-pluggit":{"verified":1},"@chazepps/homebridge-hejhome":{"icon":"homebridge-hejhome","verified":1},"@danielgindi/homebridge-bcp-charger":{"verified":1},"@dr_chai/homebridge-airthings":{"verified":1},"@elshaer/homebridge-hdl-buspro-enhanced":{"icon":"homebridge-hdl-buspro-enhanced","verified":1},"@hansfriedrich/homebridge-feller-wiser":{"verified":1},"@hernas/homebridge-panasonic-heat-pump":{"verified":1},"@hernas/homebridge-salus-sq610":{"verified":1},"@homebridge-plugins/homebridge-air":{"icon":"homebridge-air","maintained":1,"scoped":"donavanbecker","verified":1},"@homebridge-plugins/homebridge-aladdin-connect":{"icon":"homebridge-aladdin-connect","maintained":1,"scoped":"derek-miller","verified":1},"@homebridge-plugins/homebridge-august":{"icon":"homebridge-august","maintained":1,"scoped":"donavanbecker","verified":1},"@homebridge-plugins/homebridge-camera-ffmpeg":{"icon":"homebridge-camera-ffmpeg","maintained":1,"scoped":"sunookitsune","verified":1},"@homebridge-plugins/homebridge-cloudflared-tunnel":{"icon":"homebridge-cloudflared-tunnel","maintained":1,"scoped":"donavanbecker","verified":1},"@homebridge-plugins/homebridge-ewelink":{"icon":"homebridge-ewelink","maintained":1,"scoped":"bwp91","verified":1},"@homebridge-plugins/homebridge-govee":{"icon":"homebridge-govee","maintained":1,"scoped":"bwp91","verified":1},"@homebridge-plugins/homebridge-lutron-caseta-leap":{"icon":"homebridge-lutron-caseta-leap","maintained":1,"scoped":"thenewwazoo","verified":1},"@homebridge-plugins/homebridge-meater":{"icon":"homebridge-meater","maintained":1,"scoped":"donavanbecker","verified":1},"@homebridge-plugins/homebridge-meross":{"icon":"homebridge-meross","maintained":1,"scoped":"bwp91","verified":1},"@homebridge-plugins/homebridge-noip":{"icon":"homebridge-noip","maintained":1,"scoped":"donavanbecker","verified":1},"@homebridge-plugins/homebridge-plugin-update-check":{"maintained":1,"scoped":"sunookitsune","verified":1},"@homebridge-plugins/homebridge-rainbird":{"icon":"homebridge-rainbird","maintained":1,"scoped":"donavanbecker","verified":1},"@homebridge-plugins/homebridge-resideo":{"icon":"homebridge-resideo","maintained":1,"scoped":"donavanbecker","verified":1},"@homebridge-plugins/homebridge-roomba":{"icon":"homebridge-roomba","maintained":1,"scoped":"karlvr","verified":1},"@homebridge-plugins/homebridge-smarthq":{"icon":"homebridge-smarthq","maintained":1,"scoped":"donavanbecker","verified":1},"@homebridge-plugins/homebridge-tado":{"icon":"homebridge-tado","maintained":1,"scoped":"smart7324","verified":1},"@homebridge-plugins/homebridge-unifi-network":{"maintained":1,"scoped":"derek-miller","verified":1},"@homebridge-plugins/homebridge-wattbox":{"maintained":1,"scoped":"derek-miller","verified":1},"@homebridge-plugins/homebridge-wemo":{"icon":"homebridge-wemo","maintained":1,"scoped":"bwp91","verified":1},"@jdes/homebridge-tost-corp-somfy-rts-web":{"verified":1},"@milo526/homebridge-tuya-web":{"verified":1},"@o-lukas/homebridge-smartthings-tv":{"verified":1},"@ohmantics/homebridge-airmega":{"verified":1},"@petro-kushchak/homebridge-homepod-radio":{"icon":"homebridge-homepod-radio","verified":1},"@pietrolubini/homebridge-ecoflow":{"icon":"homebridge-ecoflow","verified":1},"@pst-on-npm/homebridge-enocean":{"verified":1},"@puchupala/homebridge-nature-remo-multi-toggle-light":{"verified":1},"@rsauget/homebridge-flexom":{"verified":1},"@string-bean/homebridge-drayton-wiser":{"verified":1},"@switchbot/homebridge-switchbot":{"icon":"homebridge-switchbot","verified":1},"@ubreu/homebridge-helios-kwl":{"verified":1},"@ubreu/homebridge-ibricks":{"verified":1},"@vandubois/homebridge-virtual-switch":{"icon":"homebridge-virtual-switch","verified":1},"@xenuiswatching/homebridge-hubspace":{"verified":1},"homebridge-3em-energy-meter":{"verified":1},"homebridge-433-arduino":{"verified":1},"homebridge-abode-lights":{"verified":1},"homebridge-actron-neo":{"icon":"homebridge-actron-neo","verified":1},"homebridge-actron-que":{"verified":1},"homebridge-adb":{"icon":"homebridge-adb","verified":1},"homebridge-adguardhome":{"icon":"homebridge-adguardhome","verified":1},"homebridge-adt-pulse":{"verified":1},"homebridge-advanced-timer":{"verified":1},"homebridge-aeg-robot":{"icon":"homebridge-aeg-robot","verified":1},"homebridge-aeg-wellbeing":{"verified":1},"homebridge-agile-octopus-rates":{"verified":1},"homebridge-air":{"icon":"homebridge-air","maintained":1,"newScope":{"from":"homebridge-air","to":"@homebridge-plugins/homebridge-air","switch":"1.0.0"},"verified":1},"homebridge-air-q":{"verified":1},"homebridge-airconditioner-mitsubishi-au-nz":{"verified":1},"homebridge-airport-express-connected":{"icon":"homebridge-airport-express-connected","verified":1},"homebridge-airthings":{"verified":1},"homebridge-airtouch5-platform":{"verified":1},"homebridge-airzone-cloud":{"verified":1},"homebridge-aladdin-connect-garage-door":{"verified":1},"homebridge-aladdinconnect":{"verified":1},"homebridge-alexa":{"icon":"homebridge-alexa","verified":1},"homebridge-alexa-player":{"verified":1},"homebridge-alexa-smarthome":{"verified":1},"homebridge-alphaess":{"verified":1},"homebridge-amazondash-mac":{"verified":1},"homebridge-ambiback":{"icon":"homebridge-ambiback","verified":1},"homebridge-ambient-weather-sensors":{"icon":"homebridge-ambient-weather-sensors","verified":1},"homebridge-androidtv":{"verified":1},"homebridge-anthemreceiver":{"verified":1},"homebridge-apc-back-ups-hs500":{"verified":1},"homebridge-appletv-enhanced":{"icon":"homebridge-appletv-enhanced","verified":1},"homebridge-aqara-ir-controller":{"verified":1},"homebridge-aqicn":{"verified":1},"homebridge-argo":{"verified":1},"homebridge-arlo":{"maintained":1},"homebridge-atomberg-fan":{"verified":1},"homebridge-august":{"icon":"homebridge-august","maintained":1,"newScope":{"from":"homebridge-august","to":"@homebridge-plugins/homebridge-august","switch":"3.0.0"},"verified":1},"homebridge-automower":{"verified":1},"homebridge-automower-platform":{"verified":1},"homebridge-awair2":{"verified":1},"homebridge-away-mode":{"verified":1},"homebridge-aws-iot":{"verified":1},"homebridge-balboa-spa":{"verified":1},"homebridge-batterytender":{"verified":1},"homebridge-bed-control":{"verified":1},"homebridge-beoplay":{"verified":1},"homebridge-better-roku":{"icon":"homebridge-better-roku","verified":1},"homebridge-blauberg-vento":{"verified":1},"homebridge-ble-thermobeacon":{"verified":1},"homebridge-blinds":{"verified":1},"homebridge-blinds-cmd":{"verified":1},"homebridge-blink-for-home":{"verified":1},"homebridge-blinkcameras":{"maintained":1},"homebridge-blueair-purifier":{"icon":"homebridge-blueair-purifier","verified":1},"homebridge-bold":{"verified":1},"homebridge-bold-ble":{"verified":1},"homebridge-bond":{"verified":1},"homebridge-boschcontrolpanel_bgseries":{"verified":1},"homebridge-bravia":{"verified":1},"homebridge-bravia-tvos":{"verified":1},"homebridge-brewer":{"verified":1},"homebridge-broadlink-heater-cooler":{"verified":1},"homebridge-browsercam":{"verified":1},"homebridge-bthome":{"verified":1},"homebridge-button-platform":{"verified":1},"homebridge-caddx-interlogix":{"verified":1},"homebridge-calendar-scheduler":{"verified":1},"homebridge-camera-ffmpeg":{"newScope":{"from":"homebridge-camera-ffmpeg","to":"@homebridge-plugins/homebridge-camera-ffmpeg","switch":"3.1.4"},"verified":1},"homebridge-camera-ui":{"verified":1},"homebridge-carrier-infinity":{"verified":1},"homebridge-cgd-garage-door":{"verified":1},"homebridge-cleanmate":{"verified":1},"homebridge-cloudflared-tunnel":{"icon":"homebridge-cloudflared-tunnel","maintained":1,"newScope":{"from":"homebridge-cloudflared-tunnel","to":"@homebridge-plugins/homebridge-cloudflared-tunnel","switch":"2.0.0"},"verified":1},"homebridge-cmd4-advantageair":{"verified":1},"homebridge-comed-hourlypricing":{"icon":"homebridge-comed-hourlypricing","verified":1},"homebridge-comelit-platform":{"verified":1},"homebridge-comelit-sb-platform":{"verified":1},"homebridge-comelit-vedo-platform":{"verified":1},"homebridge-config-ui":{"hidden":1},"homebridge-config-ui-rdp":{"hidden":1},"homebridge-config-ui-x":{"verified":1},"homebridge-connectlife-ac":{"verified":1},"homebridge-cool-automation":{"icon":"homebridge-cool-automation","verified":1},"homebridge-coviva-hager":{"verified":1},"homebridge-cron-scheduler":{"verified":1},"homebridge-cuby":{"verified":1},"homebridge-daelim-smarthome":{"verified":1},"homebridge-dafang-mqtt-republish":{"verified":1},"homebridge-dahua-alarm":{"icon":"homebridge-dahua-alarm","verified":1},"homebridge-dahua-alerts":{"verified":1},"homebridge-daikin-cloud":{"verified":1},"homebridge-daikin-local":{"verified":1},"homebridge-daikin-local-platform":{"verified":1},"homebridge-daikin-oneplus":{"verified":1},"homebridge-daikin-smart-ac":{"verified":1},"homebridge-daikin-tempsensor-nocloud":{"verified":1},"homebridge-davis":{"verified":1},"homebridge-deconz":{"icon":"homebridge-deconz","verified":1},"homebridge-deebot":{"icon":"homebridge-deebot","maintained":1,"verified":1},"homebridge-deebotecovacs":{"verified":1},"homebridge-delay-switch":{"icon":"homebridge-delay-switch","verified":1},"homebridge-denon-heos":{"verified":1},"homebridge-denon-tv":{"verified":1},"homebridge-device-alive":{"verified":1},"homebridge-deye":{"verified":1},"homebridge-digitalstrom-plugin":{"verified":1},"homebridge-dolphin":{"icon":"homebridge-dolphin","verified":1},"homebridge-doorbird":{"verified":1},"homebridge-dreamscreen-rm":{"icon":"homebridge-dreamscreen-rm","verified":1},"homebridge-dreo":{"icon":"homebridge-dreo","verified":1},"homebridge-dummy":{"verified":1},"homebridge-dune-hd":{"icon":"homebridge-dune-hd","verified":1},"homebridge-dynamicapi":{"verified":1},"homebridge-dyson-bp01":{"icon":"homebridge-dyson-bp01","verified":1},"homebridge-dyson-pure-cool":{"verified":1},"homebridge-easee":{"icon":"homebridge-easee","verified":1},"homebridge-ecoforest-thermostat":{"icon":"homebridge-ecoforest-thermostat","verified":1},"homebridge-econet-rheem":{"icon":"homebridge-econet-rheem","verified":1},"homebridge-ecoplug":{"verified":1},"homebridge-ecowitt-weather-sensors":{"icon":"homebridge-ecowitt-weather-sensors","verified":1},"homebridge-edomoticz":{"verified":1},"homebridge-eggtimer-plugin":{"verified":1},"homebridge-egreat-androidtv":{"icon":"homebridge-egreat-androidtv","verified":1},"homebridge-electra-smart":{"icon":"homebridge-electra-smart","verified":1},"homebridge-electricitymaps":{"verified":1},"homebridge-elkm1":{"verified":1},"homebridge-eltako-minisafe2":{"verified":1},"homebridge-enphase-envoy":{"verified":1},"homebridge-enviroindoor":{"verified":1},"homebridge-enviroplus":{"verified":1},"homebridge-envirourban":{"verified":1},"homebridge-envisalink":{"verified":1},"homebridge-envisalink-ademco":{"icon":"homebridge-envisalink-ademco","verified":1},"homebridge-eosstb":{"verified":1},"homebridge-eufy-security":{"icon":"homebridge-eufy-security","verified":1},"homebridge-evohome":{"verified":1},"homebridge-ewelink":{"icon":"homebridge-ewelink","newScope":{"from":"homebridge-ewelink","to":"@homebridge-plugins/homebridge-ewelink","switch":"12.3.3"},"verified":1},"homebridge-exivo":{"verified":1},"homebridge-ezviz":{"verified":1},"homebridge-fenix-tft-wifi":{"verified":1},"homebridge-fhem":{"verified":1},"homebridge-fibaro-hc3":{"verified":1},"homebridge-fibaro-home-center":{"icon":"homebridge-fibaro-home-center","verified":1},"homebridge-flair":{"verified":1},"homebridge-flobymoen":{"verified":1},"homebridge-flume":{"icon":"homebridge-flume","maintained":1,"verified":1},"homebridge-fordpass":{"icon":"homebridge-fordpass","verified":1},"homebridge-foxess":{"verified":1},"homebridge-freeathome-local-api":{"verified":1},"homebridge-freebox-player-delta":{"verified":1},"homebridge-frigidaire-dehumidifier":{"verified":1},"homebridge-fritz-platform":{"verified":1},"homebridge-ftp-motion":{"verified":1},"homebridge-fujitsu-airstage":{"verified":1},"homebridge-futurehome":{"icon":"homebridge-futurehome","verified":1},"homebridge-genie-aladdin-connect":{"newScope":{"from":"homebridge-genie-aladdin-connect","to":"@homebridge-plugins/homebridge-aladdin-connect","switch":"4.2.1"},"verified":1},"homebridge-glances":{"verified":1},"homebridge-gogogate2":{"verified":1},"homebridge-google-nest-sdm":{"verified":1},"homebridge-govee":{"icon":"homebridge-govee","newScope":{"from":"homebridge-govee","to":"@homebridge-plugins/homebridge-govee","switch":"10.15.0"},"verified":1},"homebridge-gpio-doorbell":{"verified":1},"homebridge-gpio-rgb-ledstrip":{"verified":1},"homebridge-gpio-rgbw-ledstrip":{"verified":1},"homebridge-gree-ac":{"verified":1},"homebridge-green-mountain-grills":{"verified":1},"homebridge-grohe-sense":{"verified":1},"homebridge-gsh":{"icon":"homebridge-gsh","maintained":1,"verified":1},"homebridge-haieracbridge-platform":{"verified":1},"homebridge-harmony":{"verified":1},"homebridge-hatch-baby-rest":{"verified":1},"homebridge-hikconnect":{"verified":1},"homebridge-hilo":{"verified":1},"homebridge-homeconnect":{"icon":"homebridge-homeconnect","verified":1},"homebridge-homekit-control":{"icon":"homebridge-homekit-control","verified":1},"homebridge-homeqtt-alarm":{"verified":1},"homebridge-homewizard-energy-socket":{"verified":1},"homebridge-homewizard-power-consumption":{"verified":1},"homebridge-homeworks":{"verified":1},"homebridge-hsd":{"verified":1},"homebridge-http-curtain":{"verified":1},"homebridge-http-garage-doors":{"icon":"homebridge-http-garage-doors","verified":1},"homebridge-http-iot":{"verified":1},"homebridge-http-json-thermometer":{"verified":1},"homebridge-http-leak-sensor":{"verified":1},"homebridge-http-sensors-switches":{"icon":"homebridge-http-sensors-switches","verified":1},"homebridge-hubitat-tonesto7":{"verified":1},"homebridge-hubspace":{"verified":1},"homebridge-hue":{"icon":"homebridge-hue","verified":1},"homebridge-hue-daylight-sync":{"verified":1},"homebridge-hunter-hydrawise":{"icon":"homebridge-hunter-hydrawise","verified":1},"homebridge-hyperion-jub":{"verified":1},"homebridge-hyundai-bluelink":{"verified":1},"homebridge-i6-bigassfans":{"verified":1},"homebridge-infinitude-v2":{"verified":1},"homebridge-intelliclima":{"icon":"homebridge-intelliclima","verified":1},"homebridge-intercom-automation-hat":{"verified":1},"homebridge-irobot-v2":{"verified":1},"homebridge-itho-daalderop":{"verified":1},"homebridge-jablotron":{"verified":1},"homebridge-jewish-calendar":{"verified":1},"homebridge-juicebox":{"verified":1},"homebridge-kasa-hub":{"verified":1},"homebridge-kasa-python":{"icon":"homebridge-kasa-python","verified":1},"homebridge-keylights":{"verified":1},"homebridge-kiwigrid":{"verified":1},"homebridge-kodi":{"icon":"homebridge-kodi","verified":1},"homebridge-konnected":{"verified":1},"homebridge-kumo":{"verified":1},"homebridge-lacrosseview":{},"homebridge-landroid":{"verified":1},"homebridge-lay-z-spa":{"verified":1},"homebridge-leridian-dynamics":{"icon":"homebridge-leridian-dynamics","verified":1},"homebridge-level-sense":{"verified":1},"homebridge-leviton":{"verified":1},"homebridge-levoit-air-purifier":{"verified":1},"homebridge-levoit-humidifiers":{"verified":1},"homebridge-lg-enervu":{"icon":"homebridge-lg-enervu","verified":1},"homebridge-lg-thinq":{"verified":1},"homebridge-lg-thinq-ac":{"verified":1},"homebridge-lgwebos-tv":{"verified":1},"homebridge-lifx-plugin":{"verified":1},"homebridge-lighthouse":{"verified":1},"homebridge-lightwaverf":{"verified":1},"homebridge-linak":{"verified":1},"homebridge-litter-robot-connect":{"verified":1},"homebridge-logic-switch":{"verified":1},"homebridge-logo-platform":{"verified":1},"homebridge-loxone-control":{"icon":"homebridge-loxone-control","verified":1},"homebridge-loxone-proxy":{"icon":"homebridge-loxone-proxy","verified":1},"homebridge-lutron-caseta-leap":{"newScope":{"from":"homebridge-lutron-caseta-leap","to":"@homebridge-plugins/homebridge-lutron-caseta-leap","switch":"2.6.0"},"verified":1},"homebridge-luxtronik2":{"verified":1},"homebridge-magic-occupancy":{"verified":1},"homebridge-magichome-dynamic-platform":{"verified":1},"homebridge-meater":{"icon":"homebridge-meater","maintained":1,"newScope":{"from":"homebridge-meater","to":"@homebridge-plugins/homebridge-meater","switch":"2.0.0"},"verified":1},"homebridge-melcloud-control":{"verified":1},"homebridge-meraki-control":{"verified":1},"homebridge-mercedesme":{"verified":1},"homebridge-meross":{"icon":"homebridge-meross","maintained":1,"newScope":{"from":"homebridge-meross","to":"@homebridge-plugins/homebridge-meross","switch":"10.8.1"},"verified":1},"homebridge-mertik-fireplace":{"verified":1},"homebridge-messenger":{"verified":1},"homebridge-mhacwifi1-lan":{"verified":1},"homebridge-mhi-wfrac":{"icon":"homebridge-mhi-wfrac","verified":1},"homebridge-mi-humidifier":{"verified":1},"homebridge-mi-hygrothermograph":{"verified":1},"homebridge-micronova-agua-iot-stove":{"verified":1},"homebridge-midea-platform":{"icon":"homebridge-midea-platform","verified":1},"homebridge-mieleathome":{"verified":1},"homebridge-mihomegateway":{"verified":1},"homebridge-milighthub-platform":{"verified":1},"homebridge-miot":{"verified":1},"homebridge-mobilelink":{"verified":1},"homebridge-moodo":{"verified":1},"homebridge-moonraker":{"verified":1},"homebridge-mqtt":{"verified":1},"homebridge-mqtt-ceiling-fan-remote":{"verified":1},"homebridge-mqtt-tasmota":{"verified":1},"homebridge-mqttsmokesensor":{"verified":1},"homebridge-mqttthing":{"verified":1},"homebridge-multiswitcheroo":{"verified":1},"homebridge-music":{"icon":"homebridge-music","verified":1},"homebridge-musiccast-multiroom":{"verified":1},"homebridge-my-wallbox":{"icon":"homebridge-my-wallbox","verified":1},"homebridge-mylink":{"verified":1},"homebridge-myplace":{"verified":1},"homebridge-myq":{"verified":1},"homebridge-mysmartblinds-bridge":{"verified":1},"homebridge-naim-audio":{"verified":1},"homebridge-nb":{"icon":"homebridge-nb","verified":1},"homebridge-neptun-smart":{"verified":1},"homebridge-ness-d16x":{"verified":1},"homebridge-nest":{"icon":"homebridge-nest","verified":1},"homebridge-nest-cam":{"icon":"homebridge-nest-cam","verified":1},"homebridge-network-presence":{"verified":1},"homebridge-ngbs-icon-thermostat":{"verified":1},"homebridge-node-alarm-dot-com":{"verified":1},"homebridge-noip":{"icon":"homebridge-noip","maintained":1,"newScope":{"from":"homebridge-noip","to":"@homebridge-plugins/homebridge-noip","switch":"4.0.0"},"verified":1},"homebridge-nordpool-baltics":{"icon":"homebridge-nordpool-baltics","verified":1},"homebridge-notifyevents":{"verified":1},"homebridge-nukiio":{"verified":1},"homebridge-nuvo":{"verified":1},"homebridge-octoprint-motion":{"verified":1},"homebridge-omnik":{"verified":1},"homebridge-omnilink-platform":{"icon":"homebridge-omnilink-platform","verified":1},"homebridge-onstar":{"verified":1},"homebridge-open-sesame":{"verified":1},"homebridge-openrgb":{"verified":1},"homebridge-opensprinkler-api":{"verified":1},"homebridge-openwebif-tv":{"verified":1},"homebridge-oppo-udp":{"icon":"homebridge-oppo-udp","verified":1},"homebridge-orbit-irrigation":{"icon":"homebridge-orbit-irrigation","verified":1},"homebridge-otgw":{"icon":"homebridge-otgw","verified":1},"homebridge-overda-uranus":{"verified":1},"homebridge-owfs":{"verified":1},"homebridge-p1":{"icon":"homebridge-p1","verified":1},"homebridge-palgate":{"icon":"homebridge-palgate","verified":1},"homebridge-panasonic-ac-platform":{"icon":"homebridge-panasonic-ac-platform","verified":1},"homebridge-panasonic-miraie-ac-platform":{"verified":1},"homebridge-pc-volume":{"verified":1},"homebridge-pentair-intellicenter-ai":{"verified":1},"homebridge-pentair-screenlogic":{"verified":1},"homebridge-people-pro":{"verified":1},"homebridge-petkit-pet-feeder":{"verified":1},"homebridge-petkit-platform":{"verified":1},"homebridge-petsafe-smart-feed":{"verified":1},"homebridge-philips-air":{"verified":1},"homebridge-philips-android-tv":{"verified":1},"homebridge-philipsair-platform":{"verified":1},"homebridge-philipstv-saphitvos":{"verified":1},"homebridge-pichler-pkom4":{"verified":1},"homebridge-pico":{"verified":1},"homebridge-pico-w-bridge":{"verified":1},"homebridge-pihole":{"verified":1},"homebridge-platform-maxcube":{"verified":1},"homebridge-platform-orbit":{"verified":1},"homebridge-playstation":{"verified":1},"homebridge-playstation-game-title":{"verified":1},"homebridge-plex-webhooks":{"verified":1},"homebridge-plugin-govee":{"verified":1},"homebridge-plugin-update-check":{"newScope":{"from":"homebridge-plugin-update-check","to":"@homebridge-plugins/homebridge-plugin-update-check","switch":"1.0.2"},"verified":1},"homebridge-porsche-taycan":{"icon":"homebridge-porsche-taycan","verified":1},"homebridge-presence-switch-msgraph":{"verified":1},"homebridge-presence-switch-slack":{"verified":1},"homebridge-printer":{"verified":1},"homebridge-programmable-http-switch":{"verified":1},"homebridge-prosegur":{"verified":1},"homebridge-prusa-link":{"verified":1},"homebridge-purpleair":{"verified":1},"homebridge-purpleair-sensor":{"verified":1},"homebridge-qolsys":{"verified":1},"homebridge-ra2-select":{"verified":1},"homebridge-rachio-irrigation":{"icon":"homebridge-rachio-irrigation","verified":1},"homebridge-rademacher-homepilot":{"verified":1},"homebridge-radiora2":{"verified":1},"homebridge-rainbird":{"icon":"homebridge-rainbird","maintained":1,"newScope":{"from":"homebridge-rainbird","to":"@homebridge-plugins/homebridge-rainbird","switch":"3.0.0"},"verified":1},"homebridge-ratgdo":{"icon":"homebridge-ratgdo","verified":1},"homebridge-red-alert-via-kumta":{"verified":1},"homebridge-remootio":{"verified":1},"homebridge-resideo":{"icon":"homebridge-resideo","maintained":1,"newScope":{"from":"homebridge-resideo","to":"@homebridge-plugins/homebridge-resideo","switch":"3.0.0"},"verified":1},"homebridge-rgb-ledstrip":{"verified":1},"homebridge-ring":{"icon":"homebridge-ring","verified":1},"homebridge-rinnai-controlr":{"verified":1},"homebridge-rinnai-touch-platform":{"icon":"homebridge-rinnai-touch-platform","verified":1},"homebridge-robonect":{"icon":"homebridge-robonect","verified":1},"homebridge-rocket-smart-home-ui":{"hidden":1},"homebridge-rointe-unofficial":{"verified":1},"homebridge-roomba2":{"newScope":{"from":"homebridge-roomba2","to":"@homebridge-plugins/homebridge-roomba","switch":"1.5.3"},"verified":1},"homebridge-roomme":{"verified":1},"homebridge-rpi":{"icon":"homebridge-rpi","verified":1},"homebridge-rpi-rf-switch":{"verified":1},"homebridge-samsung-tizen":{"verified":1},"homebridge-samsungtv-2014":{"verified":1},"homebridge-samsungtvht":{"verified":1},"homebridge-saphi-tv":{"verified":1},"homebridge-schedule":{"verified":1},"homebridge-scout":{"verified":1},"homebridge-securitysystem":{"verified":1},"homebridge-sensibo-ac":{"icon":"homebridge-sensibo-ac","verified":1},"homebridge-sensit-tank-monitor":{"verified":1},"homebridge-sepsadsecurity":{"verified":1},"homebridge-server":{"hidden":1},"homebridge-sharkiq":{"icon":"homebridge-sharkiq","verified":1},"homebridge-shelly":{"verified":1},"homebridge-shelly-ng":{"verified":1},"homebridge-shortcuts-buttons":{"icon":"homebridge-shortcuts-buttons","verified":1},"homebridge-sht3x":{"verified":1},"homebridge-signalk":{"icon":"homebridge-signalk","verified":1},"homebridge-simplisafe3":{"verified":1},"homebridge-sinricpro":{"icon":"homebridge-sinricpro","verified":1},"homebridge-skybell":{"verified":1},"homebridge-sleepme":{"verified":1},"homebridge-slide-shutter":{"verified":1},"homebridge-sma-home-manager":{"verified":1},"homebridge-smart-irrigation":{"verified":1},"homebridge-smartcielo":{"verified":1},"homebridge-smartdry":{"verified":1},"homebridge-smartglass":{"verified":1},"homebridge-smarthomeng":{"verified":1},"homebridge-smarthq":{},"homebridge-smartthings":{"verified":1},"homebridge-smartthings-ik":{"verified":1},"homebridge-smtp-motion":{"verified":1},"homebridge-snowsense":{"icon":"homebridge-snowsense","verified":1},"homebridge-solaxcloud-api":{"verified":1},"homebridge-solis5g-battery":{"verified":1},"homebridge-somfy-hotwired":{"verified":1},"homebridge-somfy-tahoma-screen":{"verified":1},"homebridge-somneo":{"verified":1},"homebridge-sonos":{"verified":1},"homebridge-sonos-multiroom":{"verified":1},"homebridge-sonos-starter-track":{"verified":1},"homebridge-sony-audio":{"verified":1},"homebridge-sp108e-platform":{"verified":1},"homebridge-spanet":{"verified":1},"homebridge-spotify-speaker":{"verified":1},"homebridge-spruce-irrigation":{"verified":1},"homebridge-stagekit":{"verified":1},"homebridge-stagg-ekg-plus":{"verified":1},"homebridge-star-projector":{"verified":1},"homebridge-sternet-smart-lan":{"verified":1},"homebridge-subaru":{"verified":1},"homebridge-sunsa":{"verified":1},"homebridge-switch-button":{"verified":1},"homebridge-switchbot-bluetooth-platform":{"verified":1},"homebridge-switchbot-for-mac":{"verified":1},"homebridge-switchbot-sensor-ble":{"verified":1},"homebridge-switcher-platform":{"icon":"homebridge-switcher-platform","verified":1},"homebridge-tadiran-ac":{"verified":1},"homebridge-tado-ac":{"icon":"homebridge-tado-ac","verified":1},"homebridge-tado-platform":{"icon":"homebridge-tado","maintained":1,"newScope":{"from":"homebridge-tado-platform","to":"@homebridge-plugins/homebridge-tado","switch":"6.0.14"},"verified":1},"homebridge-tapo-camera":{"verified":1},"homebridge-tasmota":{"icon":"homebridge-tasmota","verified":1},"homebridge-tasmota-control":{"verified":1},"homebridge-tasmota-zbbridge":{"verified":1},"homebridge-tcc":{"icon":"homebridge-tcc","verified":1},"homebridge-television-universal-control":{"verified":1},"homebridge-temperature-sensor-dht":{"verified":1},"homebridge-tempo":{"icon":"homebridge-tempo","verified":1},"homebridge-tempstick":{"verified":1},"homebridge-tesla":{"verified":1},"homebridge-tesy-heater-v2":{"verified":1},"homebridge-texecom-connect":{"verified":1},"homebridge-thermobit":{"maintained":1,"verified":1},"homebridge-tibber-price":{"verified":1},"homebridge-tibberswitch":{"verified":1},"homebridge-tidbyt":{"verified":1},"homebridge-tiko":{"icon":"homebridge-tiko","verified":1},"homebridge-tivo-control":{"verified":1},"homebridge-to-hoobs":{"hidden":1},"homebridge-tovala":{"icon":"homebridge-tovala","verified":1},"homebridge-tp-link-access-control":{"verified":1},"homebridge-tp-link-powerline":{"maintained":1},"homebridge-tp-link-tapo":{"verified":1},"homebridge-tplink-smarthome":{"verified":1},"homebridge-ttlock":{"verified":1},"homebridge-tuya":{"verified":1},"homebridge-tuya-ir":{"verified":1},"homebridge-tuya-platform":{"verified":1},"homebridge-tuya-platform-talrhvfork":{"verified":1},"homebridge-twinkly-plus":{"verified":1},"homebridge-uconnect":{"verified":1},"homebridge-ueboom":{"verified":1},"homebridge-ui":{"hidden":1},"homebridge-unifi-access":{"icon":"homebridge-unifi-access","verified":1},"homebridge-unifi-occupancy":{"verified":1},"homebridge-unifi-poe-control":{"verified":1},"homebridge-unifi-protect":{"icon":"homebridge-unifi-protect","verified":1},"homebridge-unifi-protect-camera-motion":{"verified":1},"homebridge-unifi-smartpower":{"newScope":{"from":"homebridge-unifi-smartpower","to":"@homebridge-plugins/homebridge-unifi-network","switch":"2.3.0"},"verified":1},"homebridge-ups":{"icon":"homebridge-ups","verified":1},"homebridge-velux":{"icon":"homebridge-velux","verified":1},"homebridge-velux-active":{"verified":1},"homebridge-verisure":{"verified":1},"homebridge-vesync-v2":{"verified":1},"homebridge-videodoorbell":{"verified":1},"homebridge-vieramatic":{"verified":1},"homebridge-virtual-accessories":{"icon":"homebridge-virtual-accessories","verified":1},"homebridge-virtual-device":{"maintained":1},"homebridge-volvo":{"verified":1},"homebridge-washingmachine-pow":{"verified":1},"homebridge-wattbox":{"newScope":{"from":"homebridge-wattbox","to":"@homebridge-plugins/homebridge-wattbox","switch":"3.2.0"},"verified":1},"homebridge-wattbox-ip":{"verified":1},"homebridge-weather-plus":{"verified":1},"homebridge-weatherflow-tempest":{"verified":1},"homebridge-webos-tv":{"verified":1},"homebridge-website-change-check":{"verified":1},"homebridge-wemo":{"icon":"homebridge-wemo","maintained":1,"newScope":{"from":"homebridge-wemo","to":"@homebridge-plugins/homebridge-wemo","switch":"7.0.0"},"verified":1},"homebridge-winix-purifiers":{"verified":1},"homebridge-wiser":{"verified":1},"homebridge-wiz-lan":{"verified":1},"homebridge-wled-ws":{"icon":"homebridge-wled-ws","verified":1},"homebridge-wol":{"verified":1},"homebridge-ws":{"icon":"homebridge-ws","verified":1},"homebridge-wyze-robovac":{"verified":1},"homebridge-wyze-smart-home":{"verified":1},"homebridge-xbox-tv":{"verified":1},"homebridge-xfinityhome":{"verified":1},"homebridge-xiaomi-aqara-ac-cooler":{"verified":1},"homebridge-xiaomi-fan":{"verified":1},"homebridge-xiaomi-mi-air-purifier":{"verified":1},"homebridge-xiaomi-roborock-vacuum":{"verified":1},"homebridge-yamaha-receiver":{"icon":"homebridge-yamaha-receiver","verified":1},"homebridge-yeelighter":{"verified":1},"homebridge-yet-another-ping":{"verified":1},"homebridge-yindl":{"verified":1},"homebridge-yokis-usb":{"verified":1},"homebridge-yolink":{"verified":1},"homebridge-z2m":{"verified":1},"homebridge-zidoo-androidtv":{"icon":"homebridge-zidoo-androidtv","verified":1},"homebridge-zigbee-nt":{"verified":1},"homebridge-zp":{"icon":"homebridge-zp","verified":1}} \ No newline at end of file +{"@0x5e/homebridge-tuya-platform":{"icon":"homebridge-tuya-platform","verified":1},"@balansse/homebridge-vivint":{"verified":1},"@busse/homebridge-pluggit":{"verified":1},"@chazepps/homebridge-hejhome":{"icon":"homebridge-hejhome","verified":1},"@danielgindi/homebridge-bcp-charger":{"verified":1},"@dr_chai/homebridge-airthings":{"verified":1},"@elshaer/homebridge-hdl-buspro-enhanced":{"icon":"homebridge-hdl-buspro-enhanced","verified":1},"@hansfriedrich/homebridge-feller-wiser":{"verified":1},"@hernas/homebridge-panasonic-heat-pump":{"verified":1},"@hernas/homebridge-salus-sq610":{"verified":1},"@homebridge-plugins/homebridge-air":{"icon":"homebridge-air","maintained":1,"scoped":"donavanbecker","verified":1},"@homebridge-plugins/homebridge-aladdin-connect":{"icon":"homebridge-aladdin-connect","maintained":1,"scoped":"derek-miller","verified":1},"@homebridge-plugins/homebridge-august":{"icon":"homebridge-august","maintained":1,"scoped":"donavanbecker","verified":1},"@homebridge-plugins/homebridge-camera-ffmpeg":{"icon":"homebridge-camera-ffmpeg","maintained":1,"scoped":"sunookitsune","verified":1},"@homebridge-plugins/homebridge-cloudflared-tunnel":{"icon":"homebridge-cloudflared-tunnel","maintained":1,"scoped":"donavanbecker","verified":1},"@homebridge-plugins/homebridge-ecovacs":{"icon":"homebridge-ecovacs","maintained":1,"scoped":"bwp91","verified":1},"@homebridge-plugins/homebridge-ewelink":{"icon":"homebridge-ewelink","maintained":1,"scoped":"bwp91","verified":1},"@homebridge-plugins/homebridge-govee":{"icon":"homebridge-govee","maintained":1,"scoped":"bwp91","verified":1},"@homebridge-plugins/homebridge-lutron-caseta-leap":{"icon":"homebridge-lutron-caseta-leap","maintained":1,"scoped":"thenewwazoo","verified":1},"@homebridge-plugins/homebridge-meater":{"icon":"homebridge-meater","maintained":1,"scoped":"donavanbecker","verified":1},"@homebridge-plugins/homebridge-meross":{"icon":"homebridge-meross","maintained":1,"scoped":"bwp91","verified":1},"@homebridge-plugins/homebridge-noip":{"icon":"homebridge-noip","maintained":1,"scoped":"donavanbecker","verified":1},"@homebridge-plugins/homebridge-plugin-update-check":{"maintained":1,"scoped":"sunookitsune","verified":1},"@homebridge-plugins/homebridge-rainbird":{"icon":"homebridge-rainbird","maintained":1,"scoped":"donavanbecker","verified":1},"@homebridge-plugins/homebridge-resideo":{"icon":"homebridge-resideo","maintained":1,"scoped":"donavanbecker","verified":1},"@homebridge-plugins/homebridge-roomba":{"icon":"homebridge-roomba","maintained":1,"scoped":"karlvr","verified":1},"@homebridge-plugins/homebridge-sharkiq":{"icon":"homebridge-sharkiq","maintained":1,"scoped":"Bubba8291","verified":1},"@homebridge-plugins/homebridge-smarthq":{"icon":"homebridge-smarthq","maintained":1,"scoped":"donavanbecker","verified":1},"@homebridge-plugins/homebridge-tado":{"icon":"homebridge-tado","maintained":1,"scoped":"smart7324","verified":1},"@homebridge-plugins/homebridge-unifi-network":{"maintained":1,"scoped":"derek-miller","verified":1},"@homebridge-plugins/homebridge-wattbox":{"maintained":1,"scoped":"derek-miller","verified":1},"@homebridge-plugins/homebridge-wemo":{"icon":"homebridge-wemo","maintained":1,"scoped":"bwp91","verified":1},"@homebridge-pluginshomebridge-sharkiq":{},"@jdes/homebridge-tost-corp-somfy-rts-web":{"verified":1},"@milo526/homebridge-tuya-web":{"verified":1},"@o-lukas/homebridge-smartthings-tv":{"verified":1},"@ohmantics/homebridge-airmega":{"verified":1},"@petro-kushchak/homebridge-homepod-radio":{"icon":"homebridge-homepod-radio","verified":1},"@pietrolubini/homebridge-ecoflow":{"icon":"homebridge-ecoflow","verified":1},"@pst-on-npm/homebridge-enocean":{"verified":1},"@puchupala/homebridge-nature-remo-multi-toggle-light":{"verified":1},"@rsauget/homebridge-flexom":{"verified":1},"@string-bean/homebridge-drayton-wiser":{"verified":1},"@switchbot/homebridge-switchbot":{"icon":"homebridge-switchbot","verified":1},"@ubreu/homebridge-helios-kwl":{"verified":1},"@ubreu/homebridge-ibricks":{"verified":1},"@vandubois/homebridge-virtual-switch":{"icon":"homebridge-virtual-switch","verified":1},"@xenuiswatching/homebridge-hubspace":{"verified":1},"homebridge-3em-energy-meter":{"verified":1},"homebridge-433-arduino":{"verified":1},"homebridge-abode-lights":{"verified":1},"homebridge-actron-neo":{"icon":"homebridge-actron-neo","verified":1},"homebridge-actron-que":{"verified":1},"homebridge-adb":{"icon":"homebridge-adb","verified":1},"homebridge-adguardhome":{"icon":"homebridge-adguardhome","verified":1},"homebridge-adt-pulse":{"verified":1},"homebridge-advanced-timer":{"verified":1},"homebridge-agile-octopus-rates":{"verified":1},"homebridge-air":{"maintained":1,"newScope":{"from":"homebridge-air","to":"@homebridge-plugins/homebridge-air","switch":"1.0.0"},"verified":1},"homebridge-air-q":{"verified":1},"homebridge-airconditioner-mitsubishi-au-nz":{"verified":1},"homebridge-airport-express-connected":{"icon":"homebridge-airport-express-connected","verified":1},"homebridge-airthings":{"verified":1},"homebridge-airtouch5-platform":{"verified":1},"homebridge-airzone-cloud":{"verified":1},"homebridge-alexa":{"icon":"homebridge-alexa","verified":1},"homebridge-alexa-player":{"verified":1},"homebridge-alexa-smarthome":{"verified":1},"homebridge-alphaess":{"verified":1},"homebridge-amazondash-mac":{"verified":1},"homebridge-ambiback":{"icon":"homebridge-ambiback","verified":1},"homebridge-ambient-realtime":{"icon":"homebridge-ambient-realtime","verified":1},"homebridge-ambient-weather-sensors":{"icon":"homebridge-ambient-weather-sensors","verified":1},"homebridge-androidtv":{"verified":1},"homebridge-anthemreceiver":{"verified":1},"homebridge-apc-back-ups-hs500":{"verified":1},"homebridge-appletv-enhanced":{"icon":"homebridge-appletv-enhanced","verified":1},"homebridge-aqara-ir-controller":{"verified":1},"homebridge-aqicn":{"verified":1},"homebridge-argo":{"verified":1},"homebridge-arlo":{"maintained":1},"homebridge-atomberg-fan":{"verified":1},"homebridge-august":{"maintained":1,"newScope":{"from":"homebridge-august","to":"@homebridge-plugins/homebridge-august","switch":"3.0.0"},"verified":1},"homebridge-automower":{"verified":1},"homebridge-automower-platform":{"verified":1},"homebridge-awair2":{"verified":1},"homebridge-awattar":{},"homebridge-away-mode":{"verified":1},"homebridge-aws-iot":{"verified":1},"homebridge-balboa-spa":{"verified":1},"homebridge-bed-control":{"verified":1},"homebridge-beoplay":{"verified":1},"homebridge-blaq":{"icon":"homebridge-blaq","verified":1},"homebridge-blauberg-vento":{"verified":1},"homebridge-ble-thermobeacon":{"verified":1},"homebridge-blinds":{"verified":1},"homebridge-blinds-cmd":{"verified":1},"homebridge-blink-for-home":{"verified":1},"homebridge-blinkcameras":{"maintained":1},"homebridge-blueair-purifier":{"icon":"homebridge-blueair-purifier","verified":1},"homebridge-bold":{"verified":1},"homebridge-bold-ble":{"verified":1},"homebridge-bond":{"verified":1},"homebridge-bondbridge":{"verified":1},"homebridge-boschcontrolpanel_bgseries":{"verified":1},"homebridge-bravia":{"verified":1},"homebridge-bravia-tvos":{"verified":1},"homebridge-brewer":{"verified":1},"homebridge-browsercam":{"verified":1},"homebridge-bthome":{"verified":1},"homebridge-caddx-interlogix":{"verified":1},"homebridge-calendar-scheduler":{"verified":1},"homebridge-camera-ffmpeg":{"newScope":{"from":"homebridge-camera-ffmpeg","to":"@homebridge-plugins/homebridge-camera-ffmpeg","switch":"3.1.4"},"verified":1},"homebridge-camera-ui":{"verified":1},"homebridge-carrier-infinity":{"verified":1},"homebridge-cgd-garage-door":{"verified":1},"homebridge-cloudflared-tunnel":{"maintained":1,"newScope":{"from":"homebridge-cloudflared-tunnel","to":"@homebridge-plugins/homebridge-cloudflared-tunnel","switch":"2.0.0"}},"homebridge-comed-hourlypricing":{"icon":"homebridge-comed-hourlypricing","verified":1},"homebridge-comelit-platform":{"verified":1},"homebridge-comelit-sb-platform":{"verified":1},"homebridge-comelit-vedo-platform":{"verified":1},"homebridge-config-ui":{"hidden":1},"homebridge-config-ui-rdp":{"hidden":1},"homebridge-config-ui-x":{"verified":1},"homebridge-connectlife-ac":{"verified":1},"homebridge-cool-automation":{"icon":"homebridge-cool-automation","verified":1},"homebridge-coviva-hager":{"verified":1},"homebridge-cron-scheduler":{"verified":1},"homebridge-cuby":{"verified":1},"homebridge-daelim-smarthome":{"verified":1},"homebridge-dafang-mqtt-republish":{"verified":1},"homebridge-dahua-alarm":{"icon":"homebridge-dahua-alarm","verified":1},"homebridge-dahua-alerts":{"verified":1},"homebridge-daikin-cloud":{"verified":1},"homebridge-daikin-local":{"verified":1},"homebridge-daikin-local-platform":{"verified":1},"homebridge-daikin-oneplus":{"verified":1},"homebridge-daikin-smart-ac":{"verified":1},"homebridge-daikin-tempsensor-nocloud":{"verified":1},"homebridge-davis":{"verified":1},"homebridge-deconz":{"icon":"homebridge-deconz","verified":1},"homebridge-deebot":{"newScope":{"from":"homebridge-deebot","to":"@homebridge-plugins/homebridge-ecovacs","switch":"7.0.0"}},"homebridge-deebotecovacs":{"verified":1},"homebridge-delay-switch":{"icon":"homebridge-delay-switch","verified":1},"homebridge-denon-heos":{"verified":1},"homebridge-denon-tv":{"verified":1},"homebridge-device-alive":{"verified":1},"homebridge-deye":{"verified":1},"homebridge-digitalstrom-plugin":{"verified":1},"homebridge-dolphin":{"icon":"homebridge-dolphin","verified":1},"homebridge-doorbell-telegram-photo":{"verified":1},"homebridge-doorbird":{"verified":1},"homebridge-dreamscreen-rm":{"icon":"homebridge-dreamscreen-rm","verified":1},"homebridge-dreo":{"icon":"homebridge-dreo","verified":1},"homebridge-dummy":{"icon":"homebridge-dummy","verified":1},"homebridge-dune-hd":{"icon":"homebridge-dune-hd","verified":1},"homebridge-dynamicapi":{"verified":1},"homebridge-dyson-bp01":{"icon":"homebridge-dyson-bp01","verified":1},"homebridge-dyson-pure-cool":{"verified":1},"homebridge-easee":{"icon":"homebridge-easee","verified":1},"homebridge-ecoforest-thermostat":{"icon":"homebridge-ecoforest-thermostat","verified":1},"homebridge-econet-rheem":{"icon":"homebridge-econet-rheem","verified":1},"homebridge-ecowitt-weather-sensors":{"icon":"homebridge-ecowitt-weather-sensors","verified":1},"homebridge-edomoticz":{"verified":1},"homebridge-eggtimer-plugin":{"verified":1},"homebridge-egreat-androidtv":{"icon":"homebridge-egreat-androidtv","verified":1},"homebridge-electra-smart":{"icon":"homebridge-electra-smart","verified":1},"homebridge-electricitymaps":{"verified":1},"homebridge-elkm1":{"verified":1},"homebridge-eltako-minisafe2":{"verified":1},"homebridge-enphase-envoy":{"verified":1},"homebridge-enviroindoor":{"verified":1},"homebridge-enviroplus":{"verified":1},"homebridge-envirourban":{"verified":1},"homebridge-envisalink":{"verified":1},"homebridge-envisalink-ademco":{"icon":"homebridge-envisalink-ademco","verified":1},"homebridge-eosstb":{"verified":1},"homebridge-eufy-security":{"icon":"homebridge-eufy-security","verified":1},"homebridge-evohome":{"verified":1},"homebridge-ewelink":{"newScope":{"from":"homebridge-ewelink","to":"@homebridge-plugins/homebridge-ewelink","switch":"12.3.3"}},"homebridge-exivo":{"verified":1},"homebridge-fhem":{"verified":1},"homebridge-fibaro-hc3":{"verified":1},"homebridge-fibaro-home-center":{"icon":"homebridge-fibaro-home-center","verified":1},"homebridge-flair":{"verified":1},"homebridge-flobymoen":{"verified":1},"homebridge-flume":{"icon":"homebridge-flume","maintained":1,"verified":1},"homebridge-fordpass":{"icon":"homebridge-fordpass","verified":1},"homebridge-foxess":{"verified":1},"homebridge-freeathome-local-api":{"verified":1},"homebridge-frigidaire-dehumidifier":{"verified":1},"homebridge-fritz-platform":{"verified":1},"homebridge-ftp-motion":{"verified":1},"homebridge-fujitsu-airstage":{"verified":1},"homebridge-futurehome":{"icon":"homebridge-futurehome","verified":1},"homebridge-genie-aladdin-connect":{"newScope":{"from":"homebridge-genie-aladdin-connect","to":"@homebridge-plugins/homebridge-aladdin-connect","switch":"4.2.1"},"verified":1},"homebridge-glances":{"verified":1},"homebridge-gogogate2":{"verified":1},"homebridge-google-nest-sdm":{"verified":1},"homebridge-govee":{"newScope":{"from":"homebridge-govee","to":"@homebridge-plugins/homebridge-govee","switch":"10.15.0"}},"homebridge-gpio-doorbell":{"verified":1},"homebridge-gpio-rgb-ledstrip":{"verified":1},"homebridge-gpio-rgbw-ledstrip":{"verified":1},"homebridge-gree-ac":{"verified":1},"homebridge-green-mountain-grills":{"verified":1},"homebridge-grohe-sense":{"verified":1},"homebridge-gsh":{"icon":"homebridge-gsh","maintained":1,"verified":1},"homebridge-haieracbridge-platform":{"verified":1},"homebridge-harmony":{"verified":1},"homebridge-hatch-baby-rest":{"verified":1},"homebridge-hikconnect":{"verified":1},"homebridge-hilo":{"verified":1},"homebridge-homeconnect":{"icon":"homebridge-homeconnect","verified":1},"homebridge-homekit-control":{"icon":"homebridge-homekit-control","verified":1},"homebridge-homewizard-energy-socket":{"verified":1},"homebridge-homewizard-power-consumption":{"verified":1},"homebridge-homeworks":{"verified":1},"homebridge-hsd":{"verified":1},"homebridge-http-curtain":{"verified":1},"homebridge-http-garage-doors":{"icon":"homebridge-http-garage-doors","verified":1},"homebridge-http-json-thermometer":{"verified":1},"homebridge-http-leak-sensor":{"verified":1},"homebridge-http-sensors-switches":{"icon":"homebridge-http-sensors-switches","verified":1},"homebridge-hubitat-tonesto7":{"verified":1},"homebridge-hubspace":{"verified":1},"homebridge-hue":{"icon":"homebridge-hue","verified":1},"homebridge-hue-daylight-sync":{"verified":1},"homebridge-hunter-hydrawise":{"icon":"homebridge-hunter-hydrawise","verified":1},"homebridge-hyperion-jub":{"verified":1},"homebridge-hyundai-bluelink":{"verified":1},"homebridge-i6-bigassfans":{"verified":1},"homebridge-infinitude-v2":{"verified":1},"homebridge-intelliclima":{"icon":"homebridge-intelliclima","verified":1},"homebridge-intercom":{"verified":1},"homebridge-intercom-automation-hat":{"verified":1},"homebridge-irobot-v2":{"verified":1},"homebridge-itho-daalderop":{"verified":1},"homebridge-jablotron":{"verified":1},"homebridge-jci-hitachi-platform":{"verified":1},"homebridge-jewish-calendar":{"verified":1},"homebridge-juicebox":{"verified":1},"homebridge-kasa-hub":{"verified":1},"homebridge-kasa-python":{"icon":"homebridge-kasa-python","verified":1},"homebridge-keylights":{"verified":1},"homebridge-kiwigrid":{"verified":1},"homebridge-kodi":{"icon":"homebridge-kodi","verified":1},"homebridge-konnected":{"verified":1},"homebridge-kumo":{"verified":1},"homebridge-lacrosseview":{},"homebridge-landroid":{"verified":1},"homebridge-lay-z-spa":{"verified":1},"homebridge-leridian-dynamics":{"icon":"homebridge-leridian-dynamics","verified":1},"homebridge-level-sense":{"verified":1},"homebridge-leviton":{"verified":1},"homebridge-levoit-air-purifier":{"verified":1},"homebridge-levoit-humidifiers":{"verified":1},"homebridge-lg-enervu":{"icon":"homebridge-lg-enervu","verified":1},"homebridge-lg-thinq":{"verified":1},"homebridge-lgwebos-tv":{"verified":1},"homebridge-lifx-plugin":{"verified":1},"homebridge-lighthouse":{"verified":1},"homebridge-lightwaverf":{"verified":1},"homebridge-linak":{"verified":1},"homebridge-litter-robot-connect":{"verified":1},"homebridge-logic-switch":{"verified":1},"homebridge-logo-platform":{"verified":1},"homebridge-loxone-control":{"icon":"homebridge-loxone-control","verified":1},"homebridge-loxone-proxy":{"icon":"homebridge-loxone-proxy","verified":1},"homebridge-lutron-caseta-leap":{"newScope":{"from":"homebridge-lutron-caseta-leap","to":"@homebridge-plugins/homebridge-lutron-caseta-leap","switch":"2.6.0"},"verified":1},"homebridge-luxtronik2":{"verified":1},"homebridge-magic-occupancy":{"verified":1},"homebridge-magichome-dynamic-platform":{"verified":1},"homebridge-meater":{"maintained":1,"newScope":{"from":"homebridge-meater","to":"@homebridge-plugins/homebridge-meater","switch":"2.0.0"}},"homebridge-melcloud-control":{"verified":1},"homebridge-meraki-control":{"verified":1},"homebridge-mercedesme":{"verified":1},"homebridge-meross":{"maintained":1,"newScope":{"from":"homebridge-meross","to":"@homebridge-plugins/homebridge-meross","switch":"10.8.1"}},"homebridge-mertik-fireplace":{"verified":1},"homebridge-messenger":{"verified":1},"homebridge-mhacwifi1-lan":{"verified":1},"homebridge-mhi-wfrac":{"icon":"homebridge-mhi-wfrac","verified":1},"homebridge-mi-humidifier":{"verified":1},"homebridge-mi-hygrothermograph":{"verified":1},"homebridge-midea-platform":{"icon":"homebridge-midea-platform","verified":1},"homebridge-mieleathome":{"verified":1},"homebridge-mihomegateway":{"verified":1},"homebridge-milighthub-platform":{"verified":1},"homebridge-miot":{"verified":1},"homebridge-mobilelink":{"verified":1},"homebridge-moodo":{"verified":1},"homebridge-moonraker":{"verified":1},"homebridge-mqtt":{"verified":1},"homebridge-mqtt-ceiling-fan-remote":{"verified":1},"homebridge-mqtt-tasmota":{"verified":1},"homebridge-mqttsmokesensor":{"verified":1},"homebridge-mqttthing":{"verified":1},"homebridge-multiswitcheroo":{"verified":1},"homebridge-music":{"icon":"homebridge-music","verified":1},"homebridge-musiccast-multiroom":{"verified":1},"homebridge-my-wallbox":{"icon":"homebridge-my-wallbox","verified":1},"homebridge-mylink":{"verified":1},"homebridge-myplace":{"verified":1},"homebridge-mysmartblinds-bridge":{"verified":1},"homebridge-nb":{"icon":"homebridge-nb","verified":1},"homebridge-neptun-smart":{"verified":1},"homebridge-ness-d16x":{"verified":1},"homebridge-nest":{"icon":"homebridge-nest","verified":1},"homebridge-nest-accfactory":{"verified":1},"homebridge-network-presence":{"verified":1},"homebridge-ngbs-icon-thermostat":{"verified":1},"homebridge-node-alarm-dot-com":{"verified":1},"homebridge-noip":{"maintained":1,"newScope":{"from":"homebridge-noip","to":"@homebridge-plugins/homebridge-noip","switch":"4.0.0"}},"homebridge-nordpool-baltics":{"icon":"homebridge-nordpool-baltics","verified":1},"homebridge-notifyevents":{"verified":1},"homebridge-nukiio":{"verified":1},"homebridge-nuvo":{"verified":1},"homebridge-octoprint-motion":{"verified":1},"homebridge-omnik":{"verified":1},"homebridge-omnilink-platform":{"icon":"homebridge-omnilink-platform","verified":1},"homebridge-open-sesame":{"verified":1},"homebridge-openrgb":{"verified":1},"homebridge-opensprinkler-api":{"verified":1},"homebridge-openwebif-tv":{"verified":1},"homebridge-oppo-udp":{"icon":"homebridge-oppo-udp","verified":1},"homebridge-orbit-irrigation":{"icon":"homebridge-orbit-irrigation","verified":1},"homebridge-otgw":{"icon":"homebridge-otgw","verified":1},"homebridge-overda-uranus":{"verified":1},"homebridge-owfs":{"verified":1},"homebridge-p1":{"icon":"homebridge-p1","verified":1},"homebridge-palgate":{"icon":"homebridge-palgate","verified":1},"homebridge-panasonic-ac-platform":{"icon":"homebridge-panasonic-ac-platform","verified":1},"homebridge-panasonic-miraie-ac-platform":{"verified":1},"homebridge-pc-volume":{"verified":1},"homebridge-pentair-intellicenter-ai":{"verified":1},"homebridge-pentair-screenlogic":{"verified":1},"homebridge-people-pro":{"verified":1},"homebridge-petkit-pet-feeder":{"verified":1},"homebridge-petkit-platform":{"verified":1},"homebridge-petsafe-smart-feed":{"verified":1},"homebridge-philips-air":{"verified":1},"homebridge-philips-android-tv":{"verified":1},"homebridge-philipsair-platform":{"verified":1},"homebridge-philipstv-saphitvos":{"verified":1},"homebridge-pichler-pkom4":{"verified":1},"homebridge-pico":{"verified":1},"homebridge-pico-w-bridge":{"verified":1},"homebridge-pihole":{"verified":1},"homebridge-platform-maxcube":{"verified":1},"homebridge-platform-orbit":{"verified":1},"homebridge-playstation":{"verified":1},"homebridge-playstation-game-title":{"verified":1},"homebridge-plex-webhooks":{"verified":1},"homebridge-plugin-govee":{"verified":1},"homebridge-plugin-update-check":{"newScope":{"from":"homebridge-plugin-update-check","to":"@homebridge-plugins/homebridge-plugin-update-check","switch":"1.0.2"}},"homebridge-porsche-taycan":{"icon":"homebridge-porsche-taycan","verified":1},"homebridge-presence-switch-msgraph":{"verified":1},"homebridge-presence-switch-slack":{"verified":1},"homebridge-printer":{"verified":1},"homebridge-programmable-http-switch":{"verified":1},"homebridge-prosegur":{"verified":1},"homebridge-prusa-link":{"verified":1},"homebridge-purpleair":{"verified":1},"homebridge-purpleair-sensor":{"verified":1},"homebridge-qolsys":{"verified":1},"homebridge-ra2-select":{"verified":1},"homebridge-rachio-irrigation":{"icon":"homebridge-rachio-irrigation","verified":1},"homebridge-rademacher-homepilot":{"verified":1},"homebridge-radiora2":{"verified":1},"homebridge-rainbird":{"maintained":1,"newScope":{"from":"homebridge-rainbird","to":"@homebridge-plugins/homebridge-rainbird","switch":"3.0.0"}},"homebridge-ratgdo":{"icon":"homebridge-ratgdo","verified":1},"homebridge-red-alert-via-kumta":{"verified":1},"homebridge-remootio":{"verified":1},"homebridge-resideo":{"maintained":1,"newScope":{"from":"homebridge-resideo","to":"@homebridge-plugins/homebridge-resideo","switch":"3.0.0"}},"homebridge-rgb-ledstrip":{"verified":1},"homebridge-ring":{"icon":"homebridge-ring","verified":1},"homebridge-rinnai-controlr":{"verified":1},"homebridge-rinnai-touch-platform":{"icon":"homebridge-rinnai-touch-platform","verified":1},"homebridge-robonect":{"icon":"homebridge-robonect","verified":1},"homebridge-rocket-smart-home-ui":{"hidden":1},"homebridge-rointe-unofficial":{"verified":1},"homebridge-roomba2":{"newScope":{"from":"homebridge-roomba2","to":"@homebridge-plugins/homebridge-roomba","switch":"1.5.3"}},"homebridge-roomme":{"verified":1},"homebridge-rpi":{"icon":"homebridge-rpi","verified":1},"homebridge-rpi-rf-switch":{"verified":1},"homebridge-samsung-tizen":{"verified":1},"homebridge-samsungtv-2014":{"verified":1},"homebridge-samsungtvht":{"verified":1},"homebridge-saphi-tv":{"verified":1},"homebridge-schedule":{"verified":1},"homebridge-scout":{"verified":1},"homebridge-securitysystem":{"verified":1},"homebridge-sensibo-ac":{"icon":"homebridge-sensibo-ac","verified":1},"homebridge-sensit-tank-monitor":{"verified":1},"homebridge-sepsadsecurity":{"verified":1},"homebridge-server":{"hidden":1},"homebridge-sharkiq":{"maintained":1,"newScope":{"from":"homebridge-sharkiq","to":"@homebridge-plugins/homebridge-sharkiq","switch":"1.3.2"}},"homebridge-shelly":{"verified":1},"homebridge-shelly-ng":{"verified":1},"homebridge-shortcuts-buttons":{"icon":"homebridge-shortcuts-buttons","verified":1},"homebridge-sht3x":{"verified":1},"homebridge-signalk":{"icon":"homebridge-signalk","verified":1},"homebridge-simplisafe3":{"verified":1},"homebridge-sinricpro":{"icon":"homebridge-sinricpro","verified":1},"homebridge-sleepme":{"verified":1},"homebridge-sma-home-manager":{"verified":1},"homebridge-smart-irrigation":{"verified":1},"homebridge-smarthomeng":{"verified":1},"homebridge-smartthings-ik":{"verified":1},"homebridge-smtp-motion":{"verified":1},"homebridge-snowsense":{"icon":"homebridge-snowsense","verified":1},"homebridge-solaxcloud-api":{"verified":1},"homebridge-solis5g-battery":{"verified":1},"homebridge-somfy-hotwired":{"verified":1},"homebridge-somfy-tahoma-screen":{"verified":1},"homebridge-somneo":{"verified":1},"homebridge-sonos":{"verified":1},"homebridge-sonos-multiroom":{"verified":1},"homebridge-sonos-starter-track":{"verified":1},"homebridge-sony-audio":{"verified":1},"homebridge-sp108e-platform":{"verified":1},"homebridge-spanet":{"verified":1},"homebridge-spotify-speaker":{"verified":1},"homebridge-spruce-irrigation":{"verified":1},"homebridge-stagekit":{"verified":1},"homebridge-stagg-ekg-plus":{"verified":1},"homebridge-star-projector":{"verified":1},"homebridge-sternet-smart-lan":{"verified":1},"homebridge-subaru":{"verified":1},"homebridge-sunsa":{"verified":1},"homebridge-sunsynk":{"verified":1},"homebridge-switch-button":{"verified":1},"homebridge-switchbot-bluetooth-platform":{"verified":1},"homebridge-switchbot-for-mac":{"verified":1},"homebridge-switchbot-sensor-ble":{"verified":1},"homebridge-switcher-platform":{"icon":"homebridge-switcher-platform","verified":1},"homebridge-tadiran-ac":{"verified":1},"homebridge-tado-ac":{"icon":"homebridge-tado-ac","verified":1},"homebridge-tado-platform":{"maintained":1,"newScope":{"from":"homebridge-tado-platform","to":"@homebridge-plugins/homebridge-tado","switch":"6.0.14"}},"homebridge-tapo-camera":{"verified":1},"homebridge-tasmota":{"icon":"homebridge-tasmota","verified":1},"homebridge-tasmota-control":{"verified":1},"homebridge-tasmota-zbbridge":{"verified":1},"homebridge-tcc":{"icon":"homebridge-tcc","verified":1},"homebridge-television-universal-control":{"verified":1},"homebridge-temperature-sensor-dht":{"verified":1},"homebridge-tempo":{"icon":"homebridge-tempo","verified":1},"homebridge-tempstick":{"verified":1},"homebridge-tesla":{"verified":1},"homebridge-tesy-heater-v2":{"verified":1},"homebridge-texecom-connect":{"verified":1},"homebridge-texecom-full":{"verified":1},"homebridge-thermobit":{"maintained":1,"verified":1},"homebridge-tibber-price":{"verified":1},"homebridge-tibberswitch":{"verified":1},"homebridge-tidbyt":{"verified":1},"homebridge-tiko":{"icon":"homebridge-tiko","verified":1},"homebridge-tivo-control":{"verified":1},"homebridge-to-hoobs":{"hidden":1},"homebridge-tovala":{"icon":"homebridge-tovala","verified":1},"homebridge-tp-link-access-control":{"verified":1},"homebridge-tp-link-powerline":{"maintained":1},"homebridge-tplink-smarthome":{"verified":1},"homebridge-tsvesync":{"verified":1},"homebridge-ttlock":{"verified":1},"homebridge-tuya":{"verified":1},"homebridge-tuya-ir":{"verified":1},"homebridge-tuya-platform":{"verified":1},"homebridge-tuya-platform-talrhvfork":{"verified":1},"homebridge-twinkly-plus":{"verified":1},"homebridge-uconnect":{"verified":1},"homebridge-ueboom":{"verified":1},"homebridge-ui":{"hidden":1},"homebridge-unifi-access":{"icon":"homebridge-unifi-access","verified":1},"homebridge-unifi-occupancy":{"verified":1},"homebridge-unifi-poe-control":{"verified":1},"homebridge-unifi-protect":{"icon":"homebridge-unifi-protect","verified":1},"homebridge-unifi-protect-camera-motion":{"verified":1},"homebridge-unifi-smartpower":{"newScope":{"from":"homebridge-unifi-smartpower","to":"@homebridge-plugins/homebridge-unifi-network","switch":"2.3.0"},"verified":1},"homebridge-ups":{"icon":"homebridge-ups","verified":1},"homebridge-velux":{"icon":"homebridge-velux","verified":1},"homebridge-velux-active":{"verified":1},"homebridge-verisure":{"verified":1},"homebridge-videodoorbell":{"verified":1},"homebridge-vieramatic":{"verified":1},"homebridge-virtual-accessories":{"icon":"homebridge-virtual-accessories","verified":1},"homebridge-virtual-device":{"maintained":1},"homebridge-volvo":{"verified":1},"homebridge-washingmachine-pow":{"verified":1},"homebridge-wattbox":{"newScope":{"from":"homebridge-wattbox","to":"@homebridge-plugins/homebridge-wattbox","switch":"3.2.0"},"verified":1},"homebridge-wattbox-ip":{"verified":1},"homebridge-weather-plus":{"verified":1},"homebridge-weatherflow-tempest":{"verified":1},"homebridge-webos-tv":{"verified":1},"homebridge-website-change-check":{"verified":1},"homebridge-wemo":{"maintained":1,"newScope":{"from":"homebridge-wemo","to":"@homebridge-plugins/homebridge-wemo","switch":"7.0.0"}},"homebridge-winix-purifiers":{"verified":1},"homebridge-wiser":{"verified":1},"homebridge-wiz-lan":{"verified":1},"homebridge-wled-ws":{"icon":"homebridge-wled-ws","verified":1},"homebridge-wol":{"verified":1},"homebridge-ws":{"icon":"homebridge-ws","verified":1},"homebridge-wyze-robovac":{"verified":1},"homebridge-wyze-smart-home":{"verified":1},"homebridge-xbox-tv":{"verified":1},"homebridge-xfinityhome":{"verified":1},"homebridge-xiaomi-aqara-ac-cooler":{"verified":1},"homebridge-xiaomi-fan":{"verified":1},"homebridge-xiaomi-mi-air-purifier":{"verified":1},"homebridge-xiaomi-roborock-vacuum":{"verified":1},"homebridge-yamaha-receiver":{"icon":"homebridge-yamaha-receiver","verified":1},"homebridge-yeelighter":{"verified":1},"homebridge-yet-another-ping":{"verified":1},"homebridge-yindl":{"verified":1},"homebridge-yolink":{"verified":1},"homebridge-z2m":{"verified":1},"homebridge-zidoo-androidtv":{"icon":"homebridge-zidoo-androidtv","verified":1},"homebridge-zigbee-nt":{"verified":1},"homebridge-zp":{"icon":"homebridge-zp","verified":1}} \ No newline at end of file diff --git a/has-scope-plugins.json b/has-scope-plugins.json index c89ee5a..3573ab3 100644 --- a/has-scope-plugins.json +++ b/has-scope-plugins.json @@ -19,6 +19,11 @@ "to": "@homebridge-plugins/homebridge-cloudflared-tunnel", "switch": "2.0.0" }, + { + "from": "homebridge-deebot", + "to": "@homebridge-plugins/homebridge-ecovacs", + "switch": "7.0.0" + }, { "from": "homebridge-ewelink", "to": "@homebridge-plugins/homebridge-ewelink", @@ -74,6 +79,11 @@ "to": "@homebridge-plugins/homebridge-roomba", "switch": "1.5.3" }, + { + "from": "homebridge-sharkiq", + "to": "@homebridge-plugins/homebridge-sharkiq", + "switch": "1.3.2" + }, { "from": "homebridge-tado-platform", "to": "@homebridge-plugins/homebridge-tado", diff --git a/icons/homebridge-aeg-robot.png b/icons/homebridge-aeg-robot.png deleted file mode 100644 index 33a9a87..0000000 Binary files a/icons/homebridge-aeg-robot.png and /dev/null differ diff --git a/icons/homebridge-ambient-realtime.png b/icons/homebridge-ambient-realtime.png new file mode 100644 index 0000000..fc23f94 Binary files /dev/null and b/icons/homebridge-ambient-realtime.png differ diff --git a/icons/homebridge-blaq.png b/icons/homebridge-blaq.png new file mode 100644 index 0000000..01024fc Binary files /dev/null and b/icons/homebridge-blaq.png differ diff --git a/icons/homebridge-dummy.png b/icons/homebridge-dummy.png new file mode 100644 index 0000000..0864c9f Binary files /dev/null and b/icons/homebridge-dummy.png differ diff --git a/icons/homebridge-deebot.png b/icons/homebridge-ecovacs.png similarity index 100% rename from icons/homebridge-deebot.png rename to icons/homebridge-ecovacs.png diff --git a/icons/homebridge-nest-cam.png b/icons/homebridge-nest-cam.png deleted file mode 100644 index 42fa5fe..0000000 Binary files a/icons/homebridge-nest-cam.png and /dev/null differ diff --git a/maintained-plugins.json b/maintained-plugins.json index 703ee4e..d378af7 100644 --- a/maintained-plugins.json +++ b/maintained-plugins.json @@ -4,6 +4,7 @@ "@homebridge-plugins/homebridge-august", "@homebridge-plugins/homebridge-camera-ffmpeg", "@homebridge-plugins/homebridge-cloudflared-tunnel", + "@homebridge-plugins/homebridge-ecovacs", "@homebridge-plugins/homebridge-ewelink", "@homebridge-plugins/homebridge-govee", "@homebridge-plugins/homebridge-lutron-caseta-leap", @@ -14,6 +15,7 @@ "@homebridge-plugins/homebridge-rainbird", "@homebridge-plugins/homebridge-resideo", "@homebridge-plugins/homebridge-roomba", + "@homebridge-plugins/homebridge-sharkiq", "@homebridge-plugins/homebridge-smarthq", "@homebridge-plugins/homebridge-tado", "@homebridge-plugins/homebridge-unifi-network", @@ -24,7 +26,6 @@ "homebridge-august", "homebridge-blinkcameras", "homebridge-cloudflared-tunnel", - "homebridge-deebot", "homebridge-flume", "homebridge-gsh", "homebridge-meater", @@ -32,6 +33,7 @@ "homebridge-noip", "homebridge-rainbird", "homebridge-resideo", + "homebridge-sharkiq", "homebridge-tado-platform", "homebridge-thermobit", "homebridge-tp-link-powerline", diff --git a/package-lock.json b/package-lock.json index ae93a76..d9206f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,18 +11,18 @@ "dependencies": { "@actions/core": "^1.11.1", "@actions/github": "^6.0.1", - "@octokit/core": "^7.0.2", - "axios": "^1.10.0", - "form-data": "^4.0.3", + "@octokit/core": "^7.0.3", + "axios": "^1.11.0", + "form-data": "^4.0.4", "fs-extra": "^11.3.0", "ts-node": "^10.9.2", "typescript": "^5.8.3" }, "devDependencies": { - "@antfu/eslint-config": "^4.16.2", + "@antfu/eslint-config": "^5.0.0", "@fastify/pre-commit": "^2.2.0", "@types/fs-extra": "^11.0.4", - "@types/node": "^24.0.10", + "@types/node": "^24.1.0", "eslint-plugin-format": "^1.0.1" } }, @@ -70,9 +70,9 @@ } }, "node_modules/@actions/github/node_modules/@octokit/core": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.1.tgz", - "integrity": "sha512-dKYCMuPO1bmrpuogcjQ8z7ICCH3FP6WmxpwC03yjzGfZhj9fTJg6+bS1+UAplekbN2C+M61UNllGOOoAfGCrdQ==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.2.tgz", + "integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==", "license": "MIT", "dependencies": { "@octokit/auth-token": "^4.0.0", @@ -205,19 +205,19 @@ "license": "MIT" }, "node_modules/@antfu/eslint-config": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/@antfu/eslint-config/-/eslint-config-4.16.2.tgz", - "integrity": "sha512-5KHZR+7ne+HZnOJUKeTTdHKYA/yOygPssaJ7TZOMoBqjSMtVAa7FO5Wvu2dEtkibM6v3emYyKnQnia1S8NHQeA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@antfu/eslint-config/-/eslint-config-5.0.0.tgz", + "integrity": "sha512-uAMv8PiW9BOAGmIyTDtWXGnNfv6PFV4DmpqmlUpST5k4bue38VRdIfnM4jvgPuny1xnjYX3flN3kB9++6LknMw==", "dev": true, "license": "MIT", "dependencies": { "@antfu/install-pkg": "^1.1.0", "@clack/prompts": "^0.11.0", "@eslint-community/eslint-plugin-eslint-comments": "^4.5.0", - "@eslint/markdown": "^6.6.0", - "@stylistic/eslint-plugin": "^5.1.0", - "@typescript-eslint/eslint-plugin": "^8.35.1", - "@typescript-eslint/parser": "^8.35.1", + "@eslint/markdown": "^7.1.0", + "@stylistic/eslint-plugin": "^5.2.2", + "@typescript-eslint/eslint-plugin": "^8.38.0", + "@typescript-eslint/parser": "^8.38.0", "@vitest/eslint-plugin": "^1.3.4", "ansis": "^4.1.0", "cac": "^6.7.14", @@ -227,17 +227,17 @@ "eslint-plugin-antfu": "^3.1.1", "eslint-plugin-command": "^3.3.1", "eslint-plugin-import-lite": "^0.3.0", - "eslint-plugin-jsdoc": "^51.3.2", + "eslint-plugin-jsdoc": "^51.4.1", "eslint-plugin-jsonc": "^2.20.1", - "eslint-plugin-n": "^17.20.0", + "eslint-plugin-n": "^17.21.0", "eslint-plugin-no-only-tests": "^3.3.0", "eslint-plugin-perfectionist": "^4.15.0", - "eslint-plugin-pnpm": "^0.3.1", + "eslint-plugin-pnpm": "^1.1.0", "eslint-plugin-regexp": "^2.9.0", "eslint-plugin-toml": "^0.12.0", - "eslint-plugin-unicorn": "^59.0.1", + "eslint-plugin-unicorn": "^60.0.0", "eslint-plugin-unused-imports": "^4.1.4", - "eslint-plugin-vue": "^10.2.0", + "eslint-plugin-vue": "^10.3.0", "eslint-plugin-yml": "^1.18.0", "eslint-processor-vue-blocks": "^2.0.0", "globals": "^16.3.0", @@ -256,6 +256,7 @@ }, "peerDependencies": { "@eslint-react/eslint-plugin": "^1.38.4", + "@next/eslint-plugin-next": "^15.4.0-canary.115", "@prettier/plugin-xml": "^3.4.1", "@unocss/eslint-plugin": ">=0.50.0", "astro-eslint-parser": "^1.0.2", @@ -275,6 +276,9 @@ "@eslint-react/eslint-plugin": { "optional": true }, + "@next/eslint-plugin-next": { + "optional": true + }, "@prettier/plugin-xml": { "optional": true }, @@ -369,9 +373,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.0.tgz", - "integrity": "sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", "dev": true, "license": "MIT", "peer": true, @@ -590,9 +594,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", - "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", + "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -668,9 +672,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.30.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.30.1.tgz", - "integrity": "sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==", + "version": "9.32.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz", + "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==", "dev": true, "license": "MIT", "peer": true, @@ -682,21 +686,21 @@ } }, "node_modules/@eslint/markdown": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/@eslint/markdown/-/markdown-6.6.0.tgz", - "integrity": "sha512-IsWPy2jU3gaQDlioDC4sT4I4kG1hX1OMWs/q2sWwJrPoMASHW/Z4SDw+6Aql6EsHejGbagYuJbFq9Zvx+Y1b1Q==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@eslint/markdown/-/markdown-7.1.0.tgz", + "integrity": "sha512-Y+X1B1j+/zupKDVJfkKc8uYMjQkGzfnd8lt7vK3y8x9Br6H5dBuhAfFrQ6ff7HAMm/1BwgecyEiRFkYCWPRxmA==", "dev": true, "license": "MIT", "workspaces": [ "examples/*" ], "dependencies": { - "@eslint/core": "^0.14.0", - "@eslint/plugin-kit": "^0.3.1", + "@eslint/core": "^0.15.1", + "@eslint/plugin-kit": "^0.3.4", "github-slugger": "^2.0.0", "mdast-util-from-markdown": "^2.0.2", "mdast-util-frontmatter": "^2.0.1", - "mdast-util-gfm": "^3.0.0", + "mdast-util-gfm": "^3.1.0", "micromark-extension-frontmatter": "^2.0.0", "micromark-extension-gfm": "^3.0.0" }, @@ -716,9 +720,9 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.3.tgz", - "integrity": "sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", + "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -729,19 +733,6 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", - "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, "node_modules/@fastify/busboy": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", @@ -907,9 +898,9 @@ } }, "node_modules/@octokit/core": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.2.tgz", - "integrity": "sha512-ODsoD39Lq6vR6aBgvjTnA3nZGliknKboc9Gtxr7E4WDNqY24MxANKcuDQSF0jzapvGb3KWOEDrKfve4HoWGK+g==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.3.tgz", + "integrity": "sha512-oNXsh2ywth5aowwIa7RKtawnkdH6LgU1ztfP9AIUCQCvzysB+WeU8o2kyyosDPwBZutPpjZDKPQGIzzrfTWweQ==", "license": "MIT", "dependencies": { "@octokit/auth-token": "^6.0.0", @@ -1148,18 +1139,18 @@ } }, "node_modules/@stylistic/eslint-plugin": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.1.0.tgz", - "integrity": "sha512-TJRJul4u/lmry5N/kyCU+7RWWOk0wyXN+BncRlDYBqpLFnzXkd7QGVfN7KewarFIXv0IX0jSF/Ksu7aHWEDeuw==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.2.2.tgz", + "integrity": "sha512-bE2DUjruqXlHYP3Q2Gpqiuj2bHq7/88FnuaS0FjeGGLCy+X6a07bGVuwtiOYnPSLHR6jmx5Bwdv+j7l8H+G97A==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/types": "^8.34.1", + "@typescript-eslint/types": "^8.37.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "estraverse": "^5.3.0", - "picomatch": "^4.0.2" + "picomatch": "^4.0.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1255,9 +1246,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.0.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.10.tgz", - "integrity": "sha512-ENHwaH+JIRTDIEEbDK6QSQntAYGtbvdDXnMXnZaZ6k13Du1dPMmprkEHIL7ok2Wl2aZevetwTAb5S+7yIF+enA==", + "version": "24.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.1.0.tgz", + "integrity": "sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==", "license": "MIT", "dependencies": { "undici-types": "~7.8.0" @@ -1271,17 +1262,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.35.1.tgz", - "integrity": "sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz", + "integrity": "sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.35.1", - "@typescript-eslint/type-utils": "8.35.1", - "@typescript-eslint/utils": "8.35.1", - "@typescript-eslint/visitor-keys": "8.35.1", + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/type-utils": "8.38.0", + "@typescript-eslint/utils": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -1295,7 +1286,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.35.1", + "@typescript-eslint/parser": "^8.38.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } @@ -1311,16 +1302,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.35.1.tgz", - "integrity": "sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.38.0.tgz", + "integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.35.1", - "@typescript-eslint/types": "8.35.1", - "@typescript-eslint/typescript-estree": "8.35.1", - "@typescript-eslint/visitor-keys": "8.35.1", + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", "debug": "^4.3.4" }, "engines": { @@ -1336,14 +1327,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.35.1.tgz", - "integrity": "sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz", + "integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.35.1", - "@typescript-eslint/types": "^8.35.1", + "@typescript-eslint/tsconfig-utils": "^8.38.0", + "@typescript-eslint/types": "^8.38.0", "debug": "^4.3.4" }, "engines": { @@ -1358,14 +1349,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.35.1.tgz", - "integrity": "sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz", + "integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.35.1", - "@typescript-eslint/visitor-keys": "8.35.1" + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1376,9 +1367,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.1.tgz", - "integrity": "sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz", + "integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==", "dev": true, "license": "MIT", "engines": { @@ -1393,14 +1384,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.35.1.tgz", - "integrity": "sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.38.0.tgz", + "integrity": "sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.35.1", - "@typescript-eslint/utils": "8.35.1", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/utils": "8.38.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -1417,9 +1409,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.1.tgz", - "integrity": "sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz", + "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", "dev": true, "license": "MIT", "engines": { @@ -1431,16 +1423,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.1.tgz", - "integrity": "sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz", + "integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.35.1", - "@typescript-eslint/tsconfig-utils": "8.35.1", - "@typescript-eslint/types": "8.35.1", - "@typescript-eslint/visitor-keys": "8.35.1", + "@typescript-eslint/project-service": "8.38.0", + "@typescript-eslint/tsconfig-utils": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -1460,16 +1452,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.35.1.tgz", - "integrity": "sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz", + "integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.35.1", - "@typescript-eslint/types": "8.35.1", - "@typescript-eslint/typescript-estree": "8.35.1" + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1484,13 +1476,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.1.tgz", - "integrity": "sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz", + "integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.35.1", + "@typescript-eslint/types": "8.38.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -1525,45 +1517,45 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.17.tgz", - "integrity": "sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.18.tgz", + "integrity": "sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@babel/parser": "^7.27.5", - "@vue/shared": "3.5.17", + "@babel/parser": "^7.28.0", + "@vue/shared": "3.5.18", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "node_modules/@vue/compiler-dom": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.17.tgz", - "integrity": "sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.18.tgz", + "integrity": "sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@vue/compiler-core": "3.5.17", - "@vue/shared": "3.5.17" + "@vue/compiler-core": "3.5.18", + "@vue/shared": "3.5.18" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.17.tgz", - "integrity": "sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.18.tgz", + "integrity": "sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@babel/parser": "^7.27.5", - "@vue/compiler-core": "3.5.17", - "@vue/compiler-dom": "3.5.17", - "@vue/compiler-ssr": "3.5.17", - "@vue/shared": "3.5.17", + "@babel/parser": "^7.28.0", + "@vue/compiler-core": "3.5.18", + "@vue/compiler-dom": "3.5.18", + "@vue/compiler-ssr": "3.5.18", + "@vue/shared": "3.5.18", "estree-walker": "^2.0.2", "magic-string": "^0.30.17", "postcss": "^8.5.6", @@ -1571,21 +1563,21 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.17.tgz", - "integrity": "sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.18.tgz", + "integrity": "sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@vue/compiler-dom": "3.5.17", - "@vue/shared": "3.5.17" + "@vue/compiler-dom": "3.5.18", + "@vue/shared": "3.5.18" } }, "node_modules/@vue/shared": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.17.tgz", - "integrity": "sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==", + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.18.tgz", + "integrity": "sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==", "dev": true, "license": "MIT", "peer": true @@ -1700,13 +1692,13 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", - "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", + "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", + "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, @@ -1834,9 +1826,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001726", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001726.tgz", - "integrity": "sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==", + "version": "1.0.30001727", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", + "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", "dev": true, "funding": [ { @@ -1883,6 +1875,13 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", + "dev": true, + "license": "MIT" + }, "node_modules/character-entities": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", @@ -1895,9 +1894,9 @@ } }, "node_modules/ci-info": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", - "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", + "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", "dev": true, "funding": [ { @@ -1993,13 +1992,13 @@ "license": "MIT" }, "node_modules/core-js-compat": { - "version": "3.43.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.43.0.tgz", - "integrity": "sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==", + "version": "3.44.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.44.0.tgz", + "integrity": "sha512-JepmAj2zfl6ogy34qfWtcE7nHKAJnKsQFRn++scjVS2bZFllwptzw61BZcZFYBPpUznLfAvh0LGhxKppk04ClA==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.25.0" + "browserslist": "^4.25.1" }, "funding": { "type": "opencollective", @@ -2166,9 +2165,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.179", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.179.tgz", - "integrity": "sha512-UWKi/EbBopgfFsc5k61wFpV7WrnnSlSzW/e2XcBmS6qKYTivZlLtoll5/rdqRTxGglGHkmkW0j0pFNJG10EUIQ==", + "version": "1.5.191", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.191.tgz", + "integrity": "sha512-xcwe9ELcuxYLUFqZZxL19Z6HVKcvNkIwhbHUz7L3us6u12yR+7uY89dSl570f/IqNthx8dAw3tojG7i4Ni4tDA==", "dev": true, "license": "ISC" }, @@ -2269,9 +2268,9 @@ } }, "node_modules/eslint": { - "version": "9.30.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.30.1.tgz", - "integrity": "sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==", + "version": "9.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz", + "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==", "dev": true, "license": "MIT", "peer": true, @@ -2280,10 +2279,10 @@ "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.0", "@eslint/config-helpers": "^0.3.0", - "@eslint/core": "^0.14.0", + "@eslint/core": "^0.15.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.30.1", - "@eslint/plugin-kit": "^0.3.1", + "@eslint/js": "9.32.0", + "@eslint/plugin-kit": "^0.3.4", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -2546,9 +2545,9 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "51.3.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-51.3.3.tgz", - "integrity": "sha512-8XK/9wncTh4PPntQfM4iYJ2v/kvX4qsfBzp+dTnyxpERWhl2R9hEJw1ihws+yAecg9CC6ExTfMInEg3wSK9kWA==", + "version": "51.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-51.4.1.tgz", + "integrity": "sha512-y4CA9OkachG8v5nAtrwvcvjIbdcKgSyS6U//IfQr4FZFFyeBFwZFf/tfSsMr46mWDJgidZjBTqoCRlXywfFBMg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -2614,9 +2613,9 @@ } }, "node_modules/eslint-plugin-jsonc/node_modules/@pkgr/core": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.7.tgz", - "integrity": "sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==", + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", "dev": true, "license": "MIT", "engines": { @@ -2627,13 +2626,13 @@ } }, "node_modules/eslint-plugin-jsonc/node_modules/synckit": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.8.tgz", - "integrity": "sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", + "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", "dev": true, "license": "MIT", "dependencies": { - "@pkgr/core": "^0.2.4" + "@pkgr/core": "^0.2.9" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -2643,14 +2642,13 @@ } }, "node_modules/eslint-plugin-n": { - "version": "17.20.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.20.0.tgz", - "integrity": "sha512-IRSoatgB/NQJZG5EeTbv/iAx1byOGdbbyhQrNvWdCfTnmPxUT0ao9/eGOeG7ljD8wJBsxwE8f6tES5Db0FRKEw==", + "version": "17.21.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.21.0.tgz", + "integrity": "sha512-1+iZ8We4ZlwVMtb/DcHG3y5/bZOdazIpa/4TySo22MLKdwrLcfrX0hbadnCvykSQCCmkAnWmIP8jZVb2AAq29A==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.5.0", - "@typescript-eslint/utils": "^8.26.1", "enhanced-resolve": "^5.17.1", "eslint-plugin-es-x": "^7.8.0", "get-tsconfig": "^4.8.1", @@ -2712,9 +2710,9 @@ } }, "node_modules/eslint-plugin-pnpm": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-pnpm/-/eslint-plugin-pnpm-0.3.1.tgz", - "integrity": "sha512-vi5iHoELIAlBbX4AW8ZGzU3tUnfxuXhC/NKo3qRcI5o9igbz6zJUqSlQ03bPeMqWIGTPatZnbWsNR1RnlNERNQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-pnpm/-/eslint-plugin-pnpm-1.1.0.tgz", + "integrity": "sha512-sL93w0muBtjnogzk/loDsxzMbmXQOLP5Blw3swLDBXZgfb+qQI73bPcUbjVR+ZL+K62vGJdErV+43i3r5DsZPg==", "dev": true, "funding": [ { @@ -2731,8 +2729,8 @@ "find-up-simple": "^1.0.1", "jsonc-eslint-parser": "^2.4.0", "pathe": "^2.0.3", - "pnpm-workspace-yaml": "0.3.1", - "tinyglobby": "^0.2.12", + "pnpm-workspace-yaml": "1.1.0", + "tinyglobby": "^0.2.14", "yaml-eslint-parser": "^1.3.0" }, "peerDependencies": { @@ -2784,65 +2782,39 @@ } }, "node_modules/eslint-plugin-unicorn": { - "version": "59.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-59.0.1.tgz", - "integrity": "sha512-EtNXYuWPUmkgSU2E7Ttn57LbRREQesIP1BiLn7OZLKodopKfDXfBUkC/0j6mpw2JExwf43Uf3qLSvrSvppgy8Q==", + "version": "60.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-60.0.0.tgz", + "integrity": "sha512-QUzTefvP8stfSXsqKQ+vBQSEsXIlAiCduS/V1Em+FKgL9c21U/IIm20/e3MFy1jyCf14tHAhqC1sX8OTy6VUCg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "@eslint-community/eslint-utils": "^4.5.1", - "@eslint/plugin-kit": "^0.2.7", - "ci-info": "^4.2.0", + "@babel/helper-validator-identifier": "^7.27.1", + "@eslint-community/eslint-utils": "^4.7.0", + "@eslint/plugin-kit": "^0.3.3", + "change-case": "^5.4.4", + "ci-info": "^4.3.0", "clean-regexp": "^1.0.0", - "core-js-compat": "^3.41.0", + "core-js-compat": "^3.44.0", "esquery": "^1.6.0", "find-up-simple": "^1.0.1", - "globals": "^16.0.0", + "globals": "^16.3.0", "indent-string": "^5.0.0", "is-builtin-module": "^5.0.0", "jsesc": "^3.1.0", "pluralize": "^8.0.0", "regexp-tree": "^0.1.27", "regjsparser": "^0.12.0", - "semver": "^7.7.1", + "semver": "^7.7.2", "strip-indent": "^4.0.0" }, "engines": { - "node": "^18.20.0 || ^20.10.0 || >=21.0.0" + "node": "^20.10.0 || >=21.0.0" }, "funding": { "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" }, "peerDependencies": { - "eslint": ">=9.22.0" - } - }, - "node_modules/eslint-plugin-unicorn/node_modules/@eslint/core": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", - "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/eslint-plugin-unicorn/node_modules/@eslint/plugin-kit": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", - "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.13.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "eslint": ">=9.29.0" } }, "node_modules/eslint-plugin-unused-imports": { @@ -3280,9 +3252,9 @@ } }, "node_modules/form-data": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", - "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", @@ -5022,9 +4994,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", "engines": { @@ -5057,9 +5029,9 @@ } }, "node_modules/pnpm-workspace-yaml": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pnpm-workspace-yaml/-/pnpm-workspace-yaml-0.3.1.tgz", - "integrity": "sha512-3nW5RLmREmZ8Pm8MbPsO2RM+99RRjYd25ynj3NV0cFsN7CcEl4sDFzgoFmSyduFwxFQ2Qbu3y2UdCh6HlyUOeA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pnpm-workspace-yaml/-/pnpm-workspace-yaml-1.1.0.tgz", + "integrity": "sha512-OWUzBxtitpyUV0fBYYwLAfWxn3mSzVbVB7cwgNaHvTTU9P0V2QHjyaY5i7f1hEiT9VeKsNH1Skfhe2E3lx/zhA==", "dev": true, "funding": [ { @@ -5073,7 +5045,7 @@ ], "license": "MIT", "dependencies": { - "yaml": "^2.7.0" + "yaml": "^2.8.0" } }, "node_modules/postcss": { diff --git a/package.json b/package.json index 70d4b39..7aaa032 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,8 @@ "lint:fix": "npm run lint -- --fix", "plugin-checks:build": "tsc -p src/plugin-checks", "plugin-checks:run": "node src/plugin-checks/index.js", + "plugin-lists:build": "tsc -p src/plugin-lists", + "plugin-lists:run": "node src/plugin-lists/index.js", "plugin-tarballs:build": "tsc -p src/plugin-tarballs", "plugin-tarballs:run": "node src/plugin-tarballs/index.js", "sort-json-files": "node scripts/sort-json-files.js" @@ -26,18 +28,18 @@ "dependencies": { "@actions/core": "^1.11.1", "@actions/github": "^6.0.1", - "@octokit/core": "^7.0.2", - "axios": "^1.10.0", - "form-data": "^4.0.3", + "@octokit/core": "^7.0.3", + "axios": "^1.11.0", + "form-data": "^4.0.4", "fs-extra": "^11.3.0", "ts-node": "^10.9.2", "typescript": "^5.8.3" }, "devDependencies": { - "@antfu/eslint-config": "^4.16.2", + "@antfu/eslint-config": "^5.0.0", "@fastify/pre-commit": "^2.2.0", "@types/fs-extra": "^11.0.4", - "@types/node": "^24.0.10", + "@types/node": "^24.1.0", "eslint-plugin-format": "^1.0.1" }, "pre-commit": [ diff --git a/plugin-authors.json b/plugin-authors.json index 21d531b..89dfd38 100644 --- a/plugin-authors.json +++ b/plugin-authors.json @@ -4,6 +4,7 @@ "@homebridge-plugins/homebridge-august": "donavanbecker", "@homebridge-plugins/homebridge-camera-ffmpeg": "sunookitsune", "@homebridge-plugins/homebridge-cloudflared-tunnel": "donavanbecker", + "@homebridge-plugins/homebridge-ecovacs": "bwp91", "@homebridge-plugins/homebridge-ewelink": "bwp91", "@homebridge-plugins/homebridge-govee": "bwp91", "@homebridge-plugins/homebridge-lutron-caseta-leap": "thenewwazoo", @@ -19,16 +20,6 @@ "@homebridge-plugins/homebridge-unifi-network": "derek-miller", "@homebridge-plugins/homebridge-wattbox": "derek-miller", "@homebridge-plugins/homebridge-wemo": "bwp91", - "homebridge-air": "donavanbecker", - "homebridge-august": "donavanbecker", - "homebridge-cloudflared-tunnel": "donavanbecker", - "homebridge-genie-aladdin-connect": "derek-miller", - "homebridge-gsh": "NorthernMan54", - "homebridge-meater": "donavanbecker", - "homebridge-noip": "donavanbecker", - "homebridge-rainbird": "donavanbecker", - "homebridge-resideo": "donavanbecker", - "homebridge-smarthq": "donavanbecker", - "homebridge-unifi-smartpower": "derek-miller", - "homebridge-wattbox": "derek-miller" + "@homebridge-pluginshomebridge-sharkiq": "Bubba8291", + "homebridge-gsh": "NorthernMan54" } diff --git a/plugin-icons.json b/plugin-icons.json index 021b648..ca08df2 100644 --- a/plugin-icons.json +++ b/plugin-icons.json @@ -7,6 +7,7 @@ "@homebridge-plugins/homebridge-august": "icons/homebridge-august.png", "@homebridge-plugins/homebridge-camera-ffmpeg": "icons/homebridge-camera-ffmpeg.png", "@homebridge-plugins/homebridge-cloudflared-tunnel": "icons/homebridge-cloudflared-tunnel.png", + "@homebridge-plugins/homebridge-ecovacs": "icons/homebridge-ecovacs.png", "@homebridge-plugins/homebridge-ewelink": "icons/homebridge-ewelink.png", "@homebridge-plugins/homebridge-govee": "icons/homebridge-govee.png", "@homebridge-plugins/homebridge-lutron-caseta-leap": "icons/homebridge-lutron-caseta-leap.png", @@ -16,6 +17,7 @@ "@homebridge-plugins/homebridge-rainbird": "icons/homebridge-rainbird.png", "@homebridge-plugins/homebridge-resideo": "icons/homebridge-resideo.png", "@homebridge-plugins/homebridge-roomba": "icons/homebridge-roomba.png", + "@homebridge-plugins/homebridge-sharkiq": "icons/homebridge-sharkiq.png", "@homebridge-plugins/homebridge-smarthq": "icons/homebridge-smarthq.png", "@homebridge-plugins/homebridge-tado": "icons/homebridge-tado.png", "@homebridge-plugins/homebridge-wemo": "icons/homebridge-wemo.png", @@ -26,26 +28,23 @@ "homebridge-actron-neo": "icons/homebridge-actron-neo.png", "homebridge-adb": "icons/homebridge-adb.png", "homebridge-adguardhome": "icons/homebridge-adguardhome.png", - "homebridge-aeg-robot": "icons/homebridge-aeg-robot.png", - "homebridge-air": "icons/homebridge-air.png", "homebridge-airport-express-connected": "icons/homebridge-airport-express-connected.png", "homebridge-alexa": "icons/homebridge-alexa.png", "homebridge-ambiback": "icons/homebridge-ambiback.png", + "homebridge-ambient-realtime": "icons/homebridge-ambient-realtime.png", "homebridge-ambient-weather-sensors": "icons/homebridge-ambient-weather-sensors.png", "homebridge-appletv-enhanced": "icons/homebridge-appletv-enhanced.png", - "homebridge-august": "icons/homebridge-august.png", - "homebridge-better-roku": "icons/homebridge-better-roku.png", + "homebridge-blaq": "icons/homebridge-blaq.png", "homebridge-blueair-purifier": "icons/homebridge-blueair-purifier.png", - "homebridge-cloudflared-tunnel": "icons/homebridge-cloudflared-tunnel.png", "homebridge-comed-hourlypricing": "icons/homebridge-comed-hourlypricing.png", "homebridge-cool-automation": "icons/homebridge-cool-automation.png", "homebridge-dahua-alarm": "icons/homebridge-dahua-alarm.png", "homebridge-deconz": "icons/homebridge-deconz.png", - "homebridge-deebot": "icons/homebridge-deebot.png", "homebridge-delay-switch": "icons/homebridge-delay-switch.png", "homebridge-dolphin": "icons/homebridge-dolphin.png", "homebridge-dreamscreen-rm": "icons/homebridge-dreamscreen-rm.png", "homebridge-dreo": "icons/homebridge-dreo.png", + "homebridge-dummy": "icons/homebridge-dummy.png", "homebridge-dune-hd": "icons/homebridge-dune-hd.png", "homebridge-dyson-bp01": "icons/homebridge-dyson-bp01.png", "homebridge-easee": "icons/homebridge-easee.png", @@ -56,12 +55,10 @@ "homebridge-electra-smart": "icons/homebridge-electra-smart.png", "homebridge-envisalink-ademco": "icons/homebridge-envisalink-ademco.png", "homebridge-eufy-security": "icons/homebridge-eufy-security.png", - "homebridge-ewelink": "icons/homebridge-ewelink.png", "homebridge-fibaro-home-center": "icons/homebridge-fibaro-home-center.png", "homebridge-flume": "icons/homebridge-flume.png", "homebridge-fordpass": "icons/homebridge-fordpass.png", "homebridge-futurehome": "icons/homebridge-futurehome.png", - "homebridge-govee": "icons/homebridge-govee.png", "homebridge-gsh": "icons/homebridge-gsh.png", "homebridge-homeconnect": "icons/homebridge-homeconnect.png", "homebridge-homekit-control": "icons/homebridge-homekit-control.png", @@ -76,16 +73,12 @@ "homebridge-lg-enervu": "icons/homebridge-lg-enervu.png", "homebridge-loxone-control": "icons/homebridge-loxone-control.png", "homebridge-loxone-proxy": "icons/homebridge-loxone-proxy.png", - "homebridge-meater": "icons/homebridge-meater.png", - "homebridge-meross": "icons/homebridge-meross.png", "homebridge-mhi-wfrac": "icons/homebridge-mhi-wfrac.png", "homebridge-midea-platform": "icons/homebridge-midea-platform.png", "homebridge-music": "icons/homebridge-music.png", "homebridge-my-wallbox": "icons/homebridge-my-wallbox.png", "homebridge-nb": "icons/homebridge-nb.png", "homebridge-nest": "icons/homebridge-nest.png", - "homebridge-nest-cam": "icons/homebridge-nest-cam.png", - "homebridge-noip": "icons/homebridge-noip.png", "homebridge-nordpool-baltics": "icons/homebridge-nordpool-baltics.png", "homebridge-omnilink-platform": "icons/homebridge-omnilink-platform.png", "homebridge-oppo-udp": "icons/homebridge-oppo-udp.png", @@ -96,22 +89,18 @@ "homebridge-panasonic-ac-platform": "icons/homebridge-panasonic-ac-platform.png", "homebridge-porsche-taycan": "icons/homebridge-porsche-taycan.png", "homebridge-rachio-irrigation": "icons/homebridge-rachio-irrigation.png", - "homebridge-rainbird": "icons/homebridge-rainbird.png", "homebridge-ratgdo": "icons/homebridge-ratgdo.png", - "homebridge-resideo": "icons/homebridge-resideo.png", "homebridge-ring": "icons/homebridge-ring.png", "homebridge-rinnai-touch-platform": "icons/homebridge-rinnai-touch-platform.png", "homebridge-robonect": "icons/homebridge-robonect.png", "homebridge-rpi": "icons/homebridge-rpi.png", "homebridge-sensibo-ac": "icons/homebridge-sensibo-ac.png", - "homebridge-sharkiq": "icons/homebridge-sharkiq.png", "homebridge-shortcuts-buttons": "icons/homebridge-shortcuts-buttons.png", "homebridge-signalk": "icons/homebridge-signalk.png", "homebridge-sinricpro": "icons/homebridge-sinricpro.png", "homebridge-snowsense": "icons/homebridge-snowsense.png", "homebridge-switcher-platform": "icons/homebridge-switcher-platform.png", "homebridge-tado-ac": "icons/homebridge-tado-ac.png", - "homebridge-tado-platform": "icons/homebridge-tado.png", "homebridge-tasmota": "icons/homebridge-tasmota.png", "homebridge-tcc": "icons/homebridge-tcc.png", "homebridge-tempo": "icons/homebridge-tempo.png", @@ -122,7 +111,6 @@ "homebridge-ups": "icons/homebridge-ups.png", "homebridge-velux": "icons/homebridge-velux.png", "homebridge-virtual-accessories": "icons/homebridge-virtual-accessories.png", - "homebridge-wemo": "icons/homebridge-wemo.png", "homebridge-wled-ws": "icons/homebridge-wled-ws.png", "homebridge-ws": "icons/homebridge-ws.png", "homebridge-yamaha-receiver": "icons/homebridge-yamaha-receiver.png", diff --git a/plugin-names.json b/plugin-names.json index 941919e..ac1bd9a 100644 --- a/plugin-names.json +++ b/plugin-names.json @@ -2,10 +2,10 @@ "@homebridge-plugins/homebridge-ewelink": "Homebridge eWeLink", "@homebridge-plugins/homebridge-noip": "Homebridge No-IP", "@pst-on-npm/homebridge-enocean": "Homebridge EnOcean", - "homebridge-ewelink": "Homebridge eWeLink", + "homebridge-awattar": "Homebridge aWATTar", + "homebridge-blaq": "Homebridge blaQ", "homebridge-gsh": "Homebridge Google Smart Home", "homebridge-lacrosseview": "Homebridge La Crosse View", "homebridge-lgwebos-tv": "LG webOS TV", - "homebridge-noip": "Homebridge No-IP", "homebridge-pentair-intellicenter-ai": "Homebridge Pentair IntelliCenter AI" } diff --git a/scoped-plugins.json b/scoped-plugins.json index f2ab107..375b0c6 100644 --- a/scoped-plugins.json +++ b/scoped-plugins.json @@ -4,6 +4,7 @@ "@homebridge-plugins/homebridge-august": "donavanbecker", "@homebridge-plugins/homebridge-camera-ffmpeg": "sunookitsune", "@homebridge-plugins/homebridge-cloudflared-tunnel": "donavanbecker", + "@homebridge-plugins/homebridge-ecovacs": "bwp91", "@homebridge-plugins/homebridge-ewelink": "bwp91", "@homebridge-plugins/homebridge-govee": "bwp91", "@homebridge-plugins/homebridge-lutron-caseta-leap": "thenewwazoo", @@ -14,6 +15,7 @@ "@homebridge-plugins/homebridge-rainbird": "donavanbecker", "@homebridge-plugins/homebridge-resideo": "donavanbecker", "@homebridge-plugins/homebridge-roomba": "karlvr", + "@homebridge-plugins/homebridge-sharkiq": "Bubba8291", "@homebridge-plugins/homebridge-smarthq": "donavanbecker", "@homebridge-plugins/homebridge-tado": "smart7324", "@homebridge-plugins/homebridge-unifi-network": "derek-miller", diff --git a/src/plugin-checks/workspace/package-lock.json b/src/plugin-checks/workspace/package-lock.json index 128c1f4..c53688e 100644 --- a/src/plugin-checks/workspace/package-lock.json +++ b/src/plugin-checks/workspace/package-lock.json @@ -10,19 +10,19 @@ "license": "ISC", "dependencies": { "@types/fs-extra": "^11.0.4", - "@types/node": "^24.0.10", + "@types/node": "^24.1.0", "@types/semver": "^7.7.0", "fs-extra": "^11.3.0", "semver": "^7.7.2", "tsx": "^4.20.3", "typescript": "^5.8.3", - "undici": "^7.11.0" + "undici": "^7.12.0" } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", - "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", + "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", "cpu": [ "ppc64" ], @@ -36,9 +36,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", - "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz", + "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", "cpu": [ "arm" ], @@ -52,9 +52,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", - "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz", + "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", "cpu": [ "arm64" ], @@ -68,9 +68,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", - "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz", + "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", "cpu": [ "x64" ], @@ -84,9 +84,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", - "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz", + "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", "cpu": [ "arm64" ], @@ -100,9 +100,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", - "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz", + "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", "cpu": [ "x64" ], @@ -116,9 +116,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", - "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz", + "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", "cpu": [ "arm64" ], @@ -132,9 +132,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", - "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz", + "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", "cpu": [ "x64" ], @@ -148,9 +148,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", - "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz", + "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", "cpu": [ "arm" ], @@ -164,9 +164,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", - "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz", + "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", "cpu": [ "arm64" ], @@ -180,9 +180,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", - "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz", + "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", "cpu": [ "ia32" ], @@ -196,9 +196,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", - "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz", + "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", "cpu": [ "loong64" ], @@ -212,9 +212,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", - "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz", + "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", "cpu": [ "mips64el" ], @@ -228,9 +228,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", - "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz", + "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", "cpu": [ "ppc64" ], @@ -244,9 +244,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", - "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz", + "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", "cpu": [ "riscv64" ], @@ -260,9 +260,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", - "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz", + "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", "cpu": [ "s390x" ], @@ -276,9 +276,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", - "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz", + "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", "cpu": [ "x64" ], @@ -292,9 +292,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", - "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz", + "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", "cpu": [ "arm64" ], @@ -308,9 +308,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", - "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz", + "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", "cpu": [ "x64" ], @@ -324,9 +324,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", - "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz", + "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", "cpu": [ "arm64" ], @@ -340,9 +340,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", - "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz", + "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", "cpu": [ "x64" ], @@ -355,10 +355,26 @@ "node": ">=18" } }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz", + "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", - "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz", + "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", "cpu": [ "x64" ], @@ -372,9 +388,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", - "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz", + "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", "cpu": [ "arm64" ], @@ -388,9 +404,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", - "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz", + "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", "cpu": [ "ia32" ], @@ -404,9 +420,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", - "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz", + "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", "cpu": [ "x64" ], @@ -439,9 +455,9 @@ } }, "node_modules/@types/node": { - "version": "24.0.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.10.tgz", - "integrity": "sha512-ENHwaH+JIRTDIEEbDK6QSQntAYGtbvdDXnMXnZaZ6k13Du1dPMmprkEHIL7ok2Wl2aZevetwTAb5S+7yIF+enA==", + "version": "24.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.1.0.tgz", + "integrity": "sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==", "license": "MIT", "dependencies": { "undici-types": "~7.8.0" @@ -454,9 +470,9 @@ "license": "MIT" }, "node_modules/esbuild": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", - "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", + "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -466,31 +482,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.5", - "@esbuild/android-arm": "0.25.5", - "@esbuild/android-arm64": "0.25.5", - "@esbuild/android-x64": "0.25.5", - "@esbuild/darwin-arm64": "0.25.5", - "@esbuild/darwin-x64": "0.25.5", - "@esbuild/freebsd-arm64": "0.25.5", - "@esbuild/freebsd-x64": "0.25.5", - "@esbuild/linux-arm": "0.25.5", - "@esbuild/linux-arm64": "0.25.5", - "@esbuild/linux-ia32": "0.25.5", - "@esbuild/linux-loong64": "0.25.5", - "@esbuild/linux-mips64el": "0.25.5", - "@esbuild/linux-ppc64": "0.25.5", - "@esbuild/linux-riscv64": "0.25.5", - "@esbuild/linux-s390x": "0.25.5", - "@esbuild/linux-x64": "0.25.5", - "@esbuild/netbsd-arm64": "0.25.5", - "@esbuild/netbsd-x64": "0.25.5", - "@esbuild/openbsd-arm64": "0.25.5", - "@esbuild/openbsd-x64": "0.25.5", - "@esbuild/sunos-x64": "0.25.5", - "@esbuild/win32-arm64": "0.25.5", - "@esbuild/win32-ia32": "0.25.5", - "@esbuild/win32-x64": "0.25.5" + "@esbuild/aix-ppc64": "0.25.8", + "@esbuild/android-arm": "0.25.8", + "@esbuild/android-arm64": "0.25.8", + "@esbuild/android-x64": "0.25.8", + "@esbuild/darwin-arm64": "0.25.8", + "@esbuild/darwin-x64": "0.25.8", + "@esbuild/freebsd-arm64": "0.25.8", + "@esbuild/freebsd-x64": "0.25.8", + "@esbuild/linux-arm": "0.25.8", + "@esbuild/linux-arm64": "0.25.8", + "@esbuild/linux-ia32": "0.25.8", + "@esbuild/linux-loong64": "0.25.8", + "@esbuild/linux-mips64el": "0.25.8", + "@esbuild/linux-ppc64": "0.25.8", + "@esbuild/linux-riscv64": "0.25.8", + "@esbuild/linux-s390x": "0.25.8", + "@esbuild/linux-x64": "0.25.8", + "@esbuild/netbsd-arm64": "0.25.8", + "@esbuild/netbsd-x64": "0.25.8", + "@esbuild/openbsd-arm64": "0.25.8", + "@esbuild/openbsd-x64": "0.25.8", + "@esbuild/openharmony-arm64": "0.25.8", + "@esbuild/sunos-x64": "0.25.8", + "@esbuild/win32-arm64": "0.25.8", + "@esbuild/win32-ia32": "0.25.8", + "@esbuild/win32-x64": "0.25.8" } }, "node_modules/fs-extra": { @@ -605,9 +622,9 @@ } }, "node_modules/undici": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.11.0.tgz", - "integrity": "sha512-heTSIac3iLhsmZhUCjyS3JQEkZELateufzZuBaVM5RHXdSBMb1LPMQf5x+FH7qjsZYDP0ttAc3nnVpUB+wYbOg==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.12.0.tgz", + "integrity": "sha512-GrKEsc3ughskmGA9jevVlIOPMiiAHJ4OFUtaAH+NhfTUSiZ1wMPIQqQvAJUrJspFXJt3EBWgpAeoHEDVT1IBug==", "license": "MIT", "engines": { "node": ">=20.18.1" diff --git a/src/plugin-checks/workspace/package.json b/src/plugin-checks/workspace/package.json index ba61c4f..8d5f761 100644 --- a/src/plugin-checks/workspace/package.json +++ b/src/plugin-checks/workspace/package.json @@ -9,12 +9,12 @@ "main": "index.js", "dependencies": { "@types/fs-extra": "^11.0.4", - "@types/node": "^24.0.10", + "@types/node": "^24.1.0", "@types/semver": "^7.7.0", "fs-extra": "^11.3.0", "semver": "^7.7.2", "tsx": "^4.20.3", "typescript": "^5.8.3", - "undici": "^7.11.0" + "undici": "^7.12.0" } } diff --git a/src/plugin-lists/index.ts b/src/plugin-lists/index.ts new file mode 100644 index 0000000..fdadcf2 --- /dev/null +++ b/src/plugin-lists/index.ts @@ -0,0 +1,204 @@ +/* eslint-disable no-console */ +import process from 'node:process' + +import { Octokit } from '@octokit/core' +import axios from 'axios' + +export interface Plugin { + name: string + valid: boolean + version: string | null + packaged: boolean +} + +class PluginLists { + private octokit = new Octokit({ + auth: process.env.GITHUB_TOKEN, + }) + + private pluginList: string[] = [] + private pluginNpmResponses: Record = {} + + private pluginsArchived: string[] = [] + private pluginsDeprecated: string[] = [] + private pluginsGitHubMissing: string[] = [] + + private logRed(message: string) { + console.log(`\x1B[31m${message}\x1B[0m`) + } + + private logGreen(message: string) { + console.log(`\x1B[32m${message}\x1B[0m`) + } + + private logYellow(message: string) { + console.log(`\x1B[33m${message}\x1B[0m`) + } + + public async run() { + try { + await this.getVerifiedPluginsList() + await this.checkNpmDeprecated() + await this.checkGitHubArchived() + await this.logResults() + } catch (e) { + this.logRed(`Error: ${e.message}`) + this.logRed(e) + process.exit(1) + } + } + + /** + * Get the verified plugins list + */ + private async getVerifiedPluginsList(): Promise { + const response = await axios.get('https://raw.githubusercontent.com/homebridge/plugins/latest/verified-plugins.json') + this.pluginList = response.data + console.log(`Processing ${this.pluginList.length} verified plugins...`) + console.log(' ') + } + + private async getGitHubRepoFromNpm(packageName: string): Promise<{ author: string | null, repo: string | null }> { + try { + const { url, homepage, bugs } = this.pluginNpmResponses[packageName] + let author: string = null + let repo: string = null + + // Try if the url is set + if (url?.includes('github.com')) { + const match = url.match(/github\.com\/([^/]+)\/([^/]+)/) + if (match) { + author = match[1] + repo = match[2] + } + } else if (homepage?.includes('github.com')) { + const match = homepage.match(/github\.com\/([^/]+)\/([^/]+)/) + if (match) { + author = match[1] + repo = match[2] + } + } else if (bugs?.includes('github.com')) { + const match = bugs.match(/github\.com\/([^/]+)\/([^/]+)/) + if (match) { + author = match[1] + repo = match[2] + } + } + + return { author, repo } + } catch (error) { + this.logRed(`* Error fetching package.json for ${packageName}: ${error.message}.`) + return { author: null, repo: null } + } + } + + private async isNpmDeprecated(packageName: string): Promise { + try { + const response = await axios.get(`https://registry.npmjs.org/${packageName}`) + this.pluginNpmResponses[packageName] = { + url: response.data.repository?.url?.replace(/^git(?::\/\/)?|\.git$/g, '').replaceAll('+', ''), + homepage: response.data.homepage?.replace(/\.git$/, '').replace('#readme').replace('#README'), + bugs: response.data.repository?.bugs?.url?.replace(/\.git$/, '').replace('/issues'), + } + + const latestVersion = response.data['dist-tags'].latest as string + const deprecatedMessage = response.data.versions[latestVersion].deprecated as string + + return !!deprecatedMessage + } catch (error) { + this.logRed(`* ${packageName} could not be checked as ${error.message}.`) + return false + } + } + + private async isGitHubArchived(packageName: string): Promise { + try { + // If the package name doesn't include the author, fetch it from npm + const { author, repo } = await this.getGitHubRepoFromNpm(packageName) + + if (!author || !repo) { + return false + } + + const response = await this.octokit.request('GET /repos/{owner}/{repo}', { + owner: author, + repo, + }) + + return response.data.archived || false + } catch (error) { + if (error.status === 404) { + this.pluginsGitHubMissing.push(packageName) + this.logRed(`* ${packageName} appears to be missing on GitHub.`) + } else { + this.logRed(`* ${packageName} could not be checked ${error.message}.`) + } + return false + } + } + + private async checkNpmDeprecated(): Promise { + console.log('Checking npm for deprecated plugins...') + for (const plugin of this.pluginList) { + if (await this.isNpmDeprecated(plugin)) { + this.pluginsDeprecated.push(plugin) + this.logYellow(`* ${plugin} is deprecated on npm.`) + } else { + console.log(`* ${plugin} is not deprecated on npm.`) + } + } + console.log(' ') + } + + private async checkGitHubArchived(): Promise { + console.log('Checking GitHub for archived plugins...') + for (const plugin of this.pluginList) { + if (await this.isGitHubArchived(plugin)) { + this.pluginsArchived.push(plugin) + this.logYellow(`* ${plugin} is archived on GitHub.`) + } else { + console.log(`* ${plugin} is not archived on GitHub.`) + } + } + console.log(' ') + } + + private async logResults(): Promise { + console.log('Results') + console.log('* NPM Deprecated Plugins:') + if (this.pluginsDeprecated.length > 0) { + this.pluginsDeprecated.forEach(plugin => this.logYellow(` * ${plugin}`)) + } else { + this.logGreen(' * No deprecated plugins found.') + } + console.log(' ') + + console.log('* GitHub Archived Plugins:') + if (this.pluginsArchived.length > 0) { + this.pluginsArchived.forEach(plugin => this.logYellow(` * ${plugin}`)) + } else { + this.logGreen(' * No archived plugins found.') + } + console.log(' ') + + console.log('* GitHub Missing Plugins:') + if (this.pluginsGitHubMissing.length > 0) { + this.pluginsGitHubMissing.forEach(plugin => this.logYellow(` * ${plugin}`)) + } else { + this.logGreen(' * No missing plugins found.') + } + + console.log(' ') + console.log('Counts') + console.log(`* NPM Deprecated plugins: ${this.pluginsDeprecated.length}.`) + console.log(`* GitHub Archived plugins: ${this.pluginsArchived.length}.`) + console.log(`* GitHub Missing plugins: ${this.pluginsGitHubMissing.length}.`) + console.log(`* Total verified plugins: ${this.pluginList.length}.`) + } +} + +// bootstrap and run +(async () => { + const main = new PluginLists() + await main.run() +})() diff --git a/src/plugin-lists/tsconfig.json b/src/plugin-lists/tsconfig.json new file mode 100644 index 0000000..5f165fb --- /dev/null +++ b/src/plugin-lists/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "ESNext", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "module": "NodeNext", + "declaration": true, + "removeComments": true, + "sourceMap": true, + "esModuleInterop": true + } +} diff --git a/src/plugin-tarballs/index.ts b/src/plugin-tarballs/index.ts index bf2c7aa..1ad6146 100644 --- a/src/plugin-tarballs/index.ts +++ b/src/plugin-tarballs/index.ts @@ -25,8 +25,9 @@ class PluginTarballs { }) private githubProjectOwner = 'homebridge' - private githubProjectRepo = 'verified' - private targetRelease = 'v1.0.0' + private githubProjectRepo = 'plugins' + private targetReleaseUnscoped = 'v1.0.0' + private targetReleaseScoped = 'v1.0.0-1' private workDir = path.join(__dirname, 'work') @@ -36,7 +37,23 @@ class PluginTarballs { private pluginsSuccessfullyUpdated: Plugin[] = [] private pluginsNotProcessed: { plugin: Plugin, error: string }[] = [] - private release: { + private releaseUnscoped: { + id: number + tag_name: string + upload_url: string + assets: { + id: number + name: string + label: string + created_at: string + updated_at: string + browser_download_url: string + download_count: number + size: number + }[] + } + + private releaseScoped: { id: number tag_name: string upload_url: string @@ -86,10 +103,24 @@ class PluginTarballs { '@oznu/homebridge-esp8266-garage-door', ] - async run() { + private logRed(message: string) { + console.log(`\x1B[31m${message}\x1B[0m`) + } + + private logGreen(message: string) { + console.log(`\x1B[32m${message}\x1B[0m`) + } + + private logYellow(message: string) { + console.log(`\x1B[33m${message}\x1B[0m`) + } + + public async run(): Promise { try { - await this.getGitHubRelease(this.targetRelease) + await this.getGitHubReleases(this.targetReleaseUnscoped, this.targetReleaseScoped) await this.getVerifiedPluginsList() + await this.removeUnverifiedAssets() + await this.removeAssetsForOlderReleases() await this.getLatestVersions() await this.bundlePlugins() await this.uploadAssets() @@ -105,23 +136,57 @@ class PluginTarballs { /** * Get the verified plugins list */ - async getVerifiedPluginsList() { + private async getVerifiedPluginsList(): Promise { const response = await axios.get('https://raw.githubusercontent.com/homebridge/plugins/latest/verified-plugins.json') this.pluginList = response.data.filter(x => !this.pluginFilter.includes(x)) - console.log(`Processing ${this.pluginList.length} verified plugins...`) + const verifiedPluginsCount = this.pluginList.length // add additional plugins, checking to make sure we are not adding duplicates - for (const plugin of this.additionalPlugins) { + this.additionalPlugins.forEach((plugin) => { if (!this.pluginList.includes(plugin)) { this.pluginList.push(plugin) } + }) + + console.log(`Processing ${this.pluginList.length} plugins (${verifiedPluginsCount} verified and ${this.pluginList.length - verifiedPluginsCount} additional plugins)...`) + } + + /** + * Remove assets that are no longer in the verified list + */ + private async removeUnverifiedAssets(): Promise { + const verifiedPluginsSet = new Set(this.pluginList) + let assetsRemoved = 0 + + for (const release of [this.releaseUnscoped, this.releaseScoped]) { + console.log(`Removing any unverified assets from the ${release.assets.length} total assets in the ${release.tag_name} release...`) + + for (const asset of release.assets) { + // Ignore GitHub-specific assets + if (asset.name === 'download-statistics.json') { + continue + } + + // Extract plugin name from asset label + const assetPlugin = asset.label.substring(0, asset.label.lastIndexOf('@')) + + // Check if the plugin is not in the verified list + if (!verifiedPluginsSet.has(assetPlugin)) { + await this.deleteAsset(asset) + + console.log(`Removing unverified asset: ${asset.name} (${assetPlugin})`) + assetsRemoved += 1 + } + } } + + console.log(`Removed ${assetsRemoved} unverified assets over all the releases.`) } /** * Get the 'latest' version for the plugins */ - async getLatestVersions() { + private async getLatestVersions(): Promise { for (const pluginName of this.pluginList) { try { const response = await axios.get(`https://registry.npmjs.org/${pluginName}/latest`) @@ -133,10 +198,13 @@ class PluginTarballs { packaged: false, } + const isScoped = pluginName.startsWith('@') + const release = isScoped ? this.releaseScoped : this.releaseUnscoped + // check if an update is required if ( - this.release.assets.find(x => x.name === this.pluginAssetName(plugin, 'tar.gz')) - && this.release.assets.find(x => x.name === this.pluginAssetName(plugin, 'sha256')) + release.assets.find(x => x.name === this.pluginAssetName(plugin, 'tar.gz')) + && release.assets.find(x => x.name === this.pluginAssetName(plugin, 'sha256')) ) { console.log(`${plugin.name} v${plugin.version} is up to date.`) } else { @@ -150,41 +218,97 @@ class PluginTarballs { } /** - * Get the GitHub release for the project - * @param {string} tag + * Remove assets for older releases, keeping only the most recent version + */ + private async removeAssetsForOlderReleases(): Promise { + for (const release of [this.releaseUnscoped, this.releaseScoped]) { + const pluginAssetsMap: { [pluginName: string]: { version: string, assets: typeof this.release.assets }[] } = {} + + // Group assets by plugin name and version + for (const asset of release.assets) { + const pluginName = asset.label.substring(0, asset.label.lastIndexOf('@')) + const version = asset.label + .substring(asset.label.lastIndexOf('@') + 1, asset.label.length) + .replace('.tar.gz', '') + .replace('.sha256', '') + + if (!pluginAssetsMap[pluginName]) { + pluginAssetsMap[pluginName] = [] + } + + let versionGroup = pluginAssetsMap[pluginName].find(group => group.version === version) + if (!versionGroup) { + versionGroup = { version, assets: [] } + pluginAssetsMap[pluginName].push(versionGroup) + } + + versionGroup.assets.push(asset) + } + + // Iterate over each plugin and remove assets for older versions + for (const [pluginName, versionGroups] of Object.entries(pluginAssetsMap)) { + // Sort versions by creation date (newest first) + versionGroups.sort((a, b) => { + const dateA = new Date(a.assets[0].created_at).getTime() + const dateB = new Date(b.assets[0].created_at).getTime() + return dateB - dateA + }) + + // Keep only the most recent version's assets + versionGroups.shift() // Remove the newest version group + + // Delete assets for older versions + for (const group of versionGroups) { + console.log(`Deleting older assets for plugin ${pluginName} version ${group.version} from release ${release.tag_name}...`) + for (const asset of group.assets) { + await this.deleteAsset(asset) + console.log(`Deleted older asset: ${asset.name} for plugin ${pluginName}`) + } + } + } + } + } + + /** + * Get the GitHub releases for the project + * @param {string} tagUnscoped + * @param {string} tagScoped */ - async getGitHubRelease(tag: string) { + private async getGitHubReleases(tagUnscoped: string, tagScoped: string): Promise { const response = await this.octokit.request('GET /repos/{owner}/{repo}/releases', { owner: this.githubProjectOwner, repo: this.githubProjectRepo, }) - this.release = response.data.find(x => x.tag_name === tag) - if (!this.release) { - throw new Error(`Release with tag "${tag}" does not exist`) + this.releaseUnscoped = response.data.find(x => x.tag_name === tagUnscoped) + this.releaseScoped = response.data.find(x => x.tag_name === tagScoped) + if (!this.releaseUnscoped || !this.releaseScoped) { + throw new Error(`Release with tag "${tagUnscoped}" or "${tagScoped}" does not exist`) } } /** * Update the GitHub Release */ - async updateRelease() { - if (this.pluginsSuccessfullyUpdated.length > 0 || this.pluginsNotProcessed.length > 0) { - try { - await this.octokit.request('PATCH /repos/{owner}/{repo}/releases/{release_id}', { - owner: this.githubProjectOwner, - repo: this.githubProjectRepo, - release_id: this.release.id, - name: `Plugin Tarballs ${new Date().toISOString().split('T')[0]}`, - body: 'Recently updated plugins:\n\n' - + `${this.pluginsSuccessfullyUpdated.map(x => `- ${x.name}@${x.version}`).join('\n')}\n` - + '---\n' - + 'Plugins not processed:\n\n' - + `${this.pluginsNotProcessed.map(x => `- ${x.plugin.name} - ${x.error}`).join('\n')}`, - }) - console.log('Updated release.') - } catch (e) { - console.error('Could not update release title', e.message) + private async updateRelease(): Promise { + for (const release of [this.releaseUnscoped, this.releaseScoped]) { + if (this.pluginsSuccessfullyUpdated.length > 0 || this.pluginsNotProcessed.length > 0) { + try { + await this.octokit.request('PATCH /repos/{owner}/{repo}/releases/{release_id}', { + owner: this.githubProjectOwner, + repo: this.githubProjectRepo, + release_id: release.id, + name: `Plugin Tarballs (${new Date().toISOString().split('T')[0]})`, + body: 'Recently updated plugins:\n\n' + + `${this.pluginsSuccessfullyUpdated.map(x => `- ${x.name}@${x.version}`).join('\n')}\n` + + '---\n' + + 'Plugins not processed:\n\n' + + `${this.pluginsNotProcessed.map(x => `- ${x.plugin.name} - ${x.error}`).join('\n')}`, + }) + console.log('Updated release.') + } catch (e) { + console.error('Could not update release title', e.message) + } } } } @@ -192,67 +316,69 @@ class PluginTarballs { /** * Generate a file to keep track of the total number of downloads */ - async generateDownloadStats() { - const pluginBundleAssets = this.release.assets.filter(x => x.name.endsWith('.tar.gz')) - const releaseStatsAsset = this.release.assets.find(x => x.name === 'download-statistics.json') + private async generateDownloadStats(): Promise { + for (const release of [this.releaseUnscoped, this.releaseScoped]) { + const pluginBundleAssets = release.assets.filter(x => x.name.endsWith('.tar.gz')) + const releaseStatsAsset = release.assets.find(x => x.name === 'download-statistics.json') + + if (releaseStatsAsset) { + const response = await axios.get(`${releaseStatsAsset.browser_download_url}?date=${new Date().getTime()}`) + this.releaseStats = response.data + } - if (releaseStatsAsset) { - const response = await axios.get(`${releaseStatsAsset.browser_download_url}?date=${new Date().getTime()}`) - this.releaseStats = response.data - } + for (const asset of pluginBundleAssets) { + const assetPlugin = asset.label.substring(0, asset.label.lastIndexOf('@')) + const assetVersion = asset.label.substring(asset.label.lastIndexOf('@') + 1, asset.label.length).split('.tar.gz')[0] - for (const asset of pluginBundleAssets) { - const assetPlugin = asset.label.substring(0, asset.label.lastIndexOf('@')) - const assetVersion = asset.label.substring(asset.label.lastIndexOf('@') + 1, asset.label.length).split('.tar.gz')[0] + // initialise the plugin if we have not seen it before + if (!this.releaseStats[assetPlugin]) { + this.releaseStats[assetPlugin] = { + downloadCount: 0, + versions: {}, + } + } - // initialise the plugin if we have not seen it before - if (!this.releaseStats[assetPlugin]) { - this.releaseStats[assetPlugin] = { - downloadCount: 0, - versions: {}, + // set / update the stats for the current version being processed + this.releaseStats[assetPlugin].versions[assetVersion] = { + downloadCount: asset.download_count, + size: asset.size, + created: asset.created_at, } - } - // set / update the stats for the current version being processed - this.releaseStats[assetPlugin].versions[assetVersion] = { - downloadCount: asset.download_count, - size: asset.size, - created: asset.created_at, + // update the total download count + this.releaseStats[assetPlugin].downloadCount = 0 + for (const version of Object.values(this.releaseStats[assetPlugin].versions)) { + this.releaseStats[assetPlugin].downloadCount += version.downloadCount + } } - // update the total download count - this.releaseStats[assetPlugin].downloadCount = 0 - for (const version of Object.values(this.releaseStats[assetPlugin].versions)) { - this.releaseStats[assetPlugin].downloadCount += version.downloadCount + // remove the old download-statistics.json + if (releaseStatsAsset) { + await this.deleteAsset(releaseStatsAsset) } - } - // remove the old download-statistics.json - if (releaseStatsAsset) { - await this.deleteAsset(releaseStatsAsset) - } - - // upload the new download-statistics.json - await this.octokit.request('POST /repos/{owner}/{repo}/releases/{release_id}/assets', { - owner: this.githubProjectOwner, - repo: this.githubProjectRepo, - url: this.release.upload_url, - release_id: this.release.id, - name: 'download-statistics.json', - label: 'download-statistics.json', - headers: { - 'content-type': 'application/json', - }, - data: JSON.stringify(this.releaseStats), - }) + // upload the new download-statistics.json + await this.octokit.request('POST /repos/{owner}/{repo}/releases/{release_id}/assets', { + owner: this.githubProjectOwner, + repo: this.githubProjectRepo, + url: release.upload_url, + release_id: release.id, + name: 'download-statistics.json', + label: 'download-statistics.json', + headers: { + 'content-type': 'application/json', + }, + data: JSON.stringify(this.releaseStats), + }) - console.log('Updated download-statistics.json...') + console.log('Updated download-statistics.json...') + } } /** * Create a bundle for the verified plugins */ - async bundlePlugins() { + private async bundlePlugins(): Promise { console.log(`Generating update bundles for ${this.pluginMap.length} plugins...`) for (const plugin of this.pluginMap) { const targetDir = path.join(this.workDir, `${plugin.name.replace('/', '@')}@${plugin.version}`) @@ -313,13 +439,16 @@ class PluginTarballs { /** * Upload assets to GitHub release */ - async uploadAssets() { + private async uploadAssets(): Promise { for (const plugin of this.pluginMap) { for (const assetType of ['tar.gz', 'sha256']) { const assetName = this.pluginAssetName(plugin, assetType) const assetPath = path.join(this.workDir, assetName) - const existingAsset = this.release.assets.find(x => x.name === assetName) + const isScoped = plugin.name.startsWith('@') + const release = isScoped ? this.releaseScoped : this.releaseUnscoped + + const existingAsset = release.assets.find(x => x.name === assetName) if (existingAsset) { await this.deleteAsset(existingAsset) } @@ -330,8 +459,8 @@ class PluginTarballs { const response = await this.octokit.request('POST /repos/{owner}/{repo}/releases/{release_id}/assets', { owner: this.githubProjectOwner, repo: this.githubProjectRepo, - url: this.release.upload_url, - release_id: this.release.id, + url: release.upload_url, + release_id: release.id, name: assetName, label: `${plugin.name}@${plugin.version}.${assetType}`, headers: { @@ -353,7 +482,7 @@ class PluginTarballs { process.exit(0) } } catch (e) { - console.error('Failed to upload asset:', assetName, e.messsage) + console.error('Failed to upload asset:', assetName, e.message) } } } @@ -362,22 +491,24 @@ class PluginTarballs { /** * Delete previous versions of the assets */ - async removeOldAssets() { - for (const plugin of this.pluginMap) { - for (const assetType of ['tar.gz', 'sha256']) { - const assetsToRemove = this.release - .assets - .filter((x) => { - // find old assets (this will not include the assets we just uploaded!) - return x.label.substring(0, x.label.lastIndexOf('@')) === plugin.name && x.name.endsWith(assetType) - }) - .sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime()) // sort by oldest to newest - - // remove the previously newest asset (last item in array), preventing it from being deleted - assetsToRemove.pop() - - for (const asset of assetsToRemove) { - await this.deleteAsset(asset) + private async removeOldAssets(): Promise { + for (const release of [this.releaseUnscoped, this.releaseScoped]) { + for (const plugin of this.pluginMap) { + for (const assetType of ['tar.gz', 'sha256']) { + const assetsToRemove = release + .assets + .filter((x) => { + // find old assets (this will not include the assets we just uploaded!) + return x.label.substring(0, x.label.lastIndexOf('@')) === plugin.name && x.name.endsWith(assetType) + }) + .sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime()) // sort by oldest to newest + + // remove the previously newest asset (last item in array), preventing it from being deleted + assetsToRemove.pop() + + for (const asset of assetsToRemove) { + await this.deleteAsset(asset) + } } } } @@ -389,7 +520,7 @@ class PluginTarballs { * @param {number} asset.id * @param {string} asset.name */ - async deleteAsset(asset: { id: number, name: string }) { + private async deleteAsset(asset: { id: number, name: string }): Promise { try { await this.octokit.request('DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}', { owner: this.githubProjectOwner, @@ -398,11 +529,11 @@ class PluginTarballs { }) console.log(`Purged ${asset.name}...`) } catch (e) { - console.error('Failed to delete asset:', asset.name, e.messsage) + console.error('Failed to delete asset:', asset.name, e.message) } } - pluginAssetName(plugin: Plugin, ext: string) { + private pluginAssetName(plugin: Plugin, ext: string) { return `${plugin.name.replace('/', '@')}-${plugin.version}.${ext}` } } diff --git a/verified-plugins.json b/verified-plugins.json index 74623f1..55199fa 100644 --- a/verified-plugins.json +++ b/verified-plugins.json @@ -14,6 +14,7 @@ "@homebridge-plugins/homebridge-august", "@homebridge-plugins/homebridge-camera-ffmpeg", "@homebridge-plugins/homebridge-cloudflared-tunnel", + "@homebridge-plugins/homebridge-ecovacs", "@homebridge-plugins/homebridge-ewelink", "@homebridge-plugins/homebridge-govee", "@homebridge-plugins/homebridge-lutron-caseta-leap", @@ -24,6 +25,7 @@ "@homebridge-plugins/homebridge-rainbird", "@homebridge-plugins/homebridge-resideo", "@homebridge-plugins/homebridge-roomba", + "@homebridge-plugins/homebridge-sharkiq", "@homebridge-plugins/homebridge-smarthq", "@homebridge-plugins/homebridge-tado", "@homebridge-plugins/homebridge-unifi-network", @@ -53,8 +55,6 @@ "homebridge-adguardhome", "homebridge-adt-pulse", "homebridge-advanced-timer", - "homebridge-aeg-robot", - "homebridge-aeg-wellbeing", "homebridge-agile-octopus-rates", "homebridge-air", "homebridge-air-q", @@ -63,14 +63,13 @@ "homebridge-airthings", "homebridge-airtouch5-platform", "homebridge-airzone-cloud", - "homebridge-aladdin-connect-garage-door", - "homebridge-aladdinconnect", "homebridge-alexa", "homebridge-alexa-player", "homebridge-alexa-smarthome", "homebridge-alphaess", "homebridge-amazondash-mac", "homebridge-ambiback", + "homebridge-ambient-realtime", "homebridge-ambient-weather-sensors", "homebridge-androidtv", "homebridge-anthemreceiver", @@ -87,10 +86,9 @@ "homebridge-away-mode", "homebridge-aws-iot", "homebridge-balboa-spa", - "homebridge-batterytender", "homebridge-bed-control", "homebridge-beoplay", - "homebridge-better-roku", + "homebridge-blaq", "homebridge-blauberg-vento", "homebridge-ble-thermobeacon", "homebridge-blinds", @@ -100,23 +98,19 @@ "homebridge-bold", "homebridge-bold-ble", "homebridge-bond", + "homebridge-bondbridge", "homebridge-boschcontrolpanel_bgseries", "homebridge-bravia", "homebridge-bravia-tvos", "homebridge-brewer", - "homebridge-broadlink-heater-cooler", "homebridge-browsercam", "homebridge-bthome", - "homebridge-button-platform", "homebridge-caddx-interlogix", "homebridge-calendar-scheduler", "homebridge-camera-ffmpeg", "homebridge-camera-ui", "homebridge-carrier-infinity", "homebridge-cgd-garage-door", - "homebridge-cleanmate", - "homebridge-cloudflared-tunnel", - "homebridge-cmd4-advantageair", "homebridge-comed-hourlypricing", "homebridge-comelit-platform", "homebridge-comelit-sb-platform", @@ -139,7 +133,6 @@ "homebridge-daikin-tempsensor-nocloud", "homebridge-davis", "homebridge-deconz", - "homebridge-deebot", "homebridge-deebotecovacs", "homebridge-delay-switch", "homebridge-denon-heos", @@ -148,6 +141,7 @@ "homebridge-deye", "homebridge-digitalstrom-plugin", "homebridge-dolphin", + "homebridge-doorbell-telegram-photo", "homebridge-doorbird", "homebridge-dreamscreen-rm", "homebridge-dreo", @@ -159,7 +153,6 @@ "homebridge-easee", "homebridge-ecoforest-thermostat", "homebridge-econet-rheem", - "homebridge-ecoplug", "homebridge-ecowitt-weather-sensors", "homebridge-edomoticz", "homebridge-eggtimer-plugin", @@ -177,10 +170,7 @@ "homebridge-eosstb", "homebridge-eufy-security", "homebridge-evohome", - "homebridge-ewelink", "homebridge-exivo", - "homebridge-ezviz", - "homebridge-fenix-tft-wifi", "homebridge-fhem", "homebridge-fibaro-hc3", "homebridge-fibaro-home-center", @@ -190,7 +180,6 @@ "homebridge-fordpass", "homebridge-foxess", "homebridge-freeathome-local-api", - "homebridge-freebox-player-delta", "homebridge-frigidaire-dehumidifier", "homebridge-fritz-platform", "homebridge-ftp-motion", @@ -200,7 +189,6 @@ "homebridge-glances", "homebridge-gogogate2", "homebridge-google-nest-sdm", - "homebridge-govee", "homebridge-gpio-doorbell", "homebridge-gpio-rgb-ledstrip", "homebridge-gpio-rgbw-ledstrip", @@ -215,14 +203,12 @@ "homebridge-hilo", "homebridge-homeconnect", "homebridge-homekit-control", - "homebridge-homeqtt-alarm", "homebridge-homewizard-energy-socket", "homebridge-homewizard-power-consumption", "homebridge-homeworks", "homebridge-hsd", "homebridge-http-curtain", "homebridge-http-garage-doors", - "homebridge-http-iot", "homebridge-http-json-thermometer", "homebridge-http-leak-sensor", "homebridge-http-sensors-switches", @@ -236,10 +222,12 @@ "homebridge-i6-bigassfans", "homebridge-infinitude-v2", "homebridge-intelliclima", + "homebridge-intercom", "homebridge-intercom-automation-hat", "homebridge-irobot-v2", "homebridge-itho-daalderop", "homebridge-jablotron", + "homebridge-jci-hitachi-platform", "homebridge-jewish-calendar", "homebridge-juicebox", "homebridge-kasa-hub", @@ -258,7 +246,6 @@ "homebridge-levoit-humidifiers", "homebridge-lg-enervu", "homebridge-lg-thinq", - "homebridge-lg-thinq-ac", "homebridge-lgwebos-tv", "homebridge-lifx-plugin", "homebridge-lighthouse", @@ -273,18 +260,15 @@ "homebridge-luxtronik2", "homebridge-magic-occupancy", "homebridge-magichome-dynamic-platform", - "homebridge-meater", "homebridge-melcloud-control", "homebridge-meraki-control", "homebridge-mercedesme", - "homebridge-meross", "homebridge-mertik-fireplace", "homebridge-messenger", "homebridge-mhacwifi1-lan", "homebridge-mhi-wfrac", "homebridge-mi-humidifier", "homebridge-mi-hygrothermograph", - "homebridge-micronova-agua-iot-stove", "homebridge-midea-platform", "homebridge-mieleathome", "homebridge-mihomegateway", @@ -304,18 +288,15 @@ "homebridge-my-wallbox", "homebridge-mylink", "homebridge-myplace", - "homebridge-myq", "homebridge-mysmartblinds-bridge", - "homebridge-naim-audio", "homebridge-nb", "homebridge-neptun-smart", "homebridge-ness-d16x", "homebridge-nest", - "homebridge-nest-cam", + "homebridge-nest-accfactory", "homebridge-network-presence", "homebridge-ngbs-icon-thermostat", "homebridge-node-alarm-dot-com", - "homebridge-noip", "homebridge-nordpool-baltics", "homebridge-notifyevents", "homebridge-nukiio", @@ -323,7 +304,6 @@ "homebridge-octoprint-motion", "homebridge-omnik", "homebridge-omnilink-platform", - "homebridge-onstar", "homebridge-open-sesame", "homebridge-openrgb", "homebridge-opensprinkler-api", @@ -358,7 +338,6 @@ "homebridge-playstation-game-title", "homebridge-plex-webhooks", "homebridge-plugin-govee", - "homebridge-plugin-update-check", "homebridge-porsche-taycan", "homebridge-presence-switch-msgraph", "homebridge-presence-switch-slack", @@ -373,18 +352,15 @@ "homebridge-rachio-irrigation", "homebridge-rademacher-homepilot", "homebridge-radiora2", - "homebridge-rainbird", "homebridge-ratgdo", "homebridge-red-alert-via-kumta", "homebridge-remootio", - "homebridge-resideo", "homebridge-rgb-ledstrip", "homebridge-ring", "homebridge-rinnai-controlr", "homebridge-rinnai-touch-platform", "homebridge-robonect", "homebridge-rointe-unofficial", - "homebridge-roomba2", "homebridge-roomme", "homebridge-rpi", "homebridge-rpi-rf-switch", @@ -398,7 +374,6 @@ "homebridge-sensibo-ac", "homebridge-sensit-tank-monitor", "homebridge-sepsadsecurity", - "homebridge-sharkiq", "homebridge-shelly", "homebridge-shelly-ng", "homebridge-shortcuts-buttons", @@ -406,16 +381,10 @@ "homebridge-signalk", "homebridge-simplisafe3", "homebridge-sinricpro", - "homebridge-skybell", "homebridge-sleepme", - "homebridge-slide-shutter", "homebridge-sma-home-manager", "homebridge-smart-irrigation", - "homebridge-smartcielo", - "homebridge-smartdry", - "homebridge-smartglass", "homebridge-smarthomeng", - "homebridge-smartthings", "homebridge-smartthings-ik", "homebridge-smtp-motion", "homebridge-snowsense", @@ -438,6 +407,7 @@ "homebridge-sternet-smart-lan", "homebridge-subaru", "homebridge-sunsa", + "homebridge-sunsynk", "homebridge-switch-button", "homebridge-switchbot-bluetooth-platform", "homebridge-switchbot-for-mac", @@ -445,7 +415,6 @@ "homebridge-switcher-platform", "homebridge-tadiran-ac", "homebridge-tado-ac", - "homebridge-tado-platform", "homebridge-tapo-camera", "homebridge-tasmota", "homebridge-tasmota-control", @@ -458,6 +427,7 @@ "homebridge-tesla", "homebridge-tesy-heater-v2", "homebridge-texecom-connect", + "homebridge-texecom-full", "homebridge-thermobit", "homebridge-tibber-price", "homebridge-tibberswitch", @@ -466,8 +436,8 @@ "homebridge-tivo-control", "homebridge-tovala", "homebridge-tp-link-access-control", - "homebridge-tp-link-tapo", "homebridge-tplink-smarthome", + "homebridge-tsvesync", "homebridge-ttlock", "homebridge-tuya", "homebridge-tuya-ir", @@ -486,7 +456,6 @@ "homebridge-velux", "homebridge-velux-active", "homebridge-verisure", - "homebridge-vesync-v2", "homebridge-videodoorbell", "homebridge-vieramatic", "homebridge-virtual-accessories", @@ -498,7 +467,6 @@ "homebridge-weatherflow-tempest", "homebridge-webos-tv", "homebridge-website-change-check", - "homebridge-wemo", "homebridge-winix-purifiers", "homebridge-wiser", "homebridge-wiz-lan", @@ -517,7 +485,6 @@ "homebridge-yeelighter", "homebridge-yet-another-ping", "homebridge-yindl", - "homebridge-yokis-usb", "homebridge-yolink", "homebridge-z2m", "homebridge-zidoo-androidtv",