{"_id":"@particle/device-control-ble","_rev":"45-14ef7adb0456a2372355a27c9c4d0ff3","name":"@particle/device-control-ble","dist-tags":{"latest":"0.2.6"},"versions":{"0.2.0":{"name":"@particle/device-control-ble","version":"0.2.0","author":{"name":"Particle Industries, Inc."},"license":"UNLICENSED","_id":"@particle/device-control-ble@0.2.0","maintainers":[{"name":"guohui","email":"guohui@particle.io"},{"name":"sbrust","email":"scott.brust@particle.io"},{"name":"busticated","email":"itsbusticated@gmail.com"},{"name":"particlebot","email":"engineering+npm@particle.io"},{"name":"no1089","email":"chris.fourie@particle.io"},{"name":"carlos.hdez","email":"Carlos.Hernandez@particle.io"},{"name":"keeramis5","email":"keerthy@particle.io"},{"name":"monkbroc","email":"jvanier@gmail.com"},{"name":"suda","email":"admin@suda.pl"},{"name":"jgoggins","email":"joe@particle.io"},{"name":"elijthomas","email":"eli@particle.io"},{"name":"jhagerman","email":"jhagerman@particle.io"},{"name":"mstan","email":"npm@1379.tech"},{"name":"sergeuz","email":"sergeuz@gmail.com"},{"name":"cullenshane","email":"murphy.cullen7@gmail.com"},{"name":"debbie23","email":"debbie@particle.io"},{"name":"jtzemp-particle","email":"jt@particle.io"},{"name":"avtolstoy","email":"avtolstoy@gmail.com"},{"name":"mlauer","email":"matt.lauer@particle.io"},{"name":"wraithan","email":"xwraithanx@gmail.com"},{"name":"toolboxbot","email":"wojtek+toolbox@particle.io"},{"name":"azenk","email":"andrew.zenk@particle.io"},{"name":"shewy","email":"mike.sheward@particle.io"},{"name":"bwalach","email":"brett@particle.io"},{"name":"kisha","email":"kisha@culturepurveyor.io"},{"name":"parteberseth","email":"eric.berseth@particle.io"},{"name":"rickkas7","email":"rickkas7@rickk.com"},{"name":"mrlambchop_particle","email":"nick@particle.io"},{"name":"jaime171","email":"jaimesalvador.simental@gmail.com"},{"name":"hugo.montero","email":"hugo.montero@outlook.com"},{"name":"toddparticle","email":"todd.stellanova@particle.io"},{"name":"renemendoza","email":"rene.mendoza@particle.io"},{"name":"ianrgz","email":"ian.rodriguez@particle.io"},{"name":"mphsi","email":"mpaul.hernandez@gmail.com"},{"name":"deleonnmdn","email":"joel.dl08@gmail.com"}],"dist":{"shasum":"d5e2457ef5cbf2fedf3e407fb6fefbed839db61c","tarball":"https://registry.npmjs.org/@particle/device-control-ble/-/device-control-ble-0.2.0.tgz","fileCount":11,"integrity":"sha512-D2+TVbG+oFkatCBJJrOxsf+gS8+sJIlm8X/NPsB1+YG8PFXXQKOlVPrsh7pScd1A9ZAPZlGP1TrUElpanuzAiw==","signatures":[{"sig":"MEYCIQDhtMFC1ZM+bvP5eMN87oYzdyZ3kRuY3PLoGgX577s7lQIhAJNQRPiQ3XKtVxoCBIuoiMFnhVVYeOuFI19dglyIwmYK","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":65778,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiBCKlCRA9TVsSAnZWagAAwgoQAIBkBfl/oTBiZc6dpENi\nhnzo+nUPwOoXM6wl1wRGRLsyQgaikgncvAOsF18ajtubjcFwALfi3owSZY7V\nmb/RdxnHp5y7cov/er3yfO7K0Jul3v3w4H9X5AMUh3VlgA5fIUbwifENqTHK\nI4uiAv/Rjserjp9JGb/8m1qLmz/Yh7SUVPiyVvqen+dmflJYtGW8XCzulc1w\nbG/vxcNdKO2PBwZsE62SdzpvFkugUPW3kPx9qq2bhTFCYtVNRdRmB2wwYKy8\nru+XD3iJaC5b0idIJMlT64ur6dwbp0MknuCvUOHZpskqD6ZV5CF5jWtXkO9K\nZQE1gs8x9nU/84pTjkrnwaGKr3LIaapu4VOmTiZWWT/R7PuiyoaYsy3CpRd0\nbD/Ec97r+9adty2kuP3edQxF34eq4ChyUDOnMkCviPdQU8PUQd07h8Bwsmc/\ng8cSygrZn231X4KTq/OZXHOBVDW0oWvjdTopOhh01a7Al//sBm6cWIzZLARa\noWlNynTVfOXQijIsS9WHAop/Aj18G5n+eEZR4G6KsfdJgxZenRey72FE7uFi\n2tsQIV4mawHv+lDxnitQlk/7GEiiGAP5rzwAEzwuk0JHcMhKd0oXuNv4RXeS\n4bVboAlDItONLRSvIDHXaW3GQ7J2HdwcURknCiWsDzbcvT9byq3Ku+FqAu8m\nfUvK\r\n=P8l2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","types":"index.d.ts","gitHead":"c527539f987401083fb3fcdb237ca3560326827a","scripts":{"docs":"npm run docs:jsdoc2md > doc/api.md","lint":"eslint .","test":"npm run lint -- --quiet && npm run test:unit -- --forbid-only && npm run docs:jsdoc2md > /dev/null","version":"npm run docs && git add doc","lint:fix":"npm run lint -- --fix","test:unit":"mocha","docs:jsdoc2md":"jsdoc2md --files='lib/**/*.js' --no-cache --module-index-format=none --global-index-format=none"},"_npmUser":{"name":"particlebot","email":"engineering+npm@particle.io"},"_npmVersion":"lerna/4.0.0/node@v12.22.10+x64 (linux)","description":"A library for controlling Particle devices over BLE","directories":{},"_nodeVersion":"12.22.10","dependencies":{"hash.js":"^1.1.7","@particle/device-control-core":"^0.2.0","@particle/device-control-util":"^1.1.0","@particle/device-control-crypto":"^1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^9.2.0","sinon":"^13.0.1","eslint":"^8.8.0","chai-bytes":"^0.1.2","sinon-chai":"^3.7.0","chai-as-promised":"^7.1.1","jsdoc-to-markdown":"^7.1.1"},"_npmOperationalInternal":{"tmp":"tmp/device-control-ble_0.2.0_1644438180939_0.2340688726135669","host":"s3://npm-registry-packages"}},"0.2.1":{"name":"@particle/device-control-ble","version":"0.2.1","author":{"name":"Particle Industries, Inc."},"license":"UNLICENSED","_id":"@particle/device-control-ble@0.2.1","maintainers":[{"name":"guohui","email":"guohui@particle.io"},{"name":"sbrust","email":"scott.brust@particle.io"},{"name":"busticated","email":"itsbusticated@gmail.com"},{"name":"particlebot","email":"engineering+npm@particle.io"},{"name":"no1089","email":"chris.fourie@particle.io"},{"name":"carlos.hdez","email":"Carlos.Hernandez@particle.io"},{"name":"keeramis5","email":"keerthy@particle.io"},{"name":"monkbroc","email":"jvanier@gmail.com"},{"name":"suda","email":"admin@suda.pl"},{"name":"jgoggins","email":"joe@particle.io"},{"name":"elijthomas","email":"eli@particle.io"},{"name":"jhagerman","email":"jhagerman@particle.io"},{"name":"mstan","email":"npm@1379.tech"},{"name":"sergeuz","email":"sergeuz@gmail.com"},{"name":"cullenshane","email":"murphy.cullen7@gmail.com"},{"name":"debbie23","email":"debbie@particle.io"},{"name":"jtzemp-particle","email":"jt@particle.io"},{"name":"avtolstoy","email":"avtolstoy@gmail.com"},{"name":"mlauer","email":"matt.lauer@particle.io"},{"name":"wraithan","email":"xwraithanx@gmail.com"},{"name":"toolboxbot","email":"wojtek+toolbox@particle.io"},{"name":"azenk","email":"andrew.zenk@particle.io"},{"name":"shewy","email":"mike.sheward@particle.io"},{"name":"bwalach","email":"brett@particle.io"},{"name":"kisha","email":"kisha@culturepurveyor.io"},{"name":"parteberseth","email":"eric.berseth@particle.io"},{"name":"rickkas7","email":"rickkas7@rickk.com"},{"name":"mrlambchop_particle","email":"nick@particle.io"},{"name":"jaime171","email":"jaimesalvador.simental@gmail.com"},{"name":"hugo.montero","email":"hugo.montero@outlook.com"},{"name":"toddparticle","email":"todd.stellanova@particle.io"},{"name":"renemendoza","email":"rene.mendoza@particle.io"},{"name":"ianrgz","email":"ian.rodriguez@particle.io"},{"name":"mphsi","email":"mpaul.hernandez@gmail.com"},{"name":"deleonnmdn","email":"joel.dl08@gmail.com"}],"nyc":{"exclude":["**/__fixtures__/**","**/*.test.js"],"include":["src/**/*.js"]},"dist":{"shasum":"f9dcb091a92434501360cd6e0d7d80de205f2f26","tarball":"https://registry.npmjs.org/@particle/device-control-ble/-/device-control-ble-0.2.1.tgz","fileCount":10,"integrity":"sha512-8lJNq0IKZOg1zQCHwyzzbI17q23VxGaEgM8lSPp+ZcTEeFrQzFRcTkAiZLOXWleW1oheww4DlERk777RSpnTyQ==","signatures":[{"sig":"MEUCIDLUBEbXVGgozFjZv6/QBocCiWB4H5mMFHa3C28xnACaAiEAj6rrtjjP3ILxqCL92uCOEVjaHezcenek65V/LbpSEYM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41404,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiDpYlACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqXaQ/+NnYPvKmGsDvRDOd7j5Opjw6CRHh3JWt1XfUoeKERK4VE3OOM\r\nWw88BJFJGSSMdCt+wLy3LaawQypeZ8WPxXK0nYec7lRN5ZumE0EYuVTJezrN\r\nczU2jhi5w7ElV2f2Yr1fqtBBXdjfHrPllB49mdIR0En0T/elTGwfNwaTk//+\r\nFQ+rKBZBQN3yeg3+tXjb7ykrnpJYhOGBf+RBN7WlK/wHZ/Ji2M7dzGb68m+X\r\nK6dZTnwR8JYaVTUhWYmDfQWJylT4AI98nhVTWVSS8Rew6V0DHnniozNTYFnm\r\n0qCkBghAmM1USjft09aI1IQiVoi2N0QlisOHuYkibex7zHbdaS3J+0CkN/lC\r\nm6ltTYUUA7q5nqYp12dmTnqULqmbVrTE/eUbxfkfhSi2NuqLiIarB9tvJ/q5\r\nZQeaXP/0xeqCFk64n4DTrubbCAUiI9TdEkbbi/p8Qpi8ZqOjUUQB9kaaV47o\r\nwXZfm+QnUmJCL/2k2Ivnd33RGoxt06wbu+guMyzQectpbT4RzdH80otvvJXO\r\n6bTJxC0pAo5ZeFKeU3t3gasCMC0Ny8Zr1zvKElkBhhbeUJcCJTG+UwDHf1qe\r\nLtmsPKwz6Ny1TVy/7uaMvk0KMRkv1FXhgdLx82DBY+wGvhs95vpU8lmPJQMS\r\n2FN04ArGzyEYgq6W9hJL26nsPUe9M35+UaU=\r\n=goMb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","types":"./src/index.d.ts","engines":{"npm":"6.x","node":">=12"},"gitHead":"8a70598498096c4ee61971de7bec030863e52da0","scripts":{"test":"npm run test:unit","clean":"npm run clean:modules","test:ci":"npm run test:unit -- --forbid-only && npm run coverage","version":"npm run changelog:update","coverage":"nyc --reporter=text --temp-dir=./tmp/ --check-coverage --lines 85 --all npm run test:unit:silent","test:unit":"mocha './src/**/*.test.js' --color","docs:build":"node ../../bin/build-docs.js device-control-ble","clean:modules":"rm -rf ./node_modules","test:unit:watch":"npm run test:unit -- --watch","changelog:update":"node ../../bin/update-changelog.js device-control-ble","test:unit:silent":"npm run test:unit > tmp/test-unit-log.txt 2>&1","test:unit:inspect":"npm run test:unit -- --inspect-brk"},"_npmUser":{"name":"particlebot","email":"engineering+npm@particle.io"},"_npmVersion":"lerna/3.22.1/node@v12.22.10+x64 (linux)","description":"A library for controlling Particle devices over BLE","directories":{},"_nodeVersion":"12.22.10","dependencies":{"hash.js":"^1.1.7","@particle/device-control-core":"^0.2.1","@particle/device-control-util":"^1.1.1","@particle/device-control-crypto":"^1.1.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/device-control-ble_0.2.1_1645123109379_0.10569297312219783","host":"s3://npm-registry-packages"}},"0.2.2":{"name":"@particle/device-control-ble","version":"0.2.2","author":{"name":"Particle Industries, Inc."},"license":"UNLICENSED","_id":"@particle/device-control-ble@0.2.2","maintainers":[{"name":"cole-abbeduto-particle","email":"cole.abbeduto@particle.io"},{"name":"pedrosordo","email":"pedro.sordo@particle.io"},{"name":"rowan.hamilton","email":"rowan.hamilton@particle.io"},{"name":"edablan","email":"ed@particle.io"},{"name":"edgravillparticle","email":"eduardo.grajales@particle.io"},{"name":"guohui","email":"guohui@particle.io"},{"name":"sbrust","email":"scott.brust@particle.io"},{"name":"busticated","email":"itsbusticated@gmail.com"},{"name":"particlebot","email":"engineering+npm@particle.io"},{"name":"no1089","email":"chris.fourie@particle.io"},{"name":"carlos.hdez","email":"Carlos.Hernandez@particle.io"},{"name":"keeramis5","email":"keerthy@particle.io"},{"name":"monkbroc","email":"jvanier@gmail.com"},{"name":"suda","email":"admin@suda.pl"},{"name":"jgoggins","email":"joe@particle.io"},{"name":"elijthomas","email":"eli@particle.io"},{"name":"jhagerman","email":"jhagerman@particle.io"},{"name":"mstan","email":"npm@1379.tech"},{"name":"sergeuz","email":"sergeuz@gmail.com"},{"name":"cullenshane","email":"murphy.cullen7@gmail.com"},{"name":"debbie23","email":"debbie@particle.io"},{"name":"jtzemp-particle","email":"jt@particle.io"},{"name":"avtolstoy","email":"avtolstoy@gmail.com"},{"name":"mlauer","email":"matt.lauer@particle.io"},{"name":"wraithan","email":"xwraithanx@gmail.com"},{"name":"toolboxbot","email":"wojtek+toolbox@particle.io"},{"name":"azenk","email":"andrew.zenk@particle.io"},{"name":"shewy","email":"mike.sheward@particle.io"},{"name":"bwalach","email":"brett@particle.io"},{"name":"kisha","email":"kisha@culturepurveyor.io"},{"name":"parteberseth","email":"eric.berseth@particle.io"},{"name":"rickkas7","email":"rickkas7@rickk.com"},{"name":"mrlambchop_particle","email":"nick@particle.io"},{"name":"hugo.montero","email":"hugo.montero@outlook.com"},{"name":"toddparticle","email":"todd.stellanova@particle.io"},{"name":"mphsi","email":"mpaul.hernandez@gmail.com"},{"name":"deleonnmdn","email":"joel.dl08@gmail.com"}],"nyc":{"exclude":["**/__fixtures__/**","**/*.test.js"],"include":["src/**/*.js"]},"dist":{"shasum":"948bc0676d6af23f123d41b64b53291eb19c12fa","tarball":"https://registry.npmjs.org/@particle/device-control-ble/-/device-control-ble-0.2.2.tgz","fileCount":10,"integrity":"sha512-vvPNCDNtp9+YoIkyjPj6aCYKjU+ZnyP9zLD/baT/DHhBrkuiRJD6Iu9GTBLDs6dbsUNjtsTp6nnm+bb/S7BP6g==","signatures":[{"sig":"MEUCIFmGR7pEiMwFknh4+vtJ3MJPwExNOACN/2i+NoLlNYkVAiEAyBmuCabP4ZkvsXF2T3usel+K4aYEqVr/j43h2YVVIyc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41434,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJioMDQACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqQ8w//dAfbcdPHdHRM/1mASRyfjUOSVcuDoW1mV49F2g9IA4BabkhT\r\nbmtJsj2oP1bC+EsHCmIyIdGOCpCMHmQVI1hVPk7mFGFiuk3S6V3GsG/QCesL\r\npxpUN6Rz5I2AiaBPum0GBrf90syel2X9B+EAoZXf8y+OEN7edfTNucoyCMTq\r\nPTY71WrbMSc9ReKZICtfL3TpNFT/ELj6cnCLJftpgqU+d45QrfR+6zOq/l+9\r\nf3XMkqdBcasggpo66ByOp1RhG8mi7jpv4wj9R2WAy1qQXlS9bnJ73Fxpec/t\r\nPz9sC/X5MVjUfpM6HQjy29oHb2v3g97NcBTWJpEkXyO0iSxKPC+iCphmuX27\r\nzvzyk5OL67xzUFfybshJKh83qAIEUzPEbCaSrJ4+max4t8MEUDGZCCA3NzPT\r\nK1Rf/WQYREaYL/HD0q3+Ihu5RZnsr56Okjilv37+b2SZhFPDcJ2nFTbFJp+9\r\nL3go68AAzOVofiAq9ji/oiEJYEjmbg/a/y9pHKEUFq9XYT7qSx9L7EFzLQtw\r\nT/qG5UZIAGA6vMtEN+T90ebYwC4x9A6s861hq7Ske7aeXPDWG8/hKbwIGS1j\r\nmX9nCuvrbYSHlCPXarKbMpFsCkgHzNAEgGcC1deFG30f8FXFeE+8kNSguPEX\r\n0xY0kQ4YT+u9bv5nTLFlZbTusy5shIyvnl0=\r\n=Q/Z3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","types":"./src/index.d.ts","engines":{"npm":"6.x","node":">=12"},"gitHead":"7098125cf72de615813accf84f753b340c19b694","scripts":{"test":"npm run test:unit","clean":"npm run clean:modules","test:ci":"npm run test:unit -- --forbid-only && npm run coverage","version":"npm run changelog:update","coverage":"nyc --reporter=text --temp-dir=./tmp/ --check-coverage --lines 85 --all npm run test:unit:silent","test:unit":"mocha './src/**/*.test.js' --color","docs:build":"node ../../bin/build-docs.js device-control-ble","clean:modules":"rm -rf ./node_modules","test:unit:watch":"npm run test:unit -- --watch","changelog:update":"node ../../bin/update-changelog.js device-control-ble","test:unit:silent":"npm run test:unit > tmp/test-unit-log.txt 2>&1","test:unit:inspect":"npm run test:unit -- --inspect-brk"},"_npmUser":{"name":"particlebot","email":"engineering+npm@particle.io"},"_npmVersion":"lerna/3.22.1/node@v12.22.12+x64 (linux)","description":"A library for controlling Particle devices over BLE","directories":{},"_nodeVersion":"12.22.12","dependencies":{"hash.js":"^1.1.7","@particle/device-control-core":"^0.2.1","@particle/device-control-util":"^1.1.1","@particle/device-control-crypto":"^1.1.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/device-control-ble_0.2.2_1654702287973_0.992033106266212","host":"s3://npm-registry-packages"}},"0.2.3":{"name":"@particle/device-control-ble","version":"0.2.3","author":{"name":"Particle Industries, Inc."},"license":"UNLICENSED","_id":"@particle/device-control-ble@0.2.3","maintainers":[{"name":"amaury.particle","email":"amaury.aparicio@particle.io"},{"name":"cole-abbeduto-particle","email":"cole.abbeduto@particle.io"},{"name":"pedrosordo","email":"pedro.sordo@particle.io"},{"name":"rowan.hamilton","email":"rowan.hamilton@particle.io"},{"name":"guohui","email":"guohui@particle.io"},{"name":"sbrust","email":"scott.brust@particle.io"},{"name":"busticated","email":"itsbusticated@gmail.com"},{"name":"particlebot","email":"engineering+npm@particle.io"},{"name":"no1089","email":"chris.fourie@particle.io"},{"name":"carlos.hdez","email":"Carlos.Hernandez@particle.io"},{"name":"keeramis5","email":"keerthy@particle.io"},{"name":"monkbroc","email":"jvanier@gmail.com"},{"name":"suda","email":"admin@suda.pl"},{"name":"mstan","email":"npm@1379.tech"},{"name":"sergeuz","email":"sergeuz@gmail.com"},{"name":"debbie23","email":"debbie@particle.io"},{"name":"avtolstoy","email":"avtolstoy@gmail.com"},{"name":"mlauer","email":"matt.lauer@particle.io"},{"name":"wraithan","email":"xwraithanx@gmail.com"},{"name":"toolboxbot","email":"wojtek+toolbox@particle.io"},{"name":"azenk","email":"andrew.zenk@particle.io"},{"name":"shewy","email":"mike.sheward@particle.io"},{"name":"bwalach","email":"brett@particle.io"},{"name":"parteberseth","email":"eric.berseth@particle.io"},{"name":"rickkas7","email":"rickkas7@rickk.com"},{"name":"mrlambchop_particle","email":"nick@particle.io"},{"name":"hugo.montero","email":"hugo.montero@outlook.com"},{"name":"toddparticle","email":"todd.stellanova@particle.io"},{"name":"mphsi","email":"mpaul.hernandez@gmail.com"}],"nyc":{"exclude":["**/__fixtures__/**","**/*.test.js"],"include":["src/**/*.js"]},"dist":{"shasum":"6a6eed0a2d5453ab53a372fd759e418e4cf49352","tarball":"https://registry.npmjs.org/@particle/device-control-ble/-/device-control-ble-0.2.3.tgz","fileCount":10,"integrity":"sha512-u48K9k0t28aX0NsZeTXsrWQTRxYSScQaimKlEk1MysRSMYnALErcUY0b1d9CP6QmH1zCJzm2Luf0yraZrwHjFQ==","signatures":[{"sig":"MEQCIFbLvNp2fah5nKK7z1DNQag7gFpBsA2v2K6Ja9Z9hdgzAiBSoySH47Si7ER+7YglH1CVa6GuztUJvOXs6fhP/umE4A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41539,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi8p7hACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpNRQ//c2PHTgKKTbx/Bx3r02u0Xhm4aiSH3vKnBCg3qiBlYeIKG2oo\r\ntgGGv3dQpDcNwO8l34w1Owvy613vBMDrvCxxL2lzkOYL7/wtNsFpl7lFprXK\r\nCGNXv+oJ9+i99DuY9tKpqTsMrVGKsW8pdYxRA8WISnKRx2inkVwUF53XTUf9\r\ngn7OjpWnVPOomPS3gjHekQJsosvrj7E2B1A7KRJk0TPzzKivRHU+r7+kt7VQ\r\nP3YFiwsVdh1xhwt+W1tEIH5qscZ+qv8XxjZhX5G2v785z+EyHD6D6UCdp40s\r\nTj2GcHNMLc/9hH1QoRL9GLacxIpH+0vfqYnH2pg9z9/zB5nF+iTgyGfPvYBR\r\nSUbaJ2orJSBTal8askhbRanN+SzpuzpqyXGLAKjzyzLYbYYkFjBw20VelSWK\r\nfpPrh8rTqKmjFW7AuUt5xvKYaTY2kJxGqzfTfBHD1snaFwavToZLlZueUb8d\r\njUo7SwWpXQQ5xL4vCKUr56sbV7GgUXU5yml/Q18DPgH4FFMQoMLt9pLJPX/5\r\n5iWG6444c72344qrYys9zuuaL9J7n41vJqojbMUI9Cz4mVQaq/4/pAZRe13a\r\njEjS1oiCRRRku4PEVfHkGd7Fy3XxOvS3jt03/n6yfv673Q+ufnXYxtXjH2Ld\r\nqadorcWX/lJEVWYKEDv/VM2NE5nOx6ZwMBI=\r\n=FwIz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","types":"./src/index.d.ts","engines":{"npm":"8.x","node":">=12"},"gitHead":"fe74d30adf5da8e83bc9c39da3be894a55ee6e56","scripts":{"test":"npm run test:unit","clean":"npm run clean:modules","test:ci":"npm run test:unit -- --forbid-only && npm run coverage","version":"npm run changelog:update","coverage":"nyc --reporter=text --temp-dir=./tmp/ --check-coverage --lines 85 --all npm run test:unit:silent","test:unit":"mocha './src/**/*.test.js' --color","docs:build":"node ../../bin/build-docs.js device-control-ble","clean:modules":"rm -rf ./node_modules","test:unit:watch":"npm run test:unit -- --watch","changelog:update":"node ../../bin/update-changelog.js device-control-ble","test:unit:silent":"npm run test:unit > tmp/test-unit-log.txt 2>&1","test:unit:inspect":"npm run test:unit -- --inspect-brk"},"_npmUser":{"name":"particlebot","email":"engineering+npm@particle.io"},"_npmVersion":"lerna/5.3.0/node@v16.16.0+x64 (linux)","description":"A library for controlling Particle devices over BLE","directories":{},"_nodeVersion":"16.16.0","dependencies":{"hash.js":"^1.1.7","@particle/device-control-core":"^0.2.2","@particle/device-control-util":"^1.1.2","@particle/device-control-crypto":"^1.1.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/device-control-ble_0.2.3_1660067553678_0.09731438206782506","host":"s3://npm-registry-packages"}},"0.2.4":{"name":"@particle/device-control-ble","version":"0.2.4","author":{"name":"Particle Industries, Inc."},"license":"UNLICENSED","_id":"@particle/device-control-ble@0.2.4","maintainers":[{"name":"jmw","email":"jmw@fastmail.com"},{"name":"amaury.particle","email":"amaury.aparicio@particle.io"},{"name":"cole-abbeduto-particle","email":"cole.abbeduto@particle.io"},{"name":"pedrosordo","email":"pedro.sordo@particle.io"},{"name":"rowan.hamilton","email":"rowan.hamilton@particle.io"},{"name":"guohui","email":"guohui@particle.io"},{"name":"sbrust","email":"scott.brust@particle.io"},{"name":"busticated","email":"itsbusticated@gmail.com"},{"name":"particlebot","email":"engineering+npm@particle.io"},{"name":"no1089","email":"chris.fourie@particle.io"},{"name":"carlos.hdez","email":"Carlos.Hernandez@particle.io"},{"name":"keeramis5","email":"keerthy@particle.io"},{"name":"monkbroc","email":"jvanier@gmail.com"},{"name":"suda","email":"admin@suda.pl"},{"name":"mstan","email":"npm@1379.tech"},{"name":"sergeuz","email":"sergeuz@gmail.com"},{"name":"debbie23","email":"debbie@particle.io"},{"name":"avtolstoy","email":"avtolstoy@gmail.com"},{"name":"mlauer","email":"matt.lauer@particle.io"},{"name":"wraithan","email":"xwraithanx@gmail.com"},{"name":"azenk","email":"andrew.zenk@particle.io"},{"name":"shewy","email":"mike.sheward@particle.io"},{"name":"bwalach","email":"brett@particle.io"},{"name":"parteberseth","email":"eric.berseth@particle.io"},{"name":"rickkas7","email":"rickkas7@rickk.com"},{"name":"mrlambchop_particle","email":"nick@particle.io"},{"name":"hugo.montero","email":"hugo.montero@outlook.com"},{"name":"toddparticle","email":"todd.stellanova@particle.io"},{"name":"mphsi","email":"mpaul.hernandez@gmail.com"}],"nyc":{"exclude":["**/__fixtures__/**","**/*.test.js"],"include":["src/**/*.js"]},"dist":{"shasum":"c895f8dc162add29b888ebe5574747fec86fbd0e","tarball":"https://registry.npmjs.org/@particle/device-control-ble/-/device-control-ble-0.2.4.tgz","fileCount":10,"integrity":"sha512-Jabi151VIr00EyjmHEAPQufVDs3l9pkUaMPac02jh5B3JcZn7QHZvvDWYKu5vgN7jUA7ywzKVAcreoMXj1v94w==","signatures":[{"sig":"MEUCIHwd1AW677KsMDwblA+Iad2n8Wv1BrqlE9B59oOgJkkEAiEAuNZNixugTf08DDPmL//LK6Rerw7cBAnC6PrSAmPdg1g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42059,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjDRBqACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoo9RAAkNAYXlgKx68q2L9S7XfEgvx0fkZo91/SANkywiq+CGXeH4yF\r\niysAJaNFNCQ3ieTJfAh+OmhguOo8qBEDTNCq5Qka313uGeOABuhWLbwf0tBz\r\nf8j7sWVZr0j1hHkxHcUe6pVhahG6kDAtb5buYHy4BcsQSZLbZo72zCfJ/s4I\r\n3PPNdPKA27xA6RCbNqomUK67mz3b89UPV1oEG0SJ6kQiqM5Z+zVpWYsC+Msn\r\n+Omrak0XDgWwK16PU1oJsO35EyjIzDAxnUjXzUglnVyZtREjDYgK+YlhMrTK\r\nXphKZotKKo9lhJgqdJOdZrGCBDvz1qNIWQKJb2pjEAOkgdb4pgjR46qDpaCD\r\n27r26Dg0n7rrKsgW6OFXDYdTLz4GXuin8Am4Hc1rw6Wa0NAtV7WA/AVcgBCm\r\noWptxrin1Si3df70UyrLVM/Q1p/vuDZTHpaanL9A6ECneSfZyViHom+2MpBY\r\nJ9JHx0Cu0SP8Y8bNtzFn4faWWlQJ+BrLdELsv7Ran3BltIwzVJrP47lnArS0\r\nVaXrP1a38FHNBNC3/Zw7ekx+tbiZmYIgHc95aA3HZ5n6yMQxL2zY5bBYqH9U\r\n7MoSLG72tsdFHVKszK9Nkw6rCU8q90CtUW5pQSBxcnfzdOR08N1hjICu6v7g\r\nwrMbC2KK8wXe8zM7IOAkr5C1nPmRydLWCu4=\r\n=juaj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","types":"./src/index.d.ts","engines":{"npm":"8.x","node":">=12"},"gitHead":"9343286c5b231d7be884e44031d8273a5cde183a","scripts":{"test":"npm run test:unit","clean":"npm run clean:modules","test:ci":"npm run test:unit -- --forbid-only && npm run coverage","version":"npm run changelog:update","coverage":"nyc --reporter=text --temp-dir=./tmp/ --check-coverage --lines 85 --all npm run test:unit:silent","test:unit":"mocha './src/**/*.test.js' --color","docs:build":"node ../../bin/build-docs.js device-control-ble","clean:modules":"rm -rf ./node_modules","test:unit:watch":"npm run test:unit -- --watch","changelog:update":"node ../../bin/update-changelog.js device-control-ble","test:unit:silent":"npm run test:unit > tmp/test-unit-log.txt 2>&1","test:unit:inspect":"npm run test:unit -- --inspect-brk"},"_npmUser":{"name":"particlebot","email":"engineering+npm@particle.io"},"_npmVersion":"lerna/5.3.0/node@v16.17.0+x64 (linux)","description":"A library for controlling Particle devices over BLE","directories":{},"_nodeVersion":"16.17.0","dependencies":{"hash.js":"^1.1.7","@particle/device-control-core":"^0.2.3","@particle/device-control-util":"^1.1.2","@particle/device-control-crypto":"^1.1.3"},"_hasShrinkwrap":false,"peerDependencies":{"@particle/device-constants":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/device-control-ble_0.2.4_1661800553850_0.995727901699968","host":"s3://npm-registry-packages"}},"0.2.5":{"name":"@particle/device-control-ble","version":"0.2.5","author":{"name":"Particle Industries, Inc."},"license":"UNLICENSED","_id":"@particle/device-control-ble@0.2.5","maintainers":[{"name":"particlebot","email":"engineering+npm@particle.io"},{"name":"no1089","email":"chris.fourie@particle.io"},{"name":"carlos.hdez","email":"Carlos.Hernandez@particle.io"},{"name":"guohui","email":"guohui@particle.io"},{"name":"keeramis5","email":"keerthy@particle.io"},{"name":"monkbroc","email":"jvanier@gmail.com"},{"name":"mstan","email":"npm@1379.tech"},{"name":"sergeuz","email":"sergeuz@gmail.com"},{"name":"avtolstoy","email":"avtolstoy@gmail.com"},{"name":"mlauer","email":"matt.lauer@particle.io"},{"name":"wraithan","email":"xwraithanx@gmail.com"},{"name":"azenk","email":"andrew.zenk@particle.io"},{"name":"bwalach","email":"brett@particle.io"},{"name":"rickkas7","email":"rickkas7@rickk.com"},{"name":"mrlambchop_particle","email":"nick@particle.io"},{"name":"hugo.montero","email":"hugo.montero@outlook.com"},{"name":"mphsi","email":"mpaul.hernandez@gmail.com"},{"name":"pedrosordo","email":"pedro.sordo@particle.io"},{"name":"cole-abbeduto-particle","email":"cole.abbeduto@particle.io"},{"name":"sbrust","email":"scott.brust@particle.io"},{"name":"eugene_particle","email":"eugene@particle.io"},{"name":"mohitparticle","email":"mohit@particle.io"},{"name":"karlag","email":"karla.garcia@particle.io"}],"nyc":{"exclude":["**/__fixtures__/**","**/*.test.js"],"include":["src/**/*.js"]},"dist":{"shasum":"ae06025830e2147e73264801063b9cf5ac16c580","tarball":"https://registry.npmjs.org/@particle/device-control-ble/-/device-control-ble-0.2.5.tgz","fileCount":10,"integrity":"sha512-GdRo9dwEmj+8iz35MAaaBw3C4yWslv907t6u2ZpcJvkpEeLVDufdrpSYrvRo1169di+kebgbKtuClMLHYJJ40g==","signatures":[{"sig":"MEYCIQCQKoymduq/qZ5qtNvt+b1kliIpZwFk28bR5q1ssqNgTgIhAN9gttVhcKPN3VXgMN1R0wHbJOnFZzFWX72ZaVOTeCVd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42111},"main":"./src/index.js","types":"./src/index.d.ts","engines":{"npm":"8.x","node":">=12"},"gitHead":"5e775c1be2e1c343ea665b7a38b15ebd89041d1f","scripts":{"test":"npm run test:unit","clean":"npm run clean:modules","test:ci":"npm run test:unit -- --forbid-only && npm run coverage","version":"npm run changelog:update","coverage":"nyc --reporter=text --temp-dir=./tmp/ --check-coverage --lines 85 --all npm run test:unit:silent","test:unit":"mocha './src/**/*.test.js' --color","docs:build":"node ../../bin/build-docs.js device-control-ble","clean:modules":"rm -rf ./node_modules","test:unit:watch":"npm run test:unit -- --watch","changelog:update":"node ../../bin/update-changelog.js device-control-ble","test:unit:silent":"npm run test:unit > tmp/test-unit-log.txt 2>&1","test:unit:inspect":"npm run test:unit -- --inspect-brk"},"_npmUser":{"name":"particlebot","email":"engineering+npm@particle.io"},"_npmVersion":"lerna/5.3.0/node@v16.20.2+x64 (linux)","description":"A library for controlling Particle devices over BLE","directories":{},"_nodeVersion":"16.20.2","dependencies":{"hash.js":"^1.1.7","@particle/device-control-core":"^0.2.3","@particle/device-control-util":"^1.1.2","@particle/device-control-crypto":"^1.1.4"},"_hasShrinkwrap":false,"peerDependencies":{"@particle/device-constants":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/device-control-ble_0.2.5_1757444938766_0.544028685630167","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@particle/device-control-ble","description":"A library for controlling Particle devices over BLE","version":"0.2.6","author":{"name":"Particle Industries, Inc."},"license":"Apache-2.0","publishConfig":{"access":"public"},"main":"./src/index.js","types":"./src/index.d.ts","scripts":{"version":"npm run changelog:update","clean":"npm run clean:modules","clean:modules":"rm -rf ./node_modules","test":"npm run test:unit","test:ci":"npm run test:unit -- --forbid-only && npm run coverage","test:unit":"mocha './src/**/*.test.js' --color","test:unit:watch":"npm run test:unit -- --watch","test:unit:inspect":"npm run test:unit -- --inspect-brk","test:unit:silent":"npm run test:unit > tmp/test-unit-log.txt 2>&1","coverage":"nyc --reporter=text --temp-dir=./tmp/ --check-coverage --lines 85 --all npm run test:unit:silent","changelog:update":"node ../../bin/update-changelog.js device-control-ble","docs:build":"node ../../bin/build-docs.js device-control-ble"},"nyc":{"include":["src/**/*.js"],"exclude":["**/__fixtures__/**","**/*.test.js"]},"dependencies":{"@particle/device-control-core":"^0.2.4","@particle/device-control-crypto":"^1.1.5","@particle/device-control-util":"^1.1.3","hash.js":"^1.1.7"},"peerDependencies":{"@particle/device-constants":"^3.0.0"},"engines":{"node":">=12","npm":"8.x"},"gitHead":"6f5d761d954247d0debfb320906fa674eab7f261","_id":"@particle/device-control-ble@0.2.6","_nodeVersion":"16.20.2","_npmVersion":"lerna/5.3.0/node@v16.20.2+x64 (linux)","dist":{"integrity":"sha512-IMVDOnM+huWsgeAKCkuMkQbJO204GZEtTXLmmkuq1/oQNcpo/Xqb95nSwYexfijHRz4ZwndBe+5pck95S0FE9w==","shasum":"d736353134acdd555d87f3b58617792d9ae4a340","tarball":"https://registry.npmjs.org/@particle/device-control-ble/-/device-control-ble-0.2.6.tgz","fileCount":11,"unpackedSize":53518,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCID+Xh7H7snnakse6PaAwOCDdOjlF39YE0P7o8DtobFK5AiBl1Qwh/uOu/MbI/bOMPZ7vlGhqINnKsROBNfFDNnVBPQ=="}]},"_npmUser":{"name":"particlebot","email":"engineering+npm@particle.io"},"directories":{},"maintainers":[{"name":"particlebot","email":"engineering+npm@particle.io"},{"name":"no1089","email":"chris.fourie@particle.io"},{"name":"carlos.hdez","email":"Carlos.Hernandez@particle.io"},{"name":"guohui","email":"guohui@particle.io"},{"name":"keeramis5","email":"keerthy@particle.io"},{"name":"monkbroc","email":"jvanier@gmail.com"},{"name":"mstan","email":"npm@1379.tech"},{"name":"sergeuz","email":"sergeuz@gmail.com"},{"name":"avtolstoy","email":"avtolstoy@gmail.com"},{"name":"mlauer","email":"matt.lauer@particle.io"},{"name":"wraithan","email":"xwraithanx@gmail.com"},{"name":"azenk","email":"andrew.zenk@particle.io"},{"name":"bwalach","email":"brett@particle.io"},{"name":"rickkas7","email":"rickkas7@rickk.com"},{"name":"mrlambchop_particle","email":"nick@particle.io"},{"name":"hugo.montero","email":"hugo.montero@outlook.com"},{"name":"mphsi","email":"mpaul.hernandez@gmail.com"},{"name":"pedrosordo","email":"pedro.sordo@particle.io"},{"name":"cole-abbeduto-particle","email":"cole.abbeduto@particle.io"},{"name":"sbrust","email":"scott.brust@particle.io"},{"name":"eugene_particle","email":"eugene@particle.io"},{"name":"mohitparticle","email":"mohit@particle.io"},{"name":"karlag","email":"karla.garcia@particle.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/device-control-ble_0.2.6_1757536604038_0.571396324067972"},"_hasShrinkwrap":false}},"time":{"created":"2022-02-09T20:23:00.939Z","modified":"2025-09-10T20:36:44.744Z","0.2.0":"2022-02-09T20:23:01.167Z","0.2.1":"2022-02-17T18:38:29.565Z","0.2.2":"2022-06-08T15:31:28.247Z","0.2.3":"2022-08-09T17:52:33.860Z","0.2.4":"2022-08-29T19:15:54.059Z","0.2.5":"2025-09-09T19:08:59.006Z","0.2.6":"2025-09-10T20:36:44.220Z"},"author":{"name":"Particle Industries, Inc."},"license":"Apache-2.0","description":"A library for controlling Particle devices over BLE","maintainers":[{"name":"particlebot","email":"engineering+npm@particle.io"},{"name":"no1089","email":"chris.fourie@particle.io"},{"name":"carlos.hdez","email":"Carlos.Hernandez@particle.io"},{"name":"guohui","email":"guohui@particle.io"},{"name":"keeramis5","email":"keerthy@particle.io"},{"name":"monkbroc","email":"jvanier@gmail.com"},{"name":"mstan","email":"npm@1379.tech"},{"name":"sergeuz","email":"sergeuz@gmail.com"},{"name":"avtolstoy","email":"avtolstoy@gmail.com"},{"name":"mlauer","email":"matt.lauer@particle.io"},{"name":"wraithan","email":"xwraithanx@gmail.com"},{"name":"azenk","email":"andrew.zenk@particle.io"},{"name":"bwalach","email":"brett@particle.io"},{"name":"rickkas7","email":"rickkas7@rickk.com"},{"name":"mrlambchop_particle","email":"nick@particle.io"},{"name":"hugo.montero","email":"hugo.montero@outlook.com"},{"name":"mphsi","email":"mpaul.hernandez@gmail.com"},{"name":"pedrosordo","email":"pedro.sordo@particle.io"},{"name":"cole-abbeduto-particle","email":"cole.abbeduto@particle.io"},{"name":"sbrust","email":"scott.brust@particle.io"},{"name":"eugene_particle","email":"eugene@particle.io"},{"name":"mohitparticle","email":"mohit@particle.io"},{"name":"karlag","email":"karla.garcia@particle.io"}],"readme":"# @particle/device-control-ble\n\nA library for controlling Particle devices over BLE.\n\n\n## Installation\n\n```shell\nnpm install @particle/device-control-ble @particle/device-constants --save\n```\n\n_NOTE: `@particle/device-control-ble` declares `@particle/device-constants` as a [`peerDependency`](https://docs.npmjs.com/cli/v8/configuring-npm/package-json#peerdependencies) - this ensures your app only ever has one copy of that dependency_\n\n<!-- private-module-note-start -->\n\n<!-- private-module-note-end -->\n\n\n## API\n<!-- api-docs-start -->\n<a name=\"BleControlRequestChannel\"></a>\n\n### BleControlRequestChannel\nA class implementing the Device OS control request protocol for BLE.\n\n**Kind**: global class  \n\n* [BleControlRequestChannel](#BleControlRequestChannel)\n    * [new BleControlRequestChannel(options)](#new_BleControlRequestChannel_new)\n    * [.state](#BleControlRequestChannel+state) : <code>String</code>\n    * [.open()](#BleControlRequestChannel+open) ⇒ <code>Promise</code>\n    * [.close()](#BleControlRequestChannel+close)\n\n\n* * *\n\n<a name=\"new_BleControlRequestChannel_new\"></a>\n\n#### new BleControlRequestChannel(options)\nConstructor.\n\n\n| Param | Type | Default | Description |\n| --- | --- | --- | --- |\n| options | <code>Object</code> |  | Options. |\n| options.stream | <code>Object</code> |  | Transport stream.        The stream object is expected to behave similarly to a Node's `stream.Duplex` in flowing        mode.        The only method of the `stream.Duplex` interface that has to be implemented by the stream        is `write()`. The method's callback argument and return value are not used. All writes        must be buffered by the stream.        The channel will add listeners for the following stream events: `data`, `end`, `finish`,        `close`, `error`. Half-closed streams are not supported, meaning that an `end` or a        `finish` event emitted by the stream will result in the channel being closed immediately. |\n| options.secret | <code>String</code> \\| <code>Uint8Array</code> |  | Device secret. |\n| [options.concurrentRequests] | <code>Number</code> | <code>1</code> | Maximum number of requests that can be sent to        the device concurrently. Requests attempted to be sent above this limit will be queued. |\n| [options.requestTimeout] | <code>Number</code> | <code>60000</code> | Default request timeout in milliseconds. |\n| [options.handshakeTimeout] | <code>Number</code> | <code>10000</code> | Handshake timeout in milliseconds. |\n| [options.env] | [<code>Env</code>](#Env) | <code>defaultEnv()</code> | Environment-specific functions. |\n\n\n* * *\n\n<a name=\"BleControlRequestChannel+state\"></a>\n\n#### bleControlRequestChannel.state : <code>String</code>\nChannel state.\n\nPossible values are `new`, `opening`, `open` and `closed`.\n\n**Kind**: instance property of [<code>BleControlRequestChannel</code>](#BleControlRequestChannel)  \n\n* * *\n\n<a name=\"BleControlRequestChannel+open\"></a>\n\n#### bleControlRequestChannel.open() ⇒ <code>Promise</code>\nOpen the channel and initiate a handshake with the device.\n\nAn `open` event will be emitted when the channel is open. Requests can still be enqueued for\nsending via `sendRequest()` while the channel is being opened.\n\nThe transport stream and the underlying BLE characteristics must be in a readable and writable\nstate by the time this method is called.\n\nA closed channel cannot be reopened.\n\n**Kind**: instance method of [<code>BleControlRequestChannel</code>](#BleControlRequestChannel)  \n\n* * *\n\n<a name=\"BleControlRequestChannel+close\"></a>\n\n#### bleControlRequestChannel.close()\nClose the channel.\n\nA `closed` event will be emitted when the channel is closed. All pending requests will be\nrejected with an error.\n\n**Kind**: instance method of [<code>BleControlRequestChannel</code>](#BleControlRequestChannel)  \n\n* * *\n\n<a name=\"BleCharacteristic\"></a>\n\n### BleCharacteristic\nA base class for a BLE characteristic.\n\n**Kind**: global class  \n**Emits**: [<code>data</code>](#BleCharacteristic+event_data), [<code>error</code>](#BleCharacteristic+event_error)  \n\n* [BleCharacteristic](#BleCharacteristic)\n    * [.uuid](#BleCharacteristic+uuid) : <code>String</code>\n    * [.read()](#BleCharacteristic+read) ⇒ <code>Promise.&lt;Uint8Array&gt;</code>\n    * [.write(data, [options])](#BleCharacteristic+write) ⇒ <code>Promise</code>\n    * [.enableNotifications()](#BleCharacteristic+enableNotifications) ⇒ <code>Promise</code>\n    * [.disableNotifications()](#BleCharacteristic+disableNotifications) ⇒ <code>Promise</code>\n    * [\"data\"](#BleCharacteristic+event_data)\n    * [\"error\"](#BleCharacteristic+event_error)\n\n\n* * *\n\n<a name=\"BleCharacteristic+uuid\"></a>\n\n#### bleCharacteristic.uuid : <code>String</code>\nCharacteristic UUID.\n\n**Kind**: instance property of [<code>BleCharacteristic</code>](#BleCharacteristic)  \n\n* * *\n\n<a name=\"BleCharacteristic+read\"></a>\n\n#### bleCharacteristic.read() ⇒ <code>Promise.&lt;Uint8Array&gt;</code>\nRead the current value of the characteristic.\n\n**Kind**: instance method of [<code>BleCharacteristic</code>](#BleCharacteristic)  \n\n* * *\n\n<a name=\"BleCharacteristic+write\"></a>\n\n#### bleCharacteristic.write(data, [options]) ⇒ <code>Promise</code>\nWrite to the characteristic.\n\n**Kind**: instance method of [<code>BleCharacteristic</code>](#BleCharacteristic)  \n\n| Param | Type | Default | Description |\n| --- | --- | --- | --- |\n| data | <code>Uint8Array</code> |  | Data to write. |\n| [options] | <code>Object</code> |  | Options. |\n| [options.withoutResponse] | <code>Boolean</code> | <code>false</code> | Whether to write with or without a response. |\n\n\n* * *\n\n<a name=\"BleCharacteristic+enableNotifications\"></a>\n\n#### bleCharacteristic.enableNotifications() ⇒ <code>Promise</code>\nEnable notifications for this characteristic.\n\n**Kind**: instance method of [<code>BleCharacteristic</code>](#BleCharacteristic)  \n\n* * *\n\n<a name=\"BleCharacteristic+disableNotifications\"></a>\n\n#### bleCharacteristic.disableNotifications() ⇒ <code>Promise</code>\nDisable notifications for this characteristic.\n\n**Kind**: instance method of [<code>BleCharacteristic</code>](#BleCharacteristic)  \n\n* * *\n\n<a name=\"BleCharacteristic+event_data\"></a>\n\n#### \"data\"\nAn event emitted when the peripheral indicates that the characteristic has changed.\n\nIn order to start receiving these events, notifications for the characteristic need to be\nenabled via [enableNotifications](#BleCharacteristic+enableNotifications).\n\n**Kind**: event emitted by [<code>BleCharacteristic</code>](#BleCharacteristic)  \n\n* * *\n\n<a name=\"BleCharacteristic+event_error\"></a>\n\n#### \"error\"\nAn event emitted when an error occurs.\n\n**Kind**: event emitted by [<code>BleCharacteristic</code>](#BleCharacteristic)  \n\n* * *\n\n<a name=\"BleService\"></a>\n\n### BleService\nA base class for a BLE service.\n\n**Kind**: global class  \n\n* [BleService](#BleService)\n    * [.uuid](#BleService+uuid) : <code>String</code>\n    * [.getCharacteristics()](#BleService+getCharacteristics) ⇒ <code>Promise.&lt;Array.&lt;BleCharacteristic&gt;&gt;</code>\n\n\n* * *\n\n<a name=\"BleService+uuid\"></a>\n\n#### bleService.uuid : <code>String</code>\nService UUID.\n\n**Kind**: instance property of [<code>BleService</code>](#BleService)  \n\n* * *\n\n<a name=\"BleService+getCharacteristics\"></a>\n\n#### bleService.getCharacteristics() ⇒ <code>Promise.&lt;Array.&lt;BleCharacteristic&gt;&gt;</code>\nGet the characteristics of this service.\n\n**Kind**: instance method of [<code>BleService</code>](#BleService)  \n\n* * *\n\n<a name=\"BlePeripheral\"></a>\n\n### BlePeripheral\nA base class for a BLE peripheral device.\n\n**Kind**: global class  \n**Emits**: [<code>connect</code>](#BlePeripheral+event_connect), [<code>disconnect</code>](#BlePeripheral+event_disconnect), [<code>error</code>](#BlePeripheral+event_error)  \n\n* [BlePeripheral](#BlePeripheral)\n    * [.name](#BlePeripheral+name) : <code>String</code>\n    * [.manufacturerData](#BlePeripheral+manufacturerData) : <code>Uint8Array</code>\n    * [.mtu](#BlePeripheral+mtu) : <code>Number</code>\n    * [.connect()](#BlePeripheral+connect) ⇒ <code>Promise</code>\n    * [.disconnect()](#BlePeripheral+disconnect) ⇒ <code>Promise</code>\n    * [.getServices()](#BlePeripheral+getServices) ⇒ <code>Promise.&lt;Array.&lt;BleService&gt;&gt;</code>\n    * [\"connect\"](#BlePeripheral+event_connect)\n    * [\"disconnect\"](#BlePeripheral+event_disconnect)\n    * [\"error\"](#BlePeripheral+event_error)\n\n\n* * *\n\n<a name=\"BlePeripheral+name\"></a>\n\n#### blePeripheral.name : <code>String</code>\nPeripheral name.\n\n**Kind**: instance property of [<code>BlePeripheral</code>](#BlePeripheral)  \n\n* * *\n\n<a name=\"BlePeripheral+manufacturerData\"></a>\n\n#### blePeripheral.manufacturerData : <code>Uint8Array</code>\nAdvertised manufacturer data.\n\nIf present, the manufacturer data is expected to start with a 2-byte company ID.\n\n**Kind**: instance property of [<code>BlePeripheral</code>](#BlePeripheral)  \n\n* * *\n\n<a name=\"BlePeripheral+mtu\"></a>\n\n#### blePeripheral.mtu : <code>Number</code>\nATT MTU of the current established connection.\n\nIf defined, the value must be greater than or equal to 23, which is the minimum supported ATT\nMTU.\n\n**Kind**: instance property of [<code>BlePeripheral</code>](#BlePeripheral)  \n\n* * *\n\n<a name=\"BlePeripheral+connect\"></a>\n\n#### blePeripheral.connect() ⇒ <code>Promise</code>\nConnect to the peripheral.\n\n**Kind**: instance method of [<code>BlePeripheral</code>](#BlePeripheral)  \n\n* * *\n\n<a name=\"BlePeripheral+disconnect\"></a>\n\n#### blePeripheral.disconnect() ⇒ <code>Promise</code>\nDisconnect from the peripheral.\n\n**Kind**: instance method of [<code>BlePeripheral</code>](#BlePeripheral)  \n\n* * *\n\n<a name=\"BlePeripheral+getServices\"></a>\n\n#### blePeripheral.getServices() ⇒ <code>Promise.&lt;Array.&lt;BleService&gt;&gt;</code>\nGet the services of this peripheral.\n\n**Kind**: instance method of [<code>BlePeripheral</code>](#BlePeripheral)  \n\n* * *\n\n<a name=\"BlePeripheral+event_connect\"></a>\n\n#### \"connect\"\nAn event emitted when the host has connected to the peripheral.\n\n**Kind**: event emitted by [<code>BlePeripheral</code>](#BlePeripheral)  \n\n* * *\n\n<a name=\"BlePeripheral+event_disconnect\"></a>\n\n#### \"disconnect\"\nAn event emitted when the host has disconnected from the peripheral.\n\n**Kind**: event emitted by [<code>BlePeripheral</code>](#BlePeripheral)  \n\n* * *\n\n<a name=\"BlePeripheral+event_error\"></a>\n\n#### \"error\"\nAn event emitted when an error occurs.\n\n**Kind**: event emitted by [<code>BlePeripheral</code>](#BlePeripheral)  \n\n* * *\n\n<a name=\"BleManager\"></a>\n\n### BleManager\nA base class for a BLE manager.\n\n**Kind**: global class  \n\n* [BleManager](#BleManager)\n    * [new BleManager()](#new_BleManager_new)\n    * [.getDevices([options])](#BleManager+getDevices) ⇒ <code>Promise.&lt;Array.&lt;BlePeripheral&gt;&gt;</code>\n    * [.destroy()](#BleManager+destroy) ⇒ <code>Promise</code>\n\n\n* * *\n\n<a name=\"new_BleManager_new\"></a>\n\n#### new BleManager()\nConstructor.\n\n\n* * *\n\n<a name=\"BleManager+getDevices\"></a>\n\n#### bleManager.getDevices([options]) ⇒ <code>Promise.&lt;Array.&lt;BlePeripheral&gt;&gt;</code>\nScan for available peripherals.\n\nIf filtering options, such as `names` or `services`, are provided, a discovered peripheral will\nonly be reported by this method if it satisfies all of the filtering options.\n\nOnly one scan can be active at a time.\n\n**Kind**: instance method of [<code>BleManager</code>](#BleManager)  \n**Returns**: <code>Promise.&lt;Array.&lt;BlePeripheral&gt;&gt;</code> - Discovered peripherals.  \n\n| Param | Type | Default | Description |\n| --- | --- | --- | --- |\n| [options] | <code>Object</code> |  | Options. |\n| [options.names] | <code>Array.&lt;(String\\|RegExp)&gt;</code> |  | Peripheral names. |\n| [options.services] | <code>Array.&lt;String&gt;</code> |  | Service UUIDs. |\n| [options.count] | <code>Number</code> |  | Maximum number of peripherals to scan for. |\n| [options.timeout] | <code>Number</code> | <code>5000</code> | Maximum duration of the scan in milliseconds. |\n\n\n* * *\n\n<a name=\"BleManager+destroy\"></a>\n\n#### bleManager.destroy() ⇒ <code>Promise</code>\nShut down the BLE manager.\n\nCalling this method will interrupt the ongoing scan process and close all connections with\nperipherals with an error.\n\n**Kind**: instance method of [<code>BleManager</code>](#BleManager)  \n\n* * *\n\n<a name=\"Aes128Cipher\"></a>\n\n### Aes128Cipher\nA base class for an AES-128 cipher operating in ECB mode.\n\n**Kind**: global class  \n\n* * *\n\n<a name=\"Aes128Cipher+encryptBlock\"></a>\n\n#### aes128Cipher.encryptBlock(block) ⇒ <code>Promise.&lt;Uint8Array&gt;</code>\nEncrypt a single block of data.\n\n**Kind**: instance method of [<code>Aes128Cipher</code>](#Aes128Cipher)  \n**Returns**: <code>Promise.&lt;Uint8Array&gt;</code> - Ciphertext block.  \n\n| Param | Type | Description |\n| --- | --- | --- |\n| block | <code>Uint8Array</code> | Plaintext block. The block must be 16 bytes long. |\n\n\n* * *\n\n<a name=\"Env\"></a>\n\n### Env\nA base class defining environment-specific functions used by the library.\n\n**Kind**: global class  \n\n* [Env](#Env)\n    * [.createAes128Cipher(key)](#Env+createAes128Cipher) ⇒ [<code>Aes128Cipher</code>](#Aes128Cipher)\n    * [.getRandomBytes(size)](#Env+getRandomBytes) ⇒ <code>Promise.&lt;Uint8Array&gt;</code>\n\n\n* * *\n\n<a name=\"Env+createAes128Cipher\"></a>\n\n#### env.createAes128Cipher(key) ⇒ [<code>Aes128Cipher</code>](#Aes128Cipher)\nCreate an AES-128 cipher operating in ECB mode.\n\n**Kind**: instance method of [<code>Env</code>](#Env)  \n**Returns**: [<code>Aes128Cipher</code>](#Aes128Cipher) - Cipher object.  \n\n| Param | Type | Description |\n| --- | --- | --- |\n| key | <code>Uint8Array</code> | Encryption key. The key must be 16 bytes long. |\n\n\n* * *\n\n<a name=\"Env+getRandomBytes\"></a>\n\n#### env.getRandomBytes(size) ⇒ <code>Promise.&lt;Uint8Array&gt;</code>\nGenerate cryptographically strong random data.\n\n**Kind**: instance method of [<code>Env</code>](#Env)  \n**Returns**: <code>Promise.&lt;Uint8Array&gt;</code> - Random data.  \n\n| Param | Type | Description |\n| --- | --- | --- |\n| size | <code>Number</code> | Number of bytes to generate. |\n\n\n* * *\n\n<a name=\"DEFAULT_BLE_SCAN_TIMEOUT\"></a>\n\n### DEFAULT\\_BLE\\_SCAN\\_TIMEOUT\nDefault timeout of a BLE scan.\n\n**Kind**: global constant  \n\n* * *\n\n<a name=\"defaultEnv\"></a>\n\n### defaultEnv() ⇒ [<code>Env</code>](#Env)\nGet the default environment-specific functions.\n\n**Kind**: global function  \n\n* * *\n\n<a name=\"Response\"></a>\n\n### Response ⇒ [<code>Promise.&lt;Response&gt;</code>](#Response)\nSend a request to the device.\n\n**Kind**: global typedef  \n\n| Param | Type | Description |\n| --- | --- | --- |\n| type | <code>Number</code> | Request type. See system_control.h in Device OS for the list of defined        request types. |\n| [data] | <code>Uint8Array</code> | Request payload data. |\n| [options] | <code>Object</code> | Options. |\n| [options.timeout] | <code>Number</code> | Request timeout in milliseconds. If not specified, the        default timeout configured at construction time will be used. |\n\n**Properties**\n\n| Name | Type | Description |\n| --- | --- | --- |\n| result | <code>Number</code> | Result code. See system_error.h in Device OS for the list of defined           result codes. |\n| data | <code>Uint8Array</code> | Response payload data. |\n\n\n* * *\n\n\n<!-- api-docs-end -->\n\n_NOTE: Unfortunately, docs have a nasty habit of falling out of date. When in doubt, check usage in [tests](./src/index.test.js)_\n\n","readmeFilename":"README.md"}