{"_id":"@anephenix/hub","_rev":"51-6e074e8420c5b772dc0c21372a9ad6de","name":"@anephenix/hub","dist-tags":{"latest":"0.2.17"},"versions":{"0.0.1":{"name":"@anephenix/hub","version":"0.0.1","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.1","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"4a09b0caecd7d150a2859010de7f63786677181b","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.1.tgz","fileCount":38,"integrity":"sha512-4p8RNZuSssz22/c64EW36SUixJBq38HdatjQ6IFtmpbHY5ptDZ+xvDTis2R/0oyjAd2s+cWd0AlRHbI0OvD3mQ==","signatures":[{"sig":"MEUCIAvjNwBS5DKkoS2EhMpfjotYxdkUyVIOxdl3kucsZv+7AiEA1DNmjSdjrYau3C4YkHlIyYfo6PrSwG++3D06TMOgaOA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":72630,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdZm4CRA9TVsSAnZWagAAPU0P/RbTnxcJboODxpi6TNIx\nHMTxGTysEKS/4BJLtcPKNZGkZEbVyqHvLGSNSkeoHuNzSfzByy1debu2BnHh\nuPC9wr/a4BRekbPYz+WxIxxSkTIKUY69TuljDECgj7o5R87NAvwpKRcTMa89\ni9Rmqe/zL75WOV1C1Rr0KqQ1PqyPkIaiPXo6BZUOo7WguHLy5v21HH+SLQQk\nb0FkK6h2i9UX5yskqXRmuYcTBXk8QD9/2q4Bt5U+rHRO7iAhXg9KDKYa4fyR\nlXxqK8/f4v2oecM9oLYTXsnAefgpgwrzXEzYUwZOrR6xg0pUxeZqVWaEHtzQ\nD90kKKUh8hrFkchNXlT0jAExvW83cSyqF+7ciPF2O930E9L2A/VtxBLG/V3D\nX04xDzJUlirZ7MppxQr3iBILeQ7/qhdfybjBJeUCXTArOzQZDQqRXS9BjUbH\nC1NVmIXghngtlFnpglzcJoOt2qHc239pEPrMouWc7K4RV21AOTw5/AHG/MYw\n3n8/ECa2hGRglGMR9bLOeBZdij1Gvg2TcGlxUBnTJFc8+qhLhlrNmTN6q2QB\n5YAACYNbWSe0kVDkNSXAH5sDqrJiLnuYX018aE2nE9I7flnBLl1Z/lCa1gR9\nc42ocBZvwzt8O3Yp3DX/5Ev+WLSsGstLeSha2pQIiuyYZLS9qRd9bm8sVzFY\nedbi\r\n=1mc4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"1654a8840b0fe5afa15aad336e37efb6d02d4acd","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx jest --coverage","cover":"npx jest --coverage --coverageReporters=text-lcov | coveralls","cucumber":"NODE_ENV=test npx cucumber-js --no-strict","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"6.14.8","description":"A WebSocket server for Sarus","directories":{},"_nodeVersion":"12.14.0","dependencies":{"ws":"^7.3.1","uuid":"^8.3.0","redis":"^3.0.2","bluebird":"^3.7.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.4.2","eslint":"^7.10.0","prettier":"^2.1.2","coveralls":"^3.1.0","puppeteer":"^5.3.1","pre-commit":"^1.2.2","npm-upgrade":"^2.0.4","http-shutdown":"^1.2.2","parcel-bundler":"^1.12.4","@anephenix/sarus":"^0.3.3","@cucumber/cucumber":"^7.0.0-rc.0","eslint-plugin-jest":"^24.0.2"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.1_1601542584469_0.4034239614034971","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"@anephenix/hub","version":"0.0.2","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.2","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"fcf14a6437cecdddbadc948bb7358e0b4bf86cd1","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.2.tgz","fileCount":38,"integrity":"sha512-KDNGfZ4U5ASiX3/JbuFCKZU+1fupx/Og5rPj5Pyn0WZUNAGCbCuHucHX/7m6+79ZcZLpVgJHsB3B9IFE7x9vaw==","signatures":[{"sig":"MEYCIQDHyv5bqaslVz4/gx2dh6c6lUp4hHk2sFXYDufosKVCfgIhAPPpJIJzyIfpVuVGcYYWobXDKYaHCiFQ2qV3WVOlyJIZ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":74975,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfdeYyCRA9TVsSAnZWagAANXkQAJg8DtuNhoc09AxE2Nj2\n6hkrCOXuXNDZLBvxLKxr9BPeyuAEdqQ2bt5nG+MeWkcqelQV34QOQHlXcpZA\nTyD4afE9gzXLTDbh2E1Yrrz/5+SgnJVwg9R+2hdh+Z1Neb0Rm7tKNMlEWNQI\nczdLqtDwBHVSM4jqaqWvEitR/DMsfFXTsbGgOfvx5vPPByQ2dDJyDN9uXrLl\nW1bxBQLPjSrThJzcRVxW5V/6gEJrj0d7ZmXMIWh5aOr1GVxyn6NkUVQBWpHR\nDZkY0Ljn1YOOr7o7aPiK9ORn5fz5LBVZPYn89V0lAQrefTQoL6d/on0Ftmn9\nDTCM/XiT0H4dX5acmqfv2sSHOuQNgR+hVg6Uw/dcpN0N+rd6WRXqZrUmlMjw\n7kIFMbMCq7iMyU5F8nO5T1cZqw2q53txaYPIFYtQKNfjzl4EbAIcr2lgXUcJ\nflrEPISDCRefd7NUWpFA+1Qk68q8cl4NCW1h/ysPo2mVc/0sjyOkWI/BxoRA\nuCJBltqPshjLhQbZM8YOemvZ90n0Q4nooisqJ8MTkO/bZEEsY0IHc5gl1OT8\nCnkcOzN7hG4ArJX09TTbt0fwZbzUJC/l4x8O801TzmtAPqBJ+LQtw2exNvhh\n8XqWja9xbhWmNXTHk8CObSEZ4XYaw4mjZU1WGo1Sixsk1P+gk4EGFs4WlZEY\npMHN\r\n=n3eG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"682c9cef092a10d3273190806fcbf916a511ea15","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx jest --coverage","cover":"npx jest --coverage --coverageReporters=text-lcov | coveralls","cucumber":"NODE_ENV=test npx cucumber-js --no-strict","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"6.14.8","description":"A WebSocket server for Sarus","directories":{},"_nodeVersion":"12.14.0","dependencies":{"ws":"^7.3.1","uuid":"^8.3.0","redis":"^3.0.2","bluebird":"^3.7.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.4.2","eslint":"^7.10.0","prettier":"^2.1.2","coveralls":"^3.1.0","puppeteer":"^5.3.1","pre-commit":"^1.2.2","npm-upgrade":"^2.0.4","http-shutdown":"^1.2.2","parcel-bundler":"^1.12.4","@anephenix/sarus":"^0.3.3","@cucumber/cucumber":"^7.0.0-rc.0","eslint-plugin-jest":"^24.0.2"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.2_1601562161986_0.005065482978694913","host":"s3://npm-registry-packages"}},"0.0.3":{"name":"@anephenix/hub","version":"0.0.3","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.3","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"80c6c033d97af3f461cd99650598884c255cabbb","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.3.tgz","fileCount":41,"integrity":"sha512-adC2r0dX/Qi5IMBREgdJd0dtmz3miNjTYPzncr7AlVb4CYCKW6+EBz+RFNGGSxDGJpzqrWDo8OG61KuCk8+wcw==","signatures":[{"sig":"MEUCIQCDRoVO0zOnzFFnafiQ2I8ZhwTaQrVuz+hENT3qnWLbzAIgR/THim04wX3Vkwh67IKW5Svx7r1RJdzFCbRbzseu33c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":104613,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhHsRCRA9TVsSAnZWagAABb8P/A0keeq/yBD9dCuBsmWq\n8Pny1YaPEzV7lC9RUXXjeUK3iNkc/IZCU3BZGw2GNb4MsEPuHG+pP2dvasiM\n6wsijqHraWSEUwJUeNWDNN9kBKf0jLT+uYZjpZmXlR9QZUVC0/PSKGHAGD6X\nkAQmogUHP/v+XGQw6rXpwNsGboLNUi7HGJVXdnfMdDLWf2eSAfz266S2o28R\nEAWMHl4q7pdrIEmWbyyLuZ8Z/t/KPBtGq6/9B5eYaDSNUM0aUqpNz7d3xZc3\n6ssmDqM/iT9QYf6s1NChit3AKh5Qos+C4lIEvSEHF2KGdMKD+VMBFlM/PXLo\nkD6pGA4mxCux17XZ9Bx9j9878d7FgFuSNGvDmOv0WmCJN7EheDXtcGAcNLnF\nqKcGLH0Py50vXZokfGc+8623ID77YilPwOQULtnf9T5QZbwcr/Etn4Ilh2l4\n6i4K7VCOYE5DzyQcOCL0J82S6uyxT24ggPt4zgCU8C9SiOCgDSm0spmCa3li\nEmUkCx6/ksvBHBzRfnh0zehQGzGCqqe9LHHqXrVnDO2bnSRfcSpJhbq3iHGU\njINh0t21jRHRimSZw9X2sTYf5Z+BWPXfufJgNTFqu25xpuQi+dKcjbbJEfXe\n7ojlRpZYZMOtO6u7LCphFcbMMf73trNQMvC9xycdmJeMSVdBjzaP4voowbFu\nkqFv\r\n=UxR5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"59ec743e2bd6c6f2488d84ed437f05e51cf353c5","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx jest --coverage","cover":"npx jest --coverage --coverageReporters=text-lcov | coveralls","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"6.14.8","description":"A WebSocket server for Sarus","directories":{},"_nodeVersion":"12.14.0","dependencies":{"ws":"^7.3.1","uuid":"^8.3.1","redis":"^3.0.2","bluebird":"^3.7.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.2","eslint":"^7.10.0","prettier":"^2.1.2","coveralls":"^3.1.0","puppeteer":"^5.3.1","pre-commit":"^1.2.2","npm-upgrade":"^2.0.4","localStorage":"^1.0.4","http-shutdown":"^1.2.2","parcel-bundler":"^1.12.4","gradient-string":"^1.2.0","@anephenix/sarus":"^0.3.3","@cucumber/cucumber":"^7.0.0-rc.0","eslint-plugin-jest":"^24.1.0","why-is-node-running":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.3_1602517777186_0.42967167575061427","host":"s3://npm-registry-packages"}},"0.0.4":{"name":"@anephenix/hub","version":"0.0.4","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.4","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"09b9a733758ed56effd9fd1ab394b9be1ec9f748","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.4.tgz","fileCount":41,"integrity":"sha512-pOM1yOD4r8+/G1mc7x3G5YPGMcrrifwvESyskeI8ItA+36bdkbS6PR1Hrlmost6GFo9py3/DaGTsCrUUh0FX9g==","signatures":[{"sig":"MEUCIQCT5iX/W38ft7udMrQlNKMfc6yn8tesyr6DHxpqgvoYlAIgMPD/lO1zehzRIbLe/Ln2U3UvRwFbWtN/Qknd14uzfwc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":104736,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhKD2CRA9TVsSAnZWagAAr2cQAI43+YdBdIHdOxQsu/Qm\niPOHutiYJjjM0Iymxl2/PnwPvXypdm8O61dUp/bh+bUBdedLDFZ7W7CBJs4f\nkQAFPi1CQJCS392+gKr4Gd1hIWVKQRxoSpQdRMuw/9/0UdTxwr4od+pJvPp7\nodbZQrQ3YhJRTzuCIkKOsdYU6KsC5/0eurbqh4u8kyS2jjE4KukDsrr8rouF\nknKFEzjY3UZTxXCy6VhDqJkXx2uA8QapYYfiFK7PbVYyYPmrz8QS/E58F5GU\nCizcP6ucewF4cBTOs4gJwgR+pFgZS7/AkOZxR8/GcatauL9ghBGOy1VskRan\nQaVEwaUXTOzNWaCNZna4QQWmrBaXvYbTOQXgM3VKy1YwzRj0vjUvlkXr8HvR\nrL1KZk6kymqDAo58rngkesMzc2g9y2b+hKjJ/vcUuNiPd5HLDYrLvjF1ME6m\n/l85PN6LgK6rf2efj9V1vUq2OT2qSvUjtTvnEeO9C7Bly3pXBGFGMUtdN5g8\n2kmtFY4Kv+A6ErPO56GinWCxdVkSe8ym9oV3687hL9muPN0OMtnij6il6s+S\n+v97c2xOsFhfpCAocvllh/1yra6pCxfA1hWNg6fQRH6+WcVvb/sSy9QBUk0C\nv/mKQBoUedQj1CL8AAZXPA7zDwySgjSNmAYnTm2zg/bVacuynZuWbiC7sLbk\nkEO3\r\n=RHXL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"80c42ddafb9f938d33ca3599ea495303cdbd9193","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx jest --coverage","cover":"npx jest --coverage --coverageReporters=text-lcov | coveralls","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"6.14.8","description":"A WebSocket server for Sarus","directories":{},"_nodeVersion":"12.14.0","dependencies":{"ws":"^7.3.1","uuid":"^8.3.1","redis":"^3.0.2","bluebird":"^3.7.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.3.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.2","eslint":"^7.10.0","prettier":"^2.1.2","coveralls":"^3.1.0","puppeteer":"^5.3.1","pre-commit":"^1.2.2","npm-upgrade":"^2.0.4","http-shutdown":"^1.2.2","parcel-bundler":"^1.12.4","gradient-string":"^1.2.0","@cucumber/cucumber":"^7.0.0-rc.0","eslint-plugin-jest":"^24.1.0","why-is-node-running":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.4_1602527478367_0.9082715943581818","host":"s3://npm-registry-packages"}},"0.0.5":{"name":"@anephenix/hub","version":"0.0.5","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.5","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"304bb64b4aa19535d623f1fe2d3eeba85bf6122c","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.5.tgz","fileCount":42,"integrity":"sha512-BHot+qo4Ss+v9mefOfvfWkXTg+CR/7rhxTcLTOV4V5z6YZsBXamEwfi2L5yGLVkoCuLbJeSzyw2UnYKSHFG0fQ==","signatures":[{"sig":"MEUCIQDwte59xGl2ao+gzbVsrMiFDhrscInr77XsMasNo2TttgIgbeQJYJ7EFnd9xXImUP+xqswli/Cy/LwtqlTHXNkN29c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":114241,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhbtKCRA9TVsSAnZWagAAOjsQAJ0efh9XmKqM/7EGAWhX\ns4QnihzzOyhGMAhRxXLOQLLkukMN0c9XL8TrNpJuOWiOqcsn+qaSx8ZNA+55\nvmZO5V8U47Kwss70BWHokL47OU1JnvTNdnzIDgWQfOOylWyZw7jv5g6F0PY6\nNqUlsMCo1oKstgN0bkDk12asUthuwCT/QHd7F9qistlcRcz3Vj3ThlcNNojm\n1ihHjt3ms/ntZUBtnAJXPfpIWFMcRWOOO5SdzwBGLz7McOUH0ZXeuDlB+Tpi\n5cDPRsd6vgDLMIGsaGfquWlUq4uU44g8ypockj37SSmsDQNtmIbdAIuegGJV\nAvvJJY/brPPgQZrbChwm1tO+UXUKkPiSf8uDwyDeXS9624B+Lm0P/vDFBpPk\nixtf+A1MRC72I52iAoQUNDpMl+IYRGeXIoGSNqcr6zA4KXqblguf2nUkHAaU\n5fQAUYbOxmyScAkTEXpXElXShknWTk2E2YqL0UfqyxIDwevOAe4JU1lfnR7M\nmW2i1YPisBPLIMUK6zJ6OaPxXr0p9cribaXpPCfQhk8FDM1yOI0DunsB7lj/\nRpkf/OLRxyLkxLoXNqci9TIoL+8tACie4mbP782hEfIBZsR+aW3tWX/cVLci\nWKJQl9C0168eDR1sRINkytqDieA2tfISPWFENSDjBdW+ZpOs/ANhZ45nCfs/\ncQ2I\r\n=bFH3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"79fa7f4b8a2dba3dc2ad21482317f04e4b50695d","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx jest --coverage","cover":"npx jest --coverage --coverageReporters=text-lcov | coveralls","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"6.14.8","description":"A WebSocket server for Sarus","directories":{},"_nodeVersion":"12.14.0","dependencies":{"ws":"^7.3.1","uuid":"^8.3.1","redis":"^3.0.2","bluebird":"^3.7.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.3.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.2","eslint":"^7.10.0","prettier":"^2.1.2","coveralls":"^3.1.0","puppeteer":"^5.3.1","pre-commit":"^1.2.2","npm-upgrade":"^2.0.4","http-shutdown":"^1.2.2","parcel-bundler":"^1.12.4","gradient-string":"^1.2.0","@cucumber/cucumber":"^7.0.0-rc.0","eslint-plugin-jest":"^24.1.0","why-is-node-running":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.5_1602599754162_0.7149287631847443","host":"s3://npm-registry-packages"}},"0.0.6":{"name":"@anephenix/hub","version":"0.0.6","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.6","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"3871267f8a01dc3882c8fd401effe9c914bb9154","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.6.tgz","fileCount":42,"integrity":"sha512-wKuoVWwOT83IJHyKHtE3IgsA6I0vWZ7LmXWr8DxtbK+4bFm+kr0dRDyrdmmDrHy577Uhne4t5XmcUIQ1dFnGeA==","signatures":[{"sig":"MEUCIQD/HH206h2n9StbgNcdKgwFp/JRbqpLO0i/lSMCWk+TigIgWfVTYxMp89gCgmSrMV5rbwcjx24Bud0FJnkJquvFqA0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":110619,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhqAbCRA9TVsSAnZWagAA+SIP/0FDqKW6ZvgbmzbA7knF\n1G6t4AdI/IaDYWp5oBP3QPGtRG6Nj/UqlZSln651GlgLsOD1O73AQauzMLAQ\nm3Dvcf40pF3J6H8IWNWTzUeYE2gcb1MRnBWUzg5vZ4pScIqnxSBFGPjEQ3o+\ndBvsReW+xTJUgbML6kBogdVeKftJjvvB3SlcsOmG68tIobjr4WIo59PqjJFH\n0nMYoxtBPtQCKT7xDvZs157tZ4HJLkVDqU2YjwUNVvmhdzdGBjVc2uScQp1H\nBL9j14K6aQRrGo+kp+vP4635jIr8sYj6Vz51744+j4V6yFLiSR8IKv1itFF2\nbXsxlpVv/IhsjbVSnubkQ4fm67OsqcIca1KTYV8M5YYAewbEJG9POLRZati+\nZX5Jdymlplbbh0h4Cd7KmNEjLnehZYdcT929LmT4rhyMXqsAElGMr6yW2Ff4\nJBWUOjVE3cWKjMiLSIVZFbk3isspKlxwL1qBzSoBI4BDsmRX17Mno9knlWSN\nE/QUnMU2qraqa9RtQ1qRcprn2GznkEr5HHzhtbKGOcLw6s4fJBgrHU2dtSGh\nZJQ66pGpqKMYwQyevu5dE6Yh5FuSKVfpZduBJRMgmNxyB0Dw50iXy053dj97\nDmOhPrIBDWAhm9kIQr808WPKmu5SZN5vBOQvxBWlYpGF6H3De7OD2KWGocbr\nBmFJ\r\n=nJZr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"c8907f1a0dbc56946339b284a4ce09f463ded98c","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx jest --coverage","cover":"npx jest --coverage --coverageReporters=text-lcov | coveralls","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"6.14.8","description":"A WebSocket server for Sarus","directories":{},"_nodeVersion":"12.14.0","dependencies":{"ws":"^7.3.1","uuid":"^8.3.1","redis":"^3.0.2","bluebird":"^3.7.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.4.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.3","eslint":"^7.11.0","prettier":"^2.1.2","coveralls":"^3.1.0","puppeteer":"^5.3.1","pre-commit":"^1.2.2","npm-upgrade":"^2.0.4","http-shutdown":"^1.2.2","parcel-bundler":"^1.12.4","gradient-string":"^1.2.0","@cucumber/cucumber":"^7.0.0-rc.0","eslint-plugin-jest":"^24.1.0","why-is-node-running":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.6_1602658330564_0.5277117155450599","host":"s3://npm-registry-packages"}},"0.0.7":{"name":"@anephenix/hub","version":"0.0.7","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.7","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"389739454ecc4ea3a0592f677e3c37acbfe21717","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.7.tgz","fileCount":42,"integrity":"sha512-aGbYy9GghWlVOrc1mR6/1hWB1y6Bub/2dsDqsToqiiCNjLsG12K+yjB3HSdLahg4CJ8CkpKG3ujqk1Pd1MVWOQ==","signatures":[{"sig":"MEYCIQD2rMUdTunU/6PblOFCjYZUa0AdPSiFEqQCU6xL3oRP2wIhAIf1CW+ZJTpq1I1aZEUiUQylwAQbIeMoWHVxsK00Bw2f","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":112572,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhsnGCRA9TVsSAnZWagAAJdcP/3ikgBpS+jBWBVvg2U58\ncGbvuW1CRfFV4DrleiithBjBISO/816i6rCSy0ccIUBWrS6MWzIzjhoyer0H\nC768AN98pjci+LZ8MNzeD0zFeZVqJVZEkwlg76sFLUV+a3r77Mu/0RPwOUQn\nH/yXn29MPFS7+CqGBUqLV0MdO5vrp9V07F4/iGIUoEPtAsiajW6fgzmc9vvH\nk4Vy5xHBws56E2DFtP0lsVD+D1HB1ivfyjFoHIGneJKCtlzYNCwcz/L70h8o\ns23sIg390GCRWvwuULtjFb4Xrr3HFexPaMKntzZR2Hp1cqDRoOc9xqVMixP3\n2PN4v4paWlGNhywDVLcVKLdqgUorpCxnSZsQxSJ1FxPnWOjuF33yj41rAEDA\nbEK2t9fV/4uB1zBy8oHT/g2fPH9I1mrnE6SA1ne3JKaN+E4WABLPm4bZzEAc\nb1731LIN5zO2f0XlUkyMC/nBwISypnZOO8xJtDO80yjDMg5HMpMTdXHEHKQd\n0jABop4c0Mxy5UoeO0VNt8KR6deCY84TjT8DHPc2OT8dD9SiIaKrjLgAg5ZB\nds7adUFzeGjhEK6slPxNdnidQ3jfB7WdTTGNf52TSA5yyjlsH9K1dqHGJ85s\nPWd4ByzDtpgT8ulsqLKaYd6Coy2BLf0PkMCvUC/lVTk64t3hCXrqqqt3qSC1\nwRSi\r\n=sXNT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"bdaa8b0a8161336043a9aff244856d99509e4983","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx jest --coverage","cover":"npx jest --coverage --coverageReporters=text-lcov | coveralls","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"6.14.8","description":"A WebSocket server for Sarus","directories":{},"_nodeVersion":"12.14.0","dependencies":{"ws":"^7.3.1","uuid":"^8.3.1","redis":"^3.0.2","bluebird":"^3.7.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.4.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.3","eslint":"^7.11.0","prettier":"^2.1.2","coveralls":"^3.1.0","puppeteer":"^5.3.1","pre-commit":"^1.2.2","npm-upgrade":"^2.0.4","http-shutdown":"^1.2.2","parcel-bundler":"^1.12.4","gradient-string":"^1.2.0","@cucumber/cucumber":"^7.0.0-rc.0","eslint-plugin-jest":"^24.1.0","why-is-node-running":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.7_1602668997692_0.4724397940865732","host":"s3://npm-registry-packages"}},"0.0.8":{"name":"@anephenix/hub","version":"0.0.8","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.8","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"b3bac81fa8af58de738975f7f7c002f088822514","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.8.tgz","fileCount":48,"integrity":"sha512-9oO2XLSaOpK0tor0YON52U/6mJdiW95Iikj+vO4Zak6DecJVMum2bZds2FkUnHy3iid3UURT01m0wuzg1V7V+g==","signatures":[{"sig":"MEUCICZFfUBByryofAEVTjZd3+1o92OQDv3XxcQXM+8tZ0u1AiEA514slyaRau7RstDDt7thnpcvBARqR+0i8enczxooa50=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":130603,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfiXR6CRA9TVsSAnZWagAAgsYP/2buSeUlep5/uGnzk7xG\nA9YcT8pyuHfVlT9aI2fc+LWcJ/hFKi9JpAEWBaCf6dVcF09K2orjLZ+Md3ln\nmL/Q0LBhhoBmvYWKaJQeeJVWDB3lE18HFY0icqab+1OnbJMqsEKctwishXs+\ndMzuDHHLA7d9uERrXLoEDfsDA+MEahS5xyb+kq5vISm8sgMzDO6ksoHeyocy\nY9dVWAhkqLAaBHbXx2p0EWaDUDIE8KEygBYmJ4r+0q3D5xxBU4hvYPnXd0O5\n8OA3m9cx5wJE7rx8jWd3flMqxN9ah/YPreT/nOuRpH3z/eBhopwPc10clLzy\nv3KDw+z9narBmH22DefWaYMJvJqdSdIaySaoVd3VQL0jty4Juc7BxtaT/op7\n+1LNgunUTdarWENr+zn4hEmK/GwklJdfnku2IPiiN6KUUKoOhI/oJHI+7MQ+\ntx/ulMIUqp7O/10xKAm8hdrXVelIpJLnUHEFSPkYrE6agCL7DBkmfNfF74wl\nln36Z/yn+P6D8ed7kNqWWypEB6foEtKcKIWaWsOzriQAbRlIZ0DQnDLs8n1K\n3Hs4aMsiBRZrIyizsHp40x8ZIl838KGHs/s8BuGoYSrM1FXif4WGZh5+aLob\nzuJ+qW8sKlWK4Zf8EW1HQZ8qyXcOeOXvIIiAcgrpLU9s1MyAd325t+X7Ax2V\nif92\r\n=LL6Q\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"f975388665344c5ac79c482a0c8621e595c64c66","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx jest --coverage","cover":"npx jest --coverage --coverageReporters=text-lcov | coveralls","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"6.14.8","description":"A WebSocket server for Sarus","directories":{},"_nodeVersion":"12.14.0","dependencies":{"ws":"^7.3.1","uuid":"^8.3.1","redis":"^3.0.2","bluebird":"^3.7.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.4.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.3","eslint":"^7.11.0","prettier":"^2.1.2","coveralls":"^3.1.0","puppeteer":"^5.3.1","pre-commit":"^1.2.2","npm-upgrade":"^2.0.4","http-shutdown":"^1.2.2","parcel-bundler":"^1.12.4","gradient-string":"^1.2.0","@cucumber/cucumber":"^7.0.0-rc.0","eslint-plugin-jest":"^24.1.0","why-is-node-running":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.8_1602843769954_0.1053212819951419","host":"s3://npm-registry-packages"}},"0.0.9":{"name":"@anephenix/hub","version":"0.0.9","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.9","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"7efe0c5c8004a53970926b1b45f7cde4afa0f315","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.9.tgz","fileCount":48,"integrity":"sha512-EvjxPCaJVnSLhcYMa0xeRXFFNxDE/wfskgFsKUnL+9extvewXCL479isa2IOPH6DS2u7ZH3gY90VzAJvpQ/HEg==","signatures":[{"sig":"MEUCIQC7IEAM3F/7eENYxAt3IUnCRzFDuiSFagsZhQDm85HBVQIgYZE26L6gvTFLsiS24OCV21b1ib3bb30sPj2myJ774hs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":135639,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfihJzCRA9TVsSAnZWagAADRcP/1ya4GurLTxdfnb49XEz\n1dMJFU+8ogQOvtxdXYY9rRgamWd7eh3lQixcYtek7ZACtRFqVnnJLAdeY0L9\noZ+ebrBSaf4gZfLeMPCql3+pbgiq5LRD830Q8zpsrt2mTL/13yN/VewLJwIK\nf4wbUCxDBqlYe/QkLMeJ+4wfPjbC1Jjr9daGHiSUoJZE3TA92ytY6E7SaXLv\nxAPpF0Jnp8KSeqcmNGGnTIE1NBuCg5FChgQwonb6bcLHpGXOo+vNup7x6y3K\noFOMoZ0jnOf/JJPYHLXLSZoRKBZOKiSn56ZK4D17PdlSY5VDeoUYfbk3nMvS\nT4xRZDCVFLrTDaQQDrW/7QDRht+KpZJPdOtQx0sLy2TQOgqc/ma8hW/32ncZ\nytXJAxG+aVOZDQ276PM4oNhUy3OzFTCITRbw+9inySaNdnKSCkl2qkJXQlqG\nMDCwX149Fcx24tmaJDbCKXb0dHYTd3kwwK6rUilHdraULlEugwwDJZkCfQEO\nIcAv3/YJkhdH0jrDkIMcfVxQmri66bNEvHdj5zVw0J0GDqCXwErxKyQZajCW\nT72k+4OBxNU87W/hlKVa+VJDda1olo2uQD8gkWx0nSRUiOQ9s3XlK5Xh18kW\nk0uwBa4QLEBIbnBewZS93cBDHGh5p73EqM+L7FbOS0x1Fyc4WoUhCYV5GM+J\nriyH\r\n=lJT4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"116d932605fefc0a7fbb9e623589f36e183c50a4","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx jest --coverage","cover":"npx jest --coverage --coverageReporters=text-lcov | coveralls","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"6.14.8","description":"A WebSocket server for Sarus","directories":{},"_nodeVersion":"12.14.0","dependencies":{"ws":"^7.3.1","uuid":"^8.3.1","redis":"^3.0.2","bluebird":"^3.7.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.4.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.3","eslint":"^7.11.0","prettier":"^2.1.2","coveralls":"^3.1.0","puppeteer":"^5.3.1","pre-commit":"^1.2.2","npm-upgrade":"^2.0.4","http-shutdown":"^1.2.2","parcel-bundler":"^1.12.4","gradient-string":"^1.2.0","@cucumber/cucumber":"^7.0.0-rc.0","eslint-plugin-jest":"^24.1.0","why-is-node-running":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.9_1602884210828_0.4667549785612837","host":"s3://npm-registry-packages"}},"0.0.10":{"name":"@anephenix/hub","version":"0.0.10","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.10","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"7b4d791c42e41cada948a02cd86d58250bb26eeb","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.10.tgz","fileCount":50,"integrity":"sha512-20QmanQPoxs7Ed46JKZCybg+XjHvdkJ1Wv1Jvc+wwUU7UdEqvs7zuCGmKWghTKfTqWAX/RBT1DFo5VtJlY1yVQ==","signatures":[{"sig":"MEUCIQCxd03M+jU7z+rfs2xjlbEMFjV8DJnBrAjuRiGsSuWDLQIgKC8QeRrQnOMczIN4DmQ7AnFIh1bU9DWLSv+ejO0VY2U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":140071,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfitvoCRA9TVsSAnZWagAA51gP/0WUD7jiS+UnJF7f7UzS\njnWKhlt2Ujnu1OzGZR0i83JXviNzLMssG6VRp0lsHkkC43tSGnmwVZwdwS5c\njxaVs1Y8n3Lve1J6iCbotfW5NkiYxDPgzT5OdbZ5riBj80nkyqp+e4RC0/1G\nPfkSyxS1sAbdyIG0Gk76vZFuyTMDn4aQ6AjNHs7pL4s64DDBx1TdiGAj5ZNQ\nNByOyczayaWH0mM6FZY1OfWt9cWEYirKEXytcPEh/tThEK3R0j/eg0LZnppj\nyS83GqRgzsdSPg1XEOqktsGk9x5Zackm+0qkKGHMCMuF95zMdgRao5tuXbNx\nweKru+fcRnM93XA5j3ffLX2MDQQHFmCEVl/0wSvMxLIozI2fgUG93Bmm3h/G\nU1haCpzXJE0cp65tDpyazmlUVQmelBT1Tl33/teCbyKURdFVixpKSyKOO6fq\nu7sRoSgbo79JDTK1sJIcg/jS9KQCJEgFKoblbfeVRTdagNcDeDxlpCtp3v+I\nEz39AEzFoDhrPDXgACj0ajwTM7RkQtRyqHWxJVNthdt+CrCdI1tNTOvjzIMk\npdZTbAg1wuWuy1C1wlv4En3FDL5NRA1NTULcRg19ZJOiQaohWKwIpSJL2t4K\n5ez8jY5hdyDHjTEVIGXrHqZ5Xm3pTrmYrWEhaqgbFXK5e2GmjwJ+WxuOKWdU\nARGf\r\n=BGYO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"c1b86dc8eac5b0a7a206c51e0fb4d29bf9e6ed75","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx jest --coverage --forceExit","cover":"npx jest --coverage --coverageReporters=text-lcov | coveralls","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"6.14.8","description":"A WebSocket server for Sarus","directories":{},"_nodeVersion":"12.14.0","dependencies":{"ws":"^7.3.1","uuid":"^8.3.1","redis":"^3.0.2","bluebird":"^3.7.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.4.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.3","eslint":"^7.11.0","prettier":"^2.1.2","coveralls":"^3.1.0","puppeteer":"^5.3.1","pre-commit":"^1.2.2","npm-upgrade":"^2.0.4","http-shutdown":"^1.2.2","parcel-bundler":"^1.12.4","gradient-string":"^1.2.0","@cucumber/cucumber":"^7.0.0-rc.0","eslint-plugin-jest":"^24.1.0","why-is-node-running":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.10_1602935783828_0.05224950716270049","host":"s3://npm-registry-packages"}},"0.0.11":{"name":"@anephenix/hub","version":"0.0.11","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.11","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"1a4a69641ad3c46488c6279c916e2ffa0d4d1a33","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.11.tgz","fileCount":50,"integrity":"sha512-PDLyz+dRtkhpX/bOsGRGPiZmvZFuFDTUak+DqB/t2/aSuk7HcMJmWUCZV4TSY8TMNdvHy2WrCu53bDO6XiaXBw==","signatures":[{"sig":"MEUCIEdMS2dKFcBTGcjpUhlSC/+VU45wb21H/ZF9trAa3koWAiEAofWRUooihHDczAJKx6E+vF0Bl6FGfXJFa2BufPMYU/o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":149386,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjFweCRA9TVsSAnZWagAApQIP+QDmykvhb95Edrz690Bs\niOMb5s+YHt8YNgUiiFoHN95BwmZmj5R9M7s4MyY2t1v3XlTuF1SJyH0bc8h4\nKJet0erP/tp2uN0Y8Wzec7t1PUmD5uoY8kcd1pU3iMIBPhYfnmylctCgR7D0\nzboD3PYyrutDfaBPTatr0iEC2kisHo8oinYKZKaJCU1NKNK2LbgljhF0YXzO\nC80JY5nWMM7dfubRJdmdxpnm8DetoGOMSoTCYenIFFoly+llKwlK/6CUaUBZ\nDzg+OWrdjdrEAXJnasq9r4BYunPZDqgSjcEpcz4cTao02Y7WKN856Wtralba\n49T/eV4RJX23vD4kpmfdGZJeocwbpRgpYed+uFLHaqqmdkmjeEv+PYCWWf61\na/teD0iPgbCAosHKmwh7+MVU47X6oH+EVfWRDJa5cie4HySUPDTV1ldj1X3y\ndV1UOYL0MpOQ6VFZouqJ94SEQUyYB3CoYtSKKar5dx5jl7J+mqNNnso8UGZA\nTRGvEujcqb50tuuxaZA5hSQTNHy+8ra0nsxjPnaSQpEjRak9vNPP5+0C3de8\nI8vGxeet/6OfNfKOM77nHlVDz6RTs5p2ZYdcbz/CLbVAfyWwkilIehWSVqHP\nZF7AyQzJNVoHSHMq26MVbXHaPvKyshTz1YSHIiomEP1YcNyE4ZENpobwQG1t\nVBXg\r\n=+rtv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"c7374d8dc8178718f1c6f44f2ffeb6656ef9e318","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx jest --coverage --forceExit","cover":"npx jest --coverage --coverageReporters=text-lcov | coveralls","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"6.14.8","description":"A WebSocket server for Sarus","directories":{},"_nodeVersion":"12.14.0","dependencies":{"ws":"^7.3.1","uuid":"^8.3.1","redis":"^3.0.2","bluebird":"^3.7.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.4.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.3","eslint":"^7.11.0","prettier":"^2.1.2","coveralls":"^3.1.0","puppeteer":"^5.3.1","pre-commit":"^1.2.2","npm-upgrade":"^2.0.4","http-shutdown":"^1.2.2","parcel-bundler":"^1.12.4","gradient-string":"^1.2.0","@cucumber/cucumber":"^7.0.0-rc.0","eslint-plugin-jest":"^24.1.0","why-is-node-running":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.11_1603034142148_0.9659965164845665","host":"s3://npm-registry-packages"}},"0.0.12":{"name":"@anephenix/hub","version":"0.0.12","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.12","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"0c0aa0f80fd9b861bf015e1e9e2b999229484a74","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.12.tgz","fileCount":50,"integrity":"sha512-304zb0kAnQKF4dCNWB7YlbpSD6oc7RzBzbzMUojfhmGKlxBy0NcdvCeo36XwoXTUO0JZp3pwDwjmaNdO/dzHXA==","signatures":[{"sig":"MEUCIFOfCYBPK1oAmpwQWo6V2JoZxdoYGwVkejzgopU+mVJ/AiEA/aDJfvs8t7cb8MzdeNpoX0JYLgJOPNySSiGSgiwj6h4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":161950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjubeCRA9TVsSAnZWagAApSoP/1aOeTmAmV4RlfbLECJE\nWIyzr50VaRtgA6K/ga6zM7eeC1oGiuaVmVXk4mwXOyOITTvZDo8tEdFe6K4j\nDBGo6c2I/Ii6c3fGEJ0xxy4TwW/CG1iZi6oVqUitVRBQVodCZaPlm4QVWqR6\nmWAdWmpVTmb6WLmEfUJz+8UAzTDaMD9K0F4PqWDIaSXBvKqVIQ/w8SjE1dqB\nFKH0x/Qs4zU8XVqsbreCAiAcUhXisvn7ZWI6T8MnohaYdHqoqgAk70IjVR+o\n3SqQ15aeJT8XxpXlt5E1zO5jFBJUXiuyDwYqy+fTsX40pS3mKY+qAXo4it9x\ngfFknJmsrlYdyR0ORJltieInKRf9h8t8gyFOvkKkpAtZpUmEnjRuv+gI4m8Z\n3gLQEGHb3E9e5QThsBNMTLGc03BzsGhVQfLRd5lTLoyHHM5EJzvFlpT04qvK\ndJMGqn+yDbZ7CM9Naxuk5lqGIyBCXADQPqYXIV2AuVAQbB+pJObfZuGEig7j\njQoGMVZHfCFwA/TOxe1HYGzMqxJubmVab5sCgvCayrcinDnh/ILMIbZ1wcQA\ncoIAsGJWASn8Jx3RONa/kNu1KHw7JqogKrCTzWeqSvIg7VlrxW60JHDybDLy\nRF+7zTop/kPA6HBE1kea0hzumZ873fa3zPr7NaZmGmhHwACiiQ7mSzoZAhMQ\nkEIx\r\n=CIEH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"86710dea862128651f8be0721ebcb4536cd3f5ae","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx jest --coverage","cover":"npx jest --coverage --coverageReporters=text-lcov | coveralls","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"6.14.8","description":"A WebSocket server for Sarus","directories":{},"_nodeVersion":"12.14.0","dependencies":{"ws":"^7.3.1","uuid":"^8.3.1","redis":"^3.0.2","bluebird":"^3.7.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.4.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.0","eslint":"^7.11.0","prettier":"^2.1.2","coveralls":"^3.1.0","puppeteer":"^5.3.1","pre-commit":"^1.2.2","npm-upgrade":"^2.0.4","http-shutdown":"^1.2.2","parcel-bundler":"^1.12.4","gradient-string":"^1.2.0","@cucumber/cucumber":"^7.0.0-rc.0","eslint-plugin-jest":"^24.1.0","why-is-node-running":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.12_1603200733920_0.3091057150490175","host":"s3://npm-registry-packages"}},"0.0.13":{"name":"@anephenix/hub","version":"0.0.13","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.13","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"3b24b6b063ef1c562129dd1232bcdc6874054196","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.13.tgz","fileCount":49,"integrity":"sha512-T69Kx8aSG6FFqen6OKdTwIDKbIQSx43emDql0XiHEPkIb6XjTBb2C3yL9d8WYg/4q+e5T4mf1ZmInDHtvdYk5A==","signatures":[{"sig":"MEQCIDJcTHvyWM0vSmgKVq0dy3+F1xw2mHCvo3j9wEsJ39saAiB2FWTf+quJTrET/VR8KFkPDqquxHXr2q9FZ59jCtr/8Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":169966,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkUvmCRA9TVsSAnZWagAAZMMP/0b1OWRA4M0hEM+gg251\neTsQjNBwYI0WcJL/akQ4C4qLB1u20RCcSSytoB6HDoOhGOr8HPzfi8lxxhis\nTMh8HmXj0MD31HZQEEUvqLQJewot4jSBGHwFK2qTx0LrW+IalQ8FE4p9n7za\nIrGiQVItN46LZR71jdYrD3xOL9+hN7rE6N3jkZ1+QNkJCTb71GUhWANyMbLU\nOtigFMgQ+dwFG43TaZ8LpZwq0J8FMuL8togWM1DFZnjU7DMXAFRhmQbNS2u+\nUVUeF6+qkHwD5iK5ke3HoK0fLLolQVUllODhBspIx32V2hDGZcUWL7cWcEdo\nX0/DZpvxHDjGAfy3bCwp8mkIXYftqRK0bnYe7yzjvwHtj0KB/oUKOrewODd/\nxqwJ5vFaP/qJsn5kgyPvlslUi02p3oIDKSMYLivo4umPFMQWRLzsVFZhOiQe\n6IcdWiOVnB1IIBAw4dFJTzfrPuJpyIhG6EciosyB4tTnb45Im699JMTp21tl\nin/AvF/UJ9zMOd0tFjboa2JuEGW2e50n+WQMLdGFaKRSSxnF4X+OIHXetPf+\n4h7o9XYXbu39rBtmqFykpjhXCCExH2Rsn2UCqlBmQYWuon49snGxbjRZWVrc\nK6kelEBZWjxFFTtEhOUEYL8YGSNTgELnyf4uv67hbHeAr3fclZQPfIODsecO\nHC3P\r\n=+dyG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"67b52ad77d26b8e2570af648a43c34d79ddef3e6","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx jest --coverage","cover":"npx jest --coverage --coverageReporters=text-lcov | coveralls","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"6.14.8","description":"A WebSocket server for Sarus","directories":{},"_nodeVersion":"12.14.0","dependencies":{"ws":"^7.3.1","uuid":"^8.3.1","redis":"^3.0.2","bluebird":"^3.7.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.4.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.0","eslint":"^7.11.0","prettier":"^2.1.2","coveralls":"^3.1.0","puppeteer":"^5.3.1","pre-commit":"^1.2.2","npm-upgrade":"^2.0.4","http-shutdown":"^1.2.2","parcel-bundler":"^1.12.4","gradient-string":"^1.2.0","@cucumber/cucumber":"^7.0.0-rc.0","eslint-plugin-jest":"^24.1.0","why-is-node-running":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.13_1603357670140_0.9682664482596106","host":"s3://npm-registry-packages"}},"0.0.14":{"name":"@anephenix/hub","version":"0.0.14","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.14","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"b59ff863aa9f2f7f848990ba1cee8b316ba034f1","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.14.tgz","fileCount":49,"integrity":"sha512-JCfItvwJobPivaGDFGkghJZ9Tn2qXN0+nhaylcimLB6lV3keBY26iB5hn9zUz+jC1JWwxFqJUL7nd3pBPd3izg==","signatures":[{"sig":"MEQCIA3Gdj6tgPa+1AwFeUA60g36Ben8soVmftVt7pJ6ZIj2AiB+ZGs8GA3YfjPqZ6dcS2HrqUso56CJrSQZoc8b9ERd/w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":174931,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfksTcCRA9TVsSAnZWagAA9vgP/2E1cjwONpgEpFSvcxET\nE/PtIC1szCZTqswqTmNTrbkbeaSG5pUtNjAUyBRK5QA4UQp1OEVufIc2CMcs\nxSZR2D6KXpZ/w5iYwyS+vP6X/BxaBcDBQFIPf2jUET/OvktHtPfk1yCe5Vg8\nY63mCqaQbxBjvNUX5TZSYcdFPSulxhFBCbfLDDmaMz/eP7F6GTk7A7m9vGW/\nWOa9QAJR5fVzYxtlIaLhCGcGg4vyJvnYIu5+aGKE+bCE/coL8YETdok4umGO\nOyJKnzqY2KjpMDK6MLjV+ZJ0H5nQGvXdKhgeL2LqIK2aUbEET7jV+a56CwYY\n9umOag6P+PmEwvA3X6PgwqXLjN0eM/pqHzJZzP4eUpMHMkGnpzsxkp0ozzut\nMAeNDTQjBEmCpOx0Mag2p5I6+oLcVa/F0+ibj5bWYg76QqP3UPaTsY/kAiJb\n0035rMJhS04JLOnZ9G8d67XFuobElusE/49gFtfTaxWtXtWkVzsPHeMjnFng\nTZx9+bfkio6m8EXX8F6arQG7UFcCNrYhd31NTX88b8xS8RGGTuIRfbhNfgBQ\nFlLGeoJ2DhKYgttvKaubOtOjR8h8SrCAruguL8Y124lEF6qGo3oRvJGCfNB1\nw0TZabYL85LUaZDnBW9nFTtAe+z0wKvEZSiZr75T5EMYf5krFWLLHUAq9S8p\nFBkC\r\n=mzjG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"28b5f02cbba8c0588927ab61f3c11b3d6bbdc2ec","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx jest --coverage","cover":"npx jest --coverage --coverageReporters=text-lcov | coveralls","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"6.14.8","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"12.14.0","dependencies":{"ws":"^7.3.1","uuid":"^8.3.1","redis":"^3.0.2","bluebird":"^3.7.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.4.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.0","eslint":"^7.11.0","prettier":"^2.1.2","coveralls":"^3.1.0","puppeteer":"^5.3.1","pre-commit":"^1.2.2","npm-upgrade":"^2.0.4","http-shutdown":"^1.2.2","parcel-bundler":"^1.12.4","gradient-string":"^1.2.0","@cucumber/cucumber":"^7.0.0-rc.0","eslint-plugin-jest":"^24.1.0","why-is-node-running":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.14_1603454171763_0.09125465893974027","host":"s3://npm-registry-packages"}},"0.0.15":{"name":"@anephenix/hub","version":"0.0.15","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.15","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"59a812855c6f1c59919f2be4e49a6b1e17d3f505","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.15.tgz","fileCount":49,"integrity":"sha512-VUAfXCwUmVio7yiWDOHLIbpTe1TNIoeR++un56KtpbkCajPiKPRSIYBoK7tj7AhU9v4TMpBMCHwsIW/v69RlAA==","signatures":[{"sig":"MEQCIBbBI8tIhH5Vf8O9eeSFrZoUnwxl3dMq1gFECa81JVHxAiBmRnD9GYBWgElhBlWVMhIv/Zwnp9oV6OtW4opbzCH42g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":180347,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJflDybCRA9TVsSAnZWagAAXR8P/0hPd0eVY/VveQ4D8S20\ntbiXWnssS59Pdo0dqM80VKxVtWxA8jgN836zj+yJZAZz7U+so0DyfbrQ5dpx\nZCkJyzatb2BaYG3QehEie/vWers2SvXT0vMsMp7H3SA0fOP/gu6oyiHeFubT\n+5RaMVgx19XKxCQXgdRnj/lJqAHl/rW6Cs+PxpsweS1wTnvgg14qHqsWg049\nO9fKUbXUJxQ+JxJawcEBB31Y/Jz3lK9Eo+LVxQ0g9PGMqbdVhn8HKaeYM+9A\n6zErP+LUZ3IzYCk5TblLd3DaZg+hrB4wdaTcJeoVXQO9UllOEVR5Cs73CDS/\nyDMcpJZ0hJW9he1TA2n7kYcgz3Yf68Yc2E89x6RgAdeycGSKjc7+1d7OVD/B\nJ2wj6pPiaTl5P6tqhCtYPmN60vI6uZOhBLG+i5oBEDiBJYvwP8kn9U89zx6u\nmLjQ51xv4zxYPlu3hi5obrg+AM56J6ckkVMhfb94hhCtn0oiUOaZvssIdz59\n+It8Yf0nQlHfgqop/cT/l7NrvwX/Ct86iHmUMHz5zcZC1YPx7sR8dSpCrd47\n+xcfUQdee0ax0LRLONGnSRUOnH23P1sBbBU1S0qkWSJdqnAbrf8neqwPohyx\nvl/RndSGLVNpS5fkQngauwV4VFHimu/OKcX+VHv8HualY6+GMnvMF8WeUT8d\n13cf\r\n=HhAZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"a5b34dbfd214641d004f757945438a2841246d02","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx jest --coverage","certs":"mkdir certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"npx jest --coverage --coverageReporters=text-lcov | coveralls","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"6.14.8","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"12.14.0","dependencies":{"ws":"^7.3.1","uuid":"^8.3.1","redis":"^3.0.2","bluebird":"^3.7.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.4.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.0","eslint":"^7.11.0","prettier":"^2.1.2","coveralls":"^3.1.0","puppeteer":"^5.3.1","pre-commit":"^1.2.2","npm-upgrade":"^2.0.4","http-shutdown":"^1.2.2","parcel-bundler":"^1.12.4","gradient-string":"^1.2.0","@cucumber/cucumber":"^7.0.0-rc.0","eslint-plugin-jest":"^24.1.0","why-is-node-running":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.15_1603550362673_0.7183848467498162","host":"s3://npm-registry-packages"}},"0.0.16":{"name":"@anephenix/hub","version":"0.0.16","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.16","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"e8975f01665cba36e7a92de0aea265fecfc5ef99","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.16.tgz","fileCount":50,"integrity":"sha512-mLoEaEr47CR48Hz8WRjmUca7gIUz9YYL8wfwM5ddu7tf4+SMsSWyXb+L/G0lxeb25thcZ9X6Td/dCkIkLPda9A==","signatures":[{"sig":"MEQCICNEUqK0dFP2+hWNn3ER0xvARiClkEyUnA1wzFa7rYboAiABad9L9alCzKRa2cUZNVOv7s2lLYPcrn9PlT+3POF/Dw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":181639,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmqUaCRA9TVsSAnZWagAADT0P/1Bg5/s3QnR6Opmv4TID\nPkC1TJzMrJJzwNSxuFFMRjw1T+N/yPJbdL+98rsz57CdBDFJCHAJEna9w9Cc\nwOe4iLoo3P+88gcTft/+zm4btACBkR+SzXYgdQpIu1A/G60PIQvz2Y0dWRfd\nDcuMhJwpoOGxHhYc+7F4/ZPDL8VuAZmLjq4BpqsE4HNmXYUcrQ3676icUntu\n+ZavCnHDx/GVIY3PYjZ1gwRWeUwAfWglPV//54MT/gI3QbAkYdMPnyB1i2Fa\nUD7JjvsvK09Emm2tr3UZB+ZS2BIzwaH8GTdpdVwiga/oxp0ehewUU2Jc+oJO\nJyxoLe2MwuXUE4AcOxz4uLexFA9kEchuAofc1ZhCWhLLzyv79pXyyREZw2t0\nEoV2E+SFPFSGJ6eMIvLEiyhKZBjLZU9hpgtVowk9XFHyLykPLko0U8RhAzjA\nqHYL8j0xJtPQreQBzHduBZkblRK2nvuRCV358oKKz76K8ugGEfdaTCcmduDq\ny9OVZ6PIMss0ABYnDkK64gtV4wKVhlQ2WFCx9IL/e06aSJhVeafpeY/0A9eO\njhrXXzZ/XTtBt7jp90Eylkc080YRj8tbOPOu5LC8E5vHKE8I4kPkdWxVq1m3\nnB+5awGLGNT+iXtCS86xpJWRowGJUfCAz9G9yR7f0R2TT69IBQbuY4usbhRa\ngwJs\r\n=+rsM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"1af01e7eed8dbae2ff937f4b1de083a875b436fd","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx jest --coverage","certs":"mkdir certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"npx jest --coverage --coverageReporters=text-lcov | coveralls","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"6.14.7","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"14.7.0","dependencies":{"ws":"^7.3.1","uuid":"^8.3.1","redis":"^3.0.2","bluebird":"^3.7.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.4.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.0","eslint":"^7.11.0","prettier":"^2.1.2","coveralls":"^3.1.0","puppeteer":"^5.3.1","pre-commit":"^1.2.2","npm-upgrade":"^2.0.4","babel-eslint":"^10.1.0","http-shutdown":"^1.2.2","parcel-bundler":"^1.12.4","gradient-string":"^1.2.0","@cucumber/cucumber":"^7.0.0-rc.0","eslint-plugin-jest":"^24.1.0","why-is-node-running":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.16_1603970329591_0.06498481185246119","host":"s3://npm-registry-packages"}},"0.0.17":{"name":"@anephenix/hub","version":"0.0.17","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.17","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"62c43ed037a2aac901df29579b99e290fddb38dc","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.17.tgz","fileCount":50,"integrity":"sha512-9lKCt7Z2i/8bqD/F1EfRdk3Ehhm5JlT196pOqfckjKbZGmeC+kg0liq1iKUAZ+9oSXQbPKRzLcRD8RHtG7qGYw==","signatures":[{"sig":"MEUCIH7yIovVSovuGaVSZz21OohOt4pAfb0BqGYhFGRaZph1AiEA2Z20vXhDa5kj0S9ysbz4s7xFm+hj0nnu2Oo+01dKrQU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":181763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfnDxOCRA9TVsSAnZWagAAeSAQAIodRUvdIIesjHhltPTq\nDMTaTkJLaRc5Ry5FxPmxS8nJ1/R5xHm8C7jBaluUiU5zUs9tSFi4xy8JTzKM\ncrIRmodzQ3WXC1zEjF+n5VVkvydh/2/tRiXQAUp+SjPqYfS/+4HkliWIpmxS\nchmWsad1mSk1hR0flgr4tnr2HLveMBE6fQy1nEOzg6lQ2NGwJIeRHZpF8CpD\ndPDCQkpTz/ogBmPvSQIswd6PqcVa94picVYUvqs5eiZT9GX2nVQqkR+UOAhQ\nerWbIdb9JyT0Iggm6JZdk1dCiTwfUxa4l35JVAV5Pi0YEx0wyTCR5lz16opB\na6jN4j1CGumHSzDj0avvHeWAOlpvpBiupW51yRE90qL/yanw61D+/Wa8m5ox\nhCq8uQV7p1A87rPiV7P5ZaZFGTNIdtvH9CckBDzwMlWG/KEpvg7PXiUcDJXZ\nB3KQ9E/u5XvGJjQA4qBvE6UfKgg8QbPxpnQkSTQOXwPP87mD9bHmQWrnkeYW\nCLIQpFBcEEVluAPO/kSz3pKiZNGgW4c+FMW5gPdoj/+fGIxNXW958xkVj3g1\nR/L44qXACNRza33IFEtGcB8a2V/clK34GpuGpDEbAxXCTr0rsULuuS7Kc9UY\nqVHaTYWNBExdm2Bdv8XsMVd/FJ1WU2+6Gin22gYV6b1s+AkT40hLDJlIYQ43\n+6sN\r\n=0d9Z\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"a68a3cdef8a53075b30f09c306adddd80836637f","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx jest --coverage","certs":"mkdir certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"npx jest --coverage --coverageReporters=text-lcov | coveralls","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"6.14.7","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"14.7.0","dependencies":{"ws":"^7.3.1","uuid":"^8.3.1","redis":"^3.0.2","bluebird":"^3.7.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.4.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.1","eslint":"^7.12.1","prettier":"^2.1.2","coveralls":"^3.1.0","puppeteer":"^5.4.1","pre-commit":"^1.2.2","npm-upgrade":"^2.0.4","babel-eslint":"^10.1.0","http-shutdown":"^1.2.2","parcel-bundler":"^1.12.4","gradient-string":"^1.2.0","@cucumber/cucumber":"^7.0.0-rc.0","eslint-plugin-jest":"^24.1.0","why-is-node-running":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.17_1604074574179_0.3014390119097363","host":"s3://npm-registry-packages"}},"0.0.18":{"name":"@anephenix/hub","version":"0.0.18","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.18","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"e599795803dfb3b0417cc7904c55897e42264592","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.18.tgz","fileCount":52,"integrity":"sha512-7rABXO8X82KZz2mpRV6eC9wmFQ/xASO8OMBHZ8t1GJXf+GzxctW/Xjo/NMNScPgz9A/LtMIHmmPw78FlI3Eexw==","signatures":[{"sig":"MEUCIFiAelmCmmUQ0A8mvTUwKzBxWceMflh2r2s3fUwXSbJXAiEAtsGB+v03BmeqVgya9J4MCkVxB4ufm0Lbnqch+vgYN+k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":184047,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfwyiPCRA9TVsSAnZWagAAdW4P/RFbI3bwT36u4kKB9+0Z\nk1/7G8otItcW3NdpWFdutBpXujm3aHa4BfB3s0m+XUvajRy+OnUC2OQarEkb\nGfRW9NP3aPN5aLgnrGsdAbO1BgT1yX1RxwHFkGTnlgu3YycmtA2Jox5gP7AV\nn2iPDXdSE5tz0SvIlLfmZWPNEMaBmo3QT3IBkJEFvobqPLCp5h0ydntm6mmb\nxkTwB/lmg0mw4aaofoen8dp0AXEzPQ83pwl5T5pCzkjId71DnKrv0hXQwPSc\nxgJs4a3cZCxH7Z9OiAwnWVJrY5meSf/BPt0D7ScPADcyn20dh+LTfKVBwp7y\n3lzUXTu5cvI7O0nLhrWRRQLJ2/OjVd1DhkfzMPMi08zqXlvu3alZxBgIGZQ6\nSAwJhJWy40LVVfLjdztplZAZ2wTzpSgnceO3hOqFmjKGgTMPvprnuPjwLdp7\n71kbuDfA0Ms8bFkQ+CBhguUm3R7aEl0tJ1rlfNm4KKRRCsfvm6n0d1eA0aRx\nl9FfMuxQykYOreg1nc82+5ChdgKGC9qQfESrzIGTRsZNdXGKtdF7LHzXAs3t\nGMftiCLWR6k7yF8SSgdPL6BHzKGIvRnwRQoEYvrEnbn//sXuFZxo72YAHuZn\nCPP1QWl5KUi6AXpHpSsA78tNgA7QpKCKtstTQgZsVnHN9AR1fTCgAl7GssPl\nniwB\r\n=IbY6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"57e6e633f5fd77840c479b17b34657fab52a3933","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx jest --coverage","certs":"mkdir certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"npx jest --coverage --coverageReporters=text-lcov | coveralls","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"6.14.9","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"14.7.0","dependencies":{"ws":"^7.4.0","uuid":"^8.3.1","redis":"^3.0.2","bluebird":"^3.7.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.4.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","eslint":"^7.14.0","prettier":"^2.2.1","coveralls":"^3.1.0","puppeteer":"^5.5.0","pre-commit":"^1.2.2","npm-upgrade":"^2.0.4","babel-eslint":"^10.1.0","http-shutdown":"^1.2.2","parcel-bundler":"^1.12.4","gradient-string":"^1.2.0","@cucumber/cucumber":"^7.0.0-rc.0","eslint-plugin-jest":"^24.1.3","why-is-node-running":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.18_1606625422730_0.19200559783426763","host":"s3://npm-registry-packages"}},"0.0.19":{"name":"@anephenix/hub","version":"0.0.19","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.19","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"c5be1da39fca8af72e28bc773c8e71bcb98ce49f","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.19.tgz","fileCount":54,"integrity":"sha512-/ioUKDxSoD7A/00/vWuo5JOTqY7JN1BvVdSGh7jWLiTPsYI/FPkWZ/FkKl8mXVcAG3sVT8QgeRxc17sD8uxA3w==","signatures":[{"sig":"MEUCIQDqU2bKMP/wMYxfPHEx76cvQo3JuUVZKMw8c+Xc3unccwIgKKBSWUYjF/tEr+JWNnybpbgFB7LADalkzLCVg40t9s8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":187497,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxrvMCRA9TVsSAnZWagAAG/EP/RgvUtXcap7zJGN942z8\nleIyNmeeKT31ZJe/KDIj31tnOROkfb6X6fhcfuIBxJ4osu5ZnV4UF/6J61vt\n1pRPlmmu4hLAV9BAZeMGtrFkGeMkb2SXnA812/9pI3fcJ4XGyG6nE4QZVM1K\nGT48EkQ2a5kTR8F0LnlRXrDQqX5onAAdad8FUlTpxuiC/uWhJMVgcheD7nPS\nthh46FJmwRJ5RpykcHDa0gkzO40Ltp9jn6+XUV//IzpZBhfrM6DIsYzIHnmh\nOQy2MwxoFdSIVkp+lxXeRO6b2QSLzVWjNNjsKU2+F9p0VUGIc6qskdIxj/6T\nuJwraewN802VKjTN4RxE6lhhA7LgXWdR2hcObLi8o1JVnQm/fww00JPK3qdb\nQ0Thyhn2Wnm6V1U495O//J4DXTmN4eDDCh1V9PpwOzPysVHYLGFYlajv3CQv\nUWa0uHkFZFgV87nYEA4L2OZI+mK1sieULZ8AnNkldt86V5emVrLzqL8UjhRu\nBptELmbaRc8ovXTLkbbWvSGdbcVh2Tk6ozz9lh0OHA5EFpYCSqlngXTQlgK3\nqiSyJAh9rnrrRfLWY0s1e1Tuop2g0Kd/MK+MIb0isQvYsRM/kYkNM9g9130S\nXpH+0qVBdS6YbrZ8GSpRJ1S9HnhtXzsKvOe4txsiBh8gW56TTvVT9ut/9eWf\nsnOm\r\n=IQJt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"abb6bd0d120cbba5110d8a35192e49765c05c4a7","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx jest --coverage","certs":"mkdir certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"npx jest --coverage --coverageReporters=text-lcov | coveralls","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"6.14.9","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"14.7.0","dependencies":{"ws":"^7.4.0","uuid":"^8.3.1","redis":"^3.0.2","bluebird":"^3.7.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.4.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","eslint":"^7.14.0","prettier":"^2.2.1","coveralls":"^3.1.0","puppeteer":"^5.5.0","pre-commit":"^1.2.2","npm-upgrade":"^2.0.4","babel-eslint":"^10.1.0","http-shutdown":"^1.2.2","parcel-bundler":"^1.12.4","gradient-string":"^1.2.0","@cucumber/cucumber":"^7.0.0-rc.0","eslint-plugin-jest":"^24.1.3","why-is-node-running":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.19_1606859724261_0.61532195154966","host":"s3://npm-registry-packages"}},"0.0.20":{"name":"@anephenix/hub","version":"0.0.20","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.20","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"f2438f0cc0157b850ce3f82c517f52f3a1b5d8ec","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.20.tgz","fileCount":56,"integrity":"sha512-X7JPaw0CH8PNYTYAkttxm43Im1X7xzSvXfb6SGwjnCozAkZ0tcyiKKnBvNFt+GOOfgyjPmQfQyMzuSf5sYMGBQ==","signatures":[{"sig":"MEYCIQDCX/hV3YVCQD1HHWbbzOHpbRndeBKFEVHqtGSeOanCSQIhAOaDWm2TYFwuajn19mu21nSQJ7vXKQNTjwhucdgbnHgM","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":205173,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf7GKICRA9TVsSAnZWagAAutsP+we0LGDQM1JNiAsveFi+\nRkamrP3Yv19lJIZFqDK4W0B9neCYi9D6LS2b7g5ltNsS3zcTKRBC1wj61l/p\nJz4ROx8tW9+NB5ySxNq4F4b2mKGBrlxMCxQoaJXtcZXKLshqrfiKUXA27je3\nBgRPrVSjnPyX3zfB4WeLrzUNOpzciDzFfAfyUyYKiwQr77Dt8jNDNco6d2Ef\n/x3/w9ZufJJy5LQNcxoWvvTuUbl72MTi06iBphw9NOS+WO1qdvJqV4V+hcvA\nJ1Zi2Z1bL0dlQVwhcuvrSAoK2/bCKLzcLjoDocyBRfFSjwVY1jYkbCccHRUX\nVR4cEHfd0wM+3C+BwABJ3mfMT82XzlpU5V/jLEco38My3iNZG1b0QnPaBpox\neTuEEB/9SMZsG1X3G3ZgQNxigKAKBpDr1UkYr4is0DtnzvVvApL7IQfpaZsF\nG1ghrsbVGSUo6eTOiPA0RFol75RwyhpLmY33gG7/iRakFhZkhp9q3J4GHvN3\nlizhqTkQKyCL7bbG6KZAi2IEjqylPAc9ZSYJF62y1dSzO1zEkFwcho2MSs5C\nyki+1d0lJGjXazJ89PF4Oaobyo/+WDsOUksW/Hish7dIJHfD+dAfEzcjpFt9\n4SOYr/U4wwhB/DyiTEb4BGLK+jU4m9TS9/xkKS61x46ts5m6fSxfiAHcLf5M\nVz0R\r\n=s31w\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"e46b2155f113a79e21be2a067bea74080ff2b21a","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx jest --coverage","certs":"mkdir certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"npx jest --coverage --coverageReporters=text-lcov | coveralls","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"6.14.10","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"14.7.0","dependencies":{"ws":"^7.4.1","uuid":"^8.3.2","redis":"^3.0.2","bluebird":"^3.7.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.4.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.6.3","eslint":"^7.16.0","prettier":"^2.2.1","coveralls":"^3.1.0","puppeteer":"^5.5.0","pre-commit":"^1.2.2","npm-upgrade":"^2.0.4","babel-eslint":"^10.1.0","http-shutdown":"^1.2.2","parcel-bundler":"^1.12.4","gradient-string":"^1.2.0","@cucumber/cucumber":"^7.0.0","eslint-plugin-jest":"^24.1.3","why-is-node-running":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.20_1609327240069_0.002531166956507791","host":"s3://npm-registry-packages"}},"0.0.21":{"name":"@anephenix/hub","version":"0.0.21","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.21","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"0f7047a98a46c99e87b3d4749beabdf39630529f","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.21.tgz","fileCount":57,"integrity":"sha512-TvxR0RxmIYCmJe+i+kznSF0xtL2cXfB5ubqOMhk9hwQnkzVjXL+tLxO78s9gyJyre5d3GyvIyfgwk8pHPzmkaA==","signatures":[{"sig":"MEUCIQCjFcoPPoEYpJ5gChRkUvtLaxKtOeobuXkm+NmTtBJ8/AIgOffKbBFgRbLUPeSU0b+1Suoqtew3I5CPMcRJ4DZw02I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":208647,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhF3erCRA9TVsSAnZWagAAbmAP/AxWsmrsVAUDWKWxc2ZX\nHCHeZsJGoMee/3d3bH75gHuW9thj2IcuekQdLv3RDdBG02tI/O/BNiYBzlwW\nFsXy9P9+cmOSeGqNrFwO/rw2esxK9sapwg92Mi6FD4BqGpmp/ApepGO7vvRN\nFC/R88cUKvyOmkYUI3nfsJJ/ppJdjli+X32z/E8wqZhJsFd5XLtpppBvBIMZ\nF/vbm4dDpHDXLECpSHEIP7FyHJifPS91ZPXqAhTaaOqyXu2RTWQPQ1AihShB\nwFQe7VPtzlz4CNhseyRRPRYMVUakS4iecJMLHETrCT5FOFEdVKkElz0VTeE5\no5VHbo4iEq1VShFHjm4FGxhi9cTxSN/fV42qiDBzmUgGwVQfpmLAcAQCR8wi\ngbbG0Vc7qSkMCVcaUFrMABJVhsdCEUhmKVn44n3xk9ya4AjQHVV/bYkQQoOD\nqEkUHZlarfvgwis06PZYSEVR/SGDBdqTQ19k8At7m7EvXWAW9KNuAkJu2DGi\n4VNBQYT8pDr88SvZ9KzAzzhb4J0KxRdwmEVku5//u7QbS0m+5j3znsrPFiuL\nxjP/afdyL5WCLH2oq8XAinr2SvWx68y6vxjBTBFqMVriMWEloojmX15ywXVN\ney+vDY/D4dP7xnr7IzX7Ml117dHDz7o+AQpt/1dwkpFqYTo7r3EUUlapMCbA\n3dgU\r\n=3Al5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"5b93de6a73bc8ace27d48c340aeeefbc504e0876","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx jest --coverage","certs":"mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"npx jest --coverage --coverageReporters=text-lcov | coveralls","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"7.6.3","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"14.15.4","dependencies":{"ws":"^8.1.0","uuid":"^8.3.2","redis":"^3.1.2","bluebird":"^3.7.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.4.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.6","eslint":"^7.32.0","prettier":"^2.3.2","coveralls":"^3.1.1","puppeteer":"^10.2.0","pre-commit":"^1.2.2","npm-upgrade":"^3.0.0","babel-eslint":"^10.1.0","http-shutdown":"^1.2.2","parcel-bundler":"^1.12.5","gradient-string":"^1.2.0","@cucumber/cucumber":"^7.3.1","eslint-plugin-jest":"^24.4.0","why-is-node-running":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.21_1628927915220_0.32857541811836577","host":"s3://npm-registry-packages"}},"0.0.22":{"name":"@anephenix/hub","version":"0.0.22","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.22","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"1a60b8e37e524f3fad28ec952fcec6bb807500f3","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.22.tgz","fileCount":56,"integrity":"sha512-2Vjz5KajWdHyG5QowJwVv33ev/uQrGExWbIUgfTdJrTyC3+YmTDlAP3f8zk7Ct2aeZ9JnrlKALT7bh+T8L0Jiw==","signatures":[{"sig":"MEQCIGoIONxx+FmzvP65wWaJComB7Spofd9QuyGKWwpKrlrHAiAfkcN76M1GjC0nWTm8I53caE8sdW337TRqWbVefyOIGw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":208351,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhwyJ7CRA9TVsSAnZWagAAWLsP+wbjT2uQLucuWr78YGHc\nhQTVVck6rk76eiA/DJyTmUwYNiIZz3rlEQ88n2EwZtJeUfPRwDpCkH4AJP5F\n4RN01UXgFzN3KhTXTWt3/1pj69Xk2cFeQq66QfqZWE6z6Dx5Kq6amt1PA018\n4Po5MmBKot1QgFqNOQOVdBtyN3n5mlgeqDnu1wj5FZF0/83DxAlXBvoUpphx\n2hgzNUJ/NSvBLSoXYkhs1zxDWg4Fbz+LWgePYGDobhFw9H9nIdX86dWm3XPF\nGkgSRpB1boZHT4hgfz+Ykz+cth9S7c0A6vex/kaRIin9iHYhbYyCgOh4L1bK\nzYR3MNaraaszejIqwdeQ1UwlXoa6gnnPwAl29CHQsbLAOLeGoU0W6t2vBmD1\n+etqn0VnkymQjP6/K5GwdJMVsSjUJ/JhsrX00ee29OIBJn/ESR1rfXTqGIvx\n8oNIEiIhFUqfiwmEQqNlkqYZFob3LBXpNuCcTy4/alBCGndKVrSVKoidEIir\noy/OC9YMHJqeAU+3tl5htJAGP7nhcvCaHHsMaPLrcgld1bd8ig3i8cqMEG+H\nkK7WfSMOEedEEIvr+SxoI0PI9mBHFgQpf0UPNDFAMcYW4bjlvTPE/BAQu9fN\nG57Eqk+Gw1vmqQ+nmyvgPsFREgqvTBD3oIn/BncSnfHykoBR4zpnstjmIEsy\nJM+3\r\n=lJws\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"a50d40fdc97665077f329d2799816890b640b3cf","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx jest --coverage","certs":"mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"npx jest --coverage --coverageReporters=text-lcov | coveralls","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"7.23.0","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"14.15.4","dependencies":{"ws":"^8.2.2","uuid":"^8.3.2","redis":"^3.1.2","bluebird":"^3.7.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.4.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.2.3","eslint":"^7.32.0","prettier":"^2.4.1","coveralls":"^3.1.1","puppeteer":"^10.4.0","pre-commit":"^1.2.2","npm-upgrade":"^3.0.0","babel-eslint":"^10.1.0","http-shutdown":"^1.2.2","parcel-bundler":"^1.12.5","gradient-string":"^1.2.0","@cucumber/cucumber":"^7.3.1","eslint-plugin-jest":"^24.4.3","why-is-node-running":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.22_1632893089131_0.735352001115591","host":"s3://npm-registry-packages"}},"0.0.23":{"name":"@anephenix/hub","version":"0.0.23","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.23","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"4fc06118ebf0b41a0259c1ab9ace8700eed2327c","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.23.tgz","fileCount":60,"integrity":"sha512-fz7cgQ+N6T4kvPWU8qh1CrFmT/1FgQFZ1qNj0caQ/qV3dnIidTSrXBMFl6PDkjFFeQsDDLq3xZfdLGDQ3JoOZA==","signatures":[{"sig":"MEYCIQDCKBRF1/Y9la9IzMw5P131JPF34BC1a9eZzHkKrKaqoAIhANJbOO6p9Bx80mqgp1fk7R6HYGcZg1C5svmRQqfDoHNF","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":204869,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjcw+HACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqpcQ//fq9jsCveU2G0BH6VFycoFMnmzbuAsA2dgXw8foKOCKbA+1eP\r\nbyNq6InJk6N1xE66iVYtPx8GIbfq5SqeYwv8YlZD+NK1Xn78HxSs44HSw1g6\r\nwCsPAszQhm9I8yHo8JqVp1T9+J1Vv8t4qK6XWJzd1Xg4bPinLa0aD5oFUkwr\r\nqp/jZVhnIXJg9Ho+c9FrB+rusyCOZB8axQwyu6UF395yLz0nxVgkvaU9GHtY\r\n3BHVQ3kJ0+3IF+YqlXrgw15Mc/2SCAleNvvhe/scWNtJmIEDujPx5pqRE05t\r\nxXOdUk77ztT6uPTVby+SaIkStQ5UnGLb3cQJe3n0JRaKYxPDQBrgEg+WPgoB\r\nTBdUSEaZS+hL2i/Drrs1xZYdaAK/yNnImR6kMQc68wdxiS+jrWR/8EvNg1ON\r\nzKBx/O9rpipUr0McPz0ODurjvoZwO4QzVZYd7O2iYnNxoXa9YJfSTi6lnniV\r\nQtpKfWrYeRpBalaKz2l589BYRVbRuW95PZmDPPdMDYpfz2kZdnZyFhklnO1g\r\nZeoc7Kotqq0ctwsdywxBJr2Jha1kQa19CHqpACjPV49+EP9kZcTOETAg9q9d\r\nfFmA0G1b4LYuf2rjTybHz9mq6uEk9+i6bzIQ2EpfzUbrGgyySSB7pLpzPQGp\r\noHsNr5l5bVatD6Li2KuIWBvUoBWZqVkieZk=\r\n=ndeW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"ca29acc734c9eef3c583e0afc4c3130e6df55f53","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx mocha -r node-localstorage/register __tests__/* --test --exit","certs":"mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"8.5.0","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"16.14.2","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.11.0","uuid":"^9.0.0","redis":"^4.5.0","localStorage":"^1.0.4","@anephenix/sarus":"^0.4.3","npm-check-updates":"^16.4.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.1.1","nyc":"^15.1.0","mocha":"^10.1.0","eslint":"^8.27.0","parcel":"^2.8.0","prettier":"^2.7.1","puppeteer":"^19.2.2","pre-commit":"^1.2.2","simple-git":"^3.15.0","npm-upgrade":"^3.1.0","http-shutdown":"^1.2.2","gradient-string":"^2.0.2","git-changed-files":"^1.0.0","node-localstorage":"^2.2.1","@cucumber/cucumber":"^8.8.0","eslint-plugin-jest":"^27.1.5","mocha-lcov-reporter":"^1.3.0","why-is-node-running":"^2.2.2","@babel/eslint-parser":"^7.19.1"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.23_1668484999162_0.9089696288773703","host":"s3://npm-registry-packages"}},"0.0.25":{"name":"@anephenix/hub","version":"0.0.25","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.25","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"a993586887cdcdf1e979d77af6d412e5715c90db","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.25.tgz","fileCount":60,"integrity":"sha512-nIjG9Qrubk+nMIC0f2VnscZhwgxiIoM2sWrWtzMjXhrKUcz6+y+9IIja4gcGtfbUUhfR/fpvYfjom7opgfgZjQ==","signatures":[{"sig":"MEUCIQCvy4zEjGMvROQbDuw5w74Z2cPMkTupXtFYpFL7cg5oPgIgNCWp1r2fplx1FeNS8ASxkxMs/5qXom09GMSj3Febjt0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":207534,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkNSpNACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoW6A//Rw7ZGHShCyCA8YkigRYPyDzzcWY3efl1URksbx/9iMg34xA2\r\n210/8wGpvr8nYQd7QVWF0DHI9KbjtP5rk0O3JDyKFFemzw76fYADfSBHI2kf\r\n8Njhyv/twyf8LtmWDsF6jCC8tCdq4xH86r0GmCyiYOfpYvFkHuEz1MKNdppX\r\nnQXh1xbOgCFFgXv6GvTEenPiU9ebdlAxG++5qjMGqDX0jE3Z4i913GqScPdQ\r\nmWUatzDfROlTuP8BazoE1+QuK2/YMOsxoJn2pVZ91WfxTtZkK5ypo5rfB4Mv\r\nmkKJQF6bX7q4ktdkjxavoW/uV0oi824eovrTeYTYiViiG5xHVPU0os4HY6D6\r\nDsWjeSY/mO2RJICVPdvgjTbW5Nh5ncZHZq0QD58eyojlXx0DdfDsUqRmHYN2\r\n3cFfXiE3nkrvGGIiKJ8p+3/p+9H4zIdoxeRiXRQmehFTOdyGe4VWAxyJhc+s\r\n4NTpIvZ3QNFh5UeTOie0OoNku0j00Epq+so1EIWZ3t6ig9Gw5+qF57TnampI\r\nf/6bO681bDg5HrvCCtnPbL/2ZgMDdYGBO7uwt4AUKUKoW1aWs1TMdJga6Lwf\r\n7Keom2IkFA56jjA0eNkRMgOTDVDry+AlkqPQazYgjjl4ZCtjBTRFTm1LwsBZ\r\no1xHdXpYD9YI65YXvW4SfYnwh17uRlmBzyw=\r\n=tTjn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"93626d1255c53c123a228d59eeb9078b9e6af215","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx mocha -r node-localstorage/register __tests__/* --test --exit","certs":"mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"8.19.2","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"18.12.1","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.13.0","uuid":"^9.0.0","redis":"^4.6.5","node-ip":"^0.1.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.4.4","npm-check-updates":"^16.10.7"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.4","nyc":"^15.1.0","mocha":"^10.2.0","eslint":"^8.38.0","parcel":"^2.8.3","prettier":"^2.8.7","puppeteer":"^19.8.5","pre-commit":"^1.2.2","simple-git":"^3.17.0","npm-upgrade":"^3.1.0","http-shutdown":"^1.2.2","gradient-string":"^2.0.2","git-changed-files":"^1.0.0","node-localstorage":"^2.2.1","@cucumber/cucumber":"^9.1.0","eslint-plugin-jest":"^27.2.1","mocha-lcov-reporter":"^1.3.0","why-is-node-running":"^2.2.2","@babel/eslint-parser":"^7.21.3"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.25_1681205837588_0.11036922857626608","host":"s3://npm-registry-packages"}},"0.0.26":{"name":"@anephenix/hub","version":"0.0.26","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.26","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"580fc6082cb4639a072511bdfdcd37adc4c2b560","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.26.tgz","fileCount":61,"integrity":"sha512-FoGfPDol+9fRSNAyj+N3dg+mrg/LryxnyxodfVGmIOS8UMwXWeP9eXwrJFdRzU23zt55RERjY4gWDakI55lYyQ==","signatures":[{"sig":"MEYCIQDo8IT9JHjEoWukrOsSzDosRy1FWBKmKkSdvI/xqRrFPgIhAIpvqYtjZqodVYSUinEESScBZrmT0IPsDUrgE2rF74Be","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":209168,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkNqLRACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoNOQ/7BYA+7ICGzoDqNssk5ydpYp0GwgQeUvFVoW6G/NoqYPIkmiKq\r\nRhtDhM51BVddYvhtt/sDJSgy6vSmp+NxNLs4m9VD1LNvjrKvZTgS3utDIlef\r\nzYTrRkCgszOY2WrUk9EzHV4ytU/pwH+jf+/VnecARyVpzUdnUxqh2kX1kMUH\r\nVOBhZgv4nfOQ4VO7mP++HL/0E7y+6TQ9NPtiVSMbZrcIKxnaglBAu26Ai+I3\r\nKyOp3YCtx3L0AJn//K3lLJw7msPE216gz+c2ORevWOR1io4ti14RAVljABk9\r\nEqUCaFIRs/Y+hLtAe2PQXcMyYY+xpFFia/rGOgcsr1yQK98HhxuDj86bOWTT\r\nZ8DttZoTJL3v/moWLzZ6IQVMxeFKiKzolaqHml7i3xBU0XWDRe5K8izIKY7C\r\nemwFD/KhrakvaCj8lptGlp1bejZmHNOadfBM52ZpyQCfuam86bW38tL2EUGt\r\n3DkWI3fRYG0yN9bJIA/08XegGI5YP7cjrGuHQLV1oIRBrfmjC3Rpi+piUXE/\r\nlTh56oIKaYcpZR9zcenN1QnlBI5dgWJU4Mnd5Sm0J0pJDKGWAHJwWjV0zeEy\r\nGKqP9fzdtLBvDCKCdLxWPaEOtrgtBno+KWnNrjs0PpIgLd9iQ5V252ccptzo\r\nJTs6vwil95IcXh19NGjrZIbpJj6FwmqzYOs=\r\n=hby4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"4a3be333fa01a1902d541477a5ab60795b00750e","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx mocha -r node-localstorage/register __tests__/* --test --exit","certs":"mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"8.19.2","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"18.12.1","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.13.0","uuid":"^9.0.0","redis":"^4.6.5","node-ip":"^0.1.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.4.4","npm-check-updates":"^16.10.8"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.4","nyc":"^15.1.0","mocha":"^10.2.0","eslint":"^8.38.0","parcel":"^2.8.3","prettier":"^2.8.7","puppeteer":"^19.8.5","pre-commit":"^1.2.2","simple-git":"^3.17.0","npm-upgrade":"^3.1.0","http-shutdown":"^1.2.2","gradient-string":"^2.0.2","git-changed-files":"^1.0.0","node-localstorage":"^2.2.1","@cucumber/cucumber":"^9.1.0","eslint-plugin-jest":"^27.2.1","mocha-lcov-reporter":"^1.3.0","why-is-node-running":"^2.2.2","@babel/eslint-parser":"^7.21.3"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.26_1681302225075_0.9101178693592908","host":"s3://npm-registry-packages"}},"0.0.27":{"name":"@anephenix/hub","version":"0.0.27","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.27","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"74b0a371c5ba9958e4d21a47fcd19fcacce13d8d","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.27.tgz","fileCount":61,"integrity":"sha512-Ok9r1DZ5tVfXYE8Ow91GXHl9Rx/VCp+HpgOdrnbXukMJYkqoAv6fHwvkneWTaAMjUWpwPxI16o9VAqy4B9nnHQ==","signatures":[{"sig":"MEUCIBZG1mAip10GKRNxXOCSqRkXl40WF7zx3y34i6ML4VRrAiEAxnN9JiUVzdhEUY14n48GQwy1H/AQPoOOpLpRDplp77U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":209220,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkQkFGACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqWmw//aHxypt+wvbOBS+oK5TmFM4J3ZE3gpF68OxVg/4CIkVeba5BC\r\ndSjzIOxPxfzYPh5rBfRmyc/uJSOT046RwfDrJj346E8TM6RVVoYbhBE3J80v\r\nFNWwS9aYY0rTHl7aA198I1GakOk+NpdmNO3JhFuzawxN1kxhPS8FUDoQn3W5\r\nYxb14Sd/cnnkV9uDZ2fR4tOaFMm5ikqcOTDCYQfy4ufyNVs8El95mYq62IVn\r\nJkAhvf/6Gs1e+cylGGSvj3didIcDuVMu1qbISQwYPg4rWrAtUh1lnWVe0X/p\r\nk37wn9ZiRQ/Dxv0ZNTaxpADQWm93Y0IjCBCGJ7xYa2zEbGxPr3FSBd8N6/LV\r\noJwfwWHOvGU8oe0DNs/L4+nOxxYg2IQLPS3PIgXVENMl8svzhK0UPiVv1SZT\r\nHilRnG3bcplNpfOnxdhfiWeqebXJgohbl2kg6GM9iJlIJ+Ach6Ib5FZ2r9q+\r\nyyGsYqYXIWC6l8BehVOkCt3ONCspZSWn7hvZebWZlB97eJUhcMQjQvOyzNDa\r\nSA2cnO/lxgUBPrGZsylBr2M3L7QX5ct2yEZJq9uTzy+l2mIdJ4HeYeOw+WAm\r\nNMEHlJ2GxNtRnpeJ/dutJQZvk3yU5EHSOwMHuLLy8zJRDoaQbupGiOHj16VZ\r\ncuQX7kYoEEJ9TLGdY42RgS5M+am79bZ+WRw=\r\n=CI9N\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"8fd3b2ba0a0fed3af99e7e1a777c807fb061f7f8","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx mocha -r node-localstorage/register __tests__/* --test --exit","certs":"mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","cucumber":"NODE_ENV=test npx cucumber-js --no-strict --exit","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"pre-commit":["lint","test","cucumber"],"_npmVersion":"8.19.2","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"18.12.1","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.13.0","uuid":"^9.0.0","redis":"^4.6.5","node-ip":"^0.1.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.4.4","npm-check-updates":"^16.10.9"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.5","nyc":"^15.1.0","mocha":"^10.2.0","eslint":"^8.38.0","parcel":"^2.8.3","prettier":"^2.8.7","puppeteer":"^19.10.0","pre-commit":"^1.2.2","simple-git":"^3.17.0","npm-upgrade":"^3.1.0","http-shutdown":"^1.2.2","gradient-string":"^2.0.2","git-changed-files":"^1.0.0","node-localstorage":"^2.2.1","@cucumber/cucumber":"^9.1.0","eslint-plugin-jest":"^27.2.1","mocha-lcov-reporter":"^1.3.0","why-is-node-running":"^2.2.2","@babel/eslint-parser":"^7.21.3"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.27_1682063685989_0.27104931558270295","host":"s3://npm-registry-packages"}},"0.0.29":{"name":"@anephenix/hub","version":"0.0.29","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.29","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"99c89bcf953f7db1e03fd6477aeefd205a11610b","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.29.tgz","fileCount":68,"integrity":"sha512-bX/8TE0FBqnlmryWKl79UcX0sh0apUAICNiPL7Z/rzRlDIO7ieruXMlB9RNKgxMCI/++QFOjpQCZtwnF52vnOg==","signatures":[{"sig":"MEQCIBZipU0DZQp60LZDKgFkmspZ8luBI27Ocq/IXwbCFTiJAiAKd34628Ysr1ca564I0sEyn3MaFwePTfxpuccNDdnilA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":252060},"main":"index.js","husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run cucumber"}},"gitHead":"c4b6e2ee3403b86fc489b0148e34392179adc855","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx mocha -r node-localstorage/register __tests__/* --test --exit","certs":"mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","cucumber":"NODE_ENV=test npx cucumber-js --no-strict","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip","update-changelog":"node scripts/update-changelog.js","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"_npmVersion":"10.9.0","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"22.12.0","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.17.0","uuid":"^11.0.1","redis":"^4.6.14","node-ip":"^0.1.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.6.0","npm-check-updates":"^17.1.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^11.0.0","nyc":"^17.0.0","husky":"^9.1.5","mocha":"^11.0.1","eslint":"^9.3.0","esbuild":"^0.24.0","prettier":"^3.2.5","puppeteer":"^23.2.1","node-emoji":"^2.1.3","terminal-kit":"^3.1.1","http-shutdown":"^1.2.2","gradient-string":"^3.0.0","git-changed-files":"^1.0.0","node-localstorage":"^3.0.5","@cucumber/cucumber":"^11.0.0","eslint-plugin-jest":"^28.5.0","mocha-lcov-reporter":"^1.3.0","why-is-node-running":"^3.2.0","@babel/eslint-parser":"^7.24.5"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.29_1737059345073_0.6391282630598858","host":"s3://npm-registry-packages-npm-production"}},"0.0.30":{"name":"@anephenix/hub","version":"0.0.30","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.30","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"9cd338b127c939c350ad9fc7341c4e989eac5b87","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.30.tgz","fileCount":68,"integrity":"sha512-18DT/VIvuFchkzZr9a9iruuhRt4Ox3HIcmHYsSuBoen/obCxrTftV6OWjC8tLje8ZvkFfvTiIqmc59A67q4YMA==","signatures":[{"sig":"MEYCIQDj2C4HSQNeUG4zgBr1vlfIa5wNtZ5a2YJozaqf6xoAgAIhAJSXSL3cq9S8JpfRquNZB3+rg1aABxMXAOPesqwxz0L2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":252893},"main":"index.js","husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run cucumber"}},"gitHead":"879e67d131a41aed432f6104ee3565f839b489a7","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx mocha -r node-localstorage/register __tests__/* --test --exit","certs":"mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","cucumber":"NODE_ENV=test npx cucumber-js --no-strict","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip","update-changelog":"node scripts/update-changelog.js","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"_npmVersion":"10.9.2","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"22.13.0","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.17.0","uuid":"^11.0.1","redis":"^4.6.14","node-ip":"^0.1.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.6.0","npm-check-updates":"^17.1.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^11.0.0","nyc":"^17.0.0","husky":"^9.1.5","mocha":"^11.0.1","eslint":"^9.3.0","esbuild":"^0.24.0","prettier":"^3.2.5","puppeteer":"^24.1.0","node-emoji":"^2.1.3","terminal-kit":"^3.1.1","http-shutdown":"^1.2.2","gradient-string":"^3.0.0","git-changed-files":"^1.0.0","node-localstorage":"^3.0.5","@cucumber/cucumber":"^11.0.0","eslint-plugin-jest":"^28.5.0","mocha-lcov-reporter":"^1.3.0","why-is-node-running":"^3.2.0","@babel/eslint-parser":"^7.24.5"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.30_1737804942970_0.5920690714202201","host":"s3://npm-registry-packages-npm-production"}},"0.0.31":{"name":"@anephenix/hub","version":"0.0.31","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.31","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"977586b895579c65b0edaccf9c6bf7ee05d8b7bf","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.31.tgz","fileCount":68,"integrity":"sha512-+qv+5UwmqjEXGeHEzi31GT7kU51b9CDm8v9Sm9moBLjfGCSITTy9a1Bfxsf2VUwTiYTwvt59lAVqLtTCJr2Nhw==","signatures":[{"sig":"MEUCIQDRYR6Zc7AF6B3rXCdGd3EOhyGy+u17xjBnehVknkonSQIgAKgb2809rFdwGMe//9DbVrY6o4l69udUSJhu/kCojRA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":254251},"main":"index.js","husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run cucumber"}},"gitHead":"018c7d73c595cb6d028c7e3068dbe3f6c21d4787","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx mocha -r node-localstorage/register __tests__/* --test --exit","certs":"mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","cucumber":"NODE_ENV=test npx cucumber-js --no-strict","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip","update-changelog":"node scripts/update-changelog.js","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"_npmVersion":"10.9.2","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"22.13.1","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.17.0","uuid":"^11.0.1","redis":"^4.6.14","node-ip":"^0.1.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.6.0","npm-check-updates":"^17.1.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^11.0.0","nyc":"^17.0.0","husky":"^9.1.5","mocha":"^11.0.1","eslint":"^9.3.0","esbuild":"^0.25.0","prettier":"^3.2.5","puppeteer":"^24.1.0","node-emoji":"^2.1.3","terminal-kit":"^3.1.1","http-shutdown":"^1.2.2","gradient-string":"^3.0.0","git-changed-files":"^1.0.0","node-localstorage":"^3.0.5","@cucumber/cucumber":"^11.0.0","eslint-plugin-jest":"^28.5.0","mocha-lcov-reporter":"^1.3.0","why-is-node-running":"^3.2.0","@babel/eslint-parser":"^7.24.5"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.31_1739619145301_0.6054582642579691","host":"s3://npm-registry-packages-npm-production"}},"0.0.32":{"name":"@anephenix/hub","version":"0.0.32","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.32","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"c77ad900b143bbdc0a823b3c58fe2c1313605492","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.32.tgz","fileCount":68,"integrity":"sha512-PxFCLb6KQuPakbl4R2q+XTSVjEXVc5aF1ni7p3BuFePMFLTtSrFJUqmkd/Jvu6YWBHdLHpx8sEriRa1Wo+H8pQ==","signatures":[{"sig":"MEYCIQDAcMpJTnVilgT2uEkaCHa5rCNUnzHSWDjwQhIOj6wLowIhAMjmyX6H9sUoTaodVjFZDVjSDmq4fIVyTf7caKTzLvNi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":255368},"main":"index.js","husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run cucumber"}},"gitHead":"18ef3b0174cf6adca5f3123cadc7836e90fb2d5a","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx mocha -r node-localstorage/register __tests__/* --test --exit","certs":"mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","cucumber":"NODE_ENV=test npx cucumber-js --no-strict","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip","update-changelog":"node scripts/update-changelog.js","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"_npmVersion":"10.9.2","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"22.13.1","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.17.0","uuid":"^11.0.1","redis":"^4.6.14","node-ip":"^0.1.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.6.0","npm-check-updates":"^17.1.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^11.0.0","nyc":"^17.0.0","husky":"^9.1.5","mocha":"^11.0.1","eslint":"^9.3.0","esbuild":"^0.25.0","prettier":"^3.2.5","puppeteer":"^24.1.0","node-emoji":"^2.1.3","terminal-kit":"^3.1.1","http-shutdown":"^1.2.2","gradient-string":"^3.0.0","git-changed-files":"^1.0.0","node-localstorage":"^3.0.5","@cucumber/cucumber":"^11.0.0","eslint-plugin-jest":"^28.5.0","mocha-lcov-reporter":"^1.3.0","why-is-node-running":"^3.2.0","@babel/eslint-parser":"^7.24.5"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.32_1740414744631_0.33686178711074977","host":"s3://npm-registry-packages-npm-production"}},"0.0.33":{"name":"@anephenix/hub","version":"0.0.33","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.33","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"0c10bba7cf5d9983b2f52c6afc744044a720d2cd","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.33.tgz","fileCount":68,"integrity":"sha512-4F4+LgrHOI2YXAPkSs2xr0NPxMVdOe7M+RgLHg14VfgqTV2WSmO1gdiI1gupAw2VFjA7fa1Z1ok/XgJWKy/zTg==","signatures":[{"sig":"MEQCIFTotXjDsPTqvrmlIqJzRuNlpcA0DVCCH+yQ0J34N+UwAiBHnfrFYL16vgRReacZJPV1rjdVtcJel5L97Tl2VNEXkg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":256240},"main":"index.js","husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run cucumber"}},"gitHead":"c01e0116edfc792176a509bad0488c0a2529f904","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx mocha -r node-localstorage/register __tests__/* --test --exit","certs":"mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","cucumber":"NODE_ENV=test npx cucumber-js --no-strict","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip","update-changelog":"node scripts/update-changelog.js","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"_npmVersion":"10.9.2","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"22.14.0","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.17.0","uuid":"^11.0.1","redis":"^4.6.14","node-ip":"^0.1.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.6.0","npm-check-updates":"^17.1.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^11.0.0","nyc":"^17.0.0","husky":"^9.1.5","mocha":"^11.0.1","eslint":"^9.3.0","esbuild":"^0.25.0","prettier":"^3.2.5","puppeteer":"^24.1.0","node-emoji":"^2.1.3","terminal-kit":"^3.1.1","http-shutdown":"^1.2.2","gradient-string":"^3.0.0","git-changed-files":"^1.0.0","node-localstorage":"^3.0.5","@cucumber/cucumber":"^11.0.0","eslint-plugin-jest":"^28.5.0","mocha-lcov-reporter":"^1.3.0","why-is-node-running":"^3.2.0","@babel/eslint-parser":"^7.24.5"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.33_1744116317456_0.40239769228644406","host":"s3://npm-registry-packages-npm-production"}},"0.0.34":{"name":"@anephenix/hub","version":"0.0.34","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.34","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"c4e64c76099b25ff96f804a66c955667bee13747","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.34.tgz","fileCount":68,"integrity":"sha512-XdBuKmIVTVU1dFJHvh2tRtWL/ZZf7oNdYbI8IprxNfLWtv4KDO3HsZ+y1ERR3fI+VK/TRRtlBMnRha47XwOEbA==","signatures":[{"sig":"MEUCIQDimOTYSOb62cYeSGmFzQpym+XcDDebESPcLVkB3HMFPAIgII31iOEHwRGO15pVE86IhNshPj2zCjWpqZ0w/hryifk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":257445},"main":"index.js","husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run cucumber"}},"gitHead":"890cbf0123a5293027b92a8ccf9899d53bf42d57","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx mocha -r node-localstorage/register __tests__/* --test --exit","certs":"mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","cucumber":"NODE_ENV=test npx cucumber-js --no-strict","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip","update-changelog":"node scripts/update-changelog.js","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"_npmVersion":"10.9.2","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"22.14.0","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.17.0","uuid":"^11.0.1","redis":"^4.6.14","node-ip":"^0.1.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.6.0","npm-check-updates":"^17.1.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^11.0.0","nyc":"^17.0.0","husky":"^9.1.5","mocha":"^11.0.1","eslint":"^9.3.0","esbuild":"^0.25.0","prettier":"^3.2.5","puppeteer":"^24.1.0","node-emoji":"^2.1.3","terminal-kit":"^3.1.1","http-shutdown":"^1.2.2","gradient-string":"^3.0.0","git-changed-files":"^1.0.0","node-localstorage":"^3.0.5","@cucumber/cucumber":"^11.0.0","eslint-plugin-jest":"^28.5.0","mocha-lcov-reporter":"^1.3.0","why-is-node-running":"^3.2.0","@babel/eslint-parser":"^7.24.5"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.34_1744116322599_0.2271965290791702","host":"s3://npm-registry-packages-npm-production"}},"0.0.35":{"name":"@anephenix/hub","version":"0.0.35","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.35","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"0690fa123d1bec5e42a7d203757dd27c97722ab1","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.35.tgz","fileCount":68,"integrity":"sha512-lNvOZTMjYUT6F+KdCE+ipPpO02ItU5JSN4wG4m+V5jYrTClCYk4ij47zTqI20c2eRx9lDvdUGWj1KTMgrkk3JA==","signatures":[{"sig":"MEUCIAO46KeYj77cxaHfQic0QMMoauOcCBPeoknftn+GfMS+AiEA7ufUV1sCLZb0Y2ePgnOFaY0ACZ7hOlBpnmrQ9Wlm2l0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":260644},"main":"index.js","husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run cucumber"}},"gitHead":"8e0eaa036d1ce96fa70512a814af1e674a76e88a","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx mocha -r node-localstorage/register __tests__/* --test --exit","certs":"mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","cucumber":"NODE_ENV=test npx cucumber-js --no-strict","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip","update-changelog":"node scripts/update-changelog.js","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"_npmVersion":"10.9.2","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"22.15.0","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.17.0","uuid":"^11.0.1","redis":"^5.0.0","node-ip":"^0.1.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.6.0","npm-check-updates":"^18.0.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^11.0.0","nyc":"^17.0.0","husky":"^9.1.5","mocha":"^11.0.1","eslint":"^9.3.0","esbuild":"^0.25.0","prettier":"^3.2.5","puppeteer":"^24.1.0","node-emoji":"^2.1.3","terminal-kit":"^3.1.1","http-shutdown":"^1.2.2","gradient-string":"^3.0.0","git-changed-files":"^1.0.0","node-localstorage":"^3.0.5","@cucumber/cucumber":"^11.0.0","eslint-plugin-jest":"^28.5.0","mocha-lcov-reporter":"^1.3.0","why-is-node-running":"^3.2.0","@babel/eslint-parser":"^7.24.5"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.35_1748270680752_0.048005927467178244","host":"s3://npm-registry-packages-npm-production"}},"0.0.36":{"name":"@anephenix/hub","version":"0.0.36","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.0.36","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"57f2ca9d6c29f69fd2a3f05dd7bd01ddb492afc6","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.0.36.tgz","fileCount":68,"integrity":"sha512-IWzPO+AkT9MIN3NXR37BhvP6Cwh8cXx7+mzCk6m3xRTf5t/mWLko7bl6ttn+H4qJt9A67aD1vSlVauSOK4Z3Aw==","signatures":[{"sig":"MEQCIBD9mP1yuGguFccow+3Tfv/K5oNGu5KvV+kZNgwicEd1AiAJlgpmrZPpZuuQMxwQyA9Amdae5OH+yST4h57tRymrRQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":261740},"main":"index.js","husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run cucumber"}},"gitHead":"511d31d60eefb6e4ea36d06530abc89ba778be04","scripts":{"lint":"npx eslint .","test":"NODE_ENV=test npx mocha -r node-localstorage/register __tests__/* --test --exit","certs":"mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","cucumber":"NODE_ENV=test npx cucumber-js --no-strict","cucumber-wip":"NODE_ENV=test npx cucumber-js --no-strict -t @wip","update-changelog":"node scripts/update-changelog.js","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"_npmVersion":"10.9.2","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"22.16.0","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.17.0","uuid":"^11.0.1","redis":"^5.0.0","node-ip":"^0.1.2","localStorage":"^1.0.4","@anephenix/sarus":"^0.6.0","npm-check-updates":"^18.0.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^11.0.0","nyc":"^17.0.0","husky":"^9.1.5","mocha":"^11.0.1","eslint":"^9.3.0","esbuild":"^0.25.0","prettier":"^3.2.5","puppeteer":"^24.1.0","node-emoji":"^2.1.3","terminal-kit":"^3.1.1","http-shutdown":"^1.2.2","gradient-string":"^3.0.0","git-changed-files":"^1.0.0","node-localstorage":"^3.0.5","@cucumber/cucumber":"^11.0.0","eslint-plugin-jest":"^28.5.0","mocha-lcov-reporter":"^1.3.0","why-is-node-running":"^3.2.0","@babel/eslint-parser":"^7.24.5"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.0.36_1749541208844_0.08312680519837445","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@anephenix/hub","version":"0.1.0","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.1.0","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"48e2a65d5bb32e4d66b83357fdae278c4e90fe1c","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.1.0.tgz","fileCount":3,"integrity":"sha512-kgkcGidxTJ00wAwcnxmPf0QQal8wXwOhWDMt0okHLrCWROKXTAIMhQ6qpoHd0cixNz1Em7IM54w4QnHZOZ/Kzg==","signatures":[{"sig":"MEYCIQCpKJsp6LsybLq8E3UDS0AME8yZvF2Ls+5F4GC5IXINLAIhAOtanq9q0eER9FkQgiH+ldQmafKFr2JKztvNS42O5Izi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23592},"type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run build && npm run check-build && npm run build-cucumber-support-files && npm run cucumber"}},"types":"./dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js"},"./client":{"node":"./dist/esm/lib/client/HubClient.node.js","default":"./dist/esm/lib/client/HubClient.browser.js"}},"gitHead":"05d287fee4750f8f359cb7d13f298b4e9b016707","scripts":{"lint":"npx @biomejs/biome check src test","test":"NODE_ENV=test npx vitest test --run","build":"tsc --build tsconfig.json","certs":"mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","format":"npx @biomejs/biome format --write src/**/* test/**/*","pretest":"rm -rf localStorage && rm -rf sessionStorage","cucumber":"NODE_ENV=test npx cucumber-js","check-build":"node scripts/check-node-esm-works.js && node scripts/check-node-commonjs-works.cjs","cucumber-wip":"NODE_ENV=test npx cucumber-js -t @wip","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist"},"_npmUser":{"name":"paulbjensen","actor":{"name":"paulbjensen","type":"user","email":"paulbjensen@gmail.com"},"email":"paulbjensen@gmail.com"},"_npmVersion":"10.9.2","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"22.16.0","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.17.0","uuid":"^11.0.1","redis":"^5.0.0","node-ip":"^0.1.2","@anephenix/sarus":"^0.7.8","node-localstorage":"^3.0.5"},"typesVersions":{"*":{"client":["./dist/esm/lib/client/HubClient.browser.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^17.0.0","husky":"^9.1.5","rimraf":"^6.0.1","vitest":"^3.2.3","esbuild":"^0.25.0","ts-node":"^10.9.2","@types/ws":"^8.18.1","puppeteer":"^24.1.0","node-emoji":"^2.1.3","typescript":"^5.8.3","terminal-kit":"^3.1.1","http-shutdown":"^1.2.2","@biomejs/biome":"2.0.4","gradient-string":"^3.0.0","http-terminator":"^3.2.0","git-changed-files":"^1.0.0","@cucumber/cucumber":"^11.0.0","mocha-lcov-reporter":"^1.3.0","why-is-node-running":"^3.2.0","@babel/eslint-parser":"^7.24.5","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.1.0_1750768112268_0.35415345951258526","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@anephenix/hub","version":"0.1.1","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.1.1","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"25947a8e4bc62b5d31ba560356aa728954535bdc","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.1.1.tgz","fileCount":61,"integrity":"sha512-wR46uxdg/2enROF+Y6GCHrD5shqg3sqFwlKGJeiFQmBhaIBu0edAhc+V/bMU8jMkqfqNsk3rCq2EVAtxfDYuxQ==","signatures":[{"sig":"MEYCIQC6zluTvwKHw1IY6kDnQvNjP8F4/XtfKyWi2daydRpDmQIhANvFb5q6DPhrQ84RU8Vi2v56PakgKOA7ngvRwApNywJP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140525},"type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run build && npm run check-build && npm run build-cucumber-support-files && npm run cucumber"}},"types":"./dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js"},"./client":{"node":"./dist/esm/lib/client/HubClient.node.js","default":"./dist/esm/lib/client/HubClient.browser.js"}},"gitHead":"ecc15d1993a8f1d20cd698d565a0e80b580e9f7d","scripts":{"lint":"npx @biomejs/biome check src test","test":"NODE_ENV=test npx vitest test --run","build":"tsc --build tsconfig.json","certs":"mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","format":"npx @biomejs/biome format --write src/**/* test/**/*","pretest":"rm -rf localStorage && rm -rf sessionStorage","cucumber":"NODE_ENV=test npx cucumber-js","check-build":"node scripts/check-node-esm-works.js && node scripts/check-node-commonjs-works.cjs","cucumber-wip":"NODE_ENV=test npx cucumber-js -t @wip","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist"},"_npmUser":{"name":"paulbjensen","actor":{"name":"paulbjensen","type":"user","email":"paulbjensen@gmail.com"},"email":"paulbjensen@gmail.com"},"_npmVersion":"10.9.2","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"22.16.0","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.17.0","uuid":"^11.0.1","redis":"^5.0.0","node-ip":"^0.1.2","@anephenix/sarus":"^0.7.8","node-localstorage":"^3.0.5"},"typesVersions":{"*":{"client":["./dist/esm/lib/client/HubClient.browser.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^17.0.0","husky":"^9.1.5","rimraf":"^6.0.1","vitest":"^3.2.3","esbuild":"^0.25.0","ts-node":"^10.9.2","@types/ws":"^8.18.1","puppeteer":"^24.1.0","node-emoji":"^2.1.3","typescript":"^5.8.3","terminal-kit":"^3.1.1","http-shutdown":"^1.2.2","@biomejs/biome":"2.0.4","gradient-string":"^3.0.0","http-terminator":"^3.2.0","git-changed-files":"^1.0.0","@cucumber/cucumber":"^11.0.0","mocha-lcov-reporter":"^1.3.0","why-is-node-running":"^3.2.0","@babel/eslint-parser":"^7.24.5","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.1.1_1750768921268_0.7933881628148105","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@anephenix/hub","version":"0.1.2","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.1.2","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"8616a276a310355ffebb6fa37080cfd79e707d65","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.1.2.tgz","fileCount":61,"integrity":"sha512-61EI6AI62kmLipLZETZezjqyHzGX75FiyXnQFqhCivuppTwaudGF19kbFFh3ik7v5VaJLalPrE/wDg0WUDw79g==","signatures":[{"sig":"MEQCIEnKFSydx3uhMKrf04CcpA7/E7w+KOl3E9pWxmxLXY7IAiAzrec3C+mUTZxmCfTuVG8BAcPQDxwe0fXp5midy8UQPw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140369},"type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run build && npm run check-build && npm run build-cucumber-support-files && npm run cucumber"}},"types":"./dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js"},"./client":{"node":"./dist/esm/lib/client/HubClient.node.js","default":"./dist/esm/lib/client/HubClient.browser.js"}},"gitHead":"3399b433663ba33fc5c4326cbe42c09e0de5e2a5","scripts":{"lint":"npx @biomejs/biome check src test","test":"NODE_ENV=test npx vitest test --run","build":"tsc --build tsconfig.json","certs":"mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","format":"npx @biomejs/biome format --write src/**/* test/**/*","pretest":"rm -rf localStorage && rm -rf sessionStorage","cucumber":"NODE_ENV=test npx cucumber-js","check-build":"node scripts/check-node-esm-works.js && node scripts/check-node-commonjs-works.cjs","cucumber-wip":"NODE_ENV=test npx cucumber-js -t @wip","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist"},"_npmUser":{"name":"paulbjensen","actor":{"name":"paulbjensen","type":"user","email":"paulbjensen@gmail.com"},"email":"paulbjensen@gmail.com"},"_npmVersion":"10.9.2","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"22.16.0","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.17.0","uuid":"^11.0.1","redis":"^5.0.0","node-ip":"^0.1.2","@anephenix/sarus":"^0.7.8","node-localstorage":"^3.0.5"},"typesVersions":{"*":{"client":["./dist/esm/lib/client/HubClient.browser.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^17.0.0","husky":"^9.1.5","rimraf":"^6.0.1","vitest":"^3.2.3","esbuild":"^0.25.0","ts-node":"^10.9.2","@types/ws":"^8.18.1","puppeteer":"^24.1.0","node-emoji":"^2.1.3","typescript":"^5.8.3","terminal-kit":"^3.1.1","http-shutdown":"^1.2.2","@biomejs/biome":"2.0.4","gradient-string":"^3.0.0","http-terminator":"^3.2.0","git-changed-files":"^1.0.0","@cucumber/cucumber":"^11.0.0","mocha-lcov-reporter":"^1.3.0","why-is-node-running":"^3.2.0","@babel/eslint-parser":"^7.24.5","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.1.2_1750770515162_0.251471822194391","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@anephenix/hub","version":"0.1.3","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.1.3","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"494755044a7f4c5e6aadc59f31610c4d664843e7","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.1.3.tgz","fileCount":61,"integrity":"sha512-nPaCpQJH0MWiR2J2oXUJIJnaMzPKyGYyRNi/2KWypBCns27KOv1upjq5hJqBubjSGj+A8l3TqpANLoYowz4DvA==","signatures":[{"sig":"MEQCIHussEHgrA8haOU7v7uqM+vGDMfdWFmr15NyKwLKqMbEAiAy/kSOV6dK0jMHr9WsMrcwpifHyrkufD1fUYf7QVYjXA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140419},"type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run build && npm run check-build && npm run build-cucumber-support-files && npm run cucumber"}},"types":"./dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js"},"./client":{"node":"./dist/esm/lib/client/HubClient.node.js","default":"./dist/esm/lib/client/HubClient.browser.js"}},"gitHead":"3159056d5fe98a745a2ee2722ef4927bb3db96e6","scripts":{"lint":"npx @biomejs/biome check src test","test":"NODE_ENV=test npx vitest test --run","build":"tsc --build tsconfig.json","certs":"mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","format":"npx @biomejs/biome format --write src/**/* test/**/*","pretest":"rm -rf localStorage && rm -rf sessionStorage","cucumber":"NODE_ENV=test npx cucumber-js","check-build":"node scripts/check-node-esm-works.js && node scripts/check-node-commonjs-works.cjs","cucumber-wip":"NODE_ENV=test npx cucumber-js -t @wip","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist"},"_npmUser":{"name":"paulbjensen","actor":{"name":"paulbjensen","type":"user","email":"paulbjensen@gmail.com"},"email":"paulbjensen@gmail.com"},"_npmVersion":"10.9.2","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"22.16.0","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.17.0","uuid":"^11.0.1","redis":"^5.0.0","node-ip":"^0.1.2","@anephenix/sarus":"^0.7.8","node-localstorage":"^3.0.5"},"typesVersions":{"*":{"client":["./dist/esm/lib/client/HubClient.browser.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^17.0.0","husky":"^9.1.5","rimraf":"^6.0.1","vitest":"^3.2.3","esbuild":"^0.25.0","ts-node":"^10.9.2","@types/ws":"^8.18.1","puppeteer":"^24.1.0","node-emoji":"^2.1.3","typescript":"^5.8.3","terminal-kit":"^3.1.1","http-shutdown":"^1.2.2","@biomejs/biome":"2.0.4","gradient-string":"^3.0.0","http-terminator":"^3.2.0","git-changed-files":"^1.0.0","@cucumber/cucumber":"^11.0.0","mocha-lcov-reporter":"^1.3.0","why-is-node-running":"^3.2.0","@babel/eslint-parser":"^7.24.5","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.1.3_1750783170454_0.07700670206247895","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@anephenix/hub","version":"0.2.0","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.2.0","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"24451313f4ad0a3b531d4d301cf2776ed3f86c14","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.2.0.tgz","fileCount":61,"integrity":"sha512-Qa/N69cOAG9cSCikLqikLLP0Io+nPO4m0RGBljPmcj2KpXYXVKGH16cgaEWeqxl67HJd5g9VYmv2bjC5LQ1Caw==","signatures":[{"sig":"MEQCIEh+xd+FHToxEhs9jUmee6HQ7D3zYFSwXuAL58f2yx4jAiA7TNrunCd4660UzWwtdvEPdoKyoLllbZDRKglsAs75Cg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140865},"type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run build && npm run check-build && npm run build-cucumber-support-files && npm run cucumber"}},"types":"./dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js"},"./client":{"node":"./dist/esm/lib/client/HubClient.node.js","default":"./dist/esm/lib/client/HubClient.browser.js"}},"gitHead":"c27a66fec4f3c791c43de62ae153357564053ebf","scripts":{"lint":"npx @biomejs/biome check src test","test":"if [ ! -f certs/localhost+2-key.pem ] || [ ! -f certs/localhost+2.pem ]; then npm run certs; fi && NODE_ENV=test npx vitest test --run","build":"tsc --build tsconfig.json","certs":"command -v mkcert >/dev/null 2>&1 || { echo 'Error: mkcert is not installed.'; exit 1; } && mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","format":"npx @biomejs/biome format --write src/**/* test/**/*","prepare":"husky","pretest":"rm -rf localStorage && rm -rf sessionStorage","cucumber":"NODE_ENV=test npx cucumber-js","check-build":"node scripts/check-node-esm-works.js && node scripts/check-node-commonjs-works.cjs","cucumber-wip":"NODE_ENV=test npx cucumber-js -t @wip","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"_npmVersion":"10.9.3","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"22.20.0","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.17.0","uuid":"^13.0.0","redis":"^5.0.0","node-ip":"^0.1.2","@anephenix/sarus":"^0.7.8","node-localstorage":"^3.0.5"},"typesVersions":{"*":{"client":["./dist/esm/lib/client/HubClient.browser.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^17.0.0","husky":"^9.1.5","vitest":"^3.2.3","esbuild":"^0.25.0","ts-node":"^10.9.2","@types/ws":"^8.18.1","puppeteer":"^24.1.0","node-emoji":"^2.1.3","typescript":"^5.8.3","terminal-kit":"^3.1.1","http-shutdown":"^1.2.2","@biomejs/biome":"2.2.5","gradient-string":"^3.0.0","http-terminator":"^3.2.0","@cucumber/cucumber":"^12.0.0","why-is-node-running":"^3.2.0","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.2.0_1759737585906_0.17146470694021998","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@anephenix/hub","version":"0.2.1","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.2.1","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"3cd2d5e22f32f592fe46b3b486d881c681e15363","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.2.1.tgz","fileCount":61,"integrity":"sha512-6JIjaTbK5Fk8KJPzgrz+6EqQ5Nh1kUe9GBhRTDDrO2Vxls+lQLgbULk2HW3z4zsNW++T7Y939T9HynxSQvBHLQ==","signatures":[{"sig":"MEUCIQCqjLxj1GfaFsHSWol6qxNt7QEftwlcBQkvfPIRkE/bdAIge5zbtUB0OhA+h9j8Qp7AluWoCNZcEWowce66HIGoAn0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140922},"type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run build && npm run check-build && npm run build-cucumber-support-files && npm run cucumber"}},"types":"./dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js"},"./client":{"node":"./dist/esm/lib/client/HubClient.node.js","default":"./dist/esm/lib/client/HubClient.browser.js"}},"gitHead":"824af6b942771be08e1c06fb18be600a28acae3c","scripts":{"lint":"npx @biomejs/biome check src test","test":"if [ ! -f certs/localhost+2-key.pem ] || [ ! -f certs/localhost+2.pem ]; then npm run certs; fi && NODE_ENV=test npx vitest test --run","build":"tsc --build tsconfig.json","certs":"command -v mkcert >/dev/null 2>&1 || { echo 'Error: mkcert is not installed.'; exit 1; } && mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","format":"npx @biomejs/biome format --write src/**/* test/**/*","prepare":"husky","pretest":"rm -rf localStorage && rm -rf sessionStorage","cucumber":"NODE_ENV=test npx cucumber-js","check-build":"node scripts/check-node-esm-works.js && node scripts/check-node-commonjs-works.cjs","cucumber-wip":"NODE_ENV=test npx cucumber-js -t @wip","lint:package":"npx publint","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"_npmVersion":"10.9.3","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"22.20.0","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.17.0","uuid":"^13.0.0","redis":"^5.0.0","node-ip":"^0.1.2","@anephenix/sarus":"^0.7.8","node-localstorage":"^3.0.5"},"typesVersions":{"*":{"client":["./dist/esm/lib/client/HubClient.browser.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^17.0.0","husky":"^9.1.5","vitest":"^3.2.3","esbuild":"^0.25.0","publint":"^0.3.14","ts-node":"^10.9.2","@types/ws":"^8.18.1","puppeteer":"^24.1.0","node-emoji":"^2.1.3","typescript":"^5.8.3","terminal-kit":"^3.1.1","http-shutdown":"^1.2.2","@biomejs/biome":"2.2.5","gradient-string":"^3.0.0","http-terminator":"^3.2.0","@cucumber/cucumber":"^12.0.0","why-is-node-running":"^3.2.0","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.2.1_1759910410667_0.5477632261262593","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@anephenix/hub","version":"0.2.2","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.2.2","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"cb0f3f2721e435f50b9c8bf50cdd51b089e2e2ba","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.2.2.tgz","fileCount":61,"integrity":"sha512-S6KFPrVjrq3s4ouVKxDLMEFfqp8Hrj736h8NRiMBHQNtfRTk6gH52bu+t/yQQ+jVTHk7hTxqvnO9PRUsYWWM1Q==","signatures":[{"sig":"MEYCIQD9wY/X2iVl9Bz/Ahcvacwa7uDqGjXyiM2X3MsrnHDSRgIhAIsx//VwlmK3tpIkN+fx1SmxTwwbdG9pyGHxrU+o43Ic","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140923},"type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run build && npm run check-build && npm run build-cucumber-support-files && npm run cucumber"}},"types":"./dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js"},"./client":{"node":"./dist/esm/lib/client/HubClient.node.js","default":"./dist/esm/lib/client/HubClient.browser.js"}},"gitHead":"a16996d4c56cbfcfbd2089f92ee3a405b6f70363","scripts":{"lint":"npx @biomejs/biome check src test","test":"if [ ! -f certs/localhost+2-key.pem ] || [ ! -f certs/localhost+2.pem ]; then npm run certs; fi && NODE_ENV=test npx vitest test --run","build":"tsc --build tsconfig.json","certs":"command -v mkcert >/dev/null 2>&1 || { echo 'Error: mkcert is not installed.'; exit 1; } && mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","format":"npx @biomejs/biome format --write src/**/* test/**/*","prepare":"husky","pretest":"rm -rf localStorage && rm -rf sessionStorage","cucumber":"NODE_ENV=test npx cucumber-js","check-build":"node scripts/check-node-esm-works.js && node scripts/check-node-commonjs-works.cjs","cucumber-wip":"NODE_ENV=test npx cucumber-js -t @wip","lint:package":"npx publint","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"_npmVersion":"10.9.4","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"22.21.1","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.17.0","uuid":"^13.0.0","redis":"^5.0.0","node-ip":"^0.1.2","@anephenix/sarus":"^0.7.12","node-localstorage":"^3.0.5"},"typesVersions":{"*":{"client":["./dist/esm/lib/client/HubClient.browser.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^17.0.0","husky":"^9.1.5","vitest":"^4.0.3","esbuild":"^0.27.0","publint":"^0.3.14","ts-node":"^10.9.2","@types/ws":"^8.18.1","puppeteer":"^24.1.0","node-emoji":"^2.1.3","typescript":"^5.8.3","terminal-kit":"^3.1.1","http-shutdown":"^1.2.2","@biomejs/biome":"2.3.5","gradient-string":"^3.0.0","http-terminator":"^3.2.0","@cucumber/cucumber":"^12.0.0","why-is-node-running":"^3.2.0","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.2.2_1763469189201_0.6693675711632743","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@anephenix/hub","version":"0.2.3","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.2.3","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"dist":{"shasum":"0ad582063a9d4dcfc351e84d385c6201f461eb0f","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.2.3.tgz","fileCount":61,"integrity":"sha512-WPSyLnxDMl0vqfe0HTsD2YXtFoNhFGFTKrDjs1QRYJgmS5BGODq2NNNaanQkYJs4IiizD7jnC0Sq0tDuyyaOAA==","signatures":[{"sig":"MEUCIADCE2cm24agrSkHy3o80J38aEfODBIuflRflGmICXG4AiEAoiLm2YK+9TfZksO76sYpt+oL90zUZhWeGv8bLDXjYo0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140923},"type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run build && npm run check-build && npm run build-cucumber-support-files && npm run cucumber"}},"types":"./dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js"},"./client":{"node":"./dist/esm/lib/client/HubClient.node.js","default":"./dist/esm/lib/client/HubClient.browser.js"}},"gitHead":"21d79c82ca0ae52e993296f67c754fa88cae8ff0","scripts":{"lint":"npx @biomejs/biome check src test","test":"if [ ! -f certs/localhost+2-key.pem ] || [ ! -f certs/localhost+2.pem ]; then npm run certs; fi && NODE_ENV=test npx vitest test --run","build":"tsc --build tsconfig.json","certs":"command -v mkcert >/dev/null 2>&1 || { echo 'Error: mkcert is not installed.'; exit 1; } && mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","format":"npx @biomejs/biome format --write src/**/* test/**/*","prepare":"husky","pretest":"rm -rf localStorage && rm -rf sessionStorage","cucumber":"NODE_ENV=test npx cucumber-js","check-build":"node scripts/check-node-esm-works.js && node scripts/check-node-commonjs-works.cjs","cucumber-wip":"NODE_ENV=test npx cucumber-js -t @wip","lint:package":"npx publint","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist"},"_npmUser":{"name":"paulbjensen","email":"paulbjensen@gmail.com"},"_npmVersion":"10.9.4","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"22.21.1","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.17.0","uuid":"^13.0.0","redis":"^5.0.0","node-ip":"^0.1.2","@anephenix/sarus":"^0.7.12","node-localstorage":"^3.0.5"},"typesVersions":{"*":{"client":["./dist/esm/lib/client/HubClient.browser.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^17.0.0","husky":"^9.1.5","vitest":"^4.0.3","esbuild":"^0.27.0","publint":"^0.3.14","ts-node":"^10.9.2","@types/ws":"^8.18.1","puppeteer":"^24.1.0","node-emoji":"^2.1.3","typescript":"^5.8.3","terminal-kit":"^3.1.1","http-shutdown":"^1.2.2","@biomejs/biome":"2.3.8","gradient-string":"^3.0.0","http-terminator":"^3.2.0","@cucumber/cucumber":"^12.0.0","why-is-node-running":"^3.2.0","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.2.3_1764781066312_0.11518824790995263","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@anephenix/hub","version":"0.2.8","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.2.8","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"homepage":"https://github.com/anephenix/hub","bugs":{"url":"https://github.com/anephenix/hub/issues"},"dist":{"shasum":"a2346538af434a205261c3330080ec8b49437e04","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.2.8.tgz","fileCount":61,"integrity":"sha512-6rjR5MbOyy2VrzP0xfIxRpB6xZs9jKcS7q+71zhsIzv0V/j08fEbYmr80Wihoudt5ZhpSz6HqL3fCp5nCXstbQ==","signatures":[{"sig":"MEQCIG+BOEGI6s6b7l2ZSFex1QZu+l4jGs0uOGPRBIoKMbrhAiBX+cexnwUKXEsTf9v2uHih70FRyjnVD5v16mJ5zcq1AA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anephenix%2fhub@0.2.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":141254},"type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run build && npm run check-build && npm run build-cucumber-support-files && npm run cucumber"}},"types":"./dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js"},"./client":{"node":"./dist/esm/lib/client/HubClient.node.js","default":"./dist/esm/lib/client/HubClient.browser.js"}},"gitHead":"737bc8f3c4510dd85ded22f24bb2fd8152a3fc31","scripts":{"lint":"npx @biomejs/biome check src test","test":"if [ ! -f certs/localhost+2-key.pem ] || [ ! -f certs/localhost+2.pem ]; then npm run certs; fi && NODE_ENV=test npx vitest test --run","build":"tsc --build tsconfig.json","certs":"command -v mkcert >/dev/null 2>&1 || { echo 'Error: mkcert is not installed.'; exit 1; } && mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","format":"npx @biomejs/biome format --write src/**/* test/**/*","prepare":"husky","pretest":"rm -rf localStorage && rm -rf sessionStorage","cucumber":"NODE_ENV=test npx cucumber-js","check-build":"node scripts/check-node-esm-works.js && node scripts/check-node-commonjs-works.cjs","cucumber-wip":"NODE_ENV=test npx cucumber-js -t @wip","lint:package":"npx publint","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","prepare-patch-release":"npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2c507ef6-fce2-45b9-a65f-647d61219e63"}},"repository":{"url":"git+https://github.com/anephenix/hub.git","type":"git"},"_npmVersion":"11.6.2","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"24.12.0","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.17.0","uuid":"^13.0.0","redis":"^5.0.0","node-ip":"^0.1.2","@anephenix/sarus":"^0.7.12","node-localstorage":"^3.0.5"},"typesVersions":{"*":{"client":["./dist/esm/lib/client/HubClient.browser.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^17.0.0","husky":"^9.1.5","vitest":"^4.0.3","esbuild":"^0.27.0","publint":"^0.3.14","ts-node":"^10.9.2","@types/ws":"^8.18.1","puppeteer":"^24.1.0","node-emoji":"^2.1.3","typescript":"^5.8.3","terminal-kit":"^3.1.1","http-shutdown":"^1.2.2","@biomejs/biome":"2.3.10","gradient-string":"^3.0.0","http-terminator":"^3.2.0","@cucumber/cucumber":"^12.0.0","why-is-node-running":"^3.2.0","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.2.8_1767543341450_0.4628550670231908","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"@anephenix/hub","version":"0.2.10","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.2.10","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"homepage":"https://github.com/anephenix/hub","bugs":{"url":"https://github.com/anephenix/hub/issues"},"dist":{"shasum":"7baa77eb4c909b86e625d30e42d9998ea58db400","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.2.10.tgz","fileCount":61,"integrity":"sha512-mvFdhoyI2nAYC4gncEVgPLe9kp3Si1DXKpY2fkc0rD25CALhac3XPjjOeeRR2Fd04aC66b8B1P8akr0rroDUdw==","signatures":[{"sig":"MEUCIQCsljW+iUcUpa6gtKFZOQUDd/2bpydbTqslPkibzaysBQIgYN1dZpoEnMAzL173edqjqWt3hSSvP71hO/CUhQ3XM9E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anephenix%2fhub@0.2.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":142452},"type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run build && npm run check-build && npm run build-cucumber-support-files && npm run cucumber"}},"types":"./dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js"},"./client":{"node":"./dist/esm/lib/client/HubClient.node.js","default":"./dist/esm/lib/client/HubClient.browser.js"}},"gitHead":"6a92321d7c07cd48b42968e2f9896760f2e480fd","scripts":{"lint":"npx @biomejs/biome check src test","test":"if [ ! -f certs/localhost+2-key.pem ] || [ ! -f certs/localhost+2.pem ]; then npm run certs; fi && NODE_ENV=test npx vitest test --run","build":"tsc --build tsconfig.json","certs":"command -v mkcert >/dev/null 2>&1 || { echo 'Error: mkcert is not installed.'; exit 1; } && mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","format":"npx @biomejs/biome format --write src/**/* test/**/*","prepare":"husky","pretest":"rm -rf localStorage && rm -rf sessionStorage","cucumber":"NODE_ENV=test npx cucumber-js","check-build":"node scripts/check-node-esm-works.js && node scripts/check-node-commonjs-works.cjs","cucumber-wip":"NODE_ENV=test npx cucumber-js -t @wip","lint:package":"npx publint","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","prepare-patch-release":"npm run build && npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2c507ef6-fce2-45b9-a65f-647d61219e63"}},"repository":{"url":"git+https://github.com/anephenix/hub.git","type":"git"},"_npmVersion":"11.6.2","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"24.12.0","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.17.0","uuid":"^13.0.0","redis":"^5.0.0","node-ip":"^0.1.2","@anephenix/sarus":"^0.7.12","node-localstorage":"^3.0.5"},"typesVersions":{"*":{"client":["./dist/esm/lib/client/HubClient.browser.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^17.0.0","husky":"^9.1.5","vitest":"^4.0.3","esbuild":"^0.27.0","publint":"^0.3.14","ts-node":"^10.9.2","@types/ws":"^8.18.1","puppeteer":"^24.1.0","node-emoji":"^2.1.3","typescript":"^5.8.3","terminal-kit":"^3.1.1","http-shutdown":"^1.2.2","@biomejs/biome":"2.3.11","gradient-string":"^3.0.0","http-terminator":"^3.2.0","@cucumber/cucumber":"^12.0.0","why-is-node-running":"^3.2.0","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.2.10_1768746672843_0.22060084453407836","host":"s3://npm-registry-packages-npm-production"}},"0.2.13":{"name":"@anephenix/hub","version":"0.2.13","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.2.13","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"homepage":"https://github.com/anephenix/hub","bugs":{"url":"https://github.com/anephenix/hub/issues"},"dist":{"shasum":"417f3b3853a535972451da650040651e31504fbf","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.2.13.tgz","fileCount":61,"integrity":"sha512-N5Rzlh0+cn0wjFQw9TFWij5pCu4JFlNOcnO4Vw9+JT9mLhzzAOQ3NdprU5l8HoaxpvCIp/klhBvrnTqlufYFUA==","signatures":[{"sig":"MEYCIQCvdCb5EBTyh0/m+R8OxeK+nw8Hd22J2EXG/U2oiNHnIgIhAII8FlIf5NzBXqZhAuiRgrH4DmfuMTjh3R9HP7m9mAiJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anephenix%2fhub@0.2.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":142440},"type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run build && npm run check-build && npm run build-cucumber-support-files && npm run cucumber"}},"types":"./dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js"},"./client":{"node":"./dist/esm/lib/client/HubClient.node.js","default":"./dist/esm/lib/client/HubClient.browser.js"}},"gitHead":"b0fc6f586fe26f0e7a9769ea9ca4740a48cc07cd","scripts":{"lint":"npx @biomejs/biome check src test","test":"if [ ! -f certs/localhost+2-key.pem ] || [ ! -f certs/localhost+2.pem ]; then npm run certs; fi && NODE_ENV=test npx vitest test --run","build":"tsc --build tsconfig.json","certs":"command -v mkcert >/dev/null 2>&1 || { echo 'Error: mkcert is not installed.'; exit 1; } && mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","format":"npx @biomejs/biome check src test --write","prepare":"husky","pretest":"rm -rf localStorage && rm -rf sessionStorage","cucumber":"NODE_ENV=test npx cucumber-js","check-build":"node scripts/check-node-esm-works.js && node scripts/check-node-commonjs-works.cjs","cucumber-wip":"NODE_ENV=test npx cucumber-js -t @wip","lint:package":"npx publint","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","prepare-patch-release":"npm run build && npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2c507ef6-fce2-45b9-a65f-647d61219e63"}},"repository":{"url":"git+https://github.com/anephenix/hub.git","type":"git"},"_npmVersion":"11.9.0","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"24.14.0","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.17.0","uuid":"^13.0.0","redis":"^5.0.0","node-ip":"^0.1.2","@anephenix/sarus":"^0.7.12","node-localstorage":"^3.0.5"},"typesVersions":{"*":{"client":["./dist/esm/lib/client/HubClient.browser.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^18.0.0","husky":"^9.1.5","vitest":"^4.0.3","esbuild":"^0.27.0","publint":"^0.3.14","ts-node":"^10.9.2","@types/ws":"^8.18.1","puppeteer":"^24.1.0","node-emoji":"^2.1.3","typescript":"^5.8.3","terminal-kit":"^3.1.1","http-shutdown":"^1.2.2","@biomejs/biome":"2.4.7","gradient-string":"^3.0.0","http-terminator":"^3.2.0","@cucumber/cucumber":"^12.0.0","why-is-node-running":"^3.2.0","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.2.13_1773776556233_0.17699704292098262","host":"s3://npm-registry-packages-npm-production"}},"0.2.12":{"name":"@anephenix/hub","version":"0.2.12","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.2.12","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"homepage":"https://github.com/anephenix/hub","bugs":{"url":"https://github.com/anephenix/hub/issues"},"dist":{"shasum":"507b25ff71bf29e73e410ada6ee6dc8bb01bef52","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.2.12.tgz","fileCount":61,"integrity":"sha512-zPTTwyJXNSVpUVbf9wVRPcZgA7l4HPEuBYO+uGNjtX16U5qDsaNhSHD+J7JPyGth/Twx9n1ctfJGY1ex80RX3Q==","signatures":[{"sig":"MEUCIBVqLJxEJJd7QFGFJAqOn/stp8OcllmaD+TE4OQUlVSsAiEAonHXgm2CGmUKKPDQAjSqotwNwoVeXX9IJt0g1BXRnHQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anephenix%2fhub@0.2.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":142440},"type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run build && npm run check-build && npm run build-cucumber-support-files && npm run cucumber"}},"types":"./dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js"},"./client":{"node":"./dist/esm/lib/client/HubClient.node.js","default":"./dist/esm/lib/client/HubClient.browser.js"}},"gitHead":"1fe18268e6456c0b0fd33623f18da22b1ce2ba71","scripts":{"lint":"npx @biomejs/biome check src test","test":"if [ ! -f certs/localhost+2-key.pem ] || [ ! -f certs/localhost+2.pem ]; then npm run certs; fi && NODE_ENV=test npx vitest test --run","build":"tsc --build tsconfig.json","certs":"command -v mkcert >/dev/null 2>&1 || { echo 'Error: mkcert is not installed.'; exit 1; } && mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","format":"npx @biomejs/biome check src test --write","prepare":"husky","pretest":"rm -rf localStorage && rm -rf sessionStorage","cucumber":"NODE_ENV=test npx cucumber-js","check-build":"node scripts/check-node-esm-works.js && node scripts/check-node-commonjs-works.cjs","cucumber-wip":"NODE_ENV=test npx cucumber-js -t @wip","lint:package":"npx publint","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","prepare-patch-release":"npm run build && npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2c507ef6-fce2-45b9-a65f-647d61219e63"}},"repository":{"url":"git+https://github.com/anephenix/hub.git","type":"git"},"_npmVersion":"11.9.0","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"24.14.0","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.17.0","uuid":"^13.0.0","redis":"^5.0.0","node-ip":"^0.1.2","@anephenix/sarus":"^0.7.12","node-localstorage":"^3.0.5"},"typesVersions":{"*":{"client":["./dist/esm/lib/client/HubClient.browser.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^18.0.0","husky":"^9.1.5","vitest":"^4.0.3","esbuild":"^0.27.0","publint":"^0.3.14","ts-node":"^10.9.2","@types/ws":"^8.18.1","puppeteer":"^24.1.0","node-emoji":"^2.1.3","typescript":"^5.8.3","terminal-kit":"^3.1.1","http-shutdown":"^1.2.2","@biomejs/biome":"2.4.7","gradient-string":"^3.0.0","http-terminator":"^3.2.0","@cucumber/cucumber":"^12.0.0","why-is-node-running":"^3.2.0","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.2.12_1773776563673_0.4116005872247839","host":"s3://npm-registry-packages-npm-production"}},"0.2.14":{"name":"@anephenix/hub","version":"0.2.14","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.2.14","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"homepage":"https://github.com/anephenix/hub","bugs":{"url":"https://github.com/anephenix/hub/issues"},"dist":{"shasum":"3614b4e6f48dffc79168fd6fe4db80f50bc15e8d","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.2.14.tgz","fileCount":61,"integrity":"sha512-knhgMGcRLyD8LIiohRHnCCOTZXyJ18qOQERzbeu94/3uUtfVS4qaPZQb65KanuX2N4VsXScPNIEcU/4WLuTeoA==","signatures":[{"sig":"MEYCIQClz1D3f6GaESodekZxcm77Z37ke7YitJYfrj12Qv8JigIhALWSddNrLGQViBvqb6gctoipBBBkm3SiubmiyxHNjDfU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anephenix%2fhub@0.2.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":142440},"type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run build && npm run check-build && npm run build-cucumber-support-files && npm run cucumber"}},"types":"./dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js"},"./client":{"node":"./dist/esm/lib/client/HubClient.node.js","default":"./dist/esm/lib/client/HubClient.browser.js"}},"gitHead":"192d22e9ccbc85e9dcf5bf767d42352ae6b89533","scripts":{"lint":"npx @biomejs/biome check src test","test":"if [ ! -f certs/localhost+2-key.pem ] || [ ! -f certs/localhost+2.pem ]; then npm run certs; fi && NODE_ENV=test npx vitest test --run","build":"tsc --build tsconfig.json","certs":"command -v mkcert >/dev/null 2>&1 || { echo 'Error: mkcert is not installed.'; exit 1; } && mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"NODE_ENV=test npx nyc --reporter=lcov npm t","format":"npx @biomejs/biome check src test --write","prepare":"husky","pretest":"rm -rf localStorage && rm -rf sessionStorage","cucumber":"NODE_ENV=test npx cucumber-js","check-build":"node scripts/check-node-esm-works.js && node scripts/check-node-commonjs-works.cjs","cucumber-wip":"NODE_ENV=test npx cucumber-js -t @wip","lint:package":"npx publint","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","prepare-patch-release":"npm run build && npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2c507ef6-fce2-45b9-a65f-647d61219e63"}},"repository":{"url":"git+https://github.com/anephenix/hub.git","type":"git"},"_npmVersion":"11.9.0","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"24.14.0","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.17.0","uuid":"^13.0.0","redis":"^5.0.0","node-ip":"^0.1.2","@anephenix/sarus":"^0.7.12","node-localstorage":"^3.0.5"},"typesVersions":{"*":{"client":["./dist/esm/lib/client/HubClient.browser.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^18.0.0","husky":"^9.1.5","vitest":"^4.0.3","esbuild":"^0.27.0","publint":"^0.3.14","ts-node":"^10.9.2","@types/ws":"^8.18.1","puppeteer":"^24.1.0","node-emoji":"^2.1.3","typescript":"^5.8.3","terminal-kit":"^3.1.1","http-shutdown":"^1.2.2","@biomejs/biome":"2.4.8","gradient-string":"^3.0.0","http-terminator":"^3.2.0","@cucumber/cucumber":"^12.0.0","why-is-node-running":"^3.2.0","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.2.14_1774779804899_0.03849742358586816","host":"s3://npm-registry-packages-npm-production"}},"0.2.16":{"name":"@anephenix/hub","version":"0.2.16","keywords":["websocket","rpc","pubsub"],"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","_id":"@anephenix/hub@0.2.16","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"homepage":"https://github.com/anephenix/hub","bugs":{"url":"https://github.com/anephenix/hub/issues"},"dist":{"shasum":"dbe115e64c9c52c33f64389e774f29a0833f9202","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.2.16.tgz","fileCount":61,"integrity":"sha512-HOlc6cvafFkQzB4n2tF9O5uivGh8zC3pNYR/fjA3PX3I8aLtxR/dZRH+MYA/hiX0XEFO9shONAPE0kyaWvoCqA==","signatures":[{"sig":"MEYCIQCuq0QLDjFMOC8oAuAkhXjiiNDebMHvSflJw1Q/90wUPwIhAKl/HnNSGR2Qq12QQH2+GbA3x9eqNhnsk4/ZP26EysCr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anephenix%2fhub@0.2.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":156949},"type":"module","husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run build && npm run check-build && npm run build-cucumber-support-files && npm run cucumber"}},"types":"./dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js"},"./client":{"node":"./dist/esm/lib/client/HubClient.node.js","default":"./dist/esm/lib/client/HubClient.browser.js"}},"gitHead":"67260d2a1407a77f082f02dc9e1f0891222c306d","scripts":{"lint":"npx @biomejs/biome check src test","test":"if [ ! -f certs/localhost+2-key.pem ] || [ ! -f certs/localhost+2.pem ]; then npm run certs; fi && NODE_ENV=test npx vitest test --run","build":"tsc --build tsconfig.json","certs":"command -v mkcert >/dev/null 2>&1 || { echo 'Error: mkcert is not installed.'; exit 1; } && mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","cover":"if [ ! -f certs/localhost+2-key.pem ] || [ ! -f certs/localhost+2.pem ]; then npm run certs; fi && NODE_ENV=test npx vitest test --run --coverage","format":"npx @biomejs/biome check src test --write","prepare":"husky","pretest":"rm -rf localStorage && rm -rf sessionStorage","cucumber":"NODE_ENV=test npx cucumber-js","check-build":"node scripts/check-node-esm-works.js && node scripts/check-node-commonjs-works.cjs","cucumber-wip":"NODE_ENV=test npx cucumber-js -t @wip","lint:package":"npx publint","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts","prepare-patch-release":"npm run build && npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2c507ef6-fce2-45b9-a65f-647d61219e63"}},"repository":{"url":"git+https://github.com/anephenix/hub.git","type":"git"},"_npmVersion":"11.16.0","description":"A Node.js WebSocket server and client with added features","directories":{},"_nodeVersion":"24.18.0","browserslist":"> 0.5%, last 2 versions, not dead","dependencies":{"ws":"^8.17.0","uuid":"^14.0.0","redis":"^6.0.0","node-ip":"^0.1.2","@anephenix/sarus":"^0.7.12","node-localstorage":"^3.0.5"},"typesVersions":{"*":{"client":["./dist/esm/lib/client/HubClient.browser.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.5","vitest":"^4.0.3","esbuild":"^0.28.0","publint":"^0.3.14","ts-node":"^10.9.2","@types/ws":"^8.18.1","puppeteer":"^25.0.3","node-emoji":"^2.1.3","typescript":"^7.0.2","terminal-kit":"^3.1.1","http-shutdown":"^1.2.2","@biomejs/biome":"2.5.3","gradient-string":"^3.0.0","http-terminator":"^3.2.0","@cucumber/cucumber":"^13.0.0","@vitest/coverage-v8":"^4.1.4","why-is-node-running":"^3.2.0","@types/node-localstorage":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/hub_0.2.16_1784790567322_0.696310028766955","host":"s3://npm-registry-packages-npm-production"}},"0.2.17":{"name":"@anephenix/hub","version":"0.2.17","description":"A Node.js WebSocket server and client with added features","type":"module","types":"./dist/esm/index.d.ts","exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js"},"./client":{"node":"./dist/esm/lib/client/HubClient.node.js","default":"./dist/esm/lib/client/HubClient.browser.js"}},"typesVersions":{"*":{"client":["./dist/esm/lib/client/HubClient.browser.d.ts"]}},"repository":{"type":"git","url":"git+https://github.com/anephenix/hub.git"},"homepage":"https://github.com/anephenix/hub","bugs":{"url":"https://github.com/anephenix/hub/issues"},"scripts":{"build":"tsc --build tsconfig.json","build-cucumber-support-files":"npx esbuild support/client/main.js --bundle --minify --sourcemap --outdir=support/client/dist","certs":"command -v mkcert >/dev/null 2>&1 || { echo 'Error: mkcert is not installed.'; exit 1; } && mkdir -p certs && cd certs && mkcert localhost 127.0.0.1 ::1","format":"npx @biomejs/biome check src test --write","lint":"npx @biomejs/biome check src test","lint:package":"npx publint","check-build":"node scripts/check-node-esm-works.js && node scripts/check-node-commonjs-works.cjs","cover":"if [ ! -f certs/localhost+2-key.pem ] || [ ! -f certs/localhost+2.pem ]; then npm run certs; fi && NODE_ENV=test npx vitest test --run --coverage","cucumber":"NODE_ENV=test npx cucumber-js","cucumber-wip":"NODE_ENV=test npx cucumber-js -t @wip","prepare-patch-release":"npm run build && npm run update-changelog && git add CHANGELOG.md && git commit -m \"Updated changelog\" && npm version patch","publish-patch-release":"npm run prepare-patch-release && git push origin master && git push --tags","prepare":"husky","pretest":"rm -rf localStorage && rm -rf sessionStorage","test":"if [ ! -f certs/localhost+2-key.pem ] || [ ! -f certs/localhost+2.pem ]; then npm run certs; fi && NODE_ENV=test npx vitest test --run","update-changelog":"node --experimental-strip-types scripts/update-changelog.ts"},"keywords":["websocket","rpc","pubsub"],"husky":{"hooks":{"pre-commit":"npm run lint && npm run test && npm run build && npm run check-build && npm run build-cucumber-support-files && npm run cucumber"}},"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","dependencies":{"@anephenix/sarus":"^0.7.12","node-ip":"^0.1.2","node-localstorage":"^3.0.5","redis":"^6.0.0","uuid":"^14.0.0","ws":"^8.17.0"},"devDependencies":{"@biomejs/biome":"2.5.6","@cucumber/cucumber":"^13.0.0","@types/node-localstorage":"^1.3.3","@types/ws":"^8.18.1","@vitest/coverage-v8":"^4.1.4","esbuild":"^0.28.0","gradient-string":"^3.0.0","http-shutdown":"^1.2.2","http-terminator":"^3.2.0","husky":"^9.1.5","node-emoji":"^2.1.3","publint":"^0.3.14","puppeteer":"^25.0.3","terminal-kit":"^3.1.1","ts-node":"^10.9.2","typescript":"^7.0.2","vitest":"^4.0.3","why-is-node-running":"^3.2.0"},"browserslist":"> 0.5%, last 2 versions, not dead","gitHead":"beb5ee4fbae49363b9343f2886eb0911502e4ac2","_id":"@anephenix/hub@0.2.17","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-ougJB2XPulvUHVloi/IyP71v0pArDYB7jRq7F8CEl8o9HOrl4LyDUMrkgIWqCrFU7lrVdugPPfNiRjGw2OMRGQ==","shasum":"7567134e32419607f6bc697a5cf82d58bee04192","tarball":"https://registry.npmjs.org/@anephenix/hub/-/hub-0.2.17.tgz","fileCount":61,"unpackedSize":169649,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anephenix%2fhub@0.2.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHOuvIvPw7VoCLoR5f1/ddBsINfeVi9Rhcvp4CYt3HxeAiEAw4g/qZ4NxYLHFDU/IB2YVHe/WfUHgcokKHjmoVUBnks="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2c507ef6-fce2-45b9-a65f-647d61219e63"}},"directories":{},"maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/hub_0.2.17_1785877597153_0.8550920062027412"},"_hasShrinkwrap":false}},"time":{"created":"2020-10-01T08:56:24.168Z","modified":"2026-08-04T21:06:37.663Z","0.0.1":"2020-10-01T08:56:24.609Z","0.0.2":"2020-10-01T14:22:42.140Z","0.0.3":"2020-10-12T15:49:37.315Z","0.0.4":"2020-10-12T18:31:18.519Z","0.0.5":"2020-10-13T14:35:54.342Z","0.0.6":"2020-10-14T06:52:10.694Z","0.0.7":"2020-10-14T09:49:57.815Z","0.0.8":"2020-10-16T10:22:50.092Z","0.0.9":"2020-10-16T21:36:51.019Z","0.0.10":"2020-10-17T11:56:23.981Z","0.0.11":"2020-10-18T15:15:42.283Z","0.0.12":"2020-10-20T13:32:14.055Z","0.0.13":"2020-10-22T09:07:50.300Z","0.0.14":"2020-10-23T11:56:12.056Z","0.0.15":"2020-10-24T14:39:22.831Z","0.0.16":"2020-10-29T11:18:49.760Z","0.0.17":"2020-10-30T16:16:14.317Z","0.0.18":"2020-11-29T04:50:22.912Z","0.0.19":"2020-12-01T21:55:24.401Z","0.0.20":"2020-12-30T11:20:40.275Z","0.0.21":"2021-08-14T07:58:35.347Z","0.0.22":"2021-09-29T05:24:49.293Z","0.0.23":"2022-11-15T04:03:19.396Z","0.0.25":"2023-04-11T09:37:17.813Z","0.0.26":"2023-04-12T12:23:45.265Z","0.0.27":"2023-04-21T07:54:46.176Z","0.0.29":"2025-01-16T20:29:05.309Z","0.0.30":"2025-01-25T11:35:43.146Z","0.0.31":"2025-02-15T11:32:25.488Z","0.0.32":"2025-02-24T16:32:24.820Z","0.0.33":"2025-04-08T12:45:17.645Z","0.0.34":"2025-04-08T12:45:22.815Z","0.0.35":"2025-05-26T14:44:40.989Z","0.0.36":"2025-06-10T07:40:09.017Z","0.1.0":"2025-06-24T12:28:32.472Z","0.1.1":"2025-06-24T12:42:01.451Z","0.1.2":"2025-06-24T13:08:35.483Z","0.1.3":"2025-06-24T16:39:30.680Z","0.2.0":"2025-10-06T07:59:46.093Z","0.2.1":"2025-10-08T08:00:10.894Z","0.2.2":"2025-11-18T12:33:09.385Z","0.2.3":"2025-12-03T16:57:46.498Z","0.2.8":"2026-01-04T16:15:41.614Z","0.2.10":"2026-01-18T14:31:12.982Z","0.2.13":"2026-03-17T19:42:36.364Z","0.2.12":"2026-03-17T19:42:43.813Z","0.2.14":"2026-03-29T10:23:25.044Z","0.2.16":"2026-07-23T07:09:27.475Z","0.2.17":"2026-08-04T21:06:37.286Z"},"bugs":{"url":"https://github.com/anephenix/hub/issues"},"author":{"name":"Paul Jensen","email":"paul@anephenix.com"},"license":"MIT","homepage":"https://github.com/anephenix/hub","keywords":["websocket","rpc","pubsub"],"repository":{"type":"git","url":"git+https://github.com/anephenix/hub.git"},"description":"A Node.js WebSocket server and client with added features","maintainers":[{"name":"paulbjensen","email":"paulbjensen@gmail.com"}],"readme":"# Hub\n\nA Node.js WebSocket server and client with added features\n\n[![npm version](https://badge.fury.io/js/%40anephenix%2Fhub.svg)](https://badge.fury.io/js/%40anephenix%2Fhub)\n[![Node.js CI](https://github.com/anephenix/hub/actions/workflows/node.js.yml/badge.svg)](https://github.com/anephenix/hub/actions/workflows/node.js.yml) [![Socket Badge](https://socket.dev/api/badge/npm/package/@anephenix/hub)](https://socket.dev/npm/package/@anephenix/hub)\n\n### Dependencies\n\n-   Node.js (version 22 or greater)\n-   Redis\n\n### Install\n\n```shell\nnpm i @anephenix/hub\n```\n\n### Features\n\n-   Isomorphic WebSocket client support\n-   Bi-directional RPC (Remote Procedure Call)\n-   Request-only RPC calls\n-   PubSub (Publish/Subscribe)\n-   Automatically unsubscribe clients from channels on disconnect\n-   Automatically resubscribe clients to channels on reconnect\n-   Authenticated Channels\n-   Restrict client channel publish capability on a per-client basis\n-   Use an existing HTTP/HTTPS server with the WebSocket server\n-   Allow client connections only from a list of url origins or ip addresses\n\n### Usage\n\n**Getting started**\n\n-   [Starting a server](#starting-a-server)\n-   [Loading a client in the browser](#loading-a-client-in-the-browser)\n-   [Loading a client in Node.js](#loading-a-client-in-Node.js)\n\n**RPC (Remote Procedure Calls)**\n\n-   [Creating an RPC function on the server](#creating-an-rpc-function-on-the-server)\n-   [Calling the RPC function from the client](#calling-the-rpc-function-from-the-client)\n-   [Creating an RPC function on the client](#creating-an-rpc-function-on-the-client)\n-   [Calling the RPC function from the server](#calling-the-rpc-function-from-the-server)\n-   [Calling an RPC function without wanting a response back](#calling-an-rpc-function-without-wanting-a-response-back)\n\n**PubSub (Publish/Subscribe)**\n\n-   [Subscribing to a channel](#subscribing-to-a-channel)\n-   [Unsubscribing from a channel](#unsubscribing-from-a-channel)\n-   [Publishing a message from the client](#publishing-a-message-from-the-client)\n-   [Publishing a message from the server](#publishing-a-message-from-the-server)\n-   [Handling messages published for a channel](#handling-messages-published-for-a-channel)\n-   [Removing message handlers for a channel](#removing-message-handlers-for-a-channel)\n\n**Advanced PubSub**\n\n-   [Handling client disconnects / reconnects](#handling-client-disconnects--reconnects)\n-   [Handling client / channel subscriptions data](#handling-client--channel-subscriptions-data)\n-   [Creating channels that require authentication](#creating-channels-that-require-authentication)\n-   [Adding wildcard channels configurations](#adding-wildcard-channel-configurations)\n-   [Enabling / disabling client publish capability](#enabling--disabling-client-publish-capability)\n\n**Security**\n\n-   [Using a secure server with Hub](#using-a-secure-server-with-hub)\n-   [Restricting where WebSockets can connect from](#restricting-where-webSockets-can-connect-from)\n-   [Kicking clients from the server](#kicking-clients-from-the-server)\n-   [Banning clients from the server](#banning-clients-from-the-server)\n-   [Adding / removing ban rules for clients](#adding-or-removing-ban-rules-for-clients)\n\n#### Getting started\n\nHere is how to get started quickly.\n\n##### Starting a server\n\nYou can run the WebSocket server with this code snippet:\n\n```javascript\n// Dependencies\nimport Hub from '@anephenix/hub';\n\n// Initialize hub to listen on port 4000\nconst hub = new Hub({ port: 4000 });\n\n// Start listening\nhub.listen();\n```\n\n##### Loading a client in the browser\n\nAnd for the client, you can load this code:\n\n```javascript\nimport HubClient from '@anephenix/hub/client';\n\n// Create an instance of HubClient\nconst hubClient = new HubClient({ url: 'ws://localhost:4000' });\n\n// Wait for the client to connect and set client ID\nawait hubClient.isReady();\n```\n\nHubClient uses [Sarus](https://sarus.anephenix.com) as the WebSocket client behind the scenes. If you want to\nprovide custom config options to Sarus, you can do so by using this code:\n\n```javascript\n// Create an instance of HubClient\nconst hubClient = new HubClient({\n\turl: 'ws://localhost:4000',\n\tsarusConfig: { retryConnectionDelay: 500 },\n});\n\n// Wait for the client to connect and set client ID\nawait hubClient.isReady();\n```\n\nIt is important to wait for the client to be ready before making any RPC or PubSub calls.\n\n##### Loading a client in Node.js\n\nTraditionally WebSocket clients connect from the web browser, but with Hub it is\npossible to create a WebSocket client from a program running in Node.js. Here is\nan example:\n\n```javascript\n// Dependencies\nimport repl from 'node:repl';\nimport HubClient from \"@anephenix/hub/client\";\n\n// Initialise the client\nconst hubClient = new HubClient({ url: 'ws://localhost:3000' });\n\n// Wait for the client to connect and set client ID\nawait hubClient.isReady();\n\n// Start the REPL and make hubClient available\nconst replInstance = repl.start('> ');\nreplInstance.context.hubClient = hubClient;\n```\n\nIn the example above, you have Node.js repl with a Hub WebSocket client\nconnecting to a Hub WebSocket server running at localhost:3000. You can then\nmake calls from the client, such as getting the clientId of the client:\n\n```javascript\nhubClient.getClientId();\n```\n\n#### RPC (Remote Procedure Calls)\n\nHub has support for defining RPC functions, but with an added twist. Traditionally RPC functions are defined on the server and called from the client.\n\nHub supports that common use case, but also supports defining RPC functions on the client that the server can call.\n\nWe will show examples of both below:\n\n##### Creating an RPC function on the server\n\n```javascript\n// Here's some example data of say cryptocurrency prices\nconst cryptocurrencies = {\n\tbitcoin: 11393.9,\n\tethereum: 373.23,\n\tlitecoin: 50.35,\n};\n\n// This simulates price movements, so that requests to the rpc\n// function will returning changing prices.\nsetInterval(() => {\n\tObject.keys(cryptocurrencies).forEach((currency) => {\n\t\tconst movement = Math.random() > 0.5 ? 1 : -1;\n\t\tconst amount = Math.random();\n\t\tcryptocurrencies[currency] += movement * amount;\n\t});\n}, 1000);\n\n// Here we define the function to be added as an RPC function\nconst getPriceFunction = ({ data, reply }) => {\n\tlet cryptocurrency = cryptocurrencies[data.cryptocurrency];\n\treply({ data: { cryptocurrency } });\n};\n\n// We then attach that function to the RPC action 'get-price'\nhub.rpc.add('get-price', getPriceFunction);\n```\n\n##### Calling the RPC function from the client\n\nNow let's say you want to get the price for ethereum from the client:\n\n```javascript\n// Setup a request to get the price of ethereum\nconst request = {\n\taction: 'get-price',\n\tdata: { cryptocurrency: 'ethereum' },\n};\n// Send that RPC request to the server\nconst { cryptocurrency } = await hubClient.rpc.send(request);\n\n// Log the response from the data\nconsole.log({ cryptocurrency });\n```\n\n##### Creating an RPC function on the client\n\n```javascript\n// Create an RPC function to call on the client\nconst getEnvironment = ({ reply }) => {\n\t// Get some details from a Node CLI running on a server\n\tconst { arch, platform, version } = process;\n\treply({ data: { arch, platform, version } });\n};\n// Add that function for the 'get-environment RPC call'\nhubClient.rpc.add('get-environment', getEnvironment);\n```\n\n##### Calling the RPC function from the server\n\n```javascript\n// Fetch a WebSocket client, the first in the list\nconst ws = hubServer.wss.clients.values().next().value;\n// Make an RPC request to that WebSocket client\nconst response = await hubServer.rpc.send({\n\tws,\n\taction: 'get-environment',\n});\n```\n\n##### Calling an RPC function without wanting a response back\n\nIn some cases you might want to make a request to an RPC function but not get\na reply back (such as sending an api key to a client). You can do that by\npassing a `noReply` boolean to the `rpc.send` function, like in this example:\n\n```javascript\nconst response = await hubServer.rpc.send({\n\tws,\n\taction: 'set-api-key',\n\tdata: { apiKey: 'eKam2aa3dah2jah4UtheeFaiPo6xahx5ohrohk5o' },\n\tnoReply: true,\n});\n```\n\nThe response will be a `null` value.\n\n#### PubSub (Publish/Subscribe)\n\nHub has support for PubSub, where the client subscribes to channels and unsubscribes from them, and where both the client and the server can publish messages to those channels.\n\n##### Subscribing to a channel\n\n```javascript\nawait hubClient.subscribe('news');\n```\n\n##### Unsubscribing from a channel\n\n```javascript\nawait hubClient.unsubscribe('news');\n```\n\n##### Publishing a message from the client\n\n```javascript\nawait hubClient.publish('news', 'Some biscuits are in the kitchen');\n```\n\nIf you want to send the message to all subscribers but exclude the sender, you can pass a third argument to the call:\n\n```javascript\nawait hubClient.publish('news', 'Some biscuits are in the kitchen', true);\n```\n\n##### Publishing a message from the server\n\n```javascript\nconst channel = 'news';\nconst message = 'And cake too!';\n(async () => {\n\tawait hub.pubsub.publish({\n\t\tdata: { channel, message },\n\t});\n})();\n```\n\n##### Handling messages published for a channel\n\n```javascript\nconst channel = 'weather';\nconst weatherUpdates = (message) => {\n\tconst { temperature, conditions, humidity, wind } = message;\n\tconsole.log({ temperature, conditions, humidity, wind });\n};\nhubClient.addChannelMessageHandler(channel, weatherUpdates);\n```\n\n##### Removing message handlers for a channel\n\n```javascript\nhubClient.removeChannelMessageHandler(channel, weatherUpdates);\n\n// You can also remove the function by referring to its name\nfunction logger(message) {\n\tconsole.log({ message });\n}\n\nhubClient.removeChannelMessageHandler(channel, 'logger');\n```\n\n### Handling client disconnects / reconnects\n\nWhen a client disconnects from the server, the client will automatically be\nunsubscribed from any channels that they were subscribed to. The server\nhandles this, meaning that the list of clients subscribed to channels is\nalways up-to-date.\n\nWhen a client reconnects to the server, the client will automatically be\nresubscribed to the channels that they were originally subscribed to. The\nclient handles this, as it maintains a list of channels currently subscribed\nto, which can be inspected here:\n\n```javascript\nhubClient.channels;\n```\n\n### Fetching messages that were missed while disconnected\n\nResubscribing on reconnect only restores the subscription - any messages\npublished to a channel while the client was offline are not resent\nautomatically. To catch up on those, Hub lets you plug in a function on the\nserver that knows how to look up missed messages for a channel (from\nwherever your app stores its message history), and lets the client ask for\nthem once it is back online.\n\n##### Registering a handler on the server\n\n```javascript\nconst channel = 'news';\n\nconst fetchMissedMessages = async ({ clientId, channel, lastMessageId }) => {\n\t// lastMessageId is whatever the client last saw for this channel (or\n\t// undefined if it never received one). Look up anything published\n\t// after that from wherever you store your message history, and return\n\t// it as an array of { id, message } objects.\n\tconst rows = await db.news.findAfter(lastMessageId);\n\treturn rows.map((row) => ({ id: row.id, message: row.body }));\n};\n\nhub.pubsub.addChannelConfiguration({ channel, fetchMissedMessages });\n```\n\n##### Fetching missed messages from the client\n\n```javascript\n// Defaults to fetching for every channel the client is currently\n// subscribed to\nawait hubClient.fetchMissedMessages();\n\n// Or fetch for specific channels only\nawait hubClient.fetchMissedMessages(['news']);\n```\n\nBy default, each missed message is delivered back to the client one at a\ntime through the usual channel message handlers (see\n[Handling messages published for a channel](#handling-messages-published-for-a-channel)),\ntagged with a `catchup` flag so you can tell them apart from live messages if\nyou need to:\n\n```javascript\nconst newsUpdates = (message, { catchup } = {}) => {\n\tconsole.log({ message, catchup });\n};\nhubClient.addChannelMessageHandler('news', newsUpdates);\n```\n\nIf you would rather receive all of the missed messages at once instead of as\nindividual events, pass `delivery: 'bulk'` (either per call, or as a default\nfor the client):\n\n```javascript\nconst { messages } = await hubClient.fetchMissedMessages(['news'], {\n\tdelivery: 'bulk',\n});\n// messages is keyed by channel: { news: [{ id, message }, ...] }\n```\n\n```javascript\nconst hubClient = new HubClient({\n\turl: 'ws://localhost:4000',\n\tmissedMessagesDelivery: 'bulk',\n});\n```\n\n##### Tracking the last message id for a channel\n\nFor the client to tell the server where it left off, it needs to know how to\nread an id out of the messages it receives for a channel. Pass a\n`getMessageId` function when subscribing:\n\n```javascript\nawait hubClient.subscribe('news', {\n\tgetMessageId: (message) => message.id,\n});\n```\n\n##### Automatically fetching missed messages on reconnect\n\nIf you would rather not call `fetchMissedMessages` manually after every\nreconnect, set `autoFetchMissedMessages` when creating the client, and it\nwill be called automatically after the client resubscribes to its channels:\n\n```javascript\nconst hubClient = new HubClient({\n\turl: 'ws://localhost:4000',\n\tautoFetchMissedMessages: true,\n});\n```\n\n### Handling client / channel subscriptions data\n\nHub by default will store data about client/channel subscriptions in memory.\nThis makes it easy to get started with using the library without needing to\nsetup databases to store the data.\n\nHowever, we recommend that you setup a database like Redis to store that\ndata, so that you don't lose the data if the Node.js process that is running\nHub ends.\n\nYou can setup Hub to use Redis as a data store for client/channels\nsubscriptions data, as demonstrated in the example below:\n\n```javascript\nconst hub = new Hub({\n\tport: 4000,\n\tdataStoreType: 'redis',\n\tdataStoreOptions: {\n\t\tchannelsKey: 'channels' // by default it is hub-channels\n\t\tclientsKey: 'clients' // by default it is hub-clients\n\t\t/*\n\t\t* This is the same config options that can be passed into the redis NPM\n\t\t* module, with details here:\n\t\t* https://www.npmjs.com/package/redis#options-object-properties\n\t\t*/\n\t\tredisConfig: {\n\t\t\tdb: 1\n\t\t}\n\t}\n});\n```\n\nThe added benefit of using the Redis data store is that it supports horizontal scaling.\n\nFor example, say you have two instances of Hub (server A and server B), and two clients\n(client A and client B). Both clients are subscribed to the channel 'news'.\n\nIf a message is published to the channel 'news' using server A, then the message will be\nreceived by both servers A and B, and the message will be passed to clients that\nare subscribers to that channel, in this case both Client A and client B.\n\nThis means that you don't have to worry about which clients are connected to which servers,\nor which servers are receiving the publish actions. You can then run multiple instances of\nHub across multiple servers, and have a load balancer sit in front of the servers to handle\navailability (making sure WebSocket connections go to available servers, and if a server\ngoes offline, that it can pass the reconnection attempt to another available server).\n\n### Creating channels that require authentication\n\nThere will likely be cases where you want to use channels that only some users can subscribe to.\n\nHub provides a way to add private channels by providing channel configurtions to the server, like\nin this example below:\n\n```javascript\nconst channel = 'internal_announcements';\n/*\n * Here we create a function that is called every time a client tries to\n * subscribe to a channel with a given name\n */\nconst authenticate = ({ socket, data }) => {\n\t// We have access to the socket of the client and the data they pass in\n\t// the subscribe request.\n\t//\n\t// isAllowed and isValid are just example functions that the developer can\n\t// define to perform the backend authentication for the subscription\n\t// request.\n\tif (isAllowed(data.channel, socket.clientId)) return true;\n\tif (isValidToken(data.token)) return true;\n\t// The function must return true is the client is allowed to subscribe\n};\n\nhub.pubsub.addChannelConfiguration({ channel, authenticate });\n```\n\nThen on the client, a user can subscribe and provide additional data to authenticate the channel\n\n```javascript\nconst channel = 'internal_announcements';\nconst token = 'ahghaCeciawi5aefi5oolah6ahc8Yeeshie5opai';\n\nawait hubClient.subscribe(channel, { token });\n```\n\n### Adding wildcard channels configurations\n\nThere may be a case where you want to apply authentication across a range of channels without wanting\nto add a channel configuration for each channel. There is support for wildcard channel configurations.\n\nTo illustrate, say you have a number of channels that are named like this:\n\n-   dashboard_IeK0iithee\n-   dashboard_aipe0Paith\n-   dashboard_ETh2ielah1\n\nRather than having to add channel configurations for each channel, you can add a wildcard channel\nconfiguration like this:\n\n```javascript\n// The wildcard matching character is *\nconst channel = 'dashboard_*';\nconst authenticate = ({ socket, data }) => {\n\t// For implementing authentication specific to each channel,\n\t// the channel is available in the data object\n\tif (isAllowed(data.channel, socket.clientId)) return true;\n};\n\nhub.pubsub.addChannelConfiguration({ channel, authenticate });\n```\n\nThe `dashboard_*` wildcard channel will then run across all channels that have\na name containing `dashboard_` in them.\n\n##### Enabling / disabling client publish capability\n\nBy default clients can publish messages to a channel. There may be some\nchannels where you do not want clients to be able to do this, or cases where\nonly some of the clients can publish messages.\n\nIn such cases, you can set a `clientCanPublish` boolean flag when adding a\nchannel configuration, like in the example below:\n\n```javascript\nconst channel = 'announcements';\nhub.pubsub.addChannelConfiguration({ channel, clientCanPublish: false });\n```\n\nIf you need to enable/disable client publish on a client basis, you can pass a\nfunction that receives the data and socket, like this:\n\n```javascript\nconst channel = 'panel_discussion';\nconst clientCanPublish = ({ data, socket }) => {\n\t// Here you can inspect the publish data and the socket\n\t// of the client trying to publish\n\t//\n\t// isAllowed && isSafeToPublish are example functions\n\t//\n\treturn isAllowed(socket.clientId) && isSafeToPublish(data.message);\n};\nhub.pubsub.addChannelConfiguration({ channel, clientCanPublish });\n```\n\n### Security\n\n#### Using-a-secure-server-with-hub\n\nHub by default will initialise a HTTP server to attach the WebSocket server to.\nHowever, it is recommended to use HTTPS to ensure that connections are secure.\n\nHub allows you 2 ways to setup the server to run on https - either pass an\ninstance of a https server to Hub:\n\n```javascript\nimport https from 'node:https';\nimport fs from 'node:fs';\nimport Hub from '@anephenix/hub';\n\nconst serverOptions = {\n\tkey: fs.readFileSync('PATH_TO_SSL_CERTIFICATE_KEY_FILE'),\n\tcert: fs.readFileSync('PATH_TO_SSL_CERTIFICATE_FILE');\n};\n\nconst httpsServer = https.createServer(serverOptions);\n\nconst hub = await new Hub({port: 4000, server: httpsServer});\n```\n\nAlternatively, you can pass the string 'https' with the https\nserver options passed as a `serverOptions` property to Hub.\n\n```javascript\nimport fs from 'node:fs';\nimport Hub from '@anephenix/hub';\n\nconst serverOptions = {\n\tkey: fs.readFileSync('PATH_TO_SSL_CERTIFICATE_KEY_FILE'),\n\tcert: fs.readFileSync('PATH_TO_SSL_CERTIFICATE_FILE');\n};\n\nconst hub = await new Hub({port: 4000, serverType: 'https', serverOptions });\n```\n\nWhen you use a https server with Hub, the url for connecting to the server\nwill use `wss://` instead of `ws://`.\n\n#### Restricting where WebSockets can connect from\n\nYou can restrict the urls where WebSocket connections can be established by\npassing an array of url origins to the `allowedOrigins` property for a server:\n\n```javascript\nimport Hub from '@anephenix/hub';\n\nconst hub = await new Hub({\n\tport: 4000,\n\tallowedOrigins: ['landscape.anephenix.com'],\n});\n```\n\nThis means that any attempted connections from websites not hosted on\n'landscape.anephenix.com' will be closed by the server.\n\nAlernatively, you can also restrict the IP Addresses that clients can make\nWebSocket connections from:\n\n```javascript\nimport Hub from '@anephenix/hub';\n\nconst hub = await new Hub({ port: 4000, allowedIpAddresses: ['76.76.21.21'] });\n```\n\n#### Kicking clients from the server\n\nThere may be cases where a client is misbehaving, and you want to kick them off the server. You can do that with this code\n\n```javascript\n// Let's take the 1st client in the list of connected clients as an example\nconst ws = Array.from(hub.wss.clients)[0];\n// Call kick\nawait hub.kick({ ws });\n```\n\nThis will disable the client's automatic WebSocket reconnection code, and close the websocket connection.\n\nHowever, if the person operating the client is versed in JavaScript, they can try and override the client code to reconnect again.\n\n#### Banning clients from the server\n\nYou may want to ban a client from being able to reconnect again. You can do that by using this code:\n\n```javascript\n// Let's take the 1st client in the list of connected clients as an example\nconst ws = Array.from(hub.wss.clients)[0];\n// Call kick\nawait hub.kickAndBan({ ws });\n```\n\nIf the client attempts to reconnect again, then they will be kicked off automatically.\n\n#### Adding or removing ban rules for clients\n\nClient kicking/banning works by using a list of ban rules to check clients against.\n\nA ban rule is a combination of a client's id, hostname and ip address.\n\nYou can add ban rules to the system via this code:\n\n```javascript\nconst banRule = {\n\tclientId: 'da1441a8-691a-42db-bb45-c63c6b7bd7c7',\n\thost: 'signal.anephenix.com',\n\tipAddress: '92.41.162.30',\n};\n\nawait hub.dataStore.addBanRule(banRule);\n```\n\nA ban rule can consist of only one or two properties as well, say the ipAddress:\n\n```javascript\nconst ipAddressBanRule = {\n\tipAddress: '92.41.162.30',\n};\n\nawait hub.dataStore.addBanRule(ipAddressBanRule);\n```\n\nTo remove the ban rule, you can use this code:\n\n```javascript\nconst banRule = {\n\tclientId: 'da1441a8-691a-42db-bb45-c63c6b7bd7c7',\n\thost: 'signal.anephenix.com',\n\tipAddress: '92.41.162.30',\n};\n\nawait hub.dataStore.removeBanRule(banRule);\n```\n\nTo get the list of ban rules, you can use this code:\n\n```javascript\nawait hub.dataStore.getBanRules();\n```\n\nTo clear all of the ban rules:\n\n```javascript\nawait hub.dataStore.clearBanRules();\n```\n\n### Running tests\n\nTo run tests, make sure that you have [mkcert](https://mkcert.dev) installed to generate some SSL certificates on your local machine.\n\n```shell\nnpm run certs\nnpm t\nnpm run build\nnpm run build-cucumber-support-files\nnpm run cucumber\n```\n\n### License and Credits\n\n&copy; 2026 Anephenix Ltd. All rights reserved. Hub is licensed under the MIT licence.\n","readmeFilename":"README.md"}