{"_id":"loupedeck","_rev":"29-88d5138ba5a712f2c53b8a54e0f80b10","name":"loupedeck","dist-tags":{"next":"4.1.0-beta.0","latest":"7.0.3"},"versions":{"0.5.0":{"name":"loupedeck","version":"0.5.0","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@0.5.0","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"18385c6d34080e53ccd3bd32168bb35fa14bc546","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-0.5.0.tgz","fileCount":5,"integrity":"sha512-+dPbbL+kbfsmFAAvfIOvs+VVzzih3CCcoqKZLEooKgnzVqgFT6eykgKR4HGcAZ8oByJHev8UHnguSoI2swcVPg==","signatures":[{"sig":"MEQCIG2kmuHrmwhUHLGtVLkphco8NpoPT0XrOljaby8j4/FFAiBMFbbrxrs0oxH+6pQ8DYBJxJwGUh/1Jt6NoQwLs/AESg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5854,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgA12GCRA9TVsSAnZWagAASh0P/Ru9zOrvhRCM0uwttY4q\njVFZUaB7F7ZIUIcGUUkN3eRKW+FDtIWvhi8FNhizf9+hs8QPqcaVNprogxvB\nPP+OeRnXr3kspvGGwNqW1rl6Av/N0xrf+tUdWEfYpYqLUmynAlCK3Sxhgjrc\n8RZ1z/5OMCyxkarT10wdjDB+NVboX3YUS8ZGIMxYSMSUC3UC8JTJkJOCSEs8\nnpu3Vy8pSXd21bb8jSupDGFshwHl3IsEfM9Nxrt7J13FUMwmHu6dGBaHOPIZ\nQDCGy1dngBvzpz8QyNSHVphXW05tVaxOXR4f1PYU5MhK7nD5yOcpS+53yv57\n75Wd3ygQ3k7Q7u4u76E5JrI6Vc4PPzppCFe5AhrdFWEhrxiP2zDBKdRya9NM\nDThSE35dwCU1OSvo7IzrSwshuuoSuu1MiZnuQouoILgE10lSQTYqocKaw1SL\nvidG24e/2ljOKekjpbUK1vPNIc+V9dfXl/8w42Ak8yYxMY6mekT13T7Hw1No\n3DXjg4TUZFuccKB9pDwAJI6gS8E09W8x72KL6E8UQu1PglI+uQZVk4trMg/u\n4EnLtYaZexfuHtq+mNloQuXq08oMYiDhg5jdjpCAGI6uzP/nHiMKEpzSWoWV\nYHRx7GRXsq8IGoDhx9O7jypFBaxV426CR9mHx7WEQ2vJ4rGPTMG8PTuwioQ+\nOUHQ\r\n=WeTh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"lint":"eslint ."},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"7.0.14","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"15.3.0","dependencies":{"ws":"^7.4.2"},"eslintConfig":{"env":{"es6":true,"node":true},"rules":{"semi":["error","never"],"eqeqeq":["error","always"],"indent":["error",4],"quotes":["error","single"],"no-console":["error",{"allow":["warn","info","error"]}],"prefer-const":["error"],"linebreak-style":["error","unix"],"object-curly-spacing":["error","always"]},"extends":["eslint:recommended"],"parserOptions":{"sourceType":"module","ecmaVersion":2017}},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^7.18.0"},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_0.5.0_1610833285562_0.27316385200809234","host":"s3://npm-registry-packages"}},"0.5.1":{"name":"loupedeck","version":"0.5.1","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@0.5.1","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"a45d5758b26c3b2f1f5fd48cfab19b894039f387","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-0.5.1.tgz","fileCount":5,"integrity":"sha512-BQBHT3F1l3OKZFiOJ3ZVRRHccXb9z8ozFK/hE5riM8rD5GOh53NEXXApq7vRpuJ4UvEG5kfEJvrIRiSGWTjGZw==","signatures":[{"sig":"MEQCIGom4ZRFXjIoND1UVTobTFQb00qbbH+GtTGTOvqDZaSkAiAcoCTZEqbtr/U/RRsEIn21krq5l5Zbf7u/0vmXxFZK6w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8610,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgA4e/CRA9TVsSAnZWagAAku8QAIbm8lwOdMOlMrij9iK5\nnQ0igRGB9+gq5LPR7WISvZMybMz90Q/MLSvDYBUkCco14m7eraRKPTKKt601\nlgesw+TyCLGOiQidHmt84kUxmAu2ZUT4iylefg4TxS1fsp4ET+susRq6X75J\n6oI9VkunmukLMSqWjAC3sn1cFliFr3HQGqoaqW9bDC1utmErPnVXFjp6d/Ix\nwgjoM10iF4fwUAbsOcNJJEeM8V6c0ZJ3JQOyAQGqTb3DCipdopRmEjnl9xef\nkFG3Gb+T6laVVseYF/ImgRzf7il7zNanFwpbqTznw/1Qi/Yhw+KdM8QHYiXu\n4Z06L0ErizKUVgWr7QEN3Ri6Uv86vALkCJ8HzUHZn7MXFVKonYQfFcYw4VrN\ndG/x7FvKfjI5pJcZ+h2jcp3NajWWt1ZLTDXDdt0x0hD/d2zBnJxBYea9ybWX\n8VQzmE7kwHgpawsmoSLAul0s0qTYcHGwI0ZAxn6aaNhdQ3kx70IjcXNHCAlY\ngkXFW71i2SHh3ZYtzHX3uylUA8iW3CWJNDTfyIEBTPIenZo8TLIxf65nqI+r\ntgZc/AcPce+Dk3TKysXCDlEaKOVf/5GJSv5oUIaRjaReXg/+A6QCTwFTIy0s\nQjpIhs8XgDaQXqhg2htFUKgI9VkcGAoU4rhdp2fOUDc9dDNJ1oRS5APFjM43\n6hOP\r\n=6lBm\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"176c8db7536a49b2ea8f32883d0f62cdd7751599","scripts":{"lint":"eslint .","test":"jest"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"7.0.14","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"15.3.0","dependencies":{"ws":"^7.4.2"},"eslintConfig":{"env":{"es6":true,"node":true,"jest/globals":true},"rules":{"semi":["error","never"],"eqeqeq":["error","always"],"indent":["error",4],"quotes":["error","single"],"no-console":["error",{"allow":["warn","info","error"]}],"prefer-const":["error"],"linebreak-style":["error","unix"],"object-curly-spacing":["error","always"]},"extends":["eslint:recommended"],"plugins":["jest"],"parserOptions":{"sourceType":"module","ecmaVersion":2017}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","eslint":"^7.18.0","eslint-plugin-jest":"^24.1.3"},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_0.5.1_1610844095480_0.016389097338587177","host":"s3://npm-registry-packages"}},"0.6.0":{"name":"loupedeck","version":"0.6.0","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@0.6.0","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"f9f48a4f039de9956ebb0cd7feaca0bd0e648ebf","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-0.6.0.tgz","fileCount":5,"integrity":"sha512-4RdJufhziotdMh5/hjEs9yJxnT8NR/WE+4C+DWbc/1DVKUaxYZjdUBJhb+V3HbO4HWt6ak314ch4mRy4oVuKQw==","signatures":[{"sig":"MEYCIQC0d46F5tC3n5NmfRp3wtOQu2z+9zyMS3IfE3xOpydC8wIhALShRuEC70MR+TvpWVtRrf7mCUHGmiodmIKqKf4pUzV+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":10664,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgB9thCRA9TVsSAnZWagAA2+wQAIzcB9U4gYvnPDaNoPNf\nSebNc7YNGuTJfN4c8/X5+SWa9WpjwXV8kOmMkH7lJKt3rn5XrkEM3zQNiZ9e\nMK0AiWYnfUR20NDaSeCsFebZ4D0ZgT7eaPtezX3RVjjPXoxz/5Tx4XhZeMwC\nJe3+xxAfAJtWzjCaBnCBQEihwsl/AJg0qt3Kame3snLYLuWn47ns8Erof58p\nIljv1pbK01kzyOeRKnsQg9pLDye6JQCn0FFw29ca6mTBlDO02AZhY9Kc7Rf+\nlt6r/85Lowyy7LTLuSYysDZJByWk+Vxcf+m4TEBxYqBtIzzziowbfM0f0sSQ\nm3yik30ANzMxnqtlDF+iTEjpdVqLa0xg3j/HL6qjKR555tvgIoz7uclqtC/q\n2RkRLHb1I6LLSx2+UE1RHixMGKpTRwunNi4w6boaflXUjOMwDq6Fa8FicOxv\n/04ECywl/nRPaCz17OiUmYQWK+vKC655evjPg2fuVbaYF3rpXcajR/VkaS57\nUYv9f/hWDB/VXtKK5xic8Nd6Kap/LIbo7J/iHJhFyaNinb0ehJaVirEVm1NE\n342bfwgO3VEWn3aeHytupPe7EZOfIk4qyCIzSqtMhAJz2WxAvlSog0wcwNHb\nGNy77S3MIWVx4d/7l/PjC7Qxf72+S7eJRDeKMjf87YsrlQlCPxs512lO9BLr\nKTom\r\n=sddZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"5816f8f4d2e8f55d612f9cd64b3a8016bddb8fa4","scripts":{"lint":"eslint .","test":"jest"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"7.4.0","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"15.6.0","dependencies":{"ws":"^7.4.2"},"eslintConfig":{"env":{"es6":true,"node":true,"jest/globals":true},"rules":{"semi":["error","never"],"eqeqeq":["error","always"],"indent":["error",4],"quotes":["error","single"],"no-console":["error",{"allow":["warn","info","error"]}],"prefer-const":["error"],"linebreak-style":["error","unix"],"object-curly-spacing":["error","always"]},"extends":["eslint:recommended"],"plugins":["jest"],"parserOptions":{"sourceType":"module","ecmaVersion":2017}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","eslint":"^7.18.0","eslint-plugin-jest":"^24.1.3"},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_0.6.0_1611127649277_0.8298347290932124","host":"s3://npm-registry-packages"}},"0.7.0":{"name":"loupedeck","version":"0.7.0","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@0.7.0","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"f704f5b14d22628380d8a6de93948882acd9d546","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-0.7.0.tgz","fileCount":5,"integrity":"sha512-/PpduyQ7W1ndoNosuqUcGn+sWTiAzMEGv2u6nFZzIq6m8BtXMHmOOrwkrBHru7fj4TKS/oH3RskDD5Ivzl2UUg==","signatures":[{"sig":"MEYCIQDDV9zGWnagxOCwjG/ZxH63Gpnq2a65dhE783JvcnaHrQIhAIO4jaa09WZywaisyu9aPhm40znyqZ+RVUOBIF8mYLQe","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":15375,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCnMQCRA9TVsSAnZWagAAjFEP/iyW2mt5qcajXrlp58sN\n++ctaqhkUvdO6G+g1UGD5P551nJOGoEXPpnT52EXUbySnynQz0zcmYN4z9jT\n3UgDHFnE4rs6hxEWPMwLqBepFY3Yufnvsnv3eAVtkWcxT5JdlE+Jz1iv6V+8\nrMF9ocUqJGo+2Q4ClckfgtaaYJx+jFb+/uwwpGFF+OlC3aHGQa/KD5togZ0V\nlPzi+/U+1OFf7Izya/0LRnm1fByyIKUonk4mQot0JuPTv3sRXsIGLgbRSAWX\nI5wO9D0Hx7nx6FPheQ+23DEKb9NtfW+BG1auW9karsfxIvlofY+yEta7x5oe\nw9fomy/cSt8+6PacPiW+P1ZMbzGqcWkk+YQuJ+Pbp4ngP4D5zs/EMpzVOiF4\n8nOX6sqzSB/LIG6JLW1L+Xw+52ol1DKsrRL3Sv8JfhcizJSKylD8EUDoG8S5\n6jf0hPb7SNdqCLkxJix4FjxleN1eVjsV4fjC0pJjFsKT4BkXM7HJhsZZH960\ni1aXnlZaFNAWP00pPAP2emwWYZ26rA8Jke4jQz0tpeUiOvZNfGrZQe8Z31wH\nf9znDFrKP/cOSVXJc+EeVy/x0g4tQjN9TN6bx8OvCzeYPHePMi4dVM2sxzxc\nlcwNvsCpvZlWpwrvFOIibr6ZQ7FTtsfN4+tGZu7x02ykxXiF1RRJ1MnFp0Zd\nDvR/\r\n=Q6Sn\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"verbose":true,"collectCoverage":true,"coverageReporters":["text"]},"main":"index.js","gitHead":"df18bfff0d997964f60c07ece2348c880c6667d3","scripts":{"lint":"eslint .","test":"jest"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"7.4.0","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"15.6.0","dependencies":{"ws":"^7.4.2","canvas":"^2.6.1"},"eslintConfig":{"env":{"es6":true,"node":true,"jest/globals":true},"rules":{"semi":["error","never"],"eqeqeq":["error","always"],"indent":["error",4],"quotes":["error","single"],"no-console":["error",{"allow":["warn","info","error"]}],"prefer-const":["error"],"linebreak-style":["error","unix"],"object-curly-spacing":["error","always"]},"extends":["eslint:recommended"],"plugins":["jest"],"parserOptions":{"sourceType":"module","ecmaVersion":2017}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","eslint":"^7.18.0","eslint-plugin-jest":"^24.1.3"},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_0.7.0_1611297552067_0.19062420801461122","host":"s3://npm-registry-packages"}},"1.0.0":{"name":"loupedeck","version":"1.0.0","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@1.0.0","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"6a907432bb5fa5f69396b1315b5431a6a63ccfd9","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-1.0.0.tgz","fileCount":5,"integrity":"sha512-8KOM+hDg2VH5+hq6HNJDNwTZWWCY4YOYBkevabJEyTIwo7T2cTUiwPxYpPrFxWsSs/fw11tHi8Bc91VUnQChgw==","signatures":[{"sig":"MEYCIQDy1Za369LjYtKl/x9KDjwwUXAreUbwVbfRYx6Td94CuwIhAJGIFPgrF4cce+9EpHX7+M5CWoAZN/RA2TKckCUAsazR","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":16896,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgDRIXCRA9TVsSAnZWagAAu24P/1/fXAmivXKI9MKSMBlu\nL0JLr0cN8eVJG4rYacoLdYT4KCzHjmCC43pg7TKzE/5hpcHPq9otYJ0Q8MHh\n5geoWwFQPya00yyuYKnjrbLNxpMpWUIfka8hzpzmpGhj3lnSzdvi2Cjc5gIB\nqJN+8k+0PrPJK56jY6i4xm7iRaO+YMOoJVrRaAot1YiRwQqpG28ophidsDJj\nmFF7vk7j4VtOdnrOBi2Id6pWOnI+ow9dGpleg/MDL6vH2nlIkDoKekep3w54\nBBNq/sZvYxMQW0hGza1aVL+9hDCxtI5GoDP/BL/+kaoDWXMnKsWhyy6AQmW9\nAiwCvV8W4S9ToJcG8XHrpGRtiji9SE1h9rSu8gtfcXO8MlNLcjuWiV61DLVc\nj7AhJ9FrkcmjnpQ+Czr8D/N3ZlCfzDjhNv9Wq21eM2QOKXAu5YjallkuQEY0\nwdCkMdLA9Amvgg8CBOTeMmM1cYlmyifcmQIOxadcOBBxryzYfNT0VjCoCcJE\nk4Aw7Imh8hNi9pzLwWp0cZmK8ljlBda6GTB3r7+rImBe0u+3u1qTDsmjXbHh\nnhFi0bEbY8O7JKoKe8AtI5t3O0vr1qAdY1f7abrgd1KyoNBViZpgaRM8r9t3\nFuIGismX59IszitbKgPT0k+bxCmpyMSK4SJvMWtuGMM77+fRXScft3isRjn2\nrfr4\r\n=nO0p\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"verbose":true,"collectCoverage":true,"coverageReporters":["text"]},"main":"index.js","gitHead":"12f50fd6a8a977726d41c33004a05f5025fcb5fd","scripts":{"lint":"eslint .","test":"jest"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"7.4.0","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"15.6.0","dependencies":{"ws":"^7.4.2","canvas":"^2.6.1","color-rgba":"^2.2.3"},"eslintConfig":{"env":{"es6":true,"node":true,"jest/globals":true},"rules":{"semi":["error","never"],"eqeqeq":["error","always"],"indent":["error",4],"quotes":["error","single"],"no-console":["error",{"allow":["warn","info","error"]}],"prefer-const":["error"],"linebreak-style":["error","unix"],"object-curly-spacing":["error","always"]},"extends":["eslint:recommended"],"plugins":["jest"],"parserOptions":{"sourceType":"module","ecmaVersion":2017}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","eslint":"^7.18.0","eslint-plugin-jest":"^24.1.3"},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_1.0.0_1611469334782_0.7527446927302845","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"loupedeck","version":"1.1.0","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@1.1.0","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"3aeb1eae985fed412c5c356527a7a214bf5cc29a","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-1.1.0.tgz","fileCount":5,"integrity":"sha512-tef6I667lxoG8atrBBYzIpGpdgLrxSY5v4ycjHX9eiao49LzeRyRL7Yj6ec1jt/X7GXIoi3wFanuHJRQ43Vadg==","signatures":[{"sig":"MEUCIQDmA3P50yC7eGp5Tx1u8+2f1DaM/R4uy94TMj91LaIbWgIge2plQtlKZ/wd5C10GyZutYuZ3rG9EsPPZV8rM4BaSZM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":18204,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgDjUTCRA9TVsSAnZWagAARmsQAJmq+JGz9aI0rHvzULOK\nxBPgr8Eucg6GFy3qjL+DnSzom0io6Q1SSVa24ab6ZuaN4RAMCwG+nHUubVGO\n0ldrgqhb07VqjYH/D5BFIuReAxblmOfc2AyeiiqfbxnKAGmEkO+tPZM1KcTR\nfqnHxiQY2X/fmpaqn5Wif3uZmz9bgE5VMyH+uaUB1gsNaAT6m3OYU4VJh8GO\nI+kZl7CC3mNbKEvFHWPxRRb8DHqQju8ilTfWckCviZe9ubkf+z39ZYB9Pcng\nCtu7Hdre2bcW3DshKAxqlNHFbPKa9DIHSFAMPJS3MPH3DNAO0Nn9+WnFHMTw\nXj0qyWbeSkeB3qhS/OWwFM+QEsbwaizVoyXfypGH/p51gYLxFqNuBoB2JccB\nnSzOGTfN4OxfZIN/2Au3M95lZ5esse5+i3TL9Wss5FhBYt14ji+b6jdqNnId\n8kytwJyOV9rPSs1Lox5CZmkGnd7MhESlYO+XeVhkmDn+tPotzNgGsMPdjcOk\n1MSm0GJyFbN9WQMOBZ1bzWKj93nlsXqae7DFn3Zl1HqRI5oE5Rd2TG/66TU6\nJ3R1vKMyMFRLRhj1OT25/1IlPKE8NJFMc2EWNCdlZgezwJc9nG5lAo9nLy50\nP4IubVBSuwxJ2altzhUS1sT1lkvCSZETU6YVb6gcWGWKXly4oMzbqckflPWW\nyJLX\r\n=IZdZ\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"verbose":true,"collectCoverage":true,"coverageReporters":["text"]},"main":"index.js","gitHead":"3405b3d6ca7b6564fc48839e2e9f5ae7acfae1b2","scripts":{"lint":"eslint .","test":"jest"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"7.4.0","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"15.6.0","dependencies":{"ws":"^7.4.2","canvas":"^2.6.1","color-rgba":"^2.2.3"},"eslintConfig":{"env":{"es6":true,"node":true,"jest/globals":true},"rules":{"semi":["error","never"],"eqeqeq":["error","always"],"indent":["error",4],"quotes":["error","single"],"no-console":["error",{"allow":["warn","info","error"]}],"prefer-const":["error"],"linebreak-style":["error","unix"],"object-curly-spacing":["error","always"]},"extends":["eslint:recommended"],"plugins":["jest"],"parserOptions":{"sourceType":"module","ecmaVersion":2017}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","eslint":"^7.18.0","eslint-plugin-jest":"^24.1.3"},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_1.1.0_1611543826922_0.7473853755684203","host":"s3://npm-registry-packages"}},"1.1.1":{"name":"loupedeck","version":"1.1.1","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@1.1.1","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"6c42f5f560ed02d6920ef61f0fac15d6a3818c96","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-1.1.1.tgz","fileCount":6,"integrity":"sha512-18/IAQuhhJPUEn4Mt1Mz2cXRyQcqATu6hP3fOcTBIrNVV0IzGPuFUF6Y6YKdsHltWB+WQXsuzW/5M+wmVC9NGQ==","signatures":[{"sig":"MEQCIHbGnoadPATC6gEFgbC7Bn/3lvyt3xsQpkrXwY3vHa8zAiAVP6pIO4Z+i8l5iCn5acyegnpPcJR3g6vfi26HOq96Aw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20364,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHWccCRA9TVsSAnZWagAAQpIP/1S3cShWq8vOXaTBUWK5\nBQd7opdGOeXCZMuiVAItSNvD4TC7yNBvhY7U+QlFH9qJKTW2D/ktwzzfpw17\nqyIyEfeXcoRwGbK4o6/toa8d+omtg6IfA0/AKvHfH/uP0SUSzNOYwTbNorhN\nrbntB2hWXTE/bEujDEHg8/5d2g88hMnvFfq/REy64SIzyeedwq+IZOkL76t8\n7XD48V9VaCx9dnKbdcJOdytUJn5cwz/UnvT7x08Pz/B2SVa77/9ibDCkoDIk\n99FzBEOABMJM8HSB8Es1jEJxgPRPfC8u18CcTWYVs11DyTevxAfIiPks+dy1\ni/udhO5LWc2CfVdtEYdTg5dt405uj4LjotOai30f/pEvtIsFPvVG6rOXndNC\n5QGHCDsSS4N9huPc+Xl5ZrfWlLvQw3fGifjtBa9GbmdOj5EslRCQwaUvenx7\nysqFWqkNTQK47ES8/XFK2gM8gqKyhIUeY3nm/xOf2aZ+HKFJaLId+HsDuYfG\nSqH4t2IqSbJknpMP4Xcfs3rYfrzdLDUD4dw9As4gI4puoEohOHkwOLGPCgIw\ng3qwKJvpYik4787uZKziC5RitG7bKLYRgUXxj2lwaJ1OpDzudI2QL8iwEIYo\n3S6/71Xk8RbrqVq+Ndv7iZoVVn9OLNNGRTBxuOukX16Ds9UsIAkZL6BJcwtc\nONCd\r\n=gGKi\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"verbose":true,"collectCoverage":true,"coverageReporters":["text"]},"main":"index.js","gitHead":"fa7f5cf7d1f8a8f28cfe1f9683cd6f56f9e01b78","scripts":{"lint":"eslint .","test":"jest"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"7.4.0","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"15.6.0","dependencies":{"ws":"^7.4.2","canvas":"^2.6.1","color-rgba":"^2.2.3"},"eslintConfig":{"env":{"es6":true,"node":true,"jest/globals":true},"rules":{"semi":["error","never"],"eqeqeq":["error","always"],"indent":["error",4],"quotes":["error","single"],"no-console":["error",{"allow":["warn","info","error"]}],"prefer-const":["error"],"linebreak-style":["error","unix"],"object-curly-spacing":["error","always"]},"extends":["eslint:recommended"],"plugins":["jest"],"parserOptions":{"sourceType":"module","ecmaVersion":2017}},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","eslint":"^7.18.0","eslint-plugin-jest":"^24.1.3"},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_1.1.1_1612539676096_0.7192355578118608","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"loupedeck","version":"1.2.0","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@1.2.0","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"a42673a21453835591bb48b1b0d1fa1217d81ca0","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-1.2.0.tgz","fileCount":6,"integrity":"sha512-6EkzsE6cW/+YiNtPIyhrVEyIZgJOdEgEjwFPnjj1WAV55tMACuPPe0M28jSL7x2T+OkwJe907KQZjr6KxLTDfA==","signatures":[{"sig":"MEUCIQCFZM9HO+Uwr+uX+U4x2nMIW2l/7hUNUMxfjQXmgHs9oAIgez1u0v1AmwVAMtNIanO75sNXfX2SgoBSSezlezd26x4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19869,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh744BCRA9TVsSAnZWagAAFnwP/R7gNXz8Q/XBK7G4OGu3\nMXBBRm44I5vBZ965VTZ22QXg0oiCA3kUibl87KvxsDKXpI/8KuoJ5H3yyHSI\n9VvdLBJF/QFrk9mxBlVlaDNCk87KYpsD6bsk3gDFXlZ7zq9Vu8dm5ztQxJf9\n9A7zGsmD0tJBo+kc9oIqTEJ8zpREr4h916l/RnZKmyJrWB17punObC2B/gnw\n3vDnXD0oNVOCsB/1ruat4eepmNlR2InwUlR99/ef+b4ciB2ZyeTmlOEPrBsx\naqPxuhWmiEcK7ibpFr93uX0Qy+pxdeLCuvE+ZB5v7llGRHP9XkqqnoJQgz3s\nDnmJnualfmtkWolHAVqZYi2LSOTasSt2YBo43wU9V7jbiPEu/RX3y5XM21Q3\nXkP4LJLHoYdDC/uU55fNApaf+mOLhWYURsZ8u2F66UlC6tKLQDqu3hvoJk/e\nt3MftQ7/zleJV/n6jSQP3gYUKl4BFMva8laVQGYOXLeQbN0Z0fHQj9zxHK2D\nvMLqeay8ep6Rr2WE/ptw//ud+XHTZgWbqFpGGws052TXOPlLgZmmKoC9UuHh\nbmyuo0E6ENqnraEFme8InZXdczLNKI4+oHhvq4Y/xPGlvF3VlDY9YYfr++6C\nqPhNnRHQIDbKjer/MetS1VFs+d8mBCGQlYx1TKoff/iFBAc6RgDHLeQlVMAH\n+6+N\r\n=rJXM\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"verbose":true,"collectCoverage":true,"coverageReporters":["text"]},"main":"index.js","gitHead":"6d209acb328f151eccc9c8073af42636355ce51c","scripts":{"lint":"eslint .","test":"jest"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"8.3.0","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"17.3.0","dependencies":{"ws":"^8.4.2","canvas":"^2.9.0","color-rgba":"^2.4.0"},"eslintConfig":{"env":{"es6":true,"node":true,"jest/globals":true},"extends":["@appliedminds"],"plugins":["jest"]},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.7","eslint":"^8.7.0","eslint-plugin-jest":"^26.0.0","@appliedminds/eslint-config":"^1.1.1"},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_1.2.0_1643089409295_0.3168549567102179","host":"s3://npm-registry-packages"}},"1.3.0":{"name":"loupedeck","version":"1.3.0","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@1.3.0","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"69fa6f9eab1c1b013e5bb23b436bf394bdeb8c10","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-1.3.0.tgz","fileCount":9,"integrity":"sha512-Wz25j0F42Qn8WJfqeDCaBu7AVzCBSlxAM9zKemrU1VNUngCaqkabYmbB17XsQv/UfA9aNVQFT72eCJsSoU9pNQ==","signatures":[{"sig":"MEYCIQCBrssBiuH9CMEVWI0V9h8HkgC23O5NCA+83nQ+oQyq0wIhAMvMq7OP7I24klpmO/yp5uJcbgiDnyifXsfRkdw+jbad","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26252,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+iijCRA9TVsSAnZWagAAZXcP/1IRB9yVMVPb1Qf2UzMs\n2PzY4f0BzHiH/aqeG4Q/X+6Lo3znncuSqvVyHfTru9Or5yLtVmjqr5uK1mSD\nWP7VRcrhWATUY1WUbz/cTySqf5+TUU/aMUbPb0J3ZMQnGANW5ljbFtClyik3\ndXsbsLH9lAxnyVOEnDrY/mlSLKpDP+yreVUU919F0rCsh0CfhZH+l+vxV8oe\nDeeVMYqwPMNC3sd9ST8g/iyx22eznNFwTW7T5KnU3PyFN3NOb9d/FHBtJePu\nDWDZ83/1tfXW0ORzILssMN8tf+hP2pBrEzU+3HZ6xVqbPCpV5MHpsX13Q6lp\ndCtQiEbm1a5kSiEU+7ApN6U3EmRf6aKvL3v0jS1Jtigys68IqRGVj4cC6GD4\naxdoBB1ZtEWAqTBKYUaLdf1C5Acw2QnzYg0KffSJjGe72F1wBabDUJAJgL2a\nSg9zXZj8vJzwwbpYsG9jPzXgnyu/NjMOyac4WUEPyrVPk3S6WXJjqi6p6XxD\n1ZFQp31skDr4rEdlUX2wWTRSQkxHv1adiHXBK02wJhO9OketLbceRlVsAAh/\nNuGa/nAEXPiCExzAmA50leXFCLyHWTqMwtFj/WnPrKiwEDJAc3OwTbCDLgZ8\nJ1LZ3cWeFhxTzMpVqBsObXFye8m92hec8n7DYLpjAQHAlsuxTovSlibmSmkx\nFpVT\r\n=JazV\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"verbose":true,"collectCoverage":true,"coverageReporters":["text"]},"main":"index.js","gitHead":"ffddfccdec721782c1c6dcf4b3c1d261d8ad126e","scripts":{"lint":"eslint .","test":"jest"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"8.3.0","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"17.3.0","dependencies":{"ws":"^8.4.2","canvas":"^2.9.0","color-rgba":"^2.4.0","serialport":"^9.2.8"},"eslintConfig":{"env":{"es6":true,"node":true,"jest/globals":true},"extends":["@appliedminds"],"plugins":["jest"]},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.7","eslint":"^8.7.0","eslint-plugin-jest":"^26.0.0","@appliedminds/eslint-config":"^1.1.1"},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_1.3.0_1643784355229_0.8039759313874013","host":"s3://npm-registry-packages"}},"1.3.1":{"name":"loupedeck","version":"1.3.1","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@1.3.1","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"bc0b2336bded6e16deba808ae4b48e265a667d4e","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-1.3.1.tgz","fileCount":9,"integrity":"sha512-2HX9wA6reOhJ8qDbN28T0iK+TRwy2NCdmVprY9fHKy1F0c/wHjjKDvf4KZbUbRmWPcouSkfh77apN+sNnQfveA==","signatures":[{"sig":"MEUCIBNObvFUSfcyE8jSfLRDtvP999PbX+nVzxjRjEElZsxNAiEAmpR/AnQ+wwh777m0reRv4bqEz+Jx4GTqRhABBJcL7lw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26277,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiAEXtCRA9TVsSAnZWagAAdcUP/iZ3YMNaH/zwMBiUUptq\nnTDc4CmAlkWAVUPQPuFJgID74yHxQYI6k6GEC4mReD8NJna3jriATt3pq0qU\nh7m2gKHHb2dhCpGSxnTrcm0IQiJMgAkUV6Jx3EIbbh2chSZpi3hR1p73FPZq\nLrB5C+Kxfj2kOLpIU/PiAXUu1aeSKR6OUKymWywF6zCRmY5DZa785udxiZIO\nZZM+fcsqA+2o/AqDejalAwhk+oj327wOkOeeOWF8ANzZatOS2JqrqdRHoXL0\nTN3gH+yKxR7wV9l2nhFIdxC2HSVFTCkPH7drs9XdSkdn1v+BTaJinCkAq/x/\nHdqy8uwCjBM8OVP4UwMI8l/iva3kXppblVSSU9nQ2LRKFsdcmb+g29leJqxz\nxQSzzg4Nh0oZNVLLFWoYHZIWihZ3gKRMYfIwSQpPOazLCR7iwFWZC6i1Z3uS\nVNWi2/+vP7Zs8dVQWKLYl5CblnJhUjh7TkmfRFBBq7EzqnCJ4ZGEbTD+1A0P\nVGvpYNMaw7pcYagADC1QYtRfVHl5yLNMo/aEwKrwIY+w3KyKitEo9I/SnLP5\nePNFDEoJrb32r3AgsSm0jQcC6jLbL0Ic93lVUd/j8LCFgjoErkgyV5DXVUUY\no9JXZJe/2syOop9BcLriPttiuV9C5dy156LUtyMnWZF23d8CcRQP/oqNnKD+\nH4A8\r\n=aPCl\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"verbose":true,"collectCoverage":true,"coverageReporters":["text"]},"main":"index.js","gitHead":"a883fdeb9440564b4b0590f7b3d647d0fe289703","scripts":{"lint":"eslint .","test":"jest"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"8.3.0","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"17.3.0","dependencies":{"ws":"^8.4.2","canvas":"^2.9.0","color-rgba":"^2.4.0","serialport":"^9.2.8"},"eslintConfig":{"env":{"es6":true,"node":true,"jest/globals":true},"extends":["@appliedminds"],"plugins":["jest"]},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.4.7","eslint":"^8.7.0","eslint-plugin-jest":"^26.0.0","@appliedminds/eslint-config":"^1.1.1"},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_1.3.1_1644185068922_0.6652743868823432","host":"s3://npm-registry-packages"}},"1.3.2":{"name":"loupedeck","version":"1.3.2","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@1.3.2","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"292f13c36cb816a66aba855c0d74892998503aa1","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-1.3.2.tgz","fileCount":9,"integrity":"sha512-yYy+fmEyU1067KIJoFcOvoL7aZHo59nEWmvOEA6dFEwjPqc3oKRztxSKQSeHftpyWmuJ97fVt4P8nx/DCb5mug==","signatures":[{"sig":"MEYCIQC6lN2ONdfV+pS8EZx/C29iAo755Ci8iO72MXlqHZobuAIhANx3LRDza6mY46z4bZtq6l/Tk6lMONfoszkoXrtCacXY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJic3fnACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpYYw/+PD22nksc+6xHHPBi9nqjdCZjrloizOsEFSdnJgkmHJDDSGx1\r\nXc1c++pP+EsYi1BU/zH01ikuUyN1vhN3sd9+Vg7mKDdAK6FiI9lOtrXfd213\r\nDUiP98bu2p3CTt0y0XRvZY2tqk+mATPFlQG5AQofkmEdG5MXTJsrXraSqDVE\r\noilz6aswMvcK/Lr/rsZS1sXxplsGaJ1uyAqUH5i/QXArPa8hlqeMcleXHw7S\r\nFijxoY3jRzrQMj2FfAz2zp8/bCfUlavQc5Y7iDMgn2VcGvn4uTKsZcJaoJpK\r\nYcqjYQJSNdIltK89gVW1N3pS97l2K/EHt1l8SKEGNco9gfhDOSLzEw5XT888\r\nE+1F7/NxA/y3Gmq708m03WVDKxBJSy4qzRNkWjZTdie2gCH8101660wObxkb\r\npU6/PSqnjuqi+PhcNN1LI9pERmrVGH9ecgB8te7UXQXZXVqhKPW/doy//UnB\r\nmXs/0kwghrKlC4cmrBkswmWjvDfXUCs8BlKYNONr7NDN0GjVymbx/mvHbAcl\r\nj1yO362VFzaeKRs8ae7HO3czkqD31AnKQ1njN+PSA4QG18aWbO9rVAyu4bqV\r\nsp7T6FV2WBzLfCiBrlnLNagtjKH5WvTJwhXRVd6P0qkAwyAr61qwMixQ0VKs\r\nijsUpgNg4wAj4S7PQSPzav6D3MdmZPTUWA8=\r\n=AWlr\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"verbose":true,"collectCoverage":true,"coverageReporters":["text"]},"main":"index.js","gitHead":"37d7f0d91179157ddb7037e28aa7e6e941e8c8c0","scripts":{"lint":"eslint .","test":"jest"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"8.6.0","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"18.0.0","dependencies":{"ws":"^8.6.0","canvas":"^2.9.1","color-rgba":"^2.4.0","serialport":"^10.4.0"},"eslintConfig":{"env":{"es6":true,"node":true,"jest/globals":true},"extends":["@appliedminds"],"plugins":["jest"]},"_hasShrinkwrap":false,"devDependencies":{"jest":"^28.0.3","eslint":"^8.14.0","eslint-plugin-jest":"^26.1.5","@appliedminds/eslint-config":"^1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_1.3.2_1651734503031_0.16298492860610647","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"loupedeck","version":"2.0.0","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@2.0.0","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"a1d2f6ff9bf2887507507cd82de5f626dd184539","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-2.0.0.tgz","fileCount":9,"integrity":"sha512-1H4xbT1P4NRm3EMbXHscHHpNY0NJY1bcXSZ1RkBPn8/OVxyQ3ZJcuS+qy55FiKrCpZ6o7FpR3xNixGZkRztNdw==","signatures":[{"sig":"MEQCIGRU5pmcrZy25fmFxUdlo31A4+BEl3E0L+8k2G1/7VE0AiA77BfHoxDmvZERhin8iqNHqNarWZGDJ1W3Os1e3EWkUQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30098,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi01W1ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoDhg/+Omf73rzusROO6R3qGhQVXQQqSSJFTRAFzAJ7QmeEIUklszH5\r\nV7sJAO12tHaD2r6LLVdlvMn5VuMzJuPFwZx5kj8bAyef88JrLQHgmuHr+T83\r\nwLeePzv56cROKhqxPl9/h+SkqXKpiBDCk9gv7ppFSXv7WKYO3fETxdVkP6yV\r\nyp5g8yhY8rA7LID60XE9r7ZHdLOV3rDcoWbACQAKO7MvwogxpJJHQ902RCzL\r\nEgj89eaNmfP2ERIMlMxddDhDc82KH0eqcndqB/8+QDl2F8Xq284T8AbCSc41\r\nTRfddKCSUX6w4fNJnIYyw/rLVR3TzA7wNCEZZ71OVeut1qibal41DuMU7d7w\r\n9XvXD6R/nPlZWAP2X6bckfNqyoTi0kBQPR8PLvHLlH7BM2lU2XEGmjqqxD3y\r\ntr3zrxGsn/vtthYkbDwh1yh5DmNhS7fxt0nWBL5ju5iUQmPxdEhKVuaSJwTH\r\nSngkY+0Pag+epiPjs2sVpmv4/BKxfaHvlsPwhU78iP5vr2/fAxCig9yIHZr1\r\njqHyEBRMshHthFAm0B4LUemEyZ9vQppOHqksxwV5E1p/wDijnWnz5W4F5TyD\r\nBsnOoCHxUeWvuKnkm3h9vMHA18Uaoj5bHJZtC2iBXoA54cg1ZEyrtBSNPQwg\r\ngf3+q6cuakuFpQCZ1NfQF27YzkG9SZxYV4c=\r\n=pqBe\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"verbose":true,"collectCoverage":true,"coverageReporters":["text"]},"main":"index.js","gitHead":"fb5733bda3297b46da70eff36b84363af8545094","scripts":{"lint":"eslint .","test":"jest"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"8.6.0","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"18.0.0","dependencies":{"ws":"^8.8.1","color-rgba":"^2.4.0","serialport":"^10.4.0"},"eslintConfig":{"env":{"es6":true,"node":true,"jest/globals":true},"extends":["@appliedminds"],"plugins":["jest"]},"_hasShrinkwrap":false,"devDependencies":{"jest":"^28.1.3","eslint":"^8.20.0","eslint-plugin-jest":"^26.6.0","@appliedminds/eslint-config":"^1.3.0"},"peerDependencies":{"canvas":"^2.9.3"},"peerDependenciesMeta":{"canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_2.0.0_1658017205208_0.7113926357296534","host":"s3://npm-registry-packages"}},"3.0.0":{"name":"loupedeck","version":"3.0.0","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@3.0.0","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"193b67da8d0f8105933629ea7832a12afebfad1e","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-3.0.0.tgz","fileCount":9,"integrity":"sha512-LrHocxVy+RvduTPh93OdGB9B6Iws41RrCoTtlDOzBVt8K94B97C8E9QHJU5YPeo1ebedtsHDHmHR7ePuPtrJxQ==","signatures":[{"sig":"MEQCIARooT/5NvQH9jNj9Q2jG78ddVq6Q8eohysi2kX8fBUiAiAB/v11hOlULNEr0nkergEINL9tnsIWQYtRRsfeW7jjNw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30289,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjE/YNACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqagw//ZEch788XiumD3lyIezcnQP6qDjXBA8RLDbO0TgYmjW+BC5uz\r\nlFPVeASP79oAMzrO5YWWN2Gea8l+N4IScxuY0hcNxGqJm8bAYLQHWiUaE8jA\r\n70g04CVgH0IuMpIAcT3qejkVmcBWb5if24nPjI8fDfH/1wLucJLxVdyu0y37\r\nTGLfYaU5LlvfsaUalwVbUkIVhMvHBg/1xWu2XTSu/CVvUCEIqmpy+4Ca6tq8\r\nUkzHYIfj83dgqMtC7MFAAHjBzyPhzeplt8PP/cSQMY3ygoHww+bCbjEevIr/\r\ns98WxDxefw63PfOUOO6MxVOj6OF1tjYLa9nNQDovJ6TVzQuJIuPg9F4x3Y1V\r\nNUCHywPYjm8OsmKIj6zAiKUcX3hJ+baKPhkmZP4qcDaxMWiE4IGzHlIZGCfn\r\nlbwLBUfA9Rorqspl0puxRDc7rWpngZ4qfe+V6mmJl8N0TFdCqEcjzx13dHID\r\nG2V3UrnKX3CQoQthdilKxZdb34gNp4t2OaxI5jB3FgDQmjE8qHsKpuC3/jQH\r\nXrGbmj93INMum+WKVZdcJU9aNKVkTLCJDUzkMx80LPBKS5y5pYn/KrdKylp2\r\ncVyKVtNIWNnOAnM5XkEcnc5g4MkhyTntw911yoedBn8PVKXBWJOEJvP//vqF\r\nRujPOJFDoXOC/7i1mlI09mgs0ercN6ceJeA=\r\n=1V9s\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"verbose":true,"collectCoverage":true,"coverageReporters":["text"]},"main":"index.js","engines":{"node":">=14"},"gitHead":"7b2fccfae2c6ef2216056f1f74c6a4449a6ae9f8","scripts":{"lint":"eslint .","test":"jest"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"8.6.0","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"18.0.0","dependencies":{"ws":"^8.8.1","color-rgba":"^2.4.0","serialport":"^10.4.0"},"eslintConfig":{"env":{"es6":true,"node":true,"jest/globals":true},"extends":["@appliedminds"],"plugins":["jest"]},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.2","eslint":"^8.23.0","eslint-plugin-jest":"^27.0.1","@appliedminds/eslint-config":"^1.3.0"},"peerDependencies":{"canvas":"^2.9.3"},"peerDependenciesMeta":{"canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_3.0.0_1662252557109_0.8838351815317427","host":"s3://npm-registry-packages"}},"3.1.0":{"name":"loupedeck","version":"3.1.0","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@3.1.0","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"c11a06d11facc0760f2bf17131bc807b05d1724a","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-3.1.0.tgz","fileCount":9,"integrity":"sha512-pVnS2PjCU/iuuQYFoeqX0DbEb82CjPOfiITfwCAcEWk7fFLWuNB+IGHPS40ZuP229bQPvM3x45MYBqsg3louHw==","signatures":[{"sig":"MEUCIF58F2v53vVFe7/DoJj8NdOI93yuTR2IM9XiObsNJEMtAiEA/O5B3fQE2XNrXmFmilnZgeLcM//Z44EPIIN23lF/djE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30952,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjTh/DACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpi0xAAgOvdDnG7F9GGhCCGaqpeZ3dAarHS4veI0zJ7O9JyewnjqljX\r\ngrJSZ8zlEY+z3RMDseybvA12cKcBNTN+VMmpDO8iH3+uJVWH6MDoLbkZOOkW\r\nWPPy2YMTFeYhAwCfNMaBTrIZTv0IA79rBZKWgpVVWFBMxf96AJ7lTUMu16Ip\r\ns4gUnzVkb2s91Y/2NTHIvqKkdAeNJhSBfUKp4uBbM/ZTBj6+bhj/VYY1epIV\r\nYybY0Uwf0HJaeNA1AZwOsc9G2phC55sn7EjbNf9xvd9OxrUfhyH/N4kT8URp\r\nDH/kNaU/yRuQ0kwCKgdIloCfPsHUBC63O+G8isOBSbDBIXTAdT/YSxWZFe//\r\nGcauui+gO/LMKfjzMacGmtl8PFztOqtHjI6XATLeNX+FU44sJhtGYjgs4ONG\r\nJqrnKnErWU7QisB5hqowtCUSqVvYR9073Y0CbQDt16U/XkU/Vp5w/xZCkXm7\r\ntewNK2uq1wI9fGxsC+3MkGtc6wWcKd6OWMl7vSKR5qssttm2v/ZhXdH0dyE/\r\nEUBAH7Kuo9vBXFlwbX4tbjiDCNT94FAqTyy8IPY7Ul6c020DJ95irq0eQvKa\r\n362QLMKGdFiMPVd5MisYVkP17X58+YtSNnlQE9ixVYlGGF2ILGTclWbsQYy/\r\nkMmHaRj3JqRV1gWangNWbUPU3+N+xETEh6U=\r\n=852l\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"verbose":true,"collectCoverage":true,"coverageReporters":["text"]},"main":"index.js","engines":{"node":">=14"},"gitHead":"b57c651da6c9fcca07dec0aeb486bfaa7737d05f","scripts":{"lint":"eslint .","test":"jest"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"8.19.2","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"18.11.0","dependencies":{"ws":"^8.9.0","color-rgba":"^2.4.0","serialport":"^10.4.0"},"eslintConfig":{"env":{"es6":true,"node":true,"jest/globals":true},"extends":["@appliedminds"],"plugins":["jest"]},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.2.0","eslint":"^8.25.0","eslint-plugin-jest":"^27.1.2","@appliedminds/eslint-config":"^1.3.0"},"peerDependencies":{"canvas":"^2.9.3"},"peerDependenciesMeta":{"canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_3.1.0_1666064322750_0.6173090396487435","host":"s3://npm-registry-packages"}},"3.2.0":{"name":"loupedeck","version":"3.2.0","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@3.2.0","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"5b36941ec11db1f3b8dce83848b44e9444cbcc84","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-3.2.0.tgz","fileCount":9,"integrity":"sha512-Fgl+qtK6RaVRAhM07fTkDLgW/DPZiMyaIR6veK82E3y+3ZE7dUocyxZ3eqR3Zh5v0sZEVAlJBUKkmU/EGaxHww==","signatures":[{"sig":"MEYCIQDSK0VgwcQ4MobXLQRpeyy7n9hbeoi/yPS3Z8o54LhXZQIhANXqyGFCdijaQO/nYNgSm4qTWvJO2m7OILDDCVDCNhkV","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31512,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjVFXpACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmob6g/+JqcQ05AxHKnGIzhQqZBpXQkwwsJXCpJyWTcsq/ktZFqeHX84\r\nF5qQgcuZ9Xv356eFyG/hTVt4EnIXa/ng9x9aGoCU3aTn9IeM62QU93sTCpaY\r\nZGChyJ03xX1esVcKIIMDQdmqv6EZbKbSLPe/rfalx7Of0XG4tecrgH6Fc+Ob\r\n/g+F48xJ2ExfFoVAqE8IFfKrxyjoRjcccZ44iVs5ayzm9pJeuHTXgq4RiPAR\r\nS236jZPie3DdWwEozO70/GZ5p53vgTl7dALs5RxTvYQLMi4rL0OyT8sjPDTX\r\nD7DYa04mUWy/OxIVBvf8L5DZm1D4N5TvkGitZUV6tmQp69HsdtMiN4+JyLAE\r\njaREDe8HcLbVO+DGt43ZuEqnNye5rdL/D8tbSyUk8Lic+a9QIL6z+KhkCMti\r\nNAssrB9Por10t9Cmghsp+9aN4Mckcnv3ac4yci5DS33tN6lEo+cK7xoGvfEh\r\nDTrgxYXQCcUW0qyLVxG+BM//LM9S8gYgdJL82b5JQEKqnFBuJsni8cVS5xEG\r\n2nOMHgvYCgVf9QL/bQgvfvQq33oo8htjbDtref+rEgRqCN7YxqfOSDYko90y\r\nLu0cS0sj7UXeFvIVsLElj5KsPYgTgxV+1yxOGATW798sRvMBCvwVkopegx8+\r\nQVCsTyYwagePCLG5nltMeZGMlVTqYTw2O/w=\r\n=cfGX\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"verbose":true,"collectCoverage":true,"coverageReporters":["text"]},"main":"index.js","engines":{"node":">=14"},"gitHead":"fca775fecb352fb101af2487017f670c85c3a454","scripts":{"lint":"eslint .","test":"jest"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"8.19.2","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"18.11.0","dependencies":{"ws":"^8.9.0","color-rgba":"^2.4.0","serialport":"^10.4.0"},"eslintConfig":{"env":{"es6":true,"node":true,"jest/globals":true},"extends":["@appliedminds"],"plugins":["jest"]},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.2.0","eslint":"^8.25.0","eslint-plugin-jest":"^27.1.2","@appliedminds/eslint-config":"^1.3.0"},"peerDependencies":{"canvas":"^2.9.3"},"peerDependenciesMeta":{"canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_3.2.0_1666471401637_0.6421958619299402","host":"s3://npm-registry-packages"}},"4.0.0":{"name":"loupedeck","version":"4.0.0","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@4.0.0","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"fe87b94a7db98fbd8407b028410eff225bad89d8","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-4.0.0.tgz","fileCount":9,"integrity":"sha512-NgUqpDgYg0t0MOsIFnEc1F1BwQowG7Gh+Gf7c8rYjXd4w0nBQyfxGWyrflA7WK1p/aS9lb6J8VHH1zx1HbtiKQ==","signatures":[{"sig":"MEUCIQCs0f+T55da3Zp4XRaYzj9DJhIoC2GMk51+jkAYFTObLAIgca0C401B67y2ZQSDhKfkgingsJjtCJg/K/aP+/Or59o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34900,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjpKhcACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoquA//ZZHerpofve/ZaaGZ5Dw4sa34tfj7Yaxt8KCaTkI52B4Gw8bQ\r\nkSBkTVtf5NLyFOobzUGm2cXKoIEOYaaNz0fqab/1Z9OxVuoLVPe2xI2gwLVE\r\nro2kp2oX2WKlOt/8bCopyNlZYErSxhEOjOI1UXy7jltdLFWOoRoGpIW77VvE\r\n7pr+DKhhG22JYskFR9BwFWSXP9dMrvb1Icx6rTN4oOnhZe4pExjlpwqQCrHK\r\noMz6DbLVDFTqU+nVH+bcYfY7wirstzsAjL0qe52RJEIYA6ywAP5xXnR8p4RP\r\nLHUfhEf0VGDqq7UAvJoRXBKmmv9Gx3G0auwYYCLsOH2T+8y34JeLrx/m5tf2\r\ncamMc5IEc6Jm5bxB2POTop/5lLW8WKBsMJXRITR0bVTcR8AfKAUmSeZUa9cB\r\nxkHvX92bJhP+VbbExmbwXo9xpPwArGJf3fqVo5J3Z//c5QAaK971h1AxTvhj\r\ng3KoW9ks0ty4x/X7gZ/vEJxEtLvUD3QRG4aSqYbCxCRMjr5fXswKDtoDfWHK\r\n3AUb4uxJptbDDgkH9D0/Utp/E0j7g/P4AetxD2WLXW1c8Lbs0fRvbkn89u9a\r\n3r7eduGBfGx188+e8PFPE82kZQQZiqbKDnigsmvIfU3ocFaoNpuTBOIDD5rJ\r\n7DIdiyYLqyooXa/pXCZG4r6JLwK9mzbnUaw=\r\n=X+Go\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"verbose":true,"collectCoverage":true,"coverageReporters":["text"]},"main":"index.js","engines":{"node":">=14"},"gitHead":"93a6a18621e4ffac844672acccbaef4635645558","scripts":{"lint":"eslint .","test":"jest"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"8.19.3","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"19.2.0","dependencies":{"ws":"^8.11.0","color-rgba":"^2.4.0","serialport":"^10.5.0"},"eslintConfig":{"env":{"es6":true,"node":true,"jest/globals":true},"extends":["@appliedminds"],"plugins":["jest"]},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","eslint":"^8.30.0","eslint-plugin-jest":"^27.1.7","@appliedminds/eslint-config":"^1.3.0"},"peerDependencies":{"canvas":"^2.10.2"},"peerDependenciesMeta":{"canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_4.0.0_1671735387947_0.6086003520387433","host":"s3://npm-registry-packages"}},"4.1.0-beta.0":{"name":"loupedeck","version":"4.1.0-beta.0","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@4.1.0-beta.0","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"590359ab3ff51e14962a3b6b103c3618d1699b42","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-4.1.0-beta.0.tgz","fileCount":12,"integrity":"sha512-MEKxS2bygrVSoZ9P09DGtaa7XNRR43S3iNoVd1PRjmUcRHIPEGMgaNFZznrhk2cks0eP+QMRAMqJWKc2fPJDew==","signatures":[{"sig":"MEUCIQCsdB0K5vHKqixFaKeapPtfFVDEAn44T/L09IJ9tgT4CAIgBSj90RKqrGlVc5AaaQtAEIq60H5R89Zcho0+yacgd48=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41511,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkCWP9ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoeNg/+J2H9wODRcJBzXvOodyPug10Kwboh3maMRhqKaU7WntXcCr/R\r\nD0iZJxm93rvM3QYPvYHIROHY0ulbblVVuiUvJeFcFlFvQPKrivGR82f8GpMM\r\nEa4a/DBHuqhcSWq3x4k+uE7h+Qjo7QPSTEsoXlinM2ZenMYiN8Pr43EGuPz0\r\n2V31yyvLQY3bylqYy+Jv+i3EFp2pWX1kV4TGEFxyz9jlaNhhCwuzt0aRxb/E\r\nZK3pPElksQp+XRXe4i9SGWyjpzLtmzzpn1Nt1gQEGHrWx3nDERCihrinOiX3\r\nF2CBarorHF5VwpLEPjKP28iLhl2An+4lR2g48i0tMiwvp+uQDXErNd8QUhEY\r\nut7SN8oO+/vIKzVWGIolJeafsAO4LZsaAc/DR1hqkCpWnt2O+JNKyagCi/ka\r\nXmxmJ1ECWIbOgU+lMt0ZwusK/D10aXfNFpCGyv9VjH63zg/lMDRmGc+Yc1Jo\r\naVhyuX7z+tWurrhuyZbN28huET2qpajci+q79e5+ZnxBY0m9qf5onZucra+3\r\nFa0ajUy/O9M0fo3FVbQhFDdFipQNy3L9wP/Q5N+WV88P/b/YkICGoeZrbq6P\r\nYJFqPSDd3OXYjsrXnVN1yAlHjAc+wedydHKPI/6BRQ/NU00dHgCs40AYSgz0\r\nn43AQyqBbacvyec5v4AObdgDGMuZzbYxRj8=\r\n=+QFG\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"verbose":true,"collectCoverage":true,"coverageReporters":["text"]},"main":"index.js","browser":{"ws":false,"serialport":false},"engines":{"node":">=14"},"gitHead":"9a5bbefaeb10891511739f499729cceeda250961","scripts":{"lint":"eslint .","test":"jest"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"8.19.2","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"18.12.1","dependencies":{"ws":"^8.12.1","events":"^3.3.0","color-rgba":"^2.4.0","serialport":"^10.5.0"},"eslintConfig":{"env":{"es6":true,"node":true,"jest/globals":true},"extends":["@appliedminds"],"plugins":["jest"]},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^29.4.3","eslint":"^8.34.0","eslint-plugin-jest":"^27.2.1","@appliedminds/eslint-config":"^1.5.0"},"peerDependencies":{"canvas":"^2.10.2"},"peerDependenciesMeta":{"canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_4.1.0-beta.0_1678337021639_0.2974492660113275","host":"s3://npm-registry-packages"}},"4.1.0":{"name":"loupedeck","version":"4.1.0","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@4.1.0","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"bd3735fa7165c98ad287d4562401926d28ddd1d1","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-4.1.0.tgz","fileCount":9,"integrity":"sha512-E7jdUuwnGEfulFtudydJZVnMzZhumFN5G2P/QDRRkZZ0rcfA8knFvIkxNsdbVvVmOCSP0EAEbMImEXPXaHwZZQ==","signatures":[{"sig":"MEQCICRpodPVhabVqvJhlkiBaZnJExp8aTMDQWzN0kJXHbqvAiBBgIH2f9w+1XK7kRNaevG/JdZCYhSMm4oHxPx4VyDOpA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkKKotACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrKFg/+Kg+aZpClqLRweRqjbNq6kn+T4rceV8X5yReyF9iu8Wj9qvCl\r\ntXydt+bscjm2gQETeIuMzZGgEaOvlL3M5D3HbR7G/T6vQXst3Bq2H3xWd2nE\r\nUUHk11n2kzJPTNxI4ICvaPaYwKjjrz5d6MOX2z36u6yw2vJn/km+MPqP/XCZ\r\nIpbRIncsDGMlVaFOrtYEhAa6L+7MLeqhpVbaqXBv+djry/mLgQhLfrtqcqYa\r\nA2VHBEMwzhB7wilbUtBfNZbOFsMr7lvxMfQsUoDnHExQilZUUqxE3l9XRygT\r\nch/XoLtjs4bGfPHgDTGJ4PXpwoaabhfjcbmOC+JtWvVA1aibyEUqRE0j4jk3\r\nt9h5m8uSSWtb5uGHGqjhGOONDlB05sR6gSzu9uZYjDhuyRKxZvvP8A3eqC7B\r\nbEyvaYNoFeAnnBz/DvYRPIixYeV6gA0yzNJyYRAAYm3Bhg2fzgCB/A145nkF\r\nan3SAamJygCJ22SjgWPX0fSnyiQIXL6npJUKjnvYThi9+054AVSbeLCMiu9j\r\nCQ7UfYxXxg9cJcF9c3Vl85DRxnueVRsbprXCPn8Uv4oE0Nyu48KVfdQYnJ2X\r\nXcvRQrCZ/29GuMeNQS1EuPy/XONefqBwzARjk1SbH1qCe+KlqdRxJVpWu0g5\r\n+Uxi+xbLZgLUvCnKJApF9JjmzxYmI9VR5NY=\r\n=tNRg\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"verbose":true,"collectCoverage":true,"coverageReporters":["text"]},"main":"index.js","engines":{"node":">=14"},"gitHead":"9fec23bd4bd9ab58be75065e957f902ae8b99b3b","scripts":{"lint":"eslint .","test":"jest"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"8.19.2","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"18.12.1","dependencies":{"ws":"^8.12.1","color-rgba":"^2.4.0","serialport":"^10.5.0"},"eslintConfig":{"env":{"es6":true,"node":true,"jest/globals":true},"extends":["@appliedminds"],"plugins":["jest"]},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.4.3","eslint":"^8.34.0","eslint-plugin-jest":"^27.2.1","@appliedminds/eslint-config":"^1.5.0"},"peerDependencies":{"canvas":"^2.10.2"},"peerDependenciesMeta":{"canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_4.1.0_1680386605206_0.4382500418003601","host":"s3://npm-registry-packages"}},"4.2.0-beta.1":{"name":"loupedeck","version":"4.2.0-beta.1","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@4.2.0-beta.1","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"2e153a5c1df60cc92610cd8b0373725978af61bf","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-4.2.0-beta.1.tgz","fileCount":12,"integrity":"sha512-bkg+b+6P9E3tybsZO55sCC7+XMdxl4DoSI8KLyuY+nBadR1bOAyRpgSMt+4Rhfygx5igyHb4tb4/pXePXWjvBQ==","signatures":[{"sig":"MEUCIAivahOnHp8kIldAVUoJI2AdNhNUrldsC6OoZf3SeI8JAiEAhUOM2PaBToIiAsfQzWlWXHlbKbcWRmP3YZ05p4MWcqI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44535,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkKdeKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr6MhAAgYp//nNemKV5/OPJk4EiWMgT7VCbJbBNfAlCCClDHGj+sAvI\r\nEmH0LEV7NbiZli/L5LKtR72bFGL/k6HKdB1zoyjl25DOouzEhZrtdyuT5Yih\r\nITfsGwx8vexiPs+l/ApMum9oggjBhZ5GGgIzJMWF9v2mU0FDbieuKI/rcKUX\r\nPaIRDKCTNyMO73dMIIw+CoM7r97KxhtLDp83h/Lj0LmjZ0rW0YzLOjX/yPTS\r\n6IS6zd+kMFHb7+FzwOZcKBeCegIqDvXsnXI+8rTmCAoODh4ORWD5I9eMxPKF\r\nfbGgNg6YHWjYlCP9b65OmeeGm6zv/AfdZK1c8UFZXGYBK5ePLDDb2hpghdQJ\r\nehL1eWTTB9dyOYUN4MoOMqVVmWpVEaJ+JDWukGClGTP5jCNkryHdV3lCSy+M\r\n6SMfmrRp/97WJtQqJ5yXq3WO147PrGKGXDEA+5kATUrYgmE3LOTELUE9onff\r\naafWHCNtPvK9guV++C+dz5YTyx+nTrxpB3fDN+99G88J99EDAYOnsZB4a51t\r\nrMIwJNb7dgs0j/jeRaRdcPB+a8cqhLURjXvqcz9VwLoIvqgQLG7kCK0FZmMK\r\nV3AsucL2PkAJHZ/oH5SOixzGxRe8fOrEbqyY4eFwA4wcewp0ns9TaelmogaT\r\nrDSslWnMAMsLOTXSomIyT2czq6c87ZHc/V4=\r\n=yg65\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"verbose":true,"collectCoverage":true,"coverageReporters":["text"]},"main":"index.js","browser":{"ws":false,"serialport":false},"engines":{"node":">=14"},"gitHead":"b68b70e0f7fc31e843fa1134803b26b951064117","scripts":{"lint":"eslint .","test":"jest"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"8.19.2","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"18.12.1","dependencies":{"ws":"^8.12.1","events":"^3.3.0","color-rgba":"^2.4.0","serialport":"^10.5.0"},"eslintConfig":{"env":{"es6":true,"node":true,"jest/globals":true},"extends":["@appliedminds"],"plugins":["jest"]},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.4.3","eslint":"^8.34.0","eslint-plugin-jest":"^27.2.1","@appliedminds/eslint-config":"^1.5.0"},"peerDependencies":{"canvas":"^2.10.2"},"peerDependenciesMeta":{"canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_4.2.0-beta.1_1680463754179_0.9513178800239697","host":"s3://npm-registry-packages"}},"4.2.0":{"name":"loupedeck","version":"4.2.0","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@4.2.0","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"f524b373f4a1e7d8adc1b30c1ec5b60a7a63e787","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-4.2.0.tgz","fileCount":12,"integrity":"sha512-Cfhmryyc+d+jThonpScWFuGiZqc8vntWAjbt73GMk9MU9wrbUq7lE8PTiBKPkoFZRfc3VgpzWV/AYv8h8ircDw==","signatures":[{"sig":"MEYCIQCdpdsPzffAK8iQdQGn8Iz+TsmpdzYbI+zL1zDyOzY0SAIhANWhSqsaFfg81KZmfq42P6MCygASiEusfsr9Msjm8tJb","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44528,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkMgqMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr++w//U+SnAjiy1D/QffQdjXa2QW3eZMArrNHRVbtLwH3Zefpt70YH\r\nKq4m2xFxPUDaBa26tE7k3lRgBWwNI+eYNGOE3b8yPfOCn1PfprdBktxHwsMv\r\nEjwOxoYmzLYhx/aoSIK/xa0SHkdLzl9QasOtXMOrive9F4swHNsq6jvOpNEa\r\nlj9Apbd8GPcsJ1K2MUNl9xd9S7IXMxNFhqWz02lk2pjkshr5RWKaTxt4p0yo\r\nInr7hRVnk67puHn+4asXZ+nlxlmEdlUuhT+SUrrcSQSjtnUd/pAWTVSMUY8b\r\neVKWpXW4+G5PQXzfMpNfbBvq80r84598y7qMM41UuwrHqGYawOYuJkM/KrqG\r\nthaEXzVNmw6tqH+zKm6qiJ5dV28ilxBnhlyKgfLTQ9fT1dIBtvlPqhvp1TNW\r\nR3LbqwqXHxuWF+lf0R4ETTSaA67iqxVQMgFbneTPx5U2tpqQMyqkwjpVTw2z\r\no2LKrZf8WeRhAUMGsQPkZ1SAQh+6Axvtzumn19Nx00y+zirz0bPIqSSdB1Bx\r\nHPtYqMlBICNdvRTKPpI01btFkAcYTQqAgDxNoIgj/hZbU3gxCR+madifaJw6\r\n8h/OBkFdceqbsHtMs4blTcbFMH5U8gk2xby4b/FwP0xsz1Oml7gjJQlE7SJS\r\noEB6KXN5y8QwKRSMzn76izq1CaKc3H4Acjc=\r\n=YYsp\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"verbose":true,"collectCoverage":true,"coverageReporters":["text"]},"main":"index.js","browser":{"ws":false,"serialport":false},"engines":{"node":">=14"},"gitHead":"82e61f8ee97a5a600f87c01350413b1bc8d0caf4","scripts":{"lint":"eslint .","test":"jest"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"8.19.2","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"18.12.1","dependencies":{"ws":"^8.12.1","events":"^3.3.0","color-rgba":"^2.4.0","serialport":"^10.5.0"},"eslintConfig":{"env":{"es6":true,"node":true,"jest/globals":true},"extends":["@appliedminds"],"plugins":["jest"]},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.4.3","eslint":"^8.34.0","eslint-plugin-jest":"^27.2.1","@appliedminds/eslint-config":"^1.5.0"},"peerDependencies":{"canvas":"^2.10.2"},"peerDependenciesMeta":{"canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_4.2.0_1681001100196_0.5739578218402765","host":"s3://npm-registry-packages"}},"4.3.0":{"name":"loupedeck","version":"4.3.0","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@4.3.0","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"ca431fc9a9030268fab0b72c6af53d7d01a1c526","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-4.3.0.tgz","fileCount":12,"integrity":"sha512-2sV0Usp5+pRXAzlV+4bS04pngKggRuiQgeW1MTol0z+0WRn49RRCSnV17oOJfr+o9W0IzAk3FxS9GzyDndfZWQ==","signatures":[{"sig":"MEUCID4OSTzBUBFLIsfuRZr9/8tiC1w2o2UWj5ajw/N8dbruAiEAg4Hk4gU1HDRAgKUBemeHB2Q3YM9+dNCawypeoMY//KQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44215},"jest":{"verbose":true,"collectCoverage":true,"coverageReporters":["text"]},"main":"index.js","browser":{"ws":false,"serialport":false},"engines":{"node":">=14"},"gitHead":"9cefb1f390fda4702aca738e10d4672bbfbe58b5","scripts":{"lint":"eslint .","test":"jest"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"9.6.6","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"20.2.0","dependencies":{"ws":"^8.12.1","events":"^3.3.0","color-rgba":"^2.4.0","serialport":"^10.5.0"},"eslintConfig":{"env":{"es6":true,"node":true,"jest/globals":true},"extends":["@appliedminds"],"plugins":["jest"]},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.4.3","eslint":"^8.34.0","eslint-plugin-jest":"^27.2.1","@appliedminds/eslint-config":"^1.5.0"},"peerDependencies":{"canvas":"^2.10.2"},"peerDependenciesMeta":{"canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_4.3.0_1688250434081_0.886415226613366","host":"s3://npm-registry-packages"}},"5.0.0":{"name":"loupedeck","version":"5.0.0","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@5.0.0","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"84a2ec092e2a5b6453a0bf2cf913ff4ebaeb1a16","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-5.0.0.tgz","fileCount":12,"integrity":"sha512-6LFV/aGLMkCQJV4wvhx3s6ZTRkYawmceZPUZmwcCc9haqgz5c4jmgP/ts6ZLRJ8V/QqbCxlJoR3z5GH/tzaUrA==","signatures":[{"sig":"MEQCIDcQVQeov9O4fwD0R9+nOGrUzgM7kSblt+8JE1kLmfbNAiBhAWsocv7L4IqC9XiIOhuj9qGdw6ND1HqWLi7Cyj438w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":43983},"jest":{"verbose":true,"collectCoverage":true,"coverageReporters":["text"]},"main":"index.js","browser":{"ws":false,"serialport":false},"engines":{"node":">=18"},"gitHead":"4168e533ffb41f1a39cb30bc16c42b70f657f7c0","scripts":{"lint":"eslint .","test":"jest"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"10.2.0","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"21.1.0","dependencies":{"ws":"^8.14.2","events":"^3.3.0","color-rgba":"^2.4.0","serialport":"^10.5.0"},"eslintConfig":{"env":{"es6":true,"node":true,"jest/globals":true},"extends":["@appliedminds"],"globals":{"navigator":true},"plugins":["jest"]},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.54.0","eslint-plugin-jest":"^27.6.0","@appliedminds/eslint-config":"^1.6.0"},"peerDependencies":{"canvas":"^2.10.2"},"peerDependenciesMeta":{"canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_5.0.0_1701043952580_0.9531029595716598","host":"s3://npm-registry-packages"}},"5.1.0":{"name":"loupedeck","version":"5.1.0","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@5.1.0","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"708bbf8196d8b057b72f6a451b00dff20d84c88f","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-5.1.0.tgz","fileCount":12,"integrity":"sha512-7i9sLu+Kyrvnv5xfEuJ73uCRD911sL2T2n4p9+Kh4zK0J4amIT3Hy5+XjXDQ2HxhuTx+Q1Sf84NnF6c7vzINtA==","signatures":[{"sig":"MEUCIQCZHWkBGWGZTG1l5YYZaMAn4T2myIrTAS46YPZD4zUtIgIgBWET+3SITICKkE2Nx6mAASTM4JZyfuoL5miw7NOwSgs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46295},"jest":{"verbose":true,"collectCoverage":true,"coverageReporters":["text"]},"main":"index.js","browser":{"ws":false,"serialport":false},"engines":{"node":">=18"},"gitHead":"e41e5d920130d9ef651e47173c68450b9c832b96","scripts":{"lint":"eslint .","test":"jest"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"10.2.0","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"21.1.0","dependencies":{"ws":"^8.14.2","events":"^3.3.0","color-rgba":"^2.4.0","serialport":"^10.5.0"},"eslintConfig":{"env":{"es6":true,"node":true,"jest/globals":true},"extends":["@appliedminds"],"globals":{"navigator":true},"plugins":["jest"]},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.54.0","eslint-plugin-jest":"^27.6.0","@appliedminds/eslint-config":"^1.6.0"},"peerDependencies":{"canvas":"^2.10.2"},"peerDependenciesMeta":{"canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_5.1.0_1701237728703_0.81543720373889","host":"s3://npm-registry-packages"}},"6.0.0":{"name":"loupedeck","version":"6.0.0","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@6.0.0","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"871928bf0967b8a79c6b617210f380d9ae97c177","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-6.0.0.tgz","fileCount":12,"integrity":"sha512-LVvqzctrlUequ0/hpu0Z9f/pwq8oYFsaTbYKw2HCQW4GRTA0oH0I+SkaW1h4OYrkJ3/HQW72A7W2KW8yUQSW4A==","signatures":[{"sig":"MEQCIDEvtIm17B6jYR9AyKC6RfwI0z/vf1+O6B//c6Rrx+a7AiB/lOdzzZ5h24XqzNn1HvvbKPY5ZdYmJi9yr9r4wnGCPg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47066},"jest":{"verbose":true,"collectCoverage":true,"coverageReporters":["text"]},"main":"index.js","type":"module","browser":{"ws":false,"serialport":false},"engines":{"node":">=18"},"gitHead":"f61d5dc6481ec7ae5f06005fdd287cad0516f087","scripts":{"lint":"eslint","test":"node --experimental-vm-modules node_modules/jest/bin/jest.js"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"10.7.0","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"22.2.0","dependencies":{"ws":"^8.17.0","events":"^3.3.0","color-rgba":"^3.0.0","serialport":"^12.0.0","strict-event-emitter":"^0.5.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.4.0","eslint-plugin-jest":"^28.6.0","@appliedminds/eslint-config":"^2.0.1"},"peerDependencies":{"canvas":"^2.11.2"},"peerDependenciesMeta":{"canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_6.0.0_1717980480682_0.08494691085903994","host":"s3://npm-registry-packages"}},"6.0.1":{"name":"loupedeck","version":"6.0.1","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@6.0.1","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"baa15a140c36d3c3d3cde5abc20fe1d78aba6c95","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-6.0.1.tgz","fileCount":12,"integrity":"sha512-DvbuQizU7tshcf0mJbvCkOwnYhv6upV/FvewKhT8HOAvzO8uo1opa1kDfqfah7SazQ/4aRN+uzPq27lzP2bHnA==","signatures":[{"sig":"MEYCIQDzMgiCMJ4ngKoECJc711UxOHlawXZ9e7xUZtPiMzcDcgIhAPZM5U2YUAVkdgrMZ9nlw7i2gcb9An+mFcMxJhNPR/HK","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47179},"jest":{"verbose":true,"collectCoverage":true,"coverageReporters":["text"]},"main":"index.js","type":"module","browser":{"ws":false,"serialport":false},"engines":{"node":">=18"},"gitHead":"6b39c3fd8cd18b286f39dc76139495a719daadaf","scripts":{"lint":"eslint","test":"node --experimental-vm-modules node_modules/jest/bin/jest.js"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"10.8.2","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"22.6.0","dependencies":{"ws":"^8.17.0","events":"^3.3.0","color-rgba":"^3.0.0","serialport":"^12.0.0","strict-event-emitter":"^0.5.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.4.0","eslint-plugin-jest":"^28.6.0","@appliedminds/eslint-config":"^2.0.1"},"peerDependencies":{"canvas":"^2.11.2"},"peerDependenciesMeta":{"canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_6.0.1_1724617137723_0.19175267619619096","host":"s3://npm-registry-packages"}},"7.0.0":{"name":"loupedeck","version":"7.0.0","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@7.0.0","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"88bffea8cb8d7a32cc79befc76073608e93334b5","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-7.0.0.tgz","fileCount":12,"integrity":"sha512-rfrhkK/X1iwW3cTv39IX+GD35zr2uoIdce+TLDGN1G8G9jO6E92cXTAwGTi2qpIdJ9MIwOHiGL4U5em2Lqx5cQ==","signatures":[{"sig":"MEUCIQDOW9APF0GiibJoByoeQ21BGfBs8njRStuOB8sdKGqLFQIgfN/xkEVEdTn0eWg/lqsMpjRrutYl07M+y6mNjS7x99o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47140},"main":"index.js","type":"module","browser":{"ws":false,"serialport":false},"engines":{"node":">=20"},"gitHead":"a1d96f058070b9360320ed6856e8dc5d311f1428","scripts":{"lint":"eslint","test":"node --test  --experimental-test-coverage --experimental-test-module-mocks"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"10.9.2","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"23.6.0","dependencies":{"ws":"^8.18.0","events":"^3.3.0","color-rgba":"^3.0.0","serialport":"^13.0.0","strict-event-emitter":"^0.5.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.19.0","@appliedminds/eslint-config":"^2.0.2"},"peerDependencies":{"canvas":"^3.1.0"},"peerDependenciesMeta":{"canvas":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_7.0.0_1738470780199_0.10704444075318209","host":"s3://npm-registry-packages-npm-production"}},"7.0.2":{"name":"loupedeck","version":"7.0.2","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","_id":"loupedeck@7.0.2","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"homepage":"https://github.com/foxxyz/loupedeck#readme","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"dist":{"shasum":"de54228d2137d048274ba360002d4e600f2a61c0","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-7.0.2.tgz","fileCount":12,"integrity":"sha512-cBYcfZGcdWYRTAA3hEdloJCVOBcQIxcLeuexPmltAz2OUvVddDpmGPTTN4OhRvOuGBpjx56bnGz0k9fjcmzoJA==","signatures":[{"sig":"MEUCIE/WsddC2er/krNl1QPUvLMBKCpSxHpSfkJBQfDbxIIYAiEA1zJP6E/phepFbMus+IZ7u1Nh0LQWVsKvDQT0RvajYWk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46908},"main":"index.js","type":"module","browser":{"ws":false,"serialport":false},"engines":{"node":">=20"},"gitHead":"d652cfd0b935dcbfa0d12298d3c1346afa2735cf","scripts":{"lint":"eslint","test":"node --test  --experimental-test-coverage --experimental-test-module-mocks"},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"repository":{"url":"git+https://github.com/foxxyz/loupedeck.git","type":"git"},"_npmVersion":"11.5.1","description":"Loupedeck Device Interface","directories":{},"_nodeVersion":"24.7.0","dependencies":{"ws":"^8.18.0","events":"^3.3.0","color-rgba":"^3.0.0","serialport":"^13.0.0","strict-event-emitter":"^0.5.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.19.0","@appliedminds/eslint-config":"^2.0.2"},"_npmOperationalInternal":{"tmp":"tmp/loupedeck_7.0.2_1757634387911_0.2637627595222243","host":"s3://npm-registry-packages-npm-production"}},"7.0.3":{"name":"loupedeck","version":"7.0.3","description":"Loupedeck Device Interface","main":"index.js","type":"module","scripts":{"lint":"eslint","test":"node --test  --experimental-test-coverage --experimental-test-module-mocks"},"dependencies":{"canvas":"^3.2.0","color-rgba":"^3.0.0","serialport":"^13.0.0","strict-event-emitter":"^0.5.1","ws":"^8.18.3"},"keywords":["loupedeck","device","hardware","interface","controller","websocket"],"browser":{"serialport":false,"ws":false},"repository":{"type":"git","url":"git+https://github.com/foxxyz/loupedeck.git"},"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","engines":{"node":">=20"},"devDependencies":{"@appliedminds/eslint-config":"^2.0.3","eslint":"^9.37.0"},"_id":"loupedeck@7.0.3","gitHead":"027c58febd5ffdc0c3bb7800ee921530a70a803c","bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"homepage":"https://github.com/foxxyz/loupedeck#readme","_nodeVersion":"24.8.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-ddfbxuwluivekOuxsVm4aNzVLRrHpbI9GUH1AG3AEqWW8ISktBbT/u+L7wbhNnodidWGHZ1K/f4bP3xLYU10rA==","shasum":"5a93f3f81e2cf80c53a30c0e5abba0b70f2f3a95","tarball":"https://registry.npmjs.org/loupedeck/-/loupedeck-7.0.3.tgz","fileCount":12,"unpackedSize":46853,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCzbLrBJXfvC/vDjP9qQ8/rxAANfZrlDIRuK/bIVsOysgIhAIFN3MwE765zG3eOhqYp1U+IfQQLoVEjrt+a+HhmeTyp"}]},"_npmUser":{"name":"0x0f","email":"hello@ivo.la"},"directories":{},"maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/loupedeck_7.0.3_1759704398619_0.019770238143448582"},"_hasShrinkwrap":false}},"time":{"created":"2021-01-16T21:41:25.562Z","modified":"2025-10-05T22:46:39.004Z","0.5.0":"2021-01-16T21:41:25.752Z","0.5.1":"2021-01-17T00:41:35.614Z","0.6.0":"2021-01-20T07:27:29.408Z","0.7.0":"2021-01-22T06:39:12.195Z","1.0.0":"2021-01-24T06:22:14.941Z","1.1.0":"2021-01-25T03:03:47.062Z","1.1.1":"2021-02-05T15:41:16.227Z","1.2.0":"2022-01-25T05:43:29.413Z","1.3.0":"2022-02-02T06:45:55.397Z","1.3.1":"2022-02-06T22:04:29.086Z","1.3.2":"2022-05-05T07:08:23.185Z","2.0.0":"2022-07-17T00:20:05.388Z","3.0.0":"2022-09-04T00:49:17.310Z","3.1.0":"2022-10-18T03:38:43.058Z","3.2.0":"2022-10-22T20:43:21.846Z","4.0.0":"2022-12-22T18:56:28.091Z","4.1.0-beta.0":"2023-03-09T04:43:41.812Z","4.1.0":"2023-04-01T22:03:25.375Z","4.2.0-beta.1":"2023-04-02T19:29:14.365Z","4.2.0":"2023-04-09T00:45:00.377Z","4.3.0":"2023-07-01T22:27:14.338Z","5.0.0":"2023-11-27T00:12:32.734Z","5.1.0":"2023-11-29T06:02:08.917Z","6.0.0":"2024-06-10T00:48:00.847Z","6.0.1":"2024-08-25T20:18:57.941Z","7.0.0":"2025-02-02T04:33:00.407Z","7.0.2":"2025-09-11T23:46:28.086Z","7.0.3":"2025-10-05T22:46:38.806Z"},"bugs":{"url":"https://github.com/foxxyz/loupedeck/issues"},"author":{"name":"Ivo Janssen","email":"hello@ivo.la"},"license":"MIT","homepage":"https://github.com/foxxyz/loupedeck#readme","keywords":["loupedeck","device","hardware","interface","controller","websocket"],"repository":{"type":"git","url":"git+https://github.com/foxxyz/loupedeck.git"},"description":"Loupedeck Device Interface","maintainers":[{"name":"0x0f","email":"hello@ivo.la"}],"readme":"Loupedeck: Node.js Interface\n============================\n\n![tests](https://github.com/foxxyz/loupedeck/actions/workflows/nodejs.yml/badge.svg?branch=master)\n\nUnofficial Node.js API for [Loupedeck Live](https://loupedeck.com/products/loupedeck-live/), [Loupedeck Live S](https://loupedeck.com/products/loupedeck-live-s/), [Loupedeck CT](https://loupedeck.com/us/products/loupedeck-ct/) and [Razer Stream](https://www.razer.com/streaming-accessories/razer-stream-controller) controllers.\n\n![Loupedeck Live Interface](/docs/live-front-small.png?raw=true)\n![Razer Stream Controller Interface](/docs/rsc-front-small.png?raw=true)\n![Razer Stream Controller X Interface](/docs/rscx-front-small.png?raw=true)\n![Loupedeck Live S Interface](/docs/live-s-front-small.png?raw=true)\n![Loupedeck CT Interface](/docs/ct-front-small.png?raw=true)\n\nSupports:\n\n * Reading button presses\n * Reading knob turns\n * Reading touch events\n * Setting button colors\n * Setting screen brightness\n * Vibrating device\n * Writing screen graphics\n\nRequirements\n------------\n\n * Node 20+\n * Supported Devices:\n   * Loupedeck Live\n   * Loupedeck Live S\n   * Loupedeck CT\n   * Razer Stream Controller (_\"RSC\"_)\n   * Razer Stream Controller X (_\"RSCX\"_)\n\nThis library has been tested with firmware versions 0.1.3, 0.1.79, 0.2.5, 0.2.8 and 0.2.23. Other versions may work.\n\n**Note: Firmware version 0.2.26 does not seem to work on Linux. Recommendation is to downgrade to 0.2.23 (see #30)**\n\nInstallation\n------------\n\n```shell\nnpm install loupedeck\n```\n\nBy default, Loupdeck devices uses RGB565 (16-bit) buffers for drawing (with small exceptions, see below), so the [`canvas` module](https://www.npmjs.com/package/canvas) is used to enable a more pleasant API that allows for drawing using [Canvas API](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API) callbacks.\n\nUsage Examples\n--------------\n\n_Note: Ensure Loupedeck software is not running as it may conflict with this library_\n\n### Automatic Discovery\n\n```javascript\nimport { discover } from 'loupedeck'\n\n// Detects and opens first connected device\nconst device = await discover()\n\n// Observe connect events\ndevice.on('connect', () => {\n    console.info('Connection successful!')\n})\n\n// React to button presses\ndevice.on('down', ({ id }) => {\n    console.info(`Button pressed: ${id}`)\n})\n\n// React to knob turns\ndevice.on('rotate', ({ id, delta }) => {\n    console.info(`Knob ${id} rotated: ${delta}`)\n})\n```\n\n### Manual Instantiation\n\n```javascript\nimport { LoupedeckLiveS } from 'loupedeck'\n\nconst device = new LoupedeckLiveS({ path: '/dev/tty.usbmodem101', autoConnect: false })\nawait device.connect()\nconsole.info('Connection successful!')\n\ndevice.on('down', ({ id }) => {\n    console.info(`Button pressed: ${id}`)\n})\n```\n\nFor all examples, see the [`examples` folder](/examples/). Running some examples requires `canvas` to be installed (see above).\n\n📝 API Docs\n-----------\n\n### `discover() : Promise<LoupedeckDevice>`\n\nFind the first connected Loupedeck device and return it.\n\nReturns an instance of `LoupedeckLive`, `LoupedeckLiveS`, `LoupedeckCT`, `RazerStreamController`, `RazerStreamControllerX`, or throws an `Error` in case none or unsupported devices are found.\n\n### Class `LoupedeckLive`\n\nImplements and supports all methods from the [`LoupedeckDevice` interface](#interface-loupedeckdevice).\n\n#### `new LoupedeckLive({ path : String?, host : String?, autoConnect : Boolean? })`\n\nCreate a new Loupedeck Live device interface.\n\nMost use-cases should omit the `host`/`path` parameter, unless you're using multiple devices or know specifically which IP or device path you want to connect to. Either use `path` OR `host`, never both.\n\n - `path`: **(Firmware 0.2.X only)** Serial device path (example: `/dev/cu.ttymodem-1332` or `COM2`) (default: autodiscover)\n - `host`: **(Firmware 0.1.X only)** Host or IP address to connect to (example: `127.100.1.1`) (default: autodiscover)\n - `autoConnect`: Automatically connect during construction. (default: `true`) _Set to `false` if you'd prefer to call [`connect()`](#deviceconnect--promise). yourself._\n - `reconnectInterval`: How many milliseconds to wait before attempting a reconnect after a failed connection (default: `3000`) _Set to `false` to turn off automatic reconnects._\n\n### Class `LoupedeckCT`\n\nSame interface as [`LoupedeckLive`](#class-loupedecklive).\n\n### Class `LoupedeckLiveS`\n\nSame interface as [`LoupedeckLive`](#class-loupedecklive).\n\n### Class `RazerStreamController`\n\nSame interface as [`LoupedeckLive`](#class-loupedecklive).\n\n### Class `RazerStreamControllerX`\n\nSame interface as [`LoupedeckLive`](#class-loupedecklive).\n\nDoes not implement vibration or button colors.\n\n### Interface `LoupedeckDevice`\n\nShared device interface. Do not instantiate this manually, use one of the above classes instead or the [`discover()` function](#discover--promiseloupedeckdevice).\n\nAll incoming messages are emitted as action events and can be subscribed to via `device.on()`.\n\n### `LoupedeckDevice.list({ ignoreSerial : Boolean?, ignoreWebsocket : Boolean?} = {}) : Promise<Array>`\n\nStatic method to scan for and return a list of all detected devices. This includes ones which are already opened.\n\n - `ignoreSerial`: Ignore devices which operate over serial (Firmware 0.2.X) (default: false)\n - `ignoreWebsocket`: Ignore devices which operate over websocket (Firmware 0.1.X) (default: false)\n \nDevice info can be directly passed on to the constructor below.\n\n#### Event: `'connect'`\n\nEmitted when connection to the device succeeds. Includes an info object containing:\n\n - `address`: Connection address (E.G. serial path or websocket address)\n \n#### Event: `'disconnect'`\n\nEmitted when a device disconnects for any reason. First argument for the event is an `Error` object in case of an abnormal disconnect (otherwise `undefined`).\n\n#### Event: `'down'`\n\nEmitted when a button or knob is pressed down.\n\nArguments:\n - `id`: Button ID ([see `constants.js` for possible IDs](/constants.js#L3))\n\n#### Event: `'rotate'`\n\nEmitted when a knob is rotated.\n\nArguments:\n - `id`: Button ID ([see `constants.js` for possible IDs](/constants.js#L3))\n - `delta`: Rotation direction, `-1` for counter-clockwise, `1` for clockwise.\n\n#### Event: `'touchstart'`\n\nEmitted when any part of the screen is touched for the first time.\n\nArguments:\n - `changedTouches`: Array of new [touches](#touch-objects) created during this event\n - `touches`: Array of all currently held [touches](#touch-objects) on screen\n\n#### Event: `'touchmove'`\n\nEmitted when a touch moves across the screen.\n\nArguments:\n - `changedTouches`: Array of [touches](#touch-objects) changed during this event\n - `touches`: Array of all currently held [touches](#touch-objects) on screen\n\n#### Event: `'touchend'`\n\nEmitted when a touch is no longer detected.\n\nArguments:\n - `changedTouches`: Array of [touches](#touch-objects) removed during this event\n - `touches`: Array of all currently held [touches](#touch-objects) on screen (if any)\n\n#### Event: `'up'`\n\nEmitted when a button or knob is released.\n\nArguments:\n - `id`: Button ID ([see `constants.js` for possible IDs](/constants.js#L3))\n \n#### `device.close() : Promise`\n\nClose device connection.\n\nReturns Promise which resolves once the device has been closed.\n\n#### `device.connect() : Promise`\n\nManually connect. Resolves on success.\n\n#### `device.drawBuffer({ id : String, width : Number, height : Number, x? : Number, y? : Number, autoRefresh? : Boolean }, buffer : Buffer) : Promise`\n\nDraw graphics to a particular area using a RGB16-565 pixel buffer.\n\nLower-level method if [`drawKey()`](#devicedrawkeykey--number-buffercallback--bufferfunction--promise) or [`drawScreen()`](#devicedrawscreenscreenid--string-buffercallback--bufferfunction--promise) don't meet your needs.\n\n - `id`: Screen to write to [`left`, `center`, `right`, `knob`] _(`left` and `right` available on Loupedeck Live / RSC only)_ _(`knob` available on Loupedeck CT only)_\n - `width`: Width of area to draw\n - `height`: Height of area to draw\n - `x`: Starting X offset (default: `0`)\n - `y`: Starting Y offset (default: `0`)\n - `autoRefresh`: Whether to refresh the screen after drawing (default: `true`)\n - `buffer`: RGB16-565 Buffer. Should be `width * height * 2` bytes long, with each pixel represented by 2 bytes (5 bits red, 6 bits green, 5 bits blue) in little-endian (LE). _Note: Loupedeck CT knob screen is the only exception, it uses big-endian (BE)_\n \nReturns a Promise which resolves once the command has been acknowledged by the device.\n\n#### `device.drawCanvas({ id : String, width : Number, height : Number, x? : Number, y? : Number, autoRefresh? : Boolean }, callback : Function) : Promise`\n\nDraw graphics to a particular area using the [Canvas API](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D).\n\nLower-level method if [`drawKey()`](#devicedrawkeykey--number-buffercallback--bufferfunction--promise) or [`drawScreen()`](#devicedrawscreenscreenid--string-buffercallback--bufferfunction--promise) don't meet your needs.\n\n - `id`: Screen to write to [`left`, `center`, `right`, `knob`] _(`left` and `right` available on Loupedeck Live / RSC only)_ _(`knob` available on Loupedeck CT only)_\n - `width`: Width of area to draw\n - `height`: Height of area to draw\n - `x`: Starting X offset (default: `0`)\n - `y`: Starting Y offset (default: `0`)\n - `autoRefresh`: Whether to refresh the screen after drawing (default: `true`)\n - `callback`: Function to handle draw calls. Receives the following arguments:\n     1. `context`: [2d canvas graphics context](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D)\n     2. `width`: Width of drawing area\n     3. `height`: Height of drawing area\n     \nReturns a Promise which resolves once the command has been acknowledged by the device.\n\n#### `device.drawKey(key : Number, buffer/callback : Buffer/Function) : Promise`\n\nDraw graphics to a specific key.\n\nSecond argument can be either a RGB16-565 buffer or a callback. Width and height of callback will typically be `90`, as keys are mostly 90x90px (_RSCX_ being the exception - those keys are 96x96px).\n\n - `key`: Key index to write to ([0-11] on _Loupedeck Live/Loupedeck CT/RSC_, [0-14] on _Loupedeck Live S_ and _RSCX_)\n - `buffer`: RGB16-565 Buffer\n - `callback`: Function to handle draw calls. Receives the following arguments:\n     1. `context`: [2d canvas graphics context](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D)\n     2. `width`: Width of drawing area\n     3. `height`: Height of drawing area\n\nReturns a Promise which resolves once the command has been acknowledged by the device.\n\n#### `device.drawScreen(screenID : String, buffer/callback : Buffer/Function) : Promise`\n\nDraw graphics to a specific screen. Screen sizes are as follows:\n\nLoupedeck CT:\n * `left`: 60x270px\n * `center`: 360x270px\n * `right`: 60x270px\n * `knob`: 240x240px _(Note: uses big-endian byte order!)_\n\nLoupedeck Live / Razer Stream Controller:\n * `left`: 60x270px\n * `center`: 360x270px\n * `right`: 60x270px\n\nLoupedeck Live S:\n * `center`: 480x270px\n\nRazer Stream Controller X:\n * `center`: 480x288px\n \n Second argument can be either a RGB16-565 buffer or a callback. \n\n - `screenID`: Screen to write to [`left`, `center`, `right`, `knob`] _(`left` and `right` available on Loupedeck Live and Razer Stream Controller only)_ _(`knob` available on Loupedeck CT only)_\n - `buffer`: RGB16-565 Buffer (BE for `knob`, LE otherwise)\n - `callback`: Function to handle draw calls. Receives the following arguments:\n     1. `context`: [2d canvas graphics context](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D)\n     2. `width`: Width of drawing area\n     3. `height`: Height of drawing area\n     \nReturns a Promise which resolves once the command has been acknowledged by the device.\n\n#### `device.getInfo() : Promise`\n\nRequest device information. Returns a promise resolving to object containing:\n\n - `serial`: Device serial number\n - `version`: Firmware version\n \nIf the device is not connected, the promise will reject.\n\n#### `device.setBrightness(brightness : Number) : Promise`\n\nSet screen brightness.\n\n - `brightness`: Float between (0, 1) (`0` would turn the screen off, `1` for full brightness)\n \nReturns a Promise which resolves once the command has been acknowledged by the device.\n\n#### `device.setButtonColor({ id : String, color : String }) : Promise`\n\nSet a button LED to a particular color. _(Unavailable on RSCX)_\n\n - `id`: Button ID (possible choices: 0-7 on _Loupedeck Live/CT/RSC_, 0-4 on _Loupedeck Live S_, [see `BUTTONS` for _Loupedeck CT_ square buttons](/constants.js#L19))\n - `color`: Any [valid CSS color string](https://github.com/colorjs/color-parse#parsed-strings)\n\nReturns a Promise which resolves once the command has been acknowledged by the device.\n\n#### `device.vibrate(pattern? : byte) : Promise`\n\nMake device vibrate. _(Unavailable on RSCX)_\n\n - `pattern`: A valid vibration pattern ([see `HAPTIC` for valid patterns](/constants.js#L57)) (default: `HAPTIC.SHORT`)\n \nReturns a Promise which resolves once the command has been acknowledged by the device.\n\n### Touch Objects\n\nTouch objects are emitted in the [`touchstart`](#event-touchstart), [`touchmove`](#event-touchmove), and [`touchend`](#event-touchend) events and have the following properties:\n\n + `id`: Unique touch identifier\n + `x`: Screen X-coordinate ([0, 480])\n + `y`: Screen Y-coordinate ([0, 270])\n + `target`:\n     * `screen`: Identifier of screen this touch was detected on ([`left`, `center`, `right`, `knob`]) (`center` only on _Loupedeck Live S_, `knob` only on _Loupedeck CT_)\n     * `key`: Index of key touched ([0-11] on _Loupedeck Live/CT/RSC_, [0-14] on _Loupedeck Live S_/_RSCX_)\n\nContributing & Tests\n--------------------\n\n1. Install development dependencies: `npm install`\n2. Run tests: `npm test`\n\nThanks\n------\n\nBig thanks go out to [Max Maischein's earlier work in Perl](https://github.com/Corion/HID-LoupedeckCT) on this topic.\n\nLicense\n-------\n\nMIT\n","readmeFilename":"README.md"}