From 254f6497445a3406a7ed5ea1629344f94b321f76 Mon Sep 17 00:00:00 2001 From: Donavan Becker Date: Sun, 16 Oct 2022 17:53:53 -0500 Subject: [PATCH 01/15] Update switchbot-advertising.js --- lib/switchbot-advertising.js | 47 +++++++++++++++--------------------- 1 file changed, 19 insertions(+), 28 deletions(-) diff --git a/lib/switchbot-advertising.js b/lib/switchbot-advertising.js index f4202854..47e61699 100644 --- a/lib/switchbot-advertising.js +++ b/lib/switchbot-advertising.js @@ -549,40 +549,31 @@ class SwitchbotAdvertising { } return null; } - const byte9 = buf.readUInt8(9); // byte9: color bulb state; 0x00=off, 0x80=on & lightLevel: 1~100% - //const byte10 = buf.readUInt8(10); // byte10: bit0: 0=no delay,1=delay, bit1:0=no timer, 1=timer; bit2:0=no sync time, 1=sync'ed time - //const byte11 = buf.readUInt8(11); // byte11: wifi rssi - //const byte12 = buf.readUInt8(12); // byte12: bit7: overload? - //const byte13 = buf.readUInt8(13); // byte12[bit0~6] + byte13: current power value - const state = byte9 === 0x01 ? "off" : byte9 === 0x80 ? "on" : null; - //const lightLevel = byte9 & 0b00000011; - //const delay = !!(byte10 & 0b00000001); - //const networkStatus = !!(byte10 & 0b00000001); - //const statePreset = !!(byte10 & 0b00000010); - //const lightState = !!(byte10 & 0b00000100); - //const wifiRssi = byte11; - //const dynamicRate = !!(byte12 & 0b10000000); - //const loopIndex = (((byte12 & 0b01111111) << 8) + byte13) / 10; // in watt + const byte7 = buf.readUInt8(7); + const byte8 = buf.readUInt8(8); + const byte9 = buf.readUInt8(9); + const byte10 = buf.readUInt8(10); + + const isOn = byte7 & 0b10000000; + const brightness = byte7 & 0b01111111; + const delay = byte8 & 0b10000000; + const preset = byte8 & 0b00001000; + const color_mode = byte8 & 0b00000111; + const speed = byte9 & 0b01111111; + const loop_index = byte10 & 0b11111110; const data = { model: "r", modelName: "WoStrip", - state: state, - }; - /* const data = { - model: "u", - modelName: "WoBulb", - state: state, - lightLevel: lightLevel, + isOn: isOn, + brightness: brightness, delay: delay, - networkStatus: networkStatus, - statePreset: statePreset, - lightState: lightState, - wifiRssi: wifiRssi, - dynamicRate: dynamicRate, - loopIndex: loopIndex, - };*/ + preset: preset, + color_mode: color_mode, + speed: speed, + loop_index: loop_index, + }; return data; } From 779e36574a682c6093516529b3e4f78df85b9205 Mon Sep 17 00:00:00 2001 From: Donavan Becker Date: Sun, 16 Oct 2022 21:59:10 -0500 Subject: [PATCH 02/15] color bulb enhancements --- lib/switchbot-advertising.js | 55 +++-- package-lock.json | 419 +++++++++++++++++++++-------------- package.json | 2 +- 3 files changed, 273 insertions(+), 203 deletions(-) diff --git a/lib/switchbot-advertising.js b/lib/switchbot-advertising.js index 47e61699..25a92918 100644 --- a/lib/switchbot-advertising.js +++ b/lib/switchbot-advertising.js @@ -360,40 +360,35 @@ class SwitchbotAdvertising { } return null; } - const byte9 = buf.readUInt8(9); // byte9: color bulb state; 0x00=off, 0x80=on & lightLevel: 1~100% - //const byte10 = buf.readUInt8(10); // byte10: bit0: 0=no delay,1=delay, bit1:0=no timer, 1=timer; bit2:0=no sync time, 1=sync'ed time - //const byte11 = buf.readUInt8(11); // byte11: wifi rssi - //const byte12 = buf.readUInt8(12); // byte12: bit7: overload? - //const byte13 = buf.readUInt8(13); // byte12[bit0~6] + byte13: current power value - - const state = byte9 === 0x01 ? "off" : byte9 === 0x80 ? "on" : null; - const lightLevel = byte9 & 0b00000011; - //const delay = !!(byte10 & 0b00000001); - //const networkStatus = !!(byte10 & 0b00000001); - //const statePreset = !!(byte10 & 0b00000010); - //const lightState = !!(byte10 & 0b00000100); - //const wifiRssi = byte11; - //const dynamicRate = !!(byte12 & 0b10000000); - //const loopIndex = (((byte12 & 0b01111111) << 8) + byte13) / 10; // in watt + + const byte6 = buf.readUInt8(6); + const byte7 = buf.readUInt8(7); + const byte8 = buf.readUInt8(8); + const byte9 = buf.readUInt8(9); + const byte10 = buf.readUInt8(10); + + + const sequence_number = byte6; + const isOn = byte7 & 0b01111111 ? true : false; + const brightness = byte7 & 0b01111111; + const delay = byte8 & 0b10000000; + const preset = byte8 & 0b00001000; + const color_mode = byte8 & 0b00000111; + const speed = byte9 & 0b01111111; + const loop_index = byte10 & 0b11111110; const data = { model: "u", modelName: "WoBulb", - state: state, - }; - /* const data = { - model: "u", - modelName: "WoBulb", - state: state, - lightLevel: lightLevel, + sequence_number: sequence_number, + isOn: isOn, + brightness: brightness, delay: delay, - networkStatus: networkStatus, - statePreset: statePreset, - lightState: lightState, - wifiRssi: wifiRssi, - dynamicRate: dynamicRate, - loopIndex: loopIndex, - };*/ + preset: preset, + color_mode: color_mode, + speed: speed, + loop_index: loop_index, + }; return data; } @@ -555,7 +550,7 @@ class SwitchbotAdvertising { const byte9 = buf.readUInt8(9); const byte10 = buf.readUInt8(10); - const isOn = byte7 & 0b10000000; + const isOn = byte7 & 0b10000000 ? true : false; const brightness = byte7 & 0b01111111; const delay = byte8 & 0b10000000; const preset = byte8 & 0b00001000; diff --git a/package-lock.json b/package-lock.json index 57971f96..d1d9cf69 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@abandonware/noble": "^1.9.2-15" }, "devDependencies": { - "npm-check-updates": "^16.3.8" + "npm-check-updates": "^16.3.13" } }, "node_modules/@abandonware/bluetooth-hci-socket": { @@ -120,16 +120,15 @@ } }, "node_modules/@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.0.0.tgz", + "integrity": "sha512-GdeVD+dnBxzMslTFvnctLX5yIqV4ZNZBWNbo1OejQ++bZpnFNQ1AjOn9Sboi+LzheQbCBU1ts1mhEVduHrcZOQ==", "dev": true, "dependencies": { - "@gar/promisify": "^1.1.3", "semver": "^7.3.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/git": { @@ -218,6 +217,19 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/@npmcli/run-script/node_modules/read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@pnpm/network.ca-file": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.1.tgz", @@ -346,9 +358,9 @@ } }, "node_modules/ansi-styles": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.1.tgz", - "integrity": "sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "engines": { "node": ">=12" @@ -506,32 +518,28 @@ } }, "node_modules/cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.0.tgz", + "integrity": "sha512-5hYD+c8Ytmymo9b8tPgYWrWfHOzaO8M8jMUkyiEYfeLTwo70MUaD/yA1pNONi3upx02JIn3mtpDuSCXoQgtlHw==", "dev": true, "dependencies": { - "@npmcli/fs": "^2.1.0", + "@npmcli/fs": "^3.0.0", "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", "fs-minipass": "^2.1.0", "glob": "^8.0.1", - "infer-owner": "^1.0.4", "lru-cache": "^7.7.1", "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", "ssri": "^9.0.0", "tar": "^6.1.11", "unique-filename": "^2.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/cacheable-lookup": { @@ -574,9 +582,9 @@ } }, "node_modules/chalk": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.0.tgz", - "integrity": "sha512-56zD4khRTBoIyzUYAFgDDaPhUMN/fC/rySe6aZGqbj/VWiU2eI3l6ZLOtYGFZAV5v02mwPjtpzlrOveJiz5eZQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.2.tgz", + "integrity": "sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==", "dev": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -595,9 +603,9 @@ } }, "node_modules/ci-info": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz", - "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz", + "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==", "dev": true }, "node_modules/clean-stack": { @@ -1106,9 +1114,9 @@ } }, "node_modules/got": { - "version": "12.5.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.5.1.tgz", - "integrity": "sha512-sD16AK8cCyUoPtKr/NMvLTFFa+T3i3S+zoiuvhq0HP2YiqBZA9AtlBjAdsQBsLBK7slPuvmfE0OxhGi7N5dD4w==", + "version": "12.5.2", + "resolved": "https://registry.npmjs.org/got/-/got-12.5.2.tgz", + "integrity": "sha512-guHGMSEcsA5m1oPRweXUJnug0vuvlkX9wx5hzOka+ZBrBUOJHU0Z1JcNu3QE5IPGnA5aXUsQHdWOD4eJg9/v3A==", "dev": true, "dependencies": { "@sindresorhus/is": "^5.2.0", @@ -1658,6 +1666,48 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -1705,10 +1755,13 @@ } }, "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/minipass": { "version": "3.3.4", @@ -1828,9 +1881,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", "optional": true }, "node_modules/negotiator": { @@ -1868,9 +1921,9 @@ } }, "node_modules/node-gyp": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.2.0.tgz", - "integrity": "sha512-/+/YxGfIJOh/fnMsr4Ep0v6oOIjnO1BgLd2dcDspBX1spTkQU7xSIox5RdRE/2/Uq3ZwK8Z5swRIbMUmPlslmg==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz", + "integrity": "sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==", "dev": true, "dependencies": { "env-paths": "^2.2.0", @@ -2058,12 +2111,12 @@ } }, "node_modules/npm-check-updates": { - "version": "16.3.8", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.3.8.tgz", - "integrity": "sha512-2CUeCWEs+arWQUJH2IEkiZU/Ak2fLBqGkMyM5JDkfnGhz1VHNe3yyGiXD+0JeVmjbXTEpgZ0t6C9VK52atGuAw==", + "version": "16.3.13", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.3.13.tgz", + "integrity": "sha512-iBMvWZG4tvQBg4Ocb5QvyqIXW1t8D4/6usMPWgMWjw3/7Sh2/GXFMRlWKCVqeT5uBL/W6siNGTr4/QVXEM+WLQ==", "dev": true, "dependencies": { - "chalk": "^5.0.1", + "chalk": "^5.1.2", "cli-table": "^0.3.11", "commander": "^9.4.1", "fast-memoize": "^2.5.2", @@ -2077,20 +2130,20 @@ "lodash": "^4.17.21", "minimatch": "^5.1.0", "p-map": "^4.0.0", - "pacote": "^13.6.2", + "pacote": "^15.0.0", "parse-github-url": "^1.0.2", "progress": "^2.0.3", "prompts-ncu": "^2.5.1", "rc-config-loader": "^4.1.0", "remote-git-tags": "^3.0.0", "rimraf": "^3.0.2", - "semver": "^7.3.7", + "semver": "^7.3.8", "semver-utils": "^1.1.4", "source-map-support": "^0.5.21", "spawn-please": "^1.0.0", "untildify": "^4.0.0", "update-notifier": "^6.0.2", - "yaml": "^2.1.1" + "yaml": "^2.1.3" }, "bin": { "ncu": "build/src/bin/cli.js", @@ -2134,42 +2187,15 @@ } }, "node_modules/npm-packlist": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz", - "integrity": "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==", - "dev": true, - "dependencies": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "bin": { - "npm-packlist": "bin/index.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-packlist/node_modules/npm-bundled": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz", - "integrity": "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.0.tgz", + "integrity": "sha512-8GRMzWQmFdUrRmc6tPPCd9Umm9g2qDR6X6Rik+9nYvoDQTLs/0IcCKv6iUdAmgr9sgJCm24QovwozCHWMDriOg==", "dev": true, "dependencies": { - "npm-normalize-package-bin": "^2.0.0" + "ignore-walk": "^5.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-pick-manifest": { @@ -2317,30 +2343,26 @@ } }, "node_modules/pacote": { - "version": "13.6.2", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz", - "integrity": "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.0.0.tgz", + "integrity": "sha512-YsMK5om14r2rf4Ukum5R43zKFoJe0swrsZRbG4fUfTJUxHpdMrie6+Js/jaNtn7Bq0YRL9SnAajPqz6n4wgi6g==", "dev": true, "dependencies": { "@npmcli/git": "^3.0.0", "@npmcli/installed-package-contents": "^1.0.7", "@npmcli/promise-spawn": "^3.0.0", "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", + "cacache": "^17.0.0", "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", "minipass": "^3.1.6", - "mkdirp": "^1.0.4", "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", + "npm-packlist": "^7.0.0", "npm-pick-manifest": "^7.0.0", "npm-registry-fetch": "^13.0.1", "proc-log": "^2.0.0", "promise-retry": "^2.0.1", "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", + "read-package-json-fast": "^3.0.0", "ssri": "^9.0.0", "tar": "^6.1.11" }, @@ -2348,7 +2370,7 @@ "pacote": "lib/bin.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/parse-github-url": { @@ -2554,16 +2576,34 @@ } }, "node_modules/read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.0.tgz", + "integrity": "sha512-dVZMRA86XfZYNxQu18el+HG18L92Rn9CyOhOiQRPFR6ygigZwnmPg1DEVPNFBesp8JeISYYLvvD8DaEkUSTFkQ==", "dev": true, "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^2.0.0" }, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/read-package-json/node_modules/npm-normalize-package-bin": { @@ -3492,12 +3532,11 @@ } }, "@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.0.0.tgz", + "integrity": "sha512-GdeVD+dnBxzMslTFvnctLX5yIqV4ZNZBWNbo1OejQ++bZpnFNQ1AjOn9Sboi+LzheQbCBU1ts1mhEVduHrcZOQ==", "dev": true, "requires": { - "@gar/promisify": "^1.1.3", "semver": "^7.3.5" } }, @@ -3564,6 +3603,18 @@ "node-gyp": "^9.0.0", "read-package-json-fast": "^2.0.3", "which": "^2.0.2" + }, + "dependencies": { + "read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + } } }, "@pnpm/network.ca-file": { @@ -3664,9 +3715,9 @@ "devOptional": true }, "ansi-styles": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.1.tgz", - "integrity": "sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true }, "aproba": { @@ -3787,26 +3838,22 @@ } }, "cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.0.tgz", + "integrity": "sha512-5hYD+c8Ytmymo9b8tPgYWrWfHOzaO8M8jMUkyiEYfeLTwo70MUaD/yA1pNONi3upx02JIn3mtpDuSCXoQgtlHw==", "dev": true, "requires": { - "@npmcli/fs": "^2.1.0", + "@npmcli/fs": "^3.0.0", "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", "fs-minipass": "^2.1.0", "glob": "^8.0.1", - "infer-owner": "^1.0.4", "lru-cache": "^7.7.1", "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", "ssri": "^9.0.0", "tar": "^6.1.11", "unique-filename": "^2.0.0" @@ -3840,9 +3887,9 @@ "dev": true }, "chalk": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.0.tgz", - "integrity": "sha512-56zD4khRTBoIyzUYAFgDDaPhUMN/fC/rySe6aZGqbj/VWiU2eI3l6ZLOtYGFZAV5v02mwPjtpzlrOveJiz5eZQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.2.tgz", + "integrity": "sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==", "dev": true }, "chownr": { @@ -3852,9 +3899,9 @@ "devOptional": true }, "ci-info": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz", - "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz", + "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==", "dev": true }, "clean-stack": { @@ -4223,9 +4270,9 @@ } }, "got": { - "version": "12.5.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.5.1.tgz", - "integrity": "sha512-sD16AK8cCyUoPtKr/NMvLTFFa+T3i3S+zoiuvhq0HP2YiqBZA9AtlBjAdsQBsLBK7slPuvmfE0OxhGi7N5dD4w==", + "version": "12.5.2", + "resolved": "https://registry.npmjs.org/got/-/got-12.5.2.tgz", + "integrity": "sha512-guHGMSEcsA5m1oPRweXUJnug0vuvlkX9wx5hzOka+ZBrBUOJHU0Z1JcNu3QE5IPGnA5aXUsQHdWOD4eJg9/v3A==", "dev": true, "requires": { "@sindresorhus/is": "^5.2.0", @@ -4640,6 +4687,44 @@ "promise-retry": "^2.0.1", "socks-proxy-agent": "^7.0.0", "ssri": "^9.0.0" + }, + "dependencies": { + "@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + } + }, + "cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "requires": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + } + } } }, "merge2": { @@ -4674,9 +4759,9 @@ } }, "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "dev": true }, "minipass": { @@ -4768,9 +4853,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", "optional": true }, "negotiator": { @@ -4794,9 +4879,9 @@ } }, "node-gyp": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.2.0.tgz", - "integrity": "sha512-/+/YxGfIJOh/fnMsr4Ep0v6oOIjnO1BgLd2dcDspBX1spTkQU7xSIox5RdRE/2/Uq3ZwK8Z5swRIbMUmPlslmg==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz", + "integrity": "sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==", "dev": true, "requires": { "env-paths": "^2.2.0", @@ -4936,12 +5021,12 @@ } }, "npm-check-updates": { - "version": "16.3.8", - "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.3.8.tgz", - "integrity": "sha512-2CUeCWEs+arWQUJH2IEkiZU/Ak2fLBqGkMyM5JDkfnGhz1VHNe3yyGiXD+0JeVmjbXTEpgZ0t6C9VK52atGuAw==", + "version": "16.3.13", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-16.3.13.tgz", + "integrity": "sha512-iBMvWZG4tvQBg4Ocb5QvyqIXW1t8D4/6usMPWgMWjw3/7Sh2/GXFMRlWKCVqeT5uBL/W6siNGTr4/QVXEM+WLQ==", "dev": true, "requires": { - "chalk": "^5.0.1", + "chalk": "^5.1.2", "cli-table": "^0.3.11", "commander": "^9.4.1", "fast-memoize": "^2.5.2", @@ -4955,20 +5040,20 @@ "lodash": "^4.17.21", "minimatch": "^5.1.0", "p-map": "^4.0.0", - "pacote": "^13.6.2", + "pacote": "^15.0.0", "parse-github-url": "^1.0.2", "progress": "^2.0.3", "prompts-ncu": "^2.5.1", "rc-config-loader": "^4.1.0", "remote-git-tags": "^3.0.0", "rimraf": "^3.0.2", - "semver": "^7.3.7", + "semver": "^7.3.8", "semver-utils": "^1.1.4", "source-map-support": "^0.5.21", "spawn-please": "^1.0.0", "untildify": "^4.0.0", "update-notifier": "^6.0.2", - "yaml": "^2.1.1" + "yaml": "^2.1.3" } }, "npm-install-checks": { @@ -4999,32 +5084,12 @@ } }, "npm-packlist": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz", - "integrity": "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.0.tgz", + "integrity": "sha512-8GRMzWQmFdUrRmc6tPPCd9Umm9g2qDR6X6Rik+9nYvoDQTLs/0IcCKv6iUdAmgr9sgJCm24QovwozCHWMDriOg==", "dev": true, "requires": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "dependencies": { - "npm-bundled": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz", - "integrity": "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^2.0.0" - } - }, - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true - } + "ignore-walk": "^5.0.1" } }, "npm-pick-manifest": { @@ -5135,30 +5200,26 @@ } }, "pacote": { - "version": "13.6.2", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz", - "integrity": "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.0.0.tgz", + "integrity": "sha512-YsMK5om14r2rf4Ukum5R43zKFoJe0swrsZRbG4fUfTJUxHpdMrie6+Js/jaNtn7Bq0YRL9SnAajPqz6n4wgi6g==", "dev": true, "requires": { "@npmcli/git": "^3.0.0", "@npmcli/installed-package-contents": "^1.0.7", "@npmcli/promise-spawn": "^3.0.0", "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", + "cacache": "^17.0.0", "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", "minipass": "^3.1.6", - "mkdirp": "^1.0.4", "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", + "npm-packlist": "^7.0.0", "npm-pick-manifest": "^7.0.0", "npm-registry-fetch": "^13.0.1", "proc-log": "^2.0.0", "promise-retry": "^2.0.1", "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", + "read-package-json-fast": "^3.0.0", "ssri": "^9.0.0", "tar": "^6.1.11" } @@ -5311,13 +5372,27 @@ } }, "read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.0.tgz", + "integrity": "sha512-dVZMRA86XfZYNxQu18el+HG18L92Rn9CyOhOiQRPFR6ygigZwnmPg1DEVPNFBesp8JeISYYLvvD8DaEkUSTFkQ==", "dev": true, "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^2.0.0" + }, + "dependencies": { + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + }, + "npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "dev": true + } } }, "readable-stream": { diff --git a/package.json b/package.json index 61950b86..3b1569a7 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,6 @@ "@abandonware/noble": "^1.9.2-15" }, "devDependencies": { - "npm-check-updates": "^16.3.8" + "npm-check-updates": "^16.3.13" } } \ No newline at end of file From aa73beb8be21da27042ce3892af1a709ec3c5eba Mon Sep 17 00:00:00 2001 From: Donavan Becker Date: Mon, 17 Oct 2022 11:22:00 -0500 Subject: [PATCH 03/15] Update switchbot-advertising.js --- lib/switchbot-advertising.js | 86 ++++++++++++++++++++++-------------- 1 file changed, 52 insertions(+), 34 deletions(-) diff --git a/lib/switchbot-advertising.js b/lib/switchbot-advertising.js index 25a92918..e0fae8f5 100644 --- a/lib/switchbot-advertising.js +++ b/lib/switchbot-advertising.js @@ -198,8 +198,8 @@ class SwitchbotAdvertising { let byte5 = buf.readUInt8(5); let temp_sign = byte4 & 0b10000000 ? 1 : -1; - let temp_c = temp_sign * ((byte4 & 0b01111111) + byte3 / 10); - let temp_f = (temp_c * 9) / 5 + 32; + let temp_c = temp_sign * ((byte4 & 0b01111111) + (byte3 & 0b00001111) / 10); + let temp_f = (temp_c * 9 / 5) + 32; temp_f = Math.round(temp_f * 10) / 10; let data = { @@ -256,23 +256,35 @@ class SwitchbotAdvertising { } return null; } + + let byte1 = buf.readUInt8(1); let byte2 = buf.readUInt8(2); - // let byte3 = buf.readUInt8(3); - // let byte4 = buf.readUInt8(4); + //let byte3 = buf.readUInt8(3); + //let byte4 = buf.readUInt8(4); let byte5 = buf.readUInt8(5); - let pirState = byte1 & 0b01000000 ? true : false; // 1 - Movement detected - let battery = byte2 & 0b01111111; // % - let lightLevel = byte5 & 0b00000011; + + let tested = byte1 & 0b10000000 ? true : false; + let movement = byte1 & 0b01000000 ? true : false; + let battery = byte2 & 0b01111111; + let led = (byte5 & 0b00100000) >> 5; + let iot = (byte5 & 0b00010000) >> 4; + let sense_distance = (byte5 & 0b00001100) >> 2; + let light_intensity = byte5 & 0b00000011; + let is_light = byte5 & 0b00000010 ? true : false; let data = { model: "s", modelName: "WoMotion", - movement: pirState, + tested: tested, + movement: movement, battery: battery, - lightLevel: - lightLevel == 1 ? "dark" : lightLevel == 2 ? "bright" : "unknown", + led: led, + iot: iot, + sense_distance: sense_distance, + light_intensity: light_intensity, + is_light: is_light, }; return data; @@ -295,25 +307,28 @@ class SwitchbotAdvertising { // let byte5 = buf.readUInt8(5); // let byte6 = buf.readUInt8(6); // let byte7 = buf.readUInt8(7); - // let byte8 = buf.readUInt8(8); + let byte8 = buf.readUInt8(8); - let pirState = byte1 & 0b01000000 ? true : false; // 1 - Movement detected - let battery = byte2 & 0b01111111; // % let hallState = (byte3 >> 1) & 0b00000011; - let lightLevel = byte3 & 0b00000001; + let tested = byte1 & 0b10000000; + let movement = byte1 & 0b01000000 ? true : false; // 1 - Movement detected + let battery = byte2 & 0b01111111; // % + let contact_open = byte3 & 0b00000010 == 0b00000010; + let contact_timeout = byte3 & 0b00000100 == 0b00000100; + let is_light = byte3 & 0b00000001 ? true : false; + let button_count = (data[8] & 0b00001111); let data = { model: "d", modelName: "WoContact", - movement: pirState, + movement: movement, + tested: tested, battery: battery, - doorState: - hallState == 0 - ? "close" - : hallState == 1 - ? "open" - : "timeout no closed", - lightLevel: lightLevel == 0 ? "dark" : "bright", + contact_open: contact_open, + contact_timeout: contact_timeout, + is_light: is_light, + button_count: button_count, + hallState: hallState, }; return data; @@ -332,20 +347,23 @@ class SwitchbotAdvertising { let byte2 = buf.readUInt8(2); let byte3 = buf.readUInt8(3); let byte4 = buf.readUInt8(4); - // let byte5 = buf.readUInt8(5); let calibration = byte1 & 0b01000000 ? true : false; // Whether the calibration is completed let battery = byte2 & 0b01111111; // % - let currPosition = byte3 & 0b01111111; // current positon % + let inMotion = byte3 & 0b10000000 ? true : false; + let currPosition = max(min(data[3] & 0b01111111, 100), 0) //byte3 & 0b01111111; // current positon % let lightLevel = (byte4 >> 4) & 0b00001111; // light sensor level (1-10) + let deviceChain = byte4 & 0b00000111; let data = { model: "c", modelName: "WoCurtain", calibration: calibration, battery: battery, + inMotion: inMotion, position: currPosition, lightLevel: lightLevel, + deviceChain: deviceChain, }; return data; @@ -369,7 +387,7 @@ class SwitchbotAdvertising { const sequence_number = byte6; - const isOn = byte7 & 0b01111111 ? true : false; + const state = byte7 & 0b01111111 ? true : false; const brightness = byte7 & 0b01111111; const delay = byte8 & 0b10000000; const preset = byte8 & 0b00001000; @@ -381,7 +399,7 @@ class SwitchbotAdvertising { model: "u", modelName: "WoBulb", sequence_number: sequence_number, - isOn: isOn, + state: state, brightness: brightness, delay: delay, preset: preset, @@ -486,14 +504,14 @@ class SwitchbotAdvertising { // let byte4 = buf.readUInt8(4); let byte5 = buf.readUInt8(5); - //let pirState = (byte1 & 0b01000000) ? true : false; // 1 - Movement detected + //let movement = (byte1 & 0b01000000) ? true : false; // 1 - Movement detected let battery = byte2 & 0b01111111; // % //let lightLevel = byte5 & 0b00000011; let data = { model: "o", modelName: "WoSmartLock", - //movement: pirState, + //movement: movement, battery: battery, //lightLevel: (lightLevel == 1) ? 'dark' : ((lightLevel == 2) ? 'bright' : 'unknown'), }; @@ -516,8 +534,8 @@ class SwitchbotAdvertising { let byte5 = buf.readUInt8(5); let temp_sign = byte4 & 0b10000000 ? 1 : -1; - let temp_c = temp_sign * ((byte4 & 0b01111111) + byte3 / 10); - let temp_f = (temp_c * 9) / 5 + 32; + let temp_c = temp_sign * ((byte4 & 0b01111111) + (byte3 & 0b00001111) / 10); + let temp_f = (temp_c * 9 / 5) + 32; temp_f = Math.round(temp_f * 10) / 10; let data = { @@ -550,8 +568,8 @@ class SwitchbotAdvertising { const byte9 = buf.readUInt8(9); const byte10 = buf.readUInt8(10); - const isOn = byte7 & 0b10000000 ? true : false; - const brightness = byte7 & 0b01111111; + const state = byte7 & 0b10000000 ? true : false; + const lightLevel = byte7 & 0b01111111; const delay = byte8 & 0b10000000; const preset = byte8 & 0b00001000; const color_mode = byte8 & 0b00000111; @@ -561,8 +579,8 @@ class SwitchbotAdvertising { const data = { model: "r", modelName: "WoStrip", - isOn: isOn, - brightness: brightness, + state: state, + lightLevel: lightLevel, delay: delay, preset: preset, color_mode: color_mode, From 4d947174759dc3d494fe6cd471e6c43d6f7f952d Mon Sep 17 00:00:00 2001 From: Donavan Becker Date: Mon, 17 Oct 2022 12:01:10 -0500 Subject: [PATCH 04/15] Update switchbot-advertising.js --- lib/switchbot-advertising.js | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/lib/switchbot-advertising.js b/lib/switchbot-advertising.js index e0fae8f5..3c672deb 100644 --- a/lib/switchbot-advertising.js +++ b/lib/switchbot-advertising.js @@ -227,10 +227,8 @@ class SwitchbotAdvertising { return null; } let byte1 = buf.readUInt8(1); - // let byte2 = buf.readUInt8(2); - let byte3 = buf.readUInt8(3); let byte4 = buf.readUInt8(4); - let byte5 = buf.readUInt8(5); + let onState = byte1 & 0b10000000 ? true : false; // 1 - on let autoMode = byte4 & 0b10000000 ? true : false; // 1 - auto @@ -260,8 +258,6 @@ class SwitchbotAdvertising { let byte1 = buf.readUInt8(1); let byte2 = buf.readUInt8(2); - //let byte3 = buf.readUInt8(3); - //let byte4 = buf.readUInt8(4); let byte5 = buf.readUInt8(5); @@ -303,10 +299,6 @@ class SwitchbotAdvertising { let byte1 = buf.readUInt8(1); let byte2 = buf.readUInt8(2); let byte3 = buf.readUInt8(3); - // let byte4 = buf.readUInt8(4); - // let byte5 = buf.readUInt8(5); - // let byte6 = buf.readUInt8(6); - // let byte7 = buf.readUInt8(7); let byte8 = buf.readUInt8(8); let hallState = (byte3 >> 1) & 0b00000011; @@ -316,7 +308,7 @@ class SwitchbotAdvertising { let contact_open = byte3 & 0b00000010 == 0b00000010; let contact_timeout = byte3 & 0b00000100 == 0b00000100; let is_light = byte3 & 0b00000001 ? true : false; - let button_count = (data[8] & 0b00001111); + let button_count = byte8 & 0b00001111; let data = { model: "d", @@ -351,7 +343,7 @@ class SwitchbotAdvertising { let calibration = byte1 & 0b01000000 ? true : false; // Whether the calibration is completed let battery = byte2 & 0b01111111; // % let inMotion = byte3 & 0b10000000 ? true : false; - let currPosition = max(min(data[3] & 0b01111111, 100), 0) //byte3 & 0b01111111; // current positon % + let currPosition = max(min(byte3 & 0b01111111, 100), 0) //byte3 & 0b01111111; // current positon % let lightLevel = (byte4 >> 4) & 0b00001111; // light sensor level (1-10) let deviceChain = byte4 & 0b00000111; @@ -500,20 +492,15 @@ class SwitchbotAdvertising { } let byte1 = buf.readUInt8(1); let byte2 = buf.readUInt8(2); - // let byte3 = buf.readUInt8(3); - // let byte4 = buf.readUInt8(4); - let byte5 = buf.readUInt8(5); - //let movement = (byte1 & 0b01000000) ? true : false; // 1 - Movement detected + let movement = (byte1 & 0b01000000) ? true : false; // 1 - Movement detected let battery = byte2 & 0b01111111; // % - //let lightLevel = byte5 & 0b00000011; let data = { model: "o", modelName: "WoSmartLock", - //movement: movement, battery: battery, - //lightLevel: (lightLevel == 1) ? 'dark' : ((lightLevel == 2) ? 'bright' : 'unknown'), + movement: movement, }; return data; From 01a64ec8832d36c5d738897e19b67163e298becd Mon Sep 17 00:00:00 2001 From: Donavan Becker Date: Mon, 17 Oct 2022 12:14:10 -0500 Subject: [PATCH 05/15] Update switchbot-advertising.js --- lib/switchbot-advertising.js | 114 +++++++++++++++++------------------ 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/lib/switchbot-advertising.js b/lib/switchbot-advertising.js index 3c672deb..87cb2f16 100644 --- a/lib/switchbot-advertising.js +++ b/lib/switchbot-advertising.js @@ -371,23 +371,23 @@ class SwitchbotAdvertising { return null; } - const byte6 = buf.readUInt8(6); - const byte7 = buf.readUInt8(7); - const byte8 = buf.readUInt8(8); - const byte9 = buf.readUInt8(9); - const byte10 = buf.readUInt8(10); - - - const sequence_number = byte6; - const state = byte7 & 0b01111111 ? true : false; - const brightness = byte7 & 0b01111111; - const delay = byte8 & 0b10000000; - const preset = byte8 & 0b00001000; - const color_mode = byte8 & 0b00000111; - const speed = byte9 & 0b01111111; - const loop_index = byte10 & 0b11111110; - - const data = { + let byte6 = buf.readUInt8(6); + let byte7 = buf.readUInt8(7); + let byte8 = buf.readUInt8(8); + let byte9 = buf.readUInt8(9); + let byte10 = buf.readUInt8(10); + + + let sequence_number = byte6; + let state = byte7 & 0b01111111 ? true : false; + let brightness = byte7 & 0b01111111; + let delay = byte8 & 0b10000000; + let preset = byte8 & 0b00001000; + let color_mode = byte8 & 0b00000111; + let speed = byte9 & 0b01111111; + let loop_index = byte10 & 0b11111110; + + let data = { model: "u", modelName: "WoBulb", sequence_number: sequence_number, @@ -412,22 +412,22 @@ class SwitchbotAdvertising { } return null; } - const byte9 = buf.readUInt8(9); // byte9: plug mini state; 0x00=off, 0x80=on - const byte10 = buf.readUInt8(10); // byte10: bit0: 0=no delay,1=delay, bit1:0=no timer, 1=timer; bit2:0=no sync time, 1=sync'ed time - const byte11 = buf.readUInt8(11); // byte11: wifi rssi - const byte12 = buf.readUInt8(12); // byte12: bit7: overload? - const byte13 = buf.readUInt8(13); // byte12[bit0~6] + byte13: current power value - - const state = byte9 === 0x00 ? "off" : byte9 === 0x80 ? "on" : null; - const delay = !!(byte10 & 0b00000001); - const timer = !!(byte10 & 0b00000010); - const syncUtcTime = !!(byte10 & 0b00000100); - const wifiRssi = byte11; - const overload = !!(byte12 & 0b10000000); - const currentPower = (((byte12 & 0b01111111) << 8) + byte13) / 10; // in watt + let byte9 = buf.readUInt8(9); // byte9: plug mini state; 0x00=off, 0x80=on + let byte10 = buf.readUInt8(10); // byte10: bit0: 0=no delay,1=delay, bit1:0=no timer, 1=timer; bit2:0=no sync time, 1=sync'ed time + let byte11 = buf.readUInt8(11); // byte11: wifi rssi + let byte12 = buf.readUInt8(12); // byte12: bit7: overload? + let byte13 = buf.readUInt8(13); // byte12[bit0~6] + byte13: current power value + + let state = byte9 === 0x00 ? "off" : byte9 === 0x80 ? "on" : null; + let delay = !!(byte10 & 0b00000001); + let timer = !!(byte10 & 0b00000010); + let syncUtcTime = !!(byte10 & 0b00000100); + let wifiRssi = byte11; + let overload = !!(byte12 & 0b10000000); + let currentPower = (((byte12 & 0b01111111) << 8) + byte13) / 10; // in watt // TODO: voltage ??? - const data = { + let data = { model: "g", modelName: "WoPlugMini", state: state, @@ -451,22 +451,22 @@ class SwitchbotAdvertising { } return null; } - const byte9 = buf.readUInt8(9); // byte9: plug mini state; 0x00=off, 0x80=on - const byte10 = buf.readUInt8(10); // byte10: bit0: 0=no delay,1=delay, bit1:0=no timer, 1=timer; bit2:0=no sync time, 1=sync'ed time - const byte11 = buf.readUInt8(11); // byte11: wifi rssi - const byte12 = buf.readUInt8(12); // byte12: bit7: overload? - const byte13 = buf.readUInt8(13); // byte12[bit0~6] + byte13: current power value - - const state = byte9 === 0x00 ? "off" : byte9 === 0x80 ? "on" : null; - const delay = !!(byte10 & 0b00000001); - const timer = !!(byte10 & 0b00000010); - const syncUtcTime = !!(byte10 & 0b00000100); - const wifiRssi = byte11; - const overload = !!(byte12 & 0b10000000); - const currentPower = (((byte12 & 0b01111111) << 8) + byte13) / 10; // in watt + let byte9 = buf.readUInt8(9); // byte9: plug mini state; 0x00=off, 0x80=on + let byte10 = buf.readUInt8(10); // byte10: bit0: 0=no delay,1=delay, bit1:0=no timer, 1=timer; bit2:0=no sync time, 1=sync'ed time + let byte11 = buf.readUInt8(11); // byte11: wifi rssi + let byte12 = buf.readUInt8(12); // byte12: bit7: overload? + let byte13 = buf.readUInt8(13); // byte12[bit0~6] + byte13: current power value + + let state = byte9 === 0x00 ? "off" : byte9 === 0x80 ? "on" : null; + let delay = !!(byte10 & 0b00000001); + let timer = !!(byte10 & 0b00000010); + let syncUtcTime = !!(byte10 & 0b00000100); + let wifiRssi = byte11; + let overload = !!(byte12 & 0b10000000); + let currentPower = (((byte12 & 0b01111111) << 8) + byte13) / 10; // in watt // TODO: voltage ??? - const data = { + let data = { model: "j", modelName: "WoPlugMini", state: state, @@ -550,20 +550,20 @@ class SwitchbotAdvertising { return null; } - const byte7 = buf.readUInt8(7); - const byte8 = buf.readUInt8(8); - const byte9 = buf.readUInt8(9); - const byte10 = buf.readUInt8(10); + let byte7 = buf.readUInt8(7); + let byte8 = buf.readUInt8(8); + let byte9 = buf.readUInt8(9); + let byte10 = buf.readUInt8(10); - const state = byte7 & 0b10000000 ? true : false; - const lightLevel = byte7 & 0b01111111; - const delay = byte8 & 0b10000000; - const preset = byte8 & 0b00001000; - const color_mode = byte8 & 0b00000111; - const speed = byte9 & 0b01111111; - const loop_index = byte10 & 0b11111110; + let state = byte7 & 0b10000000 ? true : false; + let lightLevel = byte7 & 0b01111111; + let delay = byte8 & 0b10000000; + let preset = byte8 & 0b00001000; + let color_mode = byte8 & 0b00000111; + let speed = byte9 & 0b01111111; + let loop_index = byte10 & 0b11111110; - const data = { + let data = { model: "r", modelName: "WoStrip", state: state, From 03611d83ee75a6b114890b0aa7a16a30f8bf9146 Mon Sep 17 00:00:00 2001 From: Donavan Becker Date: Mon, 17 Oct 2022 13:21:26 -0500 Subject: [PATCH 06/15] Update switchbot-advertising.js --- lib/switchbot-advertising.js | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/lib/switchbot-advertising.js b/lib/switchbot-advertising.js index 87cb2f16..9e02301d 100644 --- a/lib/switchbot-advertising.js +++ b/lib/switchbot-advertising.js @@ -267,7 +267,7 @@ class SwitchbotAdvertising { let led = (byte5 & 0b00100000) >> 5; let iot = (byte5 & 0b00010000) >> 4; let sense_distance = (byte5 & 0b00001100) >> 2; - let light_intensity = byte5 & 0b00000011; + let lightLevel = byte5 & 0b00000011; let is_light = byte5 & 0b00000010 ? true : false; let data = { @@ -279,7 +279,8 @@ class SwitchbotAdvertising { led: led, iot: iot, sense_distance: sense_distance, - light_intensity: light_intensity, + lightLevel: + lightLevel == 1 ? "dark" : lightLevel == 2 ? "bright" : "unknown", is_light: is_light, }; @@ -307,7 +308,7 @@ class SwitchbotAdvertising { let battery = byte2 & 0b01111111; // % let contact_open = byte3 & 0b00000010 == 0b00000010; let contact_timeout = byte3 & 0b00000100 == 0b00000100; - let is_light = byte3 & 0b00000001 ? true : false; + let lightLevel = byte3 & 0b00000001; let button_count = byte8 & 0b00001111; let data = { @@ -318,9 +319,14 @@ class SwitchbotAdvertising { battery: battery, contact_open: contact_open, contact_timeout: contact_timeout, - is_light: is_light, + lightLevel: lightLevel == 0 ? "dark" : "bright", button_count: button_count, - hallState: hallState, + doorState: + hallState == 0 + ? "close" + : hallState == 1 + ? "open" + : "timeout no closed", }; return data; @@ -343,7 +349,8 @@ class SwitchbotAdvertising { let calibration = byte1 & 0b01000000 ? true : false; // Whether the calibration is completed let battery = byte2 & 0b01111111; // % let inMotion = byte3 & 0b10000000 ? true : false; - let currPosition = max(min(byte3 & 0b01111111, 100), 0) //byte3 & 0b01111111; // current positon % + let currPosition = byte3 & 0b01111111; // current positon % + //let currPosition = max(min(byte3 & 0b01111111, 100), 0) //byte3 & 0b01111111; // current positon % let lightLevel = (byte4 >> 4) & 0b00001111; // light sensor level (1-10) let deviceChain = byte4 & 0b00000111; @@ -556,7 +563,7 @@ class SwitchbotAdvertising { let byte10 = buf.readUInt8(10); let state = byte7 & 0b10000000 ? true : false; - let lightLevel = byte7 & 0b01111111; + let brightness = byte7 & 0b01111111; let delay = byte8 & 0b10000000; let preset = byte8 & 0b00001000; let color_mode = byte8 & 0b00000111; @@ -567,7 +574,7 @@ class SwitchbotAdvertising { model: "r", modelName: "WoStrip", state: state, - lightLevel: lightLevel, + brightness: brightness, delay: delay, preset: preset, color_mode: color_mode, From 4cd44ce478bdfdf805b2a82ec8944eef6cc6caa2 Mon Sep 17 00:00:00 2001 From: Donavan Becker Date: Mon, 17 Oct 2022 15:13:37 -0500 Subject: [PATCH 07/15] Update switchbot-advertising.js --- lib/switchbot-advertising.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/switchbot-advertising.js b/lib/switchbot-advertising.js index 9e02301d..be924117 100644 --- a/lib/switchbot-advertising.js +++ b/lib/switchbot-advertising.js @@ -377,14 +377,20 @@ class SwitchbotAdvertising { } return null; } - - let byte6 = buf.readUInt8(6); + let byte1 = buf.readUInt8(1);//power and light status + let byte2 = buf.readUInt8(2);//bulb brightness + let byte3 = buf.readUInt8(3);//bulb R + let byte4 = buf.readUInt8(4);//bulb G + let byte5 = buf.readUInt8(5);//bulb B + let byte6 = buf.readUInt8(6);//bulb temperature let byte7 = buf.readUInt8(7); let byte8 = buf.readUInt8(8); let byte9 = buf.readUInt8(9); - let byte10 = buf.readUInt8(10); - + let byte10 = buf.readUInt8(10);//bulb mode + let r = byte3; + let g = byte4; + let b = byte5; let sequence_number = byte6; let state = byte7 & 0b01111111 ? true : false; let brightness = byte7 & 0b01111111; @@ -399,6 +405,9 @@ class SwitchbotAdvertising { modelName: "WoBulb", sequence_number: sequence_number, state: state, + r: r, + g: g, + b: b, brightness: brightness, delay: delay, preset: preset, From a53f54d3817d58c473bcfa2ed3b28e14dd363686 Mon Sep 17 00:00:00 2001 From: Donavan Becker Date: Mon, 17 Oct 2022 15:32:59 -0500 Subject: [PATCH 08/15] Update switchbot-advertising.js --- lib/switchbot-advertising.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/switchbot-advertising.js b/lib/switchbot-advertising.js index be924117..4de0dab7 100644 --- a/lib/switchbot-advertising.js +++ b/lib/switchbot-advertising.js @@ -388,10 +388,10 @@ class SwitchbotAdvertising { let byte9 = buf.readUInt8(9); let byte10 = buf.readUInt8(10);//bulb mode - let r = byte3; - let g = byte4; - let b = byte5; - let sequence_number = byte6; + let red = byte3; + let green = byte4; + let blue = byte5; + let color_Temperature = byte6; let state = byte7 & 0b01111111 ? true : false; let brightness = byte7 & 0b01111111; let delay = byte8 & 0b10000000; @@ -403,11 +403,11 @@ class SwitchbotAdvertising { let data = { model: "u", modelName: "WoBulb", - sequence_number: sequence_number, + color_Temperature: color_Temperature, state: state, - r: r, - g: g, - b: b, + red: red, + green: green, + blue: blue, brightness: brightness, delay: delay, preset: preset, From b2c13071cb4800b663ab5930c0ebe714abb07dca Mon Sep 17 00:00:00 2001 From: Donavan Becker Date: Mon, 17 Oct 2022 15:35:18 -0500 Subject: [PATCH 09/15] Update switchbot-advertising.js --- lib/switchbot-advertising.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/switchbot-advertising.js b/lib/switchbot-advertising.js index 4de0dab7..80860093 100644 --- a/lib/switchbot-advertising.js +++ b/lib/switchbot-advertising.js @@ -391,7 +391,7 @@ class SwitchbotAdvertising { let red = byte3; let green = byte4; let blue = byte5; - let color_Temperature = byte6; + let color_temperature = byte6; let state = byte7 & 0b01111111 ? true : false; let brightness = byte7 & 0b01111111; let delay = byte8 & 0b10000000; @@ -403,7 +403,7 @@ class SwitchbotAdvertising { let data = { model: "u", modelName: "WoBulb", - color_Temperature: color_Temperature, + color_temperature: color_temperature, state: state, red: red, green: green, From 957d38596b72199994f7127b89f751e3dae251a7 Mon Sep 17 00:00:00 2001 From: Donavan Becker Date: Mon, 17 Oct 2022 16:15:59 -0500 Subject: [PATCH 10/15] commands for colorbulb and striplights? --- lib/switchbot-device-wobulb.js | 110 +++++++++++++++++++++++++++++++- lib/switchbot-device-wostrip.js | 104 +++++++++++++++++++++++++++++- 2 files changed, 208 insertions(+), 6 deletions(-) diff --git a/lib/switchbot-device-wobulb.js b/lib/switchbot-device-wobulb.js index 1b0c7048..478509a4 100644 --- a/lib/switchbot-device-wobulb.js +++ b/lib/switchbot-device-wobulb.js @@ -35,10 +35,114 @@ class SwitchbotDeviceWoBulb extends SwitchbotDevice { } /** - * @returns {Promise} resolves with a boolean that tells whether the plug in ON(true) or OFF(false) + * @returns {Promise} resolves with brightness percent + */ + setBrightness(brightness) { + if (typeof brightness != "number") { + return new Promise((resolve, reject) => { + reject( + new Error( + "The type of target brightness percentage is incorrent: " + + typeof brightness + ) + ); + }); + } + if (brightness > 100) { + brightness = 100; + } else if (brightness < 0) { + brightness = 0; + } + return this._setState([0x02, 0x14]); + } + + /** + * @returns {Promise} resolves with brightness percent + */ + setColorTemperature(color_temperature) { + if (typeof color_temperature != "number") { + return new Promise((resolve, reject) => { + reject( + new Error( + "The type of target brightness percentage is incorrent: " + + typeof brightness + ) + ); + }); + } + if (color_temperature > 100) { + color_temperature = 100; + } else if (color_temperature < 0) { + color_temperature = 0; + } + return this._setState([0x02, 0x17, color_temperature]); + } + + /** + * @returns {Promise} resolves with brightness percent */ - toggle() { - return this._setState([0x02, 0x03]); + setRGB(brightness, red, green, blue) { + if (typeof brightness != "number") { + return new Promise((resolve, reject) => { + reject( + new Error( + "The type of target brightness percentage is incorrent: " + + typeof brightness + ) + ); + }); + } + if (typeof red != "number") { + return new Promise((resolve, reject) => { + reject( + new Error( + "The type of target red is incorrent: " + + typeof red + ) + ); + }); + } + if (typeof green != "number") { + return new Promise((resolve, reject) => { + reject( + new Error( + "The type of target green is incorrent: " + + typeof green + ) + ); + }); + } + if (typeof blue != "number") { + return new Promise((resolve, reject) => { + reject( + new Error( + "The type of target blue is incorrent: " + + typeof blue + ) + ); + }); + } + if (brightness > 100) { + brightness = 100; + } else if (brightness < 0) { + brightness = 0; + } + if (red > 255) { + red = 255; + } else if (red < 0) { + red = 0; + } + if (green > 255) { + green = 255; + } else if (green < 0) { + green = 0; + } + if (blue > 255) { + blue = 255; + } else if (blue < 0) { + blue = 0; + } + return this._setState([0x02, 0x12, brightness, red, green, blue]); } /** diff --git a/lib/switchbot-device-wostrip.js b/lib/switchbot-device-wostrip.js index ada1fb68..149bdfcc 100644 --- a/lib/switchbot-device-wostrip.js +++ b/lib/switchbot-device-wostrip.js @@ -35,10 +35,108 @@ class SwitchbotDeviceWoStrip extends SwitchbotDevice { } /** - * @returns {Promise} resolves with a boolean that tells whether the plug in ON(true) or OFF(false) + * @returns {Promise} resolves with brightness percent + */ + setBrightness(brightness) { + if (typeof brightness != "number") { + return new Promise((resolve, reject) => { + reject( + new Error( + "The type of target brightness percentage is incorrent: " + + typeof brightness + ) + ); + }); + } + if (brightness > 100) { + brightness = 100; + } else if (brightness < 0) { + brightness = 0; + } + return this._setState([0x02, 0x14]); + } + + /** + * @returns {Promise} resolves with color temperature + */ + setColorTemperature(color_temperature) { + if (color_temperature) { + return new Promise((resolve, reject) => { + reject( + new Error( + "Strip Light Doesn't Support Color temperature: " + + typeof color_temperature + ) + ); + }); + } + } + + /** + * @returns {Promise} resolves with brightness + rgb */ - toggle() { - return this._setState([0x02, 0x03]); + setRGB(brightness, red, green, blue) { + if (typeof brightness != "number") { + return new Promise((resolve, reject) => { + reject( + new Error( + "The type of target brightness percentage is incorrent: " + + typeof brightness + ) + ); + }); + } + if (typeof red != "number") { + return new Promise((resolve, reject) => { + reject( + new Error( + "The type of target red is incorrent: " + + typeof red + ) + ); + }); + } + if (typeof green != "number") { + return new Promise((resolve, reject) => { + reject( + new Error( + "The type of target green is incorrent: " + + typeof green + ) + ); + }); + } + if (typeof blue != "number") { + return new Promise((resolve, reject) => { + reject( + new Error( + "The type of target blue is incorrent: " + + typeof blue + ) + ); + }); + } + if (brightness > 100) { + brightness = 100; + } else if (brightness < 0) { + brightness = 0; + } + if (red > 255) { + red = 255; + } else if (red < 0) { + red = 0; + } + if (green > 255) { + green = 255; + } else if (green < 0) { + green = 0; + } + if (blue > 255) { + blue = 255; + } else if (blue < 0) { + blue = 0; + } + return this._setState([0x02, 0x12, brightness, red, green, blue]); } /** From 8e541a8e9641c2901cea3dd67e6ada896e521b5e Mon Sep 17 00:00:00 2001 From: Donavan Becker Date: Mon, 17 Oct 2022 17:44:41 -0500 Subject: [PATCH 11/15] Update switchbot-advertising.js --- lib/switchbot-advertising.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/switchbot-advertising.js b/lib/switchbot-advertising.js index 80860093..6634f841 100644 --- a/lib/switchbot-advertising.js +++ b/lib/switchbot-advertising.js @@ -566,6 +566,11 @@ class SwitchbotAdvertising { return null; } + let byte1 = buf.readUInt8(1);//power and light status + let byte2 = buf.readUInt8(2);//bulb brightness + let byte3 = buf.readUInt8(3);//bulb R + let byte4 = buf.readUInt8(4);//bulb G + let byte5 = buf.readUInt8(5);//bulb B let byte7 = buf.readUInt8(7); let byte8 = buf.readUInt8(8); let byte9 = buf.readUInt8(9); @@ -573,6 +578,9 @@ class SwitchbotAdvertising { let state = byte7 & 0b10000000 ? true : false; let brightness = byte7 & 0b01111111; + let red = byte3; + let green = byte4; + let blue = byte5; let delay = byte8 & 0b10000000; let preset = byte8 & 0b00001000; let color_mode = byte8 & 0b00000111; @@ -584,6 +592,9 @@ class SwitchbotAdvertising { modelName: "WoStrip", state: state, brightness: brightness, + red: red, + green: green, + blue: blue, delay: delay, preset: preset, color_mode: color_mode, From 5885a20827d551e1e24de590897eb1c68b567be0 Mon Sep 17 00:00:00 2001 From: Donavan Becker Date: Mon, 17 Oct 2022 21:44:16 -0500 Subject: [PATCH 12/15] Update switchbot-advertising.js --- lib/switchbot-advertising.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/switchbot-advertising.js b/lib/switchbot-advertising.js index 6634f841..66ab8b1d 100644 --- a/lib/switchbot-advertising.js +++ b/lib/switchbot-advertising.js @@ -255,12 +255,10 @@ class SwitchbotAdvertising { return null; } - let byte1 = buf.readUInt8(1); let byte2 = buf.readUInt8(2); let byte5 = buf.readUInt8(5); - let tested = byte1 & 0b10000000 ? true : false; let movement = byte1 & 0b01000000 ? true : false; let battery = byte2 & 0b01111111; From bcf2bc8baf9e3014c964961fd54320e707b0c0ac Mon Sep 17 00:00:00 2001 From: Donavan Becker Date: Mon, 17 Oct 2022 21:50:19 -0500 Subject: [PATCH 13/15] Update switchbot-advertising.js --- lib/switchbot-advertising.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/switchbot-advertising.js b/lib/switchbot-advertising.js index 66ab8b1d..9f33b470 100644 --- a/lib/switchbot-advertising.js +++ b/lib/switchbot-advertising.js @@ -386,6 +386,7 @@ class SwitchbotAdvertising { let byte9 = buf.readUInt8(9); let byte10 = buf.readUInt8(10);//bulb mode + let power = byte1; let red = byte3; let green = byte4; let blue = byte5; @@ -402,6 +403,7 @@ class SwitchbotAdvertising { model: "u", modelName: "WoBulb", color_temperature: color_temperature, + power: power, state: state, red: red, green: green, From 7c586361af8e8bab43f882390838580c3a9c570d Mon Sep 17 00:00:00 2001 From: Donavan Becker Date: Tue, 18 Oct 2022 14:42:36 -0500 Subject: [PATCH 14/15] change let to const --- lib/parameter-checker.js | 20 +- lib/switchbot-advertising.js | 317 ++++++++++++++--------------- lib/switchbot-device-wobulb.js | 2 +- lib/switchbot-device-wocurtain.js | 4 +- lib/switchbot-device-wohand.js | 4 +- lib/switchbot-device-wohumi.js | 4 +- lib/switchbot-device-woplugmini.js | 2 +- lib/switchbot-device-wostrip.js | 2 +- lib/switchbot-device.js | 40 ++-- lib/switchbot.js | 44 ++-- 10 files changed, 219 insertions(+), 220 deletions(-) diff --git a/lib/parameter-checker.js b/lib/parameter-checker.js index cbb3f2c6..1f30ef72 100644 --- a/lib/parameter-checker.js +++ b/lib/parameter-checker.js @@ -37,7 +37,7 @@ class ParameterChecker { * an `Error` object will be set to `this._error`. * * [Usage] - * let valid = parameterChecker.check(params, { + * const valid = parameterChecker.check(params, { * level: { * required: false, * type: 'integer', @@ -50,7 +50,7 @@ class ParameterChecker { * } * }); * if(!valid) { - * let e = parameterChecker.error.message; + * const e = parameterChecker.error.message; * throw new Error(message); * } * ---------------------------------------------------------------- */ @@ -78,13 +78,13 @@ class ParameterChecker { return false; } - let result = true; - let name_list = Object.keys(rules); + const result = true; + const name_list = Object.keys(rules); - for (let i = 0; i < name_list.length; i++) { - let name = name_list[i]; - let v = obj[name]; - let rule = rules[name]; + for (const i = 0; i < name_list.length; i++) { + const name = name_list[i]; + const v = obj[name]; + const rule = rules[name]; if (!rule) { rule = {}; @@ -458,7 +458,7 @@ class ParameterChecker { } } if (typeof rule.minBytes === "number") { - let blen = Buffer.from(value, "utf8").length; + const blen = Buffer.from(value, "utf8").length; if (blen < rule.minBytes) { this._error = { code: "LENGTH_UNDERFLOW", @@ -475,7 +475,7 @@ class ParameterChecker { } } if (typeof rule.maxBytes === "number") { - let blen = Buffer.from(value, "utf8").length; + const blen = Buffer.from(value, "utf8").length; if (blen > rule.maxBytes) { this._error = { code: "LENGTH_OVERFLOW", diff --git a/lib/switchbot-advertising.js b/lib/switchbot-advertising.js index 9f33b470..56572a44 100644 --- a/lib/switchbot-advertising.js +++ b/lib/switchbot-advertising.js @@ -61,13 +61,13 @@ class SwitchbotAdvertising { * device, this method will return `null`. * ---------------------------------------------------------------- */ parse(peripheral, onlog) { - let ad = peripheral.advertisement; + const ad = peripheral.advertisement; if (!ad || !ad.serviceData) { return null; } - let serviceData = ad.serviceData[0] || ad.serviceData; - let manufacturerData = ad.manufacturerData; - let buf = serviceData.data; + const serviceData = ad.serviceData[0] || ad.serviceData; + const manufacturerData = ad.manufacturerData; + const buf = serviceData.data; const bufIsInvalid = !buf || !Buffer.isBuffer(buf) || buf.length < 3; const manufacturerDataIsInvalid = @@ -79,8 +79,8 @@ class SwitchbotAdvertising { return null; } - let model = buf.slice(0, 1).toString("utf8"); - let sd = null; + const model = buf.slice(0, 1).toString("utf8"); + const sd = null; if (model === "H") { sd = this._parseServiceDataForWoHand(buf, onlog);//WoHand @@ -123,7 +123,7 @@ class SwitchbotAdvertising { } return null; } - let address = peripheral.address || ""; + const address = peripheral.address || ""; if (address === "") { address = peripheral.advertisement.manufacturerData || ""; if (address !== "") { @@ -139,7 +139,7 @@ class SwitchbotAdvertising { } else { address = address.replace(/-/g, ":"); } - let data = { + const data = { id: peripheral.id, address: address, rssi: peripheral.rssi, @@ -165,14 +165,14 @@ class SwitchbotAdvertising { } return null; } - let byte1 = buf.readUInt8(1); - let byte2 = buf.readUInt8(2); + const byte1 = buf.readUInt8(1); + const byte2 = buf.readUInt8(2); - let mode = byte1 & 0b10000000 ? true : false; // Whether the light switch Add-on is used or not - let state = byte1 & 0b01000000 ? true : false; // Whether the switch status is ON or OFF - let battery = byte2 & 0b01111111; // % + const mode = byte1 & 0b10000000 ? true : false; // Whether the light switch Add-on is used or not + const state = byte1 & 0b01000000 ? true : false; // Whether the switch status is ON or OFF + const battery = byte2 & 0b01111111; // % - let data = { + const data = { model: "H", modelName: "WoHand", mode: mode, @@ -192,17 +192,17 @@ class SwitchbotAdvertising { } return null; } - let byte2 = buf.readUInt8(2); - let byte3 = buf.readUInt8(3); - let byte4 = buf.readUInt8(4); - let byte5 = buf.readUInt8(5); - - let temp_sign = byte4 & 0b10000000 ? 1 : -1; - let temp_c = temp_sign * ((byte4 & 0b01111111) + (byte3 & 0b00001111) / 10); - let temp_f = (temp_c * 9 / 5) + 32; + const byte2 = buf.readUInt8(2); + const byte3 = buf.readUInt8(3); + const byte4 = buf.readUInt8(4); + const byte5 = buf.readUInt8(5); + + const temp_sign = byte4 & 0b10000000 ? 1 : -1; + const temp_c = temp_sign * ((byte4 & 0b01111111) + (byte3 & 0b00001111) / 10); + const temp_f = (temp_c * 9 / 5) + 32; temp_f = Math.round(temp_f * 10) / 10; - let data = { + const data = { model: "T", modelName: "WoSensorTH", temperature: { @@ -226,15 +226,15 @@ class SwitchbotAdvertising { } return null; } - let byte1 = buf.readUInt8(1); - let byte4 = buf.readUInt8(4); + const byte1 = buf.readUInt8(1); + const byte4 = buf.readUInt8(4); - let onState = byte1 & 0b10000000 ? true : false; // 1 - on - let autoMode = byte4 & 0b10000000 ? true : false; // 1 - auto - let percentage = byte4 & 0b01111111; // 0-100%, 101/102/103 - Quick gear 1/2/3 + const onState = byte1 & 0b10000000 ? true : false; // 1 - on + const autoMode = byte4 & 0b10000000 ? true : false; // 1 - auto + const percentage = byte4 & 0b01111111; // 0-100%, 101/102/103 - Quick gear 1/2/3 - let data = { + const data = { model: "e", modelName: "WoHumi", onState: onState, @@ -255,20 +255,20 @@ class SwitchbotAdvertising { return null; } - let byte1 = buf.readUInt8(1); - let byte2 = buf.readUInt8(2); - let byte5 = buf.readUInt8(5); + const byte1 = buf.readUInt8(1); + const byte2 = buf.readUInt8(2); + const byte5 = buf.readUInt8(5); - let tested = byte1 & 0b10000000 ? true : false; - let movement = byte1 & 0b01000000 ? true : false; - let battery = byte2 & 0b01111111; - let led = (byte5 & 0b00100000) >> 5; - let iot = (byte5 & 0b00010000) >> 4; - let sense_distance = (byte5 & 0b00001100) >> 2; - let lightLevel = byte5 & 0b00000011; - let is_light = byte5 & 0b00000010 ? true : false; + const tested = byte1 & 0b10000000 ? true : false; + const movement = byte1 & 0b01000000 ? true : false; + const battery = byte2 & 0b01111111; + const led = (byte5 & 0b00100000) >> 5; + const iot = (byte5 & 0b00010000) >> 4; + const sense_distance = (byte5 & 0b00001100) >> 2; + const lightLevel = byte5 & 0b00000011; + const is_light = byte5 & 0b00000010 ? true : false; - let data = { + const data = { model: "s", modelName: "WoMotion", tested: tested, @@ -295,21 +295,21 @@ class SwitchbotAdvertising { return null; } - let byte1 = buf.readUInt8(1); - let byte2 = buf.readUInt8(2); - let byte3 = buf.readUInt8(3); - let byte8 = buf.readUInt8(8); - - let hallState = (byte3 >> 1) & 0b00000011; - let tested = byte1 & 0b10000000; - let movement = byte1 & 0b01000000 ? true : false; // 1 - Movement detected - let battery = byte2 & 0b01111111; // % - let contact_open = byte3 & 0b00000010 == 0b00000010; - let contact_timeout = byte3 & 0b00000100 == 0b00000100; - let lightLevel = byte3 & 0b00000001; - let button_count = byte8 & 0b00001111; - - let data = { + const byte1 = buf.readUInt8(1); + const byte2 = buf.readUInt8(2); + const byte3 = buf.readUInt8(3); + const byte8 = buf.readUInt8(8); + + const hallState = (byte3 >> 1) & 0b00000011; + const tested = byte1 & 0b10000000; + const movement = byte1 & 0b01000000 ? true : false; // 1 - Movement detected + const battery = byte2 & 0b01111111; // % + const contact_open = byte3 & 0b00000010 == 0b00000010; + const contact_timeout = byte3 & 0b00000100 == 0b00000100; + const lightLevel = byte3 & 0b00000001; + const button_count = byte8 & 0b00001111; + + const data = { model: "d", modelName: "WoContact", movement: movement, @@ -339,20 +339,19 @@ class SwitchbotAdvertising { } return null; } - let byte1 = buf.readUInt8(1); - let byte2 = buf.readUInt8(2); - let byte3 = buf.readUInt8(3); - let byte4 = buf.readUInt8(4); - - let calibration = byte1 & 0b01000000 ? true : false; // Whether the calibration is completed - let battery = byte2 & 0b01111111; // % - let inMotion = byte3 & 0b10000000 ? true : false; - let currPosition = byte3 & 0b01111111; // current positon % - //let currPosition = max(min(byte3 & 0b01111111, 100), 0) //byte3 & 0b01111111; // current positon % - let lightLevel = (byte4 >> 4) & 0b00001111; // light sensor level (1-10) - let deviceChain = byte4 & 0b00000111; - - let data = { + const byte1 = buf.readUInt8(1); + const byte2 = buf.readUInt8(2); + const byte3 = buf.readUInt8(3); + const byte4 = buf.readUInt8(4); + + const calibration = byte1 & 0b01000000 ? true : false; // Whether the calibration is completed + const battery = byte2 & 0b01111111; // % + const inMotion = byte3 & 0b10000000 ? true : false; + const currPosition = byte3 & 0b01111111; // current positon % + const lightLevel = (byte4 >> 4) & 0b00001111; // light sensor level (1-10) + const deviceChain = byte4 & 0b00000111; + + const data = { model: "c", modelName: "WoCurtain", calibration: calibration, @@ -375,31 +374,31 @@ class SwitchbotAdvertising { } return null; } - let byte1 = buf.readUInt8(1);//power and light status - let byte2 = buf.readUInt8(2);//bulb brightness - let byte3 = buf.readUInt8(3);//bulb R - let byte4 = buf.readUInt8(4);//bulb G - let byte5 = buf.readUInt8(5);//bulb B - let byte6 = buf.readUInt8(6);//bulb temperature - let byte7 = buf.readUInt8(7); - let byte8 = buf.readUInt8(8); - let byte9 = buf.readUInt8(9); - let byte10 = buf.readUInt8(10);//bulb mode - - let power = byte1; - let red = byte3; - let green = byte4; - let blue = byte5; - let color_temperature = byte6; - let state = byte7 & 0b01111111 ? true : false; - let brightness = byte7 & 0b01111111; - let delay = byte8 & 0b10000000; - let preset = byte8 & 0b00001000; - let color_mode = byte8 & 0b00000111; - let speed = byte9 & 0b01111111; - let loop_index = byte10 & 0b11111110; - - let data = { + const byte1 = buf.readUInt8(1);//power and light status + const byte2 = buf.readUInt8(2);//bulb brightness + const byte3 = buf.readUInt8(3);//bulb R + const byte4 = buf.readUInt8(4);//bulb G + const byte5 = buf.readUInt8(5);//bulb B + const byte6 = buf.readUInt8(6);//bulb temperature + const byte7 = buf.readUInt8(7); + const byte8 = buf.readUInt8(8); + const byte9 = buf.readUInt8(9); + const byte10 = buf.readUInt8(10);//bulb mode + + const power = byte1; + const red = byte3; + const green = byte4; + const blue = byte5; + const color_temperature = byte6; + const state = byte7 & 0b01111111 ? true : false; + const brightness = byte7 & 0b01111111; + const delay = byte8 & 0b10000000; + const preset = byte8 & 0b00001000; + const color_mode = byte8 & 0b00000111; + const speed = byte9 & 0b01111111; + const loop_index = byte10 & 0b11111110; + + const data = { model: "u", modelName: "WoBulb", color_temperature: color_temperature, @@ -428,22 +427,22 @@ class SwitchbotAdvertising { } return null; } - let byte9 = buf.readUInt8(9); // byte9: plug mini state; 0x00=off, 0x80=on - let byte10 = buf.readUInt8(10); // byte10: bit0: 0=no delay,1=delay, bit1:0=no timer, 1=timer; bit2:0=no sync time, 1=sync'ed time - let byte11 = buf.readUInt8(11); // byte11: wifi rssi - let byte12 = buf.readUInt8(12); // byte12: bit7: overload? - let byte13 = buf.readUInt8(13); // byte12[bit0~6] + byte13: current power value - - let state = byte9 === 0x00 ? "off" : byte9 === 0x80 ? "on" : null; - let delay = !!(byte10 & 0b00000001); - let timer = !!(byte10 & 0b00000010); - let syncUtcTime = !!(byte10 & 0b00000100); - let wifiRssi = byte11; - let overload = !!(byte12 & 0b10000000); - let currentPower = (((byte12 & 0b01111111) << 8) + byte13) / 10; // in watt + const byte9 = buf.readUInt8(9); // byte9: plug mini state; 0x00=off, 0x80=on + const byte10 = buf.readUInt8(10); // byte10: bit0: 0=no delay,1=delay, bit1:0=no timer, 1=timer; bit2:0=no sync time, 1=sync'ed time + const byte11 = buf.readUInt8(11); // byte11: wifi rssi + const byte12 = buf.readUInt8(12); // byte12: bit7: overload? + const byte13 = buf.readUInt8(13); // byte12[bit0~6] + byte13: current power value + + const state = byte9 === 0x00 ? "off" : byte9 === 0x80 ? "on" : null; + const delay = !!(byte10 & 0b00000001); + const timer = !!(byte10 & 0b00000010); + const syncUtcTime = !!(byte10 & 0b00000100); + const wifiRssi = byte11; + const overload = !!(byte12 & 0b10000000); + const currentPower = (((byte12 & 0b01111111) << 8) + byte13) / 10; // in watt // TODO: voltage ??? - let data = { + const data = { model: "g", modelName: "WoPlugMini", state: state, @@ -467,22 +466,22 @@ class SwitchbotAdvertising { } return null; } - let byte9 = buf.readUInt8(9); // byte9: plug mini state; 0x00=off, 0x80=on - let byte10 = buf.readUInt8(10); // byte10: bit0: 0=no delay,1=delay, bit1:0=no timer, 1=timer; bit2:0=no sync time, 1=sync'ed time - let byte11 = buf.readUInt8(11); // byte11: wifi rssi - let byte12 = buf.readUInt8(12); // byte12: bit7: overload? - let byte13 = buf.readUInt8(13); // byte12[bit0~6] + byte13: current power value - - let state = byte9 === 0x00 ? "off" : byte9 === 0x80 ? "on" : null; - let delay = !!(byte10 & 0b00000001); - let timer = !!(byte10 & 0b00000010); - let syncUtcTime = !!(byte10 & 0b00000100); - let wifiRssi = byte11; - let overload = !!(byte12 & 0b10000000); - let currentPower = (((byte12 & 0b01111111) << 8) + byte13) / 10; // in watt + const byte9 = buf.readUInt8(9); // byte9: plug mini state; 0x00=off, 0x80=on + const byte10 = buf.readUInt8(10); // byte10: bit0: 0=no delay,1=delay, bit1:0=no timer, 1=timer; bit2:0=no sync time, 1=sync'ed time + const byte11 = buf.readUInt8(11); // byte11: wifi rssi + const byte12 = buf.readUInt8(12); // byte12: bit7: overload? + const byte13 = buf.readUInt8(13); // byte12[bit0~6] + byte13: current power value + + const state = byte9 === 0x00 ? "off" : byte9 === 0x80 ? "on" : null; + const delay = !!(byte10 & 0b00000001); + const timer = !!(byte10 & 0b00000010); + const syncUtcTime = !!(byte10 & 0b00000100); + const wifiRssi = byte11; + const overload = !!(byte12 & 0b10000000); + const currentPower = (((byte12 & 0b01111111) << 8) + byte13) / 10; // in watt // TODO: voltage ??? - let data = { + const data = { model: "j", modelName: "WoPlugMini", state: state, @@ -506,13 +505,13 @@ class SwitchbotAdvertising { } return null; } - let byte1 = buf.readUInt8(1); - let byte2 = buf.readUInt8(2); + const byte1 = buf.readUInt8(1); + const byte2 = buf.readUInt8(2); - let movement = (byte1 & 0b01000000) ? true : false; // 1 - Movement detected - let battery = byte2 & 0b01111111; // % + const movement = (byte1 & 0b01000000) ? true : false; // 1 - Movement detected + const battery = byte2 & 0b01111111; // % - let data = { + const data = { model: "o", modelName: "WoSmartLock", battery: battery, @@ -531,17 +530,17 @@ class SwitchbotAdvertising { } return null; } - let byte2 = buf.readUInt8(2); - let byte3 = buf.readUInt8(3); - let byte4 = buf.readUInt8(4); - let byte5 = buf.readUInt8(5); - - let temp_sign = byte4 & 0b10000000 ? 1 : -1; - let temp_c = temp_sign * ((byte4 & 0b01111111) + (byte3 & 0b00001111) / 10); - let temp_f = (temp_c * 9 / 5) + 32; + const byte2 = buf.readUInt8(2); + const byte3 = buf.readUInt8(3); + const byte4 = buf.readUInt8(4); + const byte5 = buf.readUInt8(5); + + const temp_sign = byte4 & 0b10000000 ? 1 : -1; + const temp_c = temp_sign * ((byte4 & 0b01111111) + (byte3 & 0b00001111) / 10); + const temp_f = (temp_c * 9 / 5) + 32; temp_f = Math.round(temp_f * 10) / 10; - let data = { + const data = { model: "i", modelName: "WoSensorTHPlus", temperature: { @@ -566,28 +565,28 @@ class SwitchbotAdvertising { return null; } - let byte1 = buf.readUInt8(1);//power and light status - let byte2 = buf.readUInt8(2);//bulb brightness - let byte3 = buf.readUInt8(3);//bulb R - let byte4 = buf.readUInt8(4);//bulb G - let byte5 = buf.readUInt8(5);//bulb B - let byte7 = buf.readUInt8(7); - let byte8 = buf.readUInt8(8); - let byte9 = buf.readUInt8(9); - let byte10 = buf.readUInt8(10); - - let state = byte7 & 0b10000000 ? true : false; - let brightness = byte7 & 0b01111111; - let red = byte3; - let green = byte4; - let blue = byte5; - let delay = byte8 & 0b10000000; - let preset = byte8 & 0b00001000; - let color_mode = byte8 & 0b00000111; - let speed = byte9 & 0b01111111; - let loop_index = byte10 & 0b11111110; - - let data = { + const byte1 = buf.readUInt8(1);//power and light status + const byte2 = buf.readUInt8(2);//bulb brightness + const byte3 = buf.readUInt8(3);//bulb R + const byte4 = buf.readUInt8(4);//bulb G + const byte5 = buf.readUInt8(5);//bulb B + const byte7 = buf.readUInt8(7); + const byte8 = buf.readUInt8(8); + const byte9 = buf.readUInt8(9); + const byte10 = buf.readUInt8(10); + + const state = byte7 & 0b10000000 ? true : false; + const brightness = byte7 & 0b01111111; + const red = byte3; + const green = byte4; + const blue = byte5; + const delay = byte8 & 0b10000000; + const preset = byte8 & 0b00001000; + const color_mode = byte8 & 0b00000111; + const speed = byte9 & 0b01111111; + const loop_index = byte10 & 0b11111110; + + const data = { model: "r", modelName: "WoStrip", state: state, diff --git a/lib/switchbot-device-wobulb.js b/lib/switchbot-device-wobulb.js index 478509a4..cb0e2a7e 100644 --- a/lib/switchbot-device-wobulb.js +++ b/lib/switchbot-device-wobulb.js @@ -155,7 +155,7 @@ class SwitchbotDeviceWoBulb extends SwitchbotDevice { .then((res_bytes) => { const res_buf = Buffer.from(res_bytes); if (res_buf.length === 2) { - let code = res_buf.readUInt8(1); + const code = res_buf.readUInt8(1); if (code === 0x00 || code === 0x80) { const is_on = code === 0x80; resolve(is_on); diff --git a/lib/switchbot-device-wocurtain.js b/lib/switchbot-device-wocurtain.js index f176631b..92ff56c3 100644 --- a/lib/switchbot-device-wocurtain.js +++ b/lib/switchbot-device-wocurtain.js @@ -93,10 +93,10 @@ class SwitchbotDeviceWoCurtain extends SwitchbotDevice { _operateCurtain(bytes) { return new Promise((resolve, reject) => { - let req_buf = Buffer.from(bytes); + const req_buf = Buffer.from(bytes); this._command(req_buf) .then((res_buf) => { - let code = res_buf.readUInt8(0); + const code = res_buf.readUInt8(0); if (res_buf.length === 3 && code === 0x01) { resolve(); } else { diff --git a/lib/switchbot-device-wohand.js b/lib/switchbot-device-wohand.js index e799b272..3cd9378f 100644 --- a/lib/switchbot-device-wohand.js +++ b/lib/switchbot-device-wohand.js @@ -79,10 +79,10 @@ class SwitchbotDeviceWoHand extends SwitchbotDevice { _operateBot(bytes) { return new Promise((resolve, reject) => { - let req_buf = Buffer.from(bytes); + const req_buf = Buffer.from(bytes); this._command(req_buf) .then((res_buf) => { - let code = res_buf.readUInt8(0); + const code = res_buf.readUInt8(0); if (res_buf.length === 3 && (code === 0x01 || code === 0x05)) { resolve(); } else { diff --git a/lib/switchbot-device-wohumi.js b/lib/switchbot-device-wohumi.js index 4b15f88b..e7d055bd 100644 --- a/lib/switchbot-device-wohumi.js +++ b/lib/switchbot-device-wohumi.js @@ -79,10 +79,10 @@ class SwitchbotDeviceWoHumi extends SwitchbotDevice { _operateBot(bytes) { return new Promise((resolve, reject) => { - let req_buf = Buffer.from(bytes); + const req_buf = Buffer.from(bytes); this._command(req_buf) .then((res_buf) => { - let code = res_buf.readUInt8(0); + const code = res_buf.readUInt8(0); if (res_buf.length === 3 && (code === 0x01 || code === 0x05)) { resolve(); } else { diff --git a/lib/switchbot-device-woplugmini.js b/lib/switchbot-device-woplugmini.js index cf1c319c..0e91068d 100644 --- a/lib/switchbot-device-woplugmini.js +++ b/lib/switchbot-device-woplugmini.js @@ -51,7 +51,7 @@ class SwitchbotDeviceWoPlugMini extends SwitchbotDevice { .then((res_bytes) => { const res_buf = Buffer.from(res_bytes); if (res_buf.length === 2) { - let code = res_buf.readUInt8(1); + const code = res_buf.readUInt8(1); if (code === 0x00 || code === 0x80) { const is_on = code === 0x80; resolve(is_on); diff --git a/lib/switchbot-device-wostrip.js b/lib/switchbot-device-wostrip.js index 149bdfcc..db444e61 100644 --- a/lib/switchbot-device-wostrip.js +++ b/lib/switchbot-device-wostrip.js @@ -149,7 +149,7 @@ class SwitchbotDeviceWoStrip extends SwitchbotDevice { .then((res_bytes) => { const res_buf = Buffer.from(res_bytes); if (res_buf.length === 2) { - let code = res_buf.readUInt8(1); + const code = res_buf.readUInt8(1); if (code === 0x00 || code === 0x80) { const is_on = code === 0x80; resolve(is_on); diff --git a/lib/switchbot-device.js b/lib/switchbot-device.js index c7ec6594..a09e38e0 100644 --- a/lib/switchbot-device.js +++ b/lib/switchbot-device.js @@ -26,7 +26,7 @@ class SwitchbotDevice { this._COMMAND_TIMEOUT_MSEC = 3000; // Save the device information - let ad = switchbotAdvertising.parse(peripheral); + const ad = switchbotAdvertising.parse(peripheral); this._id = ad.id; this._address = ad.address; this._model = ad.serviceData.model; @@ -105,7 +105,7 @@ class SwitchbotDevice { } // Check the connection state - let state = this.connectionState; + const state = this.connectionState; if (state === "connected") { resolve(); return; @@ -155,7 +155,7 @@ class SwitchbotDevice { _getCharacteristics() { return new Promise((resolve, reject) => { // Set timeout timer - let timer = setTimeout(() => { + const timer = setTimeout(() => { this._ondisconnect_internal = () => {}; timer = null; reject( @@ -179,20 +179,20 @@ class SwitchbotDevice { // Discover services and characteristics (async () => { - let service_list = await this._discoverServices(); + const service_list = await this._discoverServices(); if (!timer) { throw new Error(""); } - let chars = { + const chars = { write: null, notify: null, device: null, }; - for (let service of service_list) { - let char_list = await this._discoverCharacteristics(service); - for (let char of char_list) { + for (const service of service_list) { + const char_list = await this._discoverCharacteristics(service); + for (const char of char_list) { if (char.uuid === this._CHAR_UUID_WRITE) { chars.write = char; } else if (char.uuid === this._CHAR_UUID_NOTIFY) { @@ -230,8 +230,8 @@ class SwitchbotDevice { return; } - let service = null; - for (let s of service_list) { + const service = null; + for (const s of service_list) { if (s.uuid === this._SERV_UUID_PRIMARY) { service = s; break; @@ -260,7 +260,7 @@ class SwitchbotDevice { _subscribe() { return new Promise((resolve, reject) => { - let char = this._chars.notify; + const char = this._chars.notify; if (!char) { reject(new Error("No notify characteristic was found.")); return; @@ -280,7 +280,7 @@ class SwitchbotDevice { _unsubscribe() { return new Promise((resolve) => { - let char = this._chars.notify; + const char = this._chars.notify; if (!char) { resolve(); return; @@ -307,7 +307,7 @@ class SwitchbotDevice { return new Promise((resolve, reject) => { this._was_connected_explicitly = false; // Check the connection state - let state = this._peripheral.state; + const state = this._peripheral.state; if (state === "disconnected") { resolve(); return; @@ -351,7 +351,7 @@ class SwitchbotDevice { * ---------------------------------------------------------------- */ getDeviceName() { return new Promise((resolve, reject) => { - let name = ""; + const name = ""; this._connect() .then(() => { if (!this._chars.device) { @@ -392,7 +392,7 @@ class SwitchbotDevice { setDeviceName(name) { return new Promise((resolve, reject) => { // Check the parameters - let valid = parameterChecker.check( + const valid = parameterChecker.check( { name: name }, { name: { required: true, type: "string", minBytes: 1, maxBytes: 100 }, @@ -404,7 +404,7 @@ class SwitchbotDevice { return; } - let buf = Buffer.from(name, "utf8"); + const buf = Buffer.from(name, "utf8"); this._connect() .then(() => { if (!this._chars.device) { @@ -439,7 +439,7 @@ class SwitchbotDevice { return; } - let res_buf = null; + const res_buf = null; this._connect() .then(() => { @@ -463,7 +463,7 @@ class SwitchbotDevice { _waitCommandResponse() { return new Promise((resolve, reject) => { - let timer = setTimeout(() => { + const timer = setTimeout(() => { timer = null; this._onnotify_internal = () => {}; reject(new Error("COMMAND_TIMEOUT")); @@ -484,7 +484,7 @@ class SwitchbotDevice { _read(char) { return new Promise((resolve, reject) => { // Set a timeout timer - let timer = setTimeout(() => { + const timer = setTimeout(() => { reject("READ_TIMEOUT"); }, this._READ_TIMEOUT_MSEC); @@ -507,7 +507,7 @@ class SwitchbotDevice { _write(char, buf) { return new Promise((resolve, reject) => { // Set a timeout timer - let timer = setTimeout(() => { + const timer = setTimeout(() => { reject("WRITE_TIMEOUT"); }, this._WRITE_TIMEOUT_MSEC); diff --git a/lib/switchbot.js b/lib/switchbot.js index 3eac618e..474872ff 100644 --- a/lib/switchbot.js +++ b/lib/switchbot.js @@ -26,7 +26,7 @@ class Switchbot { * ---------------------------------------------------------------- */ constructor(params) { // Check parameters - let noble = null; + const noble = null; if (params && params.noble) { noble = params.noble; } else { @@ -83,9 +83,9 @@ class Switchbot { * `SwitchbotDevice` objects representing the found devices. * ---------------------------------------------------------------- */ discover(params = {}) { - let promise = new Promise((resolve, reject) => { + const promise = new Promise((resolve, reject) => { // Check the parameters - let valid = parameterChecker.check( + const valid = parameterChecker.check( params, { duration: { required: false, type: "integer", min: 1, max: 60000 }, @@ -110,7 +110,7 @@ class Switchbot { } // Determine the values of the parameters - let p = { + const p = { duration: params.duration || this._DEFAULT_DISCOVERY_DURATION, model: params.model || "", id: params.id || "", @@ -120,16 +120,16 @@ class Switchbot { // Initialize the noble object this._init() .then(() => { - let peripherals = {}; - let timer = null; - let finishDiscovery = () => { + const peripherals = {}; + const timer = null; + const finishDiscovery = () => { if (timer) { clearTimeout(timer); } this.noble.removeAllListeners("discover"); this.noble.stopScanning(); - let device_list = []; - for (let addr in peripherals) { + const device_list = []; + for (const addr in peripherals) { device_list.push(peripherals[addr]); } resolve(device_list); @@ -137,11 +137,11 @@ class Switchbot { // Set a handler for the 'discover' event this.noble.on("discover", (peripheral) => { - let device = this._getDeviceObject(peripheral, p.id, p.model); + const device = this._getDeviceObject(peripheral, p.id, p.model); if (!device) { return; } - let id = device.id; + const id = device.id; peripherals[id] = device; if (this.ondiscover && typeof this.ondiscover === "function") { @@ -177,13 +177,13 @@ class Switchbot { } _init() { - let promise = new Promise((resolve, reject) => { + const promise = new Promise((resolve, reject) => { switch (this.noble.state) { case "poweredOn": resolve(); return; case ("unsupported", "unauthorized", "poweredOff"): - let err = new Error( + const err = new Error( "Failed to initialize the Noble object: " + this.noble.state ); reject(err); @@ -193,7 +193,7 @@ class Switchbot { if (state === "poweredOn") { resolve(); } else { - let err = new Error( + const err = new Error( "Failed to initialize the Noble object: " + state ); reject(err); @@ -205,9 +205,9 @@ class Switchbot { } _getDeviceObject(peripheral, id, model) { - let ad = switchbotAdvertising.parse(peripheral, this.onlog); + const ad = switchbotAdvertising.parse(peripheral, this.onlog); if (this._filterAdvertising(ad, id, model)) { - let device = null; + const device = null; switch (ad.serviceData.model) { case "H": device = new SwitchbotDeviceWoHand(peripheral, this.noble); @@ -258,7 +258,7 @@ class Switchbot { } if (id) { id = id.toLowerCase().replace(/\:/g, ""); - let ad_id = ad.address.toLowerCase().replace(/[^a-z0-9]/g, ""); + const ad_id = ad.address.toLowerCase().replace(/[^a-z0-9]/g, ""); if (ad_id !== id) { return false; } @@ -324,9 +324,9 @@ class Switchbot { * Nothing will be passed to the `resolve()`. * ---------------------------------------------------------------- */ startScan(params) { - let promise = new Promise((resolve, reject) => { + const promise = new Promise((resolve, reject) => { // Check the parameters - let valid = parameterChecker.check( + const valid = parameterChecker.check( params, { model: { @@ -352,14 +352,14 @@ class Switchbot { this._init() .then(() => { // Determine the values of the parameters - let p = { + const p = { model: params.model || "", id: params.id || "", }; // Set a handler for the 'discover' event this.noble.on("discover", (peripheral) => { - let ad = switchbotAdvertising.parse(peripheral, this.onlog); + const ad = switchbotAdvertising.parse(peripheral, this.onlog); if (this._filterAdvertising(ad, p.id, p.model)) { if ( this.onadvertisement && @@ -419,7 +419,7 @@ class Switchbot { wait(msec) { return new Promise((resolve, reject) => { // Check the parameters - let valid = parameterChecker.check( + const valid = parameterChecker.check( { msec: msec }, { msec: { required: true, type: "integer", min: 0 }, From 33a25acbc8762e485f490748d9b21ca16b45254e Mon Sep 17 00:00:00 2001 From: Donavan Becker Date: Tue, 18 Oct 2022 15:02:08 -0500 Subject: [PATCH 15/15] v1.6.0 --- CHANGELOG.md | 14 +- package-lock.json | 902 ++++++++++++++++++++++++++++++---------------- package.json | 2 +- 3 files changed, 597 insertions(+), 321 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c25b1a5..fb4aa55c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,12 +2,22 @@ All notable changes to this project will be documented in this file. This project uses [Semantic Versioning](https://semver.org/) -## [Version 1.5.0](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v1.5.0) (2022-08-27) +## [Version 1.6.0](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v1.5.0) (2022-10-18) ## What's Changed -- Added Color Bulb & Strip Light Support +- Added Support for Pushing Changes to Color Bulb & Strip Light +- Housekeeping and update dependencies + +**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v1.5.0...v1.6.0 + +## [Version 1.5.0](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v1.5.0) (2022-10-07) + +## What's Changed + +- Added Support for receiving status updates from Color Bulb & Strip Light - Fixed issue that caused excessive logging. +- Housekeeping and update dependencies **Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v1.4.1...v1.5.0 diff --git a/package-lock.json b/package-lock.json index d1d9cf69..f557df39 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "node-switchbot", - "version": "1.5.0", + "version": "1.6.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "node-switchbot", - "version": "1.5.0", + "version": "1.6.0", "license": "MIT", "dependencies": { "@abandonware/noble": "^1.9.2-15" @@ -132,102 +132,89 @@ } }, "node_modules/@npmcli/git": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz", - "integrity": "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.0.1.tgz", + "integrity": "sha512-sfaCFyZO7Zsxia2TNHW8TeHFIUnK63896EZFA5K0vCReOMFi9aELB5RZyFveRLaBE/pT1BS6RxbTWZGjulNgSg==", "dev": true, "dependencies": { - "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/promise-spawn": "^4.0.0", "lru-cache": "^7.4.4", "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", "which": "^2.0.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.0.tgz", + "integrity": "sha512-vpPDeSnqHAXaPK1l6lcIcpgK/aIe63AbNR5vbzOhO6I2rkaFZmviQZ5nAlSpt+vwKrOH1CnplOdoE5/x8FWtNA==", "dev": true, "dependencies": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" }, "bin": { "installed-package-contents": "index.js" }, "engines": { - "node": ">= 10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/move-file": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-3.0.0.tgz", + "integrity": "sha512-mOUBUIXsqAQBfn87vGIjBAve6JmD9PkP9Vdq2SayDqQh2Ol60hnXaBSvT4V6IQiho1otw6SipnVV1fulvOiyKQ==", "dev": true, "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/node-gyp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", - "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/promise-spawn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", - "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-4.0.0.tgz", + "integrity": "sha512-LM/GRZSwkxar1jgd58yW5WspFWrFefh8a/KVy+sbOMa0pCwqlXWxXEjQRQzbtWExyhwPb2XSK/4mJnLeiVOYng==", "dev": true, "dependencies": { "infer-owner": "^1.0.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/run-script": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz", - "integrity": "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-5.0.0.tgz", + "integrity": "sha512-AuqcoTOt7v4D2JqC7mCa+eUQHb64vWbwyu9o1hoJiq2kfZNwCB71f0s7tvUw+v+1B5XMdqcr98aGzjKIg7s6Vw==", "dev": true, "dependencies": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^4.0.0", "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", + "read-package-json-fast": "^3.0.0", "which": "^2.0.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@pnpm/network.ca-file": { @@ -518,13 +505,13 @@ } }, "node_modules/cacache": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.0.tgz", - "integrity": "sha512-5hYD+c8Ytmymo9b8tPgYWrWfHOzaO8M8jMUkyiEYfeLTwo70MUaD/yA1pNONi3upx02JIn3mtpDuSCXoQgtlHw==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.1.tgz", + "integrity": "sha512-HRnDSZUXB5hdCQc2wuB8eBQPe1a9PVU2Ow8zMTi82NGJZmBGNTSjEGzetlndKlqpVYBa4esdaJ2LH6/uOB4sFQ==", "dev": true, "dependencies": { "@npmcli/fs": "^3.0.0", - "@npmcli/move-file": "^2.0.0", + "@npmcli/move-file": "^3.0.0", "fs-minipass": "^2.1.0", "glob": "^8.0.1", "lru-cache": "^7.7.1", @@ -534,9 +521,9 @@ "minipass-pipeline": "^1.2.4", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", - "ssri": "^9.0.0", + "ssri": "^10.0.0", "tar": "^6.1.11", - "unique-filename": "^2.0.0" + "unique-filename": "^3.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -1263,15 +1250,15 @@ } }, "node_modules/ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.0.tgz", + "integrity": "sha512-bTf9UWe/UP1yxG3QUrj/KOvEhTAUWPcv+WvbFZ28LcqznXabp7Xu6o9y1JEC18+oqODuS7VhTpekV5XvFwsxJg==", "dev": true, "dependencies": { "minimatch": "^5.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/import-lazy": { @@ -1351,9 +1338,9 @@ } }, "node_modules/is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -1499,10 +1486,13 @@ "dev": true }, "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/json-parse-helpfulerror": { "version": "1.0.3", @@ -1679,6 +1669,19 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/make-fetch-happen/node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/make-fetch-happen/node_modules/cacache": { "version": "16.1.3", "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", @@ -1708,6 +1711,42 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -2075,18 +2114,30 @@ } }, "node_modules/normalize-package-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", - "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", "dev": true, "dependencies": { - "hosted-git-info": "^5.0.0", + "hosted-git-info": "^6.0.0", "is-core-module": "^2.8.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.0.0.tgz", + "integrity": "sha512-NURrKJX36ihI69iCqcvN4uuIk9fHcc1C+uax/5fPh4Tr5WJnATir+QM/CMJNKrcOOvxQDsAdS5C9oJliM80X7g==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/normalize-url": { @@ -2102,12 +2153,15 @@ } }, "node_modules/npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", "dev": true, "dependencies": { - "npm-normalize-package-bin": "^1.0.1" + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-check-updates": { @@ -2154,22 +2208,25 @@ } }, "node_modules/npm-install-checks": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", - "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.0.0.tgz", + "integrity": "sha512-SBU9oFglRVZnfElwAtF14NivyulDqF1VKqqwNsFW9HDcbHMAPHpRSsVFgKuwFGq/hVvWZExz62Th0kvxn/XE7Q==", "dev": true, "dependencies": { "semver": "^7.1.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.0.tgz", + "integrity": "sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/npm-package-arg": { "version": "9.1.2", @@ -2186,58 +2243,180 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/npm-package-arg/node_modules/proc-log": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/npm-packlist": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.0.tgz", - "integrity": "sha512-8GRMzWQmFdUrRmc6tPPCd9Umm9g2qDR6X6Rik+9nYvoDQTLs/0IcCKv6iUdAmgr9sgJCm24QovwozCHWMDriOg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.1.tgz", + "integrity": "sha512-XddbYutimy7hdmP7S1tHMjFwghn64lvgdnhYG0KLGFBWjEvMt1/jg95OR3vPNNCjkakHS+k4a//3XOO8JOGI2A==", "dev": true, "dependencies": { - "ignore-walk": "^5.0.1" + "ignore-walk": "^6.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-pick-manifest": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz", - "integrity": "sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", "dev": true, "dependencies": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^2.0.0", - "npm-package-arg": "^9.0.0", + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", "semver": "^7.3.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "node_modules/npm-pick-manifest/node_modules/hosted-git-info": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.0.0.tgz", + "integrity": "sha512-NURrKJX36ihI69iCqcvN4uuIk9fHcc1C+uax/5fPh4Tr5WJnATir+QM/CMJNKrcOOvxQDsAdS5C9oJliM80X7g==", "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.0.0.tgz", + "integrity": "sha512-7dkh8mRp7s0KwVHKIVJnFCJQ2B34gOGnzgBjDGyprycmARq/82SX/lhilQ95ZuacP/G/1gsS345iAkKmxWBQ2Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-registry-fetch": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz", - "integrity": "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.2.tgz", + "integrity": "sha512-TMenrMagFA9KF81E2bkS5XRyzERK4KXu70vgXt5+i8FcrFeLNgNsc6e5hekTqjDwPDkL3HGn/holWcXDMfnFgw==", "dev": true, "dependencies": { - "make-fetch-happen": "^10.0.6", + "make-fetch-happen": "^11.0.0", "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", + "minipass-fetch": "^3.0.0", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/hosted-git-info": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.0.0.tgz", + "integrity": "sha512-NURrKJX36ihI69iCqcvN4uuIk9fHcc1C+uax/5fPh4Tr5WJnATir+QM/CMJNKrcOOvxQDsAdS5C9oJliM80X7g==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.1.tgz", + "integrity": "sha512-clv3IblugXn2CDUmqFhNzii3rjKa46u5wNeivc+QlLXkGI5FjLX3rGboo+y2kwf1pd8W0iDiC384cemeDtw9kw==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.0.tgz", + "integrity": "sha512-NSx3k5gR4Q5Ts2poCM/19d45VwhVLBtJZ6ypYcthj2BwmDx/e7lW8Aadnyt3edd2W0ecb+b0o7FYLRYE2AGcQg==", + "dev": true, + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.0.0.tgz", + "integrity": "sha512-7dkh8mRp7s0KwVHKIVJnFCJQ2B34gOGnzgBjDGyprycmARq/82SX/lhilQ95ZuacP/G/1gsS345iAkKmxWBQ2Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npmlog": { @@ -2343,27 +2522,27 @@ } }, "node_modules/pacote": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.0.0.tgz", - "integrity": "sha512-YsMK5om14r2rf4Ukum5R43zKFoJe0swrsZRbG4fUfTJUxHpdMrie6+Js/jaNtn7Bq0YRL9SnAajPqz6n4wgi6g==", + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.0.1.tgz", + "integrity": "sha512-91Po/ZZE5fIEkbesHwsZPNae7SczIN8pSD2od96NMCfA2gGzdeEVY4CAFfXZKi+lfSEOlFIsKadRrYPj7nR/PA==", "dev": true, "dependencies": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.0", + "@npmcli/promise-spawn": "^4.0.0", + "@npmcli/run-script": "^5.0.0", "cacache": "^17.0.0", "fs-minipass": "^2.1.0", "minipass": "^3.1.6", "npm-package-arg": "^9.0.0", "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", + "read-package-json": "^6.0.0", "read-package-json-fast": "^3.0.0", - "ssri": "^9.0.0", + "ssri": "^10.0.0", "tar": "^6.1.11" }, "bin": { @@ -2425,12 +2604,12 @@ } }, "node_modules/proc-log": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/progress": { @@ -2561,60 +2740,33 @@ "dev": true }, "node_modules/read-package-json": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz", - "integrity": "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.0.tgz", + "integrity": "sha512-b/9jxWJ8EwogJPpv99ma+QwtqB7FSl3+V6UXS7Aaay8/5VwMY50oIFooY1UKXMWpfNCM6T/PoGqa5GD1g9xf9w==", "dev": true, "dependencies": { "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^2.0.0" + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/read-package-json-fast": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.0.tgz", - "integrity": "sha512-dVZMRA86XfZYNxQu18el+HG18L92Rn9CyOhOiQRPFR6ygigZwnmPg1DEVPNFBesp8JeISYYLvvD8DaEkUSTFkQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.1.tgz", + "integrity": "sha512-8+HW7Yo+cjfF+md8DqsZHgats2mxf7gGYow/+2JjxrftoHFZz9v4dzd0EubzYbkNaLxrTVcnllHwklXN2+7aTQ==", "dev": true, "dependencies": { "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^2.0.0" + "npm-normalize-package-bin": "^3.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/read-package-json/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -2994,15 +3146,15 @@ "dev": true }, "node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.0.tgz", + "integrity": "sha512-64ghGOpqW0k+jh7m5jndBGdVEoPikWwGQmBNN5ks6jyUSMymzHDTlnNHOvzp+6MmHOljr2MokUzvRksnTwG0Iw==", "dev": true, "dependencies": { "minipass": "^3.1.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/string_decoder": { @@ -3106,27 +3258,27 @@ } }, "node_modules/unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dev": true, "dependencies": { - "unique-slug": "^3.0.0" + "unique-slug": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/unique-string": { @@ -3541,16 +3693,16 @@ } }, "@npmcli/git": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz", - "integrity": "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.0.1.tgz", + "integrity": "sha512-sfaCFyZO7Zsxia2TNHW8TeHFIUnK63896EZFA5K0vCReOMFi9aELB5RZyFveRLaBE/pT1BS6RxbTWZGjulNgSg==", "dev": true, "requires": { - "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/promise-spawn": "^4.0.0", "lru-cache": "^7.4.4", "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", @@ -3558,19 +3710,19 @@ } }, "@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.0.tgz", + "integrity": "sha512-vpPDeSnqHAXaPK1l6lcIcpgK/aIe63AbNR5vbzOhO6I2rkaFZmviQZ5nAlSpt+vwKrOH1CnplOdoE5/x8FWtNA==", "dev": true, "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" } }, "@npmcli/move-file": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-3.0.0.tgz", + "integrity": "sha512-mOUBUIXsqAQBfn87vGIjBAve6JmD9PkP9Vdq2SayDqQh2Ol60hnXaBSvT4V6IQiho1otw6SipnVV1fulvOiyKQ==", "dev": true, "requires": { "mkdirp": "^1.0.4", @@ -3578,43 +3730,31 @@ } }, "@npmcli/node-gyp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", - "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", "dev": true }, "@npmcli/promise-spawn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", - "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-4.0.0.tgz", + "integrity": "sha512-LM/GRZSwkxar1jgd58yW5WspFWrFefh8a/KVy+sbOMa0pCwqlXWxXEjQRQzbtWExyhwPb2XSK/4mJnLeiVOYng==", "dev": true, "requires": { "infer-owner": "^1.0.4" } }, "@npmcli/run-script": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz", - "integrity": "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-5.0.0.tgz", + "integrity": "sha512-AuqcoTOt7v4D2JqC7mCa+eUQHb64vWbwyu9o1hoJiq2kfZNwCB71f0s7tvUw+v+1B5XMdqcr98aGzjKIg7s6Vw==", "dev": true, "requires": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^4.0.0", "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", + "read-package-json-fast": "^3.0.0", "which": "^2.0.2" - }, - "dependencies": { - "read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } - } } }, "@pnpm/network.ca-file": { @@ -3838,13 +3978,13 @@ } }, "cacache": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.0.tgz", - "integrity": "sha512-5hYD+c8Ytmymo9b8tPgYWrWfHOzaO8M8jMUkyiEYfeLTwo70MUaD/yA1pNONi3upx02JIn3mtpDuSCXoQgtlHw==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.1.tgz", + "integrity": "sha512-HRnDSZUXB5hdCQc2wuB8eBQPe1a9PVU2Ow8zMTi82NGJZmBGNTSjEGzetlndKlqpVYBa4esdaJ2LH6/uOB4sFQ==", "dev": true, "requires": { "@npmcli/fs": "^3.0.0", - "@npmcli/move-file": "^2.0.0", + "@npmcli/move-file": "^3.0.0", "fs-minipass": "^2.1.0", "glob": "^8.0.1", "lru-cache": "^7.7.1", @@ -3854,9 +3994,9 @@ "minipass-pipeline": "^1.2.4", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", - "ssri": "^9.0.0", + "ssri": "^10.0.0", "tar": "^6.1.11", - "unique-filename": "^2.0.0" + "unique-filename": "^3.0.0" } }, "cacheable-lookup": { @@ -4386,9 +4526,9 @@ "dev": true }, "ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.0.tgz", + "integrity": "sha512-bTf9UWe/UP1yxG3QUrj/KOvEhTAUWPcv+WvbFZ28LcqznXabp7Xu6o9y1JEC18+oqODuS7VhTpekV5XvFwsxJg==", "dev": true, "requires": { "minimatch": "^5.0.1" @@ -4456,9 +4596,9 @@ } }, "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "requires": { "has": "^1.0.3" @@ -4565,9 +4705,9 @@ "dev": true }, "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", "dev": true }, "json-parse-helpfulerror": { @@ -4699,6 +4839,16 @@ "semver": "^7.3.5" } }, + "@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, "cacache": { "version": "16.1.3", "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", @@ -4724,6 +4874,33 @@ "tar": "^6.1.11", "unique-filename": "^2.0.0" } + }, + "ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "requires": { + "unique-slug": "^3.0.0" + } + }, + "unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } } } }, @@ -4994,15 +5171,26 @@ } }, "normalize-package-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", - "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", "dev": true, "requires": { - "hosted-git-info": "^5.0.0", + "hosted-git-info": "^6.0.0", "is-core-module": "^2.8.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" + }, + "dependencies": { + "hosted-git-info": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.0.0.tgz", + "integrity": "sha512-NURrKJX36ihI69iCqcvN4uuIk9fHcc1C+uax/5fPh4Tr5WJnATir+QM/CMJNKrcOOvxQDsAdS5C9oJliM80X7g==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + } } }, "normalize-url": { @@ -5012,12 +5200,12 @@ "dev": true }, "npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", "dev": true, "requires": { - "npm-normalize-package-bin": "^1.0.1" + "npm-normalize-package-bin": "^3.0.0" } }, "npm-check-updates": { @@ -5057,18 +5245,18 @@ } }, "npm-install-checks": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", - "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.0.0.tgz", + "integrity": "sha512-SBU9oFglRVZnfElwAtF14NivyulDqF1VKqqwNsFW9HDcbHMAPHpRSsVFgKuwFGq/hVvWZExz62Th0kvxn/XE7Q==", "dev": true, "requires": { "semver": "^7.1.1" } }, "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.0.tgz", + "integrity": "sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q==", "dev": true }, "npm-package-arg": { @@ -5081,50 +5269,150 @@ "proc-log": "^2.0.1", "semver": "^7.3.5", "validate-npm-package-name": "^4.0.0" + }, + "dependencies": { + "proc-log": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "dev": true + } } }, "npm-packlist": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.0.tgz", - "integrity": "sha512-8GRMzWQmFdUrRmc6tPPCd9Umm9g2qDR6X6Rik+9nYvoDQTLs/0IcCKv6iUdAmgr9sgJCm24QovwozCHWMDriOg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.1.tgz", + "integrity": "sha512-XddbYutimy7hdmP7S1tHMjFwghn64lvgdnhYG0KLGFBWjEvMt1/jg95OR3vPNNCjkakHS+k4a//3XOO8JOGI2A==", "dev": true, "requires": { - "ignore-walk": "^5.0.1" + "ignore-walk": "^6.0.0" } }, "npm-pick-manifest": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz", - "integrity": "sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", "dev": true, "requires": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^2.0.0", - "npm-package-arg": "^9.0.0", + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", "semver": "^7.3.5" }, "dependencies": { - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true + "hosted-git-info": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.0.0.tgz", + "integrity": "sha512-NURrKJX36ihI69iCqcvN4uuIk9fHcc1C+uax/5fPh4Tr5WJnATir+QM/CMJNKrcOOvxQDsAdS5C9oJliM80X7g==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "npm-package-arg": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.0.0.tgz", + "integrity": "sha512-7dkh8mRp7s0KwVHKIVJnFCJQ2B34gOGnzgBjDGyprycmARq/82SX/lhilQ95ZuacP/G/1gsS345iAkKmxWBQ2Q==", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + } + }, + "validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } } } }, "npm-registry-fetch": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz", - "integrity": "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.2.tgz", + "integrity": "sha512-TMenrMagFA9KF81E2bkS5XRyzERK4KXu70vgXt5+i8FcrFeLNgNsc6e5hekTqjDwPDkL3HGn/holWcXDMfnFgw==", "dev": true, "requires": { - "make-fetch-happen": "^10.0.6", + "make-fetch-happen": "^11.0.0", "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", + "minipass-fetch": "^3.0.0", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.0.0.tgz", + "integrity": "sha512-NURrKJX36ihI69iCqcvN4uuIk9fHcc1C+uax/5fPh4Tr5WJnATir+QM/CMJNKrcOOvxQDsAdS5C9oJliM80X7g==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "make-fetch-happen": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.1.tgz", + "integrity": "sha512-clv3IblugXn2CDUmqFhNzii3rjKa46u5wNeivc+QlLXkGI5FjLX3rGboo+y2kwf1pd8W0iDiC384cemeDtw9kw==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + } + }, + "minipass-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.0.tgz", + "integrity": "sha512-NSx3k5gR4Q5Ts2poCM/19d45VwhVLBtJZ6ypYcthj2BwmDx/e7lW8Aadnyt3edd2W0ecb+b0o7FYLRYE2AGcQg==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "npm-package-arg": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.0.0.tgz", + "integrity": "sha512-7dkh8mRp7s0KwVHKIVJnFCJQ2B34gOGnzgBjDGyprycmARq/82SX/lhilQ95ZuacP/G/1gsS345iAkKmxWBQ2Q==", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + } + }, + "validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } + } } }, "npmlog": { @@ -5200,27 +5488,27 @@ } }, "pacote": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.0.0.tgz", - "integrity": "sha512-YsMK5om14r2rf4Ukum5R43zKFoJe0swrsZRbG4fUfTJUxHpdMrie6+Js/jaNtn7Bq0YRL9SnAajPqz6n4wgi6g==", + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.0.1.tgz", + "integrity": "sha512-91Po/ZZE5fIEkbesHwsZPNae7SczIN8pSD2od96NMCfA2gGzdeEVY4CAFfXZKi+lfSEOlFIsKadRrYPj7nR/PA==", "dev": true, "requires": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.0", + "@npmcli/promise-spawn": "^4.0.0", + "@npmcli/run-script": "^5.0.0", "cacache": "^17.0.0", "fs-minipass": "^2.1.0", "minipass": "^3.1.6", "npm-package-arg": "^9.0.0", "npm-packlist": "^7.0.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", + "read-package-json": "^6.0.0", "read-package-json-fast": "^3.0.0", - "ssri": "^9.0.0", + "ssri": "^10.0.0", "tar": "^6.1.11" } }, @@ -5255,9 +5543,9 @@ "dev": true }, "proc-log": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", "dev": true }, "progress": { @@ -5352,47 +5640,25 @@ } }, "read-package-json": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz", - "integrity": "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.0.tgz", + "integrity": "sha512-b/9jxWJ8EwogJPpv99ma+QwtqB7FSl3+V6UXS7Aaay8/5VwMY50oIFooY1UKXMWpfNCM6T/PoGqa5GD1g9xf9w==", "dev": true, "requires": { "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "dependencies": { - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true - } + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" } }, "read-package-json-fast": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.0.tgz", - "integrity": "sha512-dVZMRA86XfZYNxQu18el+HG18L92Rn9CyOhOiQRPFR6ygigZwnmPg1DEVPNFBesp8JeISYYLvvD8DaEkUSTFkQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.1.tgz", + "integrity": "sha512-8+HW7Yo+cjfF+md8DqsZHgats2mxf7gGYow/+2JjxrftoHFZz9v4dzd0EubzYbkNaLxrTVcnllHwklXN2+7aTQ==", "dev": true, "requires": { "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "dependencies": { - "json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true - }, - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true - } + "npm-normalize-package-bin": "^3.0.0" } }, "readable-stream": { @@ -5669,9 +5935,9 @@ "dev": true }, "ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.0.tgz", + "integrity": "sha512-64ghGOpqW0k+jh7m5jndBGdVEoPikWwGQmBNN5ks6jyUSMymzHDTlnNHOvzp+6MmHOljr2MokUzvRksnTwG0Iw==", "dev": true, "requires": { "minipass": "^3.1.1" @@ -5757,18 +6023,18 @@ } }, "unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dev": true, "requires": { - "unique-slug": "^3.0.0" + "unique-slug": "^4.0.0" } }, "unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, "requires": { "imurmurhash": "^0.1.4" diff --git a/package.json b/package.json index 3b1569a7..1c61d00d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-switchbot", - "version": "1.5.0", + "version": "1.6.0", "description": "The node-switchbot is a Node.js module which allows you to control your Switchbot Devices through Bluetooth (BLE).", "main": "./lib/switchbot.js", "files": [