{"_id":"@ably/react-web-cli","_rev":"21-491bac37197d47b1ed9a29a284bcb439","name":"@ably/react-web-cli","dist-tags":{"latest":"1.0.0"},"versions":{"0.2.8":{"name":"@ably/react-web-cli","version":"0.2.8","keywords":["ably","cli","react","terminal","xterm"],"author":{"name":"Ably","email":"support@ably.com"},"license":"Apache-2.0","_id":"@ably/react-web-cli@0.2.8","maintainers":[{"name":"mschristensen","email":"mike@christensen.codes"},{"name":"ably-realtime","email":"account.owners@ably.com"},{"name":"simonw_ably","email":"simon.woolf@ably.com"},{"name":"owenpearson","email":"owen.pearson@ably.com"},{"name":"hingasellu","email":"hingasellu@gmail.com"},{"name":"ttypic","email":"khokhlov.e.n@gmail.com"},{"name":"andrii.bulat.ably","email":"andrii.bulat@ably.com"},{"name":"andytwf","email":"andyford993@gmail.com"},{"name":"splind06","email":"steven.lindsay@ably.com"},{"name":"zariel-ably","email":"chris.bannister@ably.com"},{"name":"mattheworiordan","email":"matthew.oriordan@gmail.com"}],"dist":{"shasum":"9ca590f5272ae5cc0b9e2dde3d7011475fafbf81","tarball":"https://registry.npmjs.org/@ably/react-web-cli/-/react-web-cli-0.2.8.tgz","fileCount":5,"integrity":"sha512-WZLCjcTgbXIc/H62sxV7kiYqkulttmxLigPS5AUVE2S9/NeHl/q73DNx5+A9ZaoOtRj6pf5IU80zF2leJsl57A==","signatures":[{"sig":"MEYCIQDae+ISGawoNsmtrwJHWozg6ttG4THK5+q48kCERAbAMAIhALlGcP5VtDOeFg1ccTvvt1fgz6bSvb0nqBUkHcvxFpUA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37556},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"e965e31828d99e51683ef6a4788aa9268f7a11bd","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","test":"echo \"Error: no test specified\" && exit 1","build":"tsup src/index.ts --format cjs,esm --dts --clean"},"_npmUser":{"name":"mattheworiordan","email":"matthew.oriordan@gmail.com"},"_npmVersion":"10.9.2","description":"React component for embedding the Ably CLI in a web terminal","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@xterm/xterm":"^5.5.0","@xterm/addon-fit":"^0.10.0","@xterm/addon-webgl":"^0.18.0","@xterm/addon-serialize":"^0.13.0","@xterm/addon-unicode11":"^0.8.0","@xterm/addon-web-links":"^0.11.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vite":"^6.2.4","react":"^18.3.1","react-dom":"^18.3.1","typescript":"^5.8.2","@types/react":"^18.3.0","@types/react-dom":"^18.3.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-web-cli_0.2.8_1744325148741_0.5698725930528374","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@ably/react-web-cli","version":"0.3.0","keywords":["ably","cli","react","terminal","xterm"],"author":{"name":"Ably","email":"support@ably.com"},"license":"Apache-2.0","_id":"@ably/react-web-cli@0.3.0","maintainers":[{"name":"mschristensen","email":"mike@christensen.codes"},{"name":"ably-realtime","email":"account.owners@ably.com"},{"name":"simonw_ably","email":"simon.woolf@ably.com"},{"name":"owenpearson","email":"owen.pearson@ably.com"},{"name":"hingasellu","email":"hingasellu@gmail.com"},{"name":"ttypic","email":"khokhlov.e.n@gmail.com"},{"name":"andrii.bulat.ably","email":"andrii.bulat@ably.com"},{"name":"andytwf","email":"andyford993@gmail.com"},{"name":"splind06","email":"steven.lindsay@ably.com"},{"name":"zariel-ably","email":"chris.bannister@ably.com"},{"name":"mattheworiordan","email":"matthew.oriordan@gmail.com"}],"dist":{"shasum":"73229cfec6b502334e4bfd1d955ebb9931d7e588","tarball":"https://registry.npmjs.org/@ably/react-web-cli/-/react-web-cli-0.3.0.tgz","fileCount":6,"integrity":"sha512-RN8gxXycouswOTa5Q5hF4r4ZFUlVo0ybVNor+e4osnXkSpFUhQ32glNo9BjzJR5FGrUL9Si6YKlK17UxbjzX8A==","signatures":[{"sig":"MEUCIQDwEwMIteLBl8mgcn2noWVqEVjNwI0nSIBc5DsJ3Rs04AIgYD/UBGQSxbtPBEfAsLV6abT9WBgEUzq2oD0jmksrmg8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41219},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"82e20a7ef6b1b8fc0b75c8a024dea1c7b609acfd","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","test":"echo \"Error: no test specified\" && exit 1","build":"tsup src/index.ts --format cjs,esm --dts --clean"},"_npmUser":{"name":"mattheworiordan","email":"matthew.oriordan@gmail.com"},"_npmVersion":"10.9.2","description":"React component for embedding the Ably CLI in a web terminal","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@xterm/xterm":"^5.5.0","@xterm/addon-fit":"^0.10.0","@xterm/addon-webgl":"^0.18.0","@xterm/addon-serialize":"^0.13.0","@xterm/addon-unicode11":"^0.8.0","@xterm/addon-web-links":"^0.11.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vite":"^6.2.4","react":"^18.3.1","react-dom":"^18.3.1","typescript":"^5.8.2","@types/react":"^18.3.0","@types/react-dom":"^18.3.0"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-web-cli_0.3.0_1744365602471_0.1432969413962455","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@ably/react-web-cli","version":"0.7.2","keywords":["ably","cli","react","terminal","xterm"],"author":{"name":"Ably","email":"support@ably.com"},"license":"Apache-2.0","_id":"@ably/react-web-cli@0.7.2","maintainers":[{"name":"mschristensen","email":"mike@christensen.codes"},{"name":"ably-realtime","email":"account.owners@ably.com"},{"name":"simonw_ably","email":"simon.woolf@ably.com"},{"name":"owenpearson","email":"owen.pearson@ably.com"},{"name":"hingasellu","email":"hingasellu@gmail.com"},{"name":"ttypic","email":"khokhlov.e.n@gmail.com"},{"name":"andrii.bulat.ably","email":"andrii.bulat@ably.com"},{"name":"andytwf","email":"andyford993@gmail.com"},{"name":"splind06","email":"steven.lindsay@ably.com"},{"name":"zariel-ably","email":"chris.bannister@ably.com"},{"name":"mattheworiordan","email":"matthew.oriordan@gmail.com"},{"name":"vlad.velici.ably","email":"vlad.velici@ably.com"},{"name":"aprilsmith","email":"april.smith@ably.com"},{"name":"kennethkalmer","email":"kenneth.kalmer@gmail.com"},{"name":"jhenson","email":"jamie@jamiehenson.com"},{"name":"matthew.ali","email":"matthew.ali@ably.com"},{"name":"mhulbert","email":"mark.hulbert@ably.com"}],"dist":{"shasum":"370d52b40ce4b9ff2789ab260779ce5c13e07c1c","tarball":"https://registry.npmjs.org/@ably/react-web-cli/-/react-web-cli-0.7.2.tgz","fileCount":7,"integrity":"sha512-/BWjwWNyITLzXjyT+UH95E0x/XxQt3hzzN0MvHCGKPjRFYstoTqn86bT4iYZD1N1N8FWvp3rIqZdARWbjENKdA==","signatures":[{"sig":"MEYCIQC2+HgYFHlbX931E0sKtL+qcQYhV0ksxkpzfg7W2w0lggIhAJqASvmSAvlWfS9F+Oa5ip/DubT1ydghwUVaozMHhtm9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":232448},"main":"dist/index.js","_from":"file:ably-react-web-cli-0.7.2.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","test":"vitest run --passWithNoTests","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:debug":"vitest run --passWithNoTests --reporter verbose"},"_npmUser":{"name":"jhenson","actor":{"name":"jhenson","type":"user","email":"jamie@jamiehenson.com"},"email":"jamie@jamiehenson.com"},"_resolved":"/private/var/folders/fd/zbcmsyd16wl62g7w1dkl3r4m0000gp/T/5dbf0ef0f2204ee9878e6b7efdce8dae/ably-react-web-cli-0.7.2.tgz","_integrity":"sha512-/BWjwWNyITLzXjyT+UH95E0x/XxQt3hzzN0MvHCGKPjRFYstoTqn86bT4iYZD1N1N8FWvp3rIqZdARWbjENKdA==","_npmVersion":"10.9.2","description":"React component for embedding the Ably CLI in a web terminal","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@xterm/xterm":"^5.5.0","@xterm/addon-fit":"^0.10.0","@xterm/addon-webgl":"^0.18.0","@xterm/addon-serialize":"^0.13.0","@xterm/addon-unicode11":"^0.8.0","@xterm/addon-web-links":"^0.11.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vite":"^6.2.4","react":"^18.3.1","vitest":"^3.1.3","react-dom":"^18.3.1","@vitest/ui":"^3.1.3","typescript":"^5.8.2","@types/react":"^18.3.0","lucide-react":"^0.507.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-web-cli_0.7.2_1752075459646_0.18873075718451604","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@ably/react-web-cli","version":"0.8.0","keywords":["ably","cli","react","terminal","xterm"],"author":{"name":"Ably","email":"support@ably.com"},"license":"Apache-2.0","_id":"@ably/react-web-cli@0.8.0","maintainers":[{"name":"mschristensen","email":"mike@christensen.codes"},{"name":"ably-realtime","email":"account.owners@ably.com"},{"name":"simonw_ably","email":"simon.woolf@ably.com"},{"name":"owenpearson","email":"owen.pearson@ably.com"},{"name":"hingasellu","email":"hingasellu@gmail.com"},{"name":"ttypic","email":"khokhlov.e.n@gmail.com"},{"name":"andrii.bulat.ably","email":"andrii.bulat@ably.com"},{"name":"andytwf","email":"andyford993@gmail.com"},{"name":"splind06","email":"steven.lindsay@ably.com"},{"name":"zariel-ably","email":"chris.bannister@ably.com"},{"name":"mattheworiordan","email":"matthew.oriordan@gmail.com"},{"name":"vlad.velici.ably","email":"vlad.velici@ably.com"},{"name":"aprilsmith","email":"april.smith@ably.com"},{"name":"kennethkalmer","email":"kenneth.kalmer@gmail.com"},{"name":"jhenson","email":"jamie@jamiehenson.com"},{"name":"matthew.ali","email":"matthew.ali@ably.com"},{"name":"mhulbert","email":"mark.hulbert@ably.com"}],"dist":{"shasum":"5e163581dc447dc211117882c2448b381df70095","tarball":"https://registry.npmjs.org/@ably/react-web-cli/-/react-web-cli-0.8.0.tgz","fileCount":7,"integrity":"sha512-YKodpzVuYxvdOOfNNglrRgrwV6dVIO5yTPUDT+NhDZUzOaNBOJyNx00L0vUxkIwDdylX2i4Orc6rQvj7qult0g==","signatures":[{"sig":"MEUCIQDx8z/YsWZv2pwXT84om1CrOZBvlA0Ufhskf4Yd801dQQIgLrg9l3CBsWA1lO83NfUupO8ARArEfi4aLQX4RK11ho0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":267555},"main":"dist/index.js","_from":"file:ably-react-web-cli-0.8.0.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","test":"vitest run --passWithNoTests","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:debug":"vitest run --passWithNoTests --reporter verbose"},"_npmUser":{"name":"jhenson","email":"jamie@jamiehenson.com"},"_resolved":"/private/var/folders/fd/zbcmsyd16wl62g7w1dkl3r4m0000gp/T/c2ba6eeaa7bc20c416a9dd48fca61aa1/ably-react-web-cli-0.8.0.tgz","_integrity":"sha512-YKodpzVuYxvdOOfNNglrRgrwV6dVIO5yTPUDT+NhDZUzOaNBOJyNx00L0vUxkIwDdylX2i4Orc6rQvj7qult0g==","_npmVersion":"10.9.2","description":"React component for embedding the Ably CLI in a web terminal","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@xterm/xterm":"^5.5.0","@xterm/addon-fit":"^0.10.0","@xterm/addon-webgl":"^0.18.0","@xterm/addon-serialize":"^0.13.0","@xterm/addon-unicode11":"^0.8.0","@xterm/addon-web-links":"^0.11.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vite":"^6.2.4","react":"^18.3.1","vitest":"^3.1.3","react-dom":"^18.3.1","@vitest/ui":"^3.1.3","typescript":"^5.8.2","@types/react":"^18.3.0","lucide-react":"^0.507.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-web-cli_0.8.0_1754993140129_0.8313439567067837","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@ably/react-web-cli","version":"0.8.1","keywords":["ably","cli","react","terminal","xterm"],"author":{"name":"Ably","email":"support@ably.com"},"license":"Apache-2.0","_id":"@ably/react-web-cli@0.8.1","maintainers":[{"name":"mschristensen","email":"mike@christensen.codes"},{"name":"ably-realtime","email":"account.owners@ably.com"},{"name":"simonw_ably","email":"simon.woolf@ably.com"},{"name":"owenpearson","email":"owen.pearson@ably.com"},{"name":"hingasellu","email":"hingasellu@gmail.com"},{"name":"ttypic","email":"khokhlov.e.n@gmail.com"},{"name":"andrii.bulat.ably","email":"andrii.bulat@ably.com"},{"name":"andytwf","email":"andyford993@gmail.com"},{"name":"splind06","email":"steven.lindsay@ably.com"},{"name":"zariel-ably","email":"chris.bannister@ably.com"},{"name":"mattheworiordan","email":"matthew.oriordan@gmail.com"},{"name":"vlad.velici.ably","email":"vlad.velici@ably.com"},{"name":"aprilsmith","email":"april.smith@ably.com"},{"name":"kennethkalmer","email":"kenneth.kalmer@gmail.com"},{"name":"jhenson","email":"jamie@jamiehenson.com"},{"name":"matthew.ali","email":"matthew.ali@ably.com"},{"name":"mhulbert","email":"mark.hulbert@ably.com"}],"dist":{"shasum":"4233be428117264c289b78fe1d60467a0a6656e7","tarball":"https://registry.npmjs.org/@ably/react-web-cli/-/react-web-cli-0.8.1.tgz","fileCount":7,"integrity":"sha512-2gyF+RA8CYdlv+F7r6tPm1uOzk6r2WGkn1ofjcMHvs4uakRH4JUKGBjq8F0V83Ipkuw5t1f9KUKuAVtLzlbOjg==","signatures":[{"sig":"MEQCIF6sKhHVx4fxzRdDQ8P8s4APWP1cl2OTD30cFle9oc0jAiAMR28Id89LwJQgLhTTkjMu3l9LgkVswC3Z1DqmIM5cxQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":267555},"main":"dist/index.js","_from":"file:ably-react-web-cli-0.8.1.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","test":"vitest run --passWithNoTests","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:debug":"vitest run --passWithNoTests --reporter verbose"},"_npmUser":{"name":"jhenson","email":"jamie@jamiehenson.com"},"_resolved":"/private/var/folders/fd/zbcmsyd16wl62g7w1dkl3r4m0000gp/T/536158279d639c6f6ee38b4ee0939455/ably-react-web-cli-0.8.1.tgz","_integrity":"sha512-2gyF+RA8CYdlv+F7r6tPm1uOzk6r2WGkn1ofjcMHvs4uakRH4JUKGBjq8F0V83Ipkuw5t1f9KUKuAVtLzlbOjg==","_npmVersion":"10.9.2","description":"React component for embedding the Ably CLI in a web terminal","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@xterm/xterm":"^5.5.0","@xterm/addon-fit":"^0.10.0","@xterm/addon-webgl":"^0.18.0","@xterm/addon-serialize":"^0.13.0","@xterm/addon-unicode11":"^0.8.0","@xterm/addon-web-links":"^0.11.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vite":"^6.2.4","react":"^18.3.1","vitest":"^3.1.3","react-dom":"^18.3.1","@vitest/ui":"^3.1.3","typescript":"^5.8.2","@types/react":"^18.3.0","lucide-react":"^0.507.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-web-cli_0.8.1_1754993282488_0.338605934709012","host":"s3://npm-registry-packages-npm-production"}},"0.13.1":{"name":"@ably/react-web-cli","version":"0.13.1","keywords":["ably","cli","react","terminal","xterm"],"author":{"name":"Ably","email":"support@ably.com"},"license":"Apache-2.0","_id":"@ably/react-web-cli@0.13.1","maintainers":[{"name":"mschristensen","email":"mike@christensen.codes"},{"name":"ably-realtime","email":"account.owners@ably.com"},{"name":"simonw_ably","email":"simon.woolf@ably.com"},{"name":"owenpearson","email":"owen.pearson@ably.com"},{"name":"hingasellu","email":"hingasellu@gmail.com"},{"name":"ttypic","email":"khokhlov.e.n@gmail.com"},{"name":"andrii.bulat.ably","email":"andrii.bulat@ably.com"},{"name":"andytwf","email":"andyford993@gmail.com"},{"name":"splind06","email":"steven.lindsay@ably.com"},{"name":"zariel-ably","email":"chris.bannister@ably.com"},{"name":"mattheworiordan","email":"matthew.oriordan@gmail.com"},{"name":"vlad.velici.ably","email":"vlad.velici@ably.com"},{"name":"aprilsmith","email":"april.smith@ably.com"},{"name":"kennethkalmer","email":"kenneth.kalmer@gmail.com"},{"name":"jhenson","email":"jamie@jamiehenson.com"},{"name":"matthew.ali","email":"matthew.ali@ably.com"},{"name":"mhulbert","email":"mark.hulbert@ably.com"}],"dist":{"shasum":"441291200c830aa708fc8a179ccf4892e7287843","tarball":"https://registry.npmjs.org/@ably/react-web-cli/-/react-web-cli-0.13.1.tgz","fileCount":7,"integrity":"sha512-bClz+AH7XrAw31D9CJP88VljGLO+ae4R6RSNASsoJ8NCIeKCTKdBYVSRsbdo4GVJHPGZiselg+D059VDSbQz1w==","signatures":[{"sig":"MEMCHyNNdxOjGYwgEqUj50zAIvaiRMrM/BzyiaJXs1qmgoMCID7YadIMuGDTl0y7UbYFZyFPLbxN6kGiav6t9Ei2wJUx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":270574},"main":"dist/index.js","_from":"file:ably-react-web-cli-0.13.1.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","test":"vitest run --passWithNoTests","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:debug":"vitest run --passWithNoTests --reporter verbose"},"_npmUser":{"name":"hingasellu","email":"hingasellu@gmail.com"},"_resolved":"/private/var/folders/g8/cy5k_8gx3dj7yzr2vbf8clbr0000gp/T/167705284bf6496ba263104065babc26/ably-react-web-cli-0.13.1.tgz","_integrity":"sha512-bClz+AH7XrAw31D9CJP88VljGLO+ae4R6RSNASsoJ8NCIeKCTKdBYVSRsbdo4GVJHPGZiselg+D059VDSbQz1w==","_npmVersion":"10.9.2","description":"React component for embedding the Ably CLI in a web terminal","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@xterm/xterm":"^5.5.0","@xterm/addon-fit":"^0.10.0","@xterm/addon-webgl":"^0.18.0","@xterm/addon-serialize":"^0.13.0","@xterm/addon-unicode11":"^0.8.0","@xterm/addon-web-links":"^0.11.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vite":"^6.2.4","react":"^18.3.1","vitest":"^3.1.3","react-dom":"^18.3.1","@vitest/ui":"^3.1.3","typescript":"^5.8.2","@types/react":"^18.3.0","lucide-react":"^0.507.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-web-cli_0.13.1_1758726598250_0.6591381902887496","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@ably/react-web-cli","version":"0.14.0","keywords":["ably","cli","react","terminal","xterm"],"author":{"name":"Ably","email":"support@ably.com"},"license":"Apache-2.0","_id":"@ably/react-web-cli@0.14.0","maintainers":[{"name":"mschristensen","email":"mike@christensen.codes"},{"name":"ably-realtime","email":"account.owners@ably.com"},{"name":"simonw_ably","email":"simon.woolf@ably.com"},{"name":"owenpearson","email":"owen.pearson@ably.com"},{"name":"hingasellu","email":"hingasellu@gmail.com"},{"name":"ttypic","email":"khokhlov.e.n@gmail.com"},{"name":"andrii.bulat.ably","email":"andrii.bulat@ably.com"},{"name":"andytwf","email":"andyford993@gmail.com"},{"name":"splind06","email":"steven.lindsay@ably.com"},{"name":"zariel-ably","email":"chris.bannister@ably.com"},{"name":"mattheworiordan","email":"matthew.oriordan@gmail.com"},{"name":"vlad.velici.ably","email":"vlad.velici@ably.com"},{"name":"aprilsmith","email":"april.smith@ably.com"},{"name":"kennethkalmer","email":"kenneth.kalmer@gmail.com"},{"name":"jhenson","email":"jamie@jamiehenson.com"},{"name":"matthew.ali","email":"matthew.ali@ably.com"},{"name":"mhulbert","email":"mark.hulbert@ably.com"}],"dist":{"shasum":"d592432c31ffb49f23765cf9137c1d7e6077ad09","tarball":"https://registry.npmjs.org/@ably/react-web-cli/-/react-web-cli-0.14.0.tgz","fileCount":7,"integrity":"sha512-g309lNn04xyGjZjqsce3SSGQ0syshXT97bbJFu8ivg88uEQ066jx3iL8cglbwjkJoAcJeBHHQ0nP2Zct93bzeA==","signatures":[{"sig":"MEUCIQCGrTmIBtUOWDCyouG0O5n8ZLxvlwfePKFVo4j4x11T5gIgJ1jo1iqZVhTIprpEsYszsjYxS/ctdBOUV0S2FKLkhUk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":270574},"main":"dist/index.js","_from":"file:ably-react-web-cli-0.14.0.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","test":"vitest run --passWithNoTests","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:debug":"vitest run --passWithNoTests --reporter verbose"},"_npmUser":{"name":"hingasellu","email":"hingasellu@gmail.com"},"_resolved":"/private/var/folders/g8/cy5k_8gx3dj7yzr2vbf8clbr0000gp/T/3e0d58df90a6a61d8db76960edafbd38/ably-react-web-cli-0.14.0.tgz","_integrity":"sha512-g309lNn04xyGjZjqsce3SSGQ0syshXT97bbJFu8ivg88uEQ066jx3iL8cglbwjkJoAcJeBHHQ0nP2Zct93bzeA==","_npmVersion":"10.9.2","description":"React component for embedding the Ably CLI in a web terminal","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@xterm/xterm":"^5.5.0","@xterm/addon-fit":"^0.10.0","@xterm/addon-webgl":"^0.18.0","@xterm/addon-serialize":"^0.13.0","@xterm/addon-unicode11":"^0.8.0","@xterm/addon-web-links":"^0.11.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vite":"^6.2.4","react":"^18.3.1","vitest":"^3.1.3","react-dom":"^18.3.1","@vitest/ui":"^3.1.3","typescript":"^5.8.2","@types/react":"^18.3.0","lucide-react":"^0.507.0","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-web-cli_0.14.0_1762362991969_0.6855236701378298","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@ably/react-web-cli","version":"0.15.0","keywords":["ably","cli","react","terminal","xterm"],"author":{"name":"Ably","email":"support@ably.com"},"license":"Apache-2.0","_id":"@ably/react-web-cli@0.15.0","maintainers":[{"name":"mschristensen","email":"mike@christensen.codes"},{"name":"ably-realtime","email":"account.owners@ably.com"},{"name":"simonw_ably","email":"simon.woolf@ably.com"},{"name":"owenpearson","email":"owen.pearson@ably.com"},{"name":"hingasellu","email":"hingasellu@gmail.com"},{"name":"ttypic","email":"khokhlov.e.n@gmail.com"},{"name":"andrii.bulat.ably","email":"andrii.bulat@ably.com"},{"name":"andytwf","email":"andyford993@gmail.com"},{"name":"splind06","email":"steven.lindsay@ably.com"},{"name":"zariel-ably","email":"chris.bannister@ably.com"},{"name":"mattheworiordan","email":"matthew.oriordan@gmail.com"},{"name":"vlad.velici.ably","email":"vlad.velici@ably.com"},{"name":"aprilsmith","email":"april.smith@ably.com"},{"name":"kennethkalmer","email":"kenneth.kalmer@gmail.com"},{"name":"jhenson","email":"jamie@jamiehenson.com"},{"name":"matthew.ali","email":"matthew.ali@ably.com"},{"name":"mhulbert","email":"mark.hulbert@ably.com"}],"homepage":"https://github.com/ably/ably-cli#readme","bugs":{"url":"https://github.com/ably/ably-cli/issues"},"dist":{"shasum":"829bc0e6b6a33df1e6217feb271790130902de2b","tarball":"https://registry.npmjs.org/@ably/react-web-cli/-/react-web-cli-0.15.0.tgz","fileCount":7,"integrity":"sha512-/OnFrN2K0Y/trmk89rL78Ctd3Qi8YZ7DyA+Qryo09s2zKxSuaOngENnWCdcs16MGZYQOqQzPX6MFA8LgSh3s/Q==","signatures":[{"sig":"MEYCIQChiwClXX04xHRirWo4GVTxswN8c0SvxMkd0ZrVgpg9xgIhAP3vCDJr9piLxPDOpqMswOaalBsfm5j+0JrNEeP1iVpR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ably%2freact-web-cli@0.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":301813},"main":"dist/index.js","_from":"file:ably-react-web-cli-0.15.0.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","test":"vitest run --passWithNoTests","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:debug":"vitest run --passWithNoTests --reporter verbose"},"_npmUser":{"name":"ably-realtime","email":"account.owners@ably.com"},"_resolved":"/tmp/e591c784f8ccd65b052126eaa0f79c7c/ably-react-web-cli-0.15.0.tgz","_integrity":"sha512-/OnFrN2K0Y/trmk89rL78Ctd3Qi8YZ7DyA+Qryo09s2zKxSuaOngENnWCdcs16MGZYQOqQzPX6MFA8LgSh3s/Q==","repository":{"url":"git+https://github.com/ably/ably-cli.git","type":"git"},"_npmVersion":"10.9.4","description":"React component for embedding the Ably CLI in a web terminal","directories":{},"_nodeVersion":"22.21.1","dependencies":{"@xterm/xterm":"^5.5.0","@xterm/addon-fit":"^0.10.0","@xterm/addon-webgl":"^0.18.0","@xterm/addon-serialize":"^0.13.0","@xterm/addon-unicode11":"^0.8.0","@xterm/addon-web-links":"^0.11.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vite":"^6.2.4","react":"^18.3.1","vitest":"^4.0.0","react-dom":"^18.3.1","@vitest/ui":"^4.0.0","typescript":"^5.8.2","@types/react":"^18.3.0","lucide-react":"^0.507.0","@types/react-dom":"^18.3.0","eslint-plugin-react":"^7.37.5","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-web-cli_0.15.0_1764849279463_0.6793956190737362","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@ably/react-web-cli","version":"0.16.0","keywords":["ably","cli","react","terminal","xterm"],"author":{"name":"Ably","email":"support@ably.com"},"license":"Apache-2.0","_id":"@ably/react-web-cli@0.16.0","maintainers":[{"name":"mschristensen","email":"mike@christensen.codes"},{"name":"ably-realtime","email":"account.owners@ably.com"},{"name":"simonw_ably","email":"simon.woolf@ably.com"},{"name":"owenpearson","email":"owen.pearson@ably.com"},{"name":"hingasellu","email":"hingasellu@gmail.com"},{"name":"ttypic","email":"khokhlov.e.n@gmail.com"},{"name":"andrii.bulat.ably","email":"andrii.bulat@ably.com"},{"name":"andytwf","email":"andyford993@gmail.com"},{"name":"splind06","email":"steven.lindsay@ably.com"},{"name":"zariel-ably","email":"chris.bannister@ably.com"},{"name":"mattheworiordan","email":"matthew.oriordan@gmail.com"},{"name":"vlad.velici.ably","email":"vlad.velici@ably.com"},{"name":"aprilsmith","email":"april.smith@ably.com"},{"name":"kennethkalmer","email":"kenneth.kalmer@gmail.com"},{"name":"jhenson","email":"jamie@jamiehenson.com"},{"name":"matthew.ali","email":"matthew.ali@ably.com"},{"name":"mhulbert","email":"mark.hulbert@ably.com"}],"homepage":"https://github.com/ably/ably-cli#readme","bugs":{"url":"https://github.com/ably/ably-cli/issues"},"dist":{"shasum":"bfd6f4c09dbf194db7e35bff4a7860c5cb98dbc6","tarball":"https://registry.npmjs.org/@ably/react-web-cli/-/react-web-cli-0.16.0.tgz","fileCount":7,"integrity":"sha512-7CwonOxulqHGW8Ej80cMSIFZ2VHPhlsy6EdJPmP0lipmLFPp83YAoeXHf5J0yHXos1abwo+/Zwt4d4FHM8oLKw==","signatures":[{"sig":"MEYCIQDdSAdo9Orb6fvEXsKjATXZ9Mx3VDYIfEuuIzq8lGVcJQIhALG84q98VgW3ejKPAMtY1pdEevnd1n7Dbvwf0B+nN547","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ably%2freact-web-cli@0.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":305066},"main":"dist/index.js","_from":"file:ably-react-web-cli-0.16.0.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","test":"vitest run --passWithNoTests","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:debug":"vitest run --passWithNoTests --reporter verbose"},"_npmUser":{"name":"ably-realtime","email":"account.owners@ably.com"},"_resolved":"/tmp/7cc2ce0cac651c25b9d0c77ff2641a18/ably-react-web-cli-0.16.0.tgz","_integrity":"sha512-7CwonOxulqHGW8Ej80cMSIFZ2VHPhlsy6EdJPmP0lipmLFPp83YAoeXHf5J0yHXos1abwo+/Zwt4d4FHM8oLKw==","repository":{"url":"git+https://github.com/ably/ably-cli.git","type":"git"},"_npmVersion":"10.9.4","description":"React component for embedding the Ably CLI in a web terminal","directories":{},"_nodeVersion":"22.21.1","dependencies":{"@xterm/xterm":"^5.5.0","@xterm/addon-fit":"^0.10.0","@xterm/addon-webgl":"^0.18.0","@xterm/addon-serialize":"^0.13.0","@xterm/addon-unicode11":"^0.8.0","@xterm/addon-web-links":"^0.11.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vite":"^6.2.4","react":"^18.3.1","vitest":"^4.0.0","react-dom":"^18.3.1","@vitest/ui":"^4.0.0","typescript":"^5.8.2","@types/react":"^18.3.0","lucide-react":"^0.507.0","@types/react-dom":"^18.3.0","eslint-plugin-react":"^7.37.5","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-web-cli_0.16.0_1768906893591_0.387004748485434","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@ably/react-web-cli","version":"0.17.0","keywords":["ably","cli","react","terminal","xterm"],"author":{"name":"Ably","email":"support@ably.com"},"license":"Apache-2.0","_id":"@ably/react-web-cli@0.17.0","maintainers":[{"name":"mschristensen","email":"mike@christensen.codes"},{"name":"ably-realtime","email":"account.owners@ably.com"},{"name":"simonw_ably","email":"simon.woolf@ably.com"},{"name":"owenpearson","email":"owen.pearson@ably.com"},{"name":"hingasellu","email":"hingasellu@gmail.com"},{"name":"ttypic","email":"khokhlov.e.n@gmail.com"},{"name":"lawrence.forooghian.ably","email":"lawrence.forooghian@ably.com"},{"name":"andrii.bulat.ably","email":"andrii.bulat@ably.com"},{"name":"andytwf","email":"andyford993@gmail.com"},{"name":"splind06","email":"steven.lindsay@ably.com"},{"name":"zariel-ably","email":"chris.bannister@ably.com"},{"name":"mattheworiordan","email":"matthew.oriordan@gmail.com"},{"name":"vlad.velici.ably","email":"vlad.velici@ably.com"},{"name":"aprilsmith","email":"april.smith@ably.com"},{"name":"kennethkalmer","email":"kenneth.kalmer@gmail.com"},{"name":"jhenson","email":"jamie@jamiehenson.com"},{"name":"matthew.ali","email":"matthew.ali@ably.com"},{"name":"mhulbert","email":"mark.hulbert@ably.com"}],"homepage":"https://github.com/ably/ably-cli#readme","bugs":{"url":"https://github.com/ably/ably-cli/issues"},"dist":{"shasum":"fe7df9dcf0d01dd570569cfae7bce86e8df71062","tarball":"https://registry.npmjs.org/@ably/react-web-cli/-/react-web-cli-0.17.0.tgz","fileCount":7,"integrity":"sha512-S4noESTdOJK5ZUoEjeIEFHXbFqCxGG7CJ+KmcU2iUGdr0hGH1n6/Gzad1mMSl1BIrMd4eyvdupFRpTXiPZuCiA==","signatures":[{"sig":"MEQCIBCjjTASo0n4o+fGJ1zM6K9+Ezt6akk3UG1z4ZwZujVUAiBXtY5M/XEf5tHQbpgDFohIGBRywwHLvXK9Gf/sOlb+Jg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ably%2freact-web-cli@0.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":305066},"main":"dist/index.js","_from":"file:ably-react-web-cli-0.17.0.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","test":"vitest run --passWithNoTests","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:debug":"vitest run --passWithNoTests --reporter verbose"},"_npmUser":{"name":"ably-realtime","email":"account.owners@ably.com"},"_resolved":"/tmp/785b6a0c7ed37868c26693282cd576b9/ably-react-web-cli-0.17.0.tgz","_integrity":"sha512-S4noESTdOJK5ZUoEjeIEFHXbFqCxGG7CJ+KmcU2iUGdr0hGH1n6/Gzad1mMSl1BIrMd4eyvdupFRpTXiPZuCiA==","repository":{"url":"git+https://github.com/ably/ably-cli.git","type":"git"},"_npmVersion":"10.9.4","description":"React component for embedding the Ably CLI in a web terminal","directories":{},"_nodeVersion":"22.22.0","dependencies":{"@xterm/xterm":"^5.5.0","@xterm/addon-fit":"^0.10.0","@xterm/addon-webgl":"^0.18.0","@xterm/addon-serialize":"^0.13.0","@xterm/addon-unicode11":"^0.8.0","@xterm/addon-web-links":"^0.11.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vite":"^6.2.4","react":"^18.3.1","vitest":"^4.0.0","react-dom":"^18.3.1","@vitest/ui":"^4.0.0","typescript":"^5.8.2","@types/react":"^18.3.0","lucide-react":"^0.507.0","@types/react-dom":"^18.3.0","eslint-plugin-react":"^7.37.5","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.6.3"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-web-cli_0.17.0_1773052371255_0.3270786287402183","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@ably/react-web-cli","version":"1.0.0","keywords":["ably","cli","react","terminal","xterm"],"author":{"name":"Ably","email":"support@ably.com"},"license":"Apache-2.0","_id":"@ably/react-web-cli@1.0.0","maintainers":[{"name":"mschristensen","email":"mike@christensen.codes"},{"name":"ably-realtime","email":"account.owners@ably.com"},{"name":"simonw_ably","email":"simon.woolf@ably.com"},{"name":"owenpearson","email":"owen.pearson@ably.com"},{"name":"ttypic","email":"khokhlov.e.n@gmail.com"},{"name":"lawrence.forooghian.ably","email":"lawrence.forooghian@ably.com"},{"name":"andrii.bulat.ably","email":"andrii.bulat@ably.com"},{"name":"andytwf","email":"andyford993@gmail.com"},{"name":"splind06","email":"steven.lindsay@ably.com"},{"name":"zariel-ably","email":"chris.bannister@ably.com"},{"name":"mattheworiordan","email":"matthew.oriordan@gmail.com"},{"name":"vlad.velici.ably","email":"vlad.velici@ably.com"},{"name":"kennethkalmer","email":"kenneth.kalmer@gmail.com"},{"name":"jhenson","email":"jamie@jamiehenson.com"},{"name":"matthew.ali","email":"matthew.ali@ably.com"},{"name":"mhulbert","email":"mark.hulbert@ably.com"}],"homepage":"https://github.com/ably/ably-cli#readme","bugs":{"url":"https://github.com/ably/ably-cli/issues"},"dist":{"shasum":"1db2a77100f3206a0a1beb15ff4b6a1770c383cd","tarball":"https://registry.npmjs.org/@ably/react-web-cli/-/react-web-cli-1.0.0.tgz","fileCount":7,"integrity":"sha512-Kbdg9yS8Lelx4xmbQmYtAhqJkz7cTS2iCrUVCCpQRQnhIRjecKfUWXpYve04rwVy4wygEGlgAG49KbzF4TBIvw==","signatures":[{"sig":"MEUCIQDgop06381/gjjVh69WtPnzcjMDbQUuo9JfEMGy85j4YwIgEnC5hsOpaGxMVRRRS+qX4yu5+TXRcsDcmrW8G52fjrU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ably%2freact-web-cli@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":301166},"main":"dist/index.js","_from":"file:ably-react-web-cli-1.0.0.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","test":"vitest run --passWithNoTests","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:debug":"vitest run --passWithNoTests --reporter verbose"},"_npmUser":{"name":"ably-realtime","email":"account.owners@ably.com"},"_resolved":"/tmp/6e412f5577e8fcdd067121acb4e93965/ably-react-web-cli-1.0.0.tgz","_integrity":"sha512-Kbdg9yS8Lelx4xmbQmYtAhqJkz7cTS2iCrUVCCpQRQnhIRjecKfUWXpYve04rwVy4wygEGlgAG49KbzF4TBIvw==","repository":{"url":"git+https://github.com/ably/ably-cli.git","type":"git"},"_npmVersion":"10.9.7","description":"React component for embedding the Ably CLI in a web terminal","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@xterm/xterm":"^6.0.0","@xterm/addon-fit":"^0.11.0","@xterm/addon-webgl":"^0.19.0","@xterm/addon-serialize":"^0.14.0","@xterm/addon-unicode11":"^0.9.0","@xterm/addon-web-links":"^0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vite":"8.0.8","react":"^19.2.5","vitest":"^4.1.4","react-dom":"^19.2.5","@vitest/ui":"^4.1.4","typescript":"^5.9.3","@types/react":"^19.2.14","lucide-react":"^1.8.0","@types/react-dom":"^19.2.3","eslint-plugin-react":"^7.37.5","@vitejs/plugin-react":"^6.0.1","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":">=17.0.0","react-dom":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-web-cli_1.0.0_1777638267809_0.552117291542835","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-04-10T22:45:48.615Z","modified":"2026-08-10T10:20:06.217Z","0.2.8":"2025-04-10T22:45:48.956Z","0.3.0":"2025-04-11T10:00:02.670Z","0.7.0":"2025-07-09T15:07:54.253Z","0.7.1":"2025-07-09T15:23:41.844Z","0.7.2":"2025-07-09T15:37:39.897Z","0.8.0":"2025-08-12T10:05:40.353Z","0.8.1":"2025-08-12T10:08:02.690Z","0.13.1":"2025-09-24T15:09:58.456Z","0.14.0":"2025-11-05T17:16:32.202Z","0.15.0":"2025-12-04T11:54:39.605Z","0.16.0":"2026-01-20T11:01:33.731Z","0.17.0":"2026-03-09T10:32:51.405Z","1.0.0":"2026-05-01T12:24:27.998Z"},"bugs":{"url":"https://github.com/ably/ably-cli/issues"},"author":{"name":"Ably","email":"support@ably.com"},"license":"Apache-2.0","homepage":"https://github.com/ably/ably-cli#readme","keywords":["ably","cli","react","terminal","xterm"],"repository":{"url":"git+https://github.com/ably/ably-cli.git","type":"git"},"description":"React component for embedding the Ably CLI in a web terminal","maintainers":[{"email":"mike@christensen.codes","name":"mschristensen"},{"email":"account.owners@ably.com","name":"ably-realtime"},{"email":"simon.woolf@ably.com","name":"simonw_ably"},{"email":"owen.pearson@ably.com","name":"owenpearson"},{"email":"khokhlov.e.n@gmail.com","name":"ttypic"},{"email":"lawrence.forooghian@ably.com","name":"lawrence.forooghian.ably"},{"email":"andrii.bulat@ably.com","name":"andrii.bulat.ably"},{"email":"andyford993@gmail.com","name":"andytwf"},{"email":"steven.lindsay@ably.com","name":"splind06"},{"email":"chris.bannister@ably.com","name":"zariel-ably"},{"email":"matthew.oriordan@gmail.com","name":"mattheworiordan"},{"email":"vlad.velici@ably.com","name":"vlad.velici.ably"},{"email":"kenneth.kalmer@gmail.com","name":"kennethkalmer"},{"email":"jamie@jamiehenson.com","name":"jhenson"},{"email":"mark.hulbert@ably.com","name":"mhulbert"}],"readme":"# @ably/react-web-cli\n\n![npm (scoped)](https://img.shields.io/npm/v/@ably/react-web-cli)\n![License](https://img.shields.io/github/license/ably/cli)\n\nA React component for embedding an interactive Ably CLI terminal in web applications.\n\n![Ably Web CLI demo screenshot](assets/ably-web-cli-demo-screenshot.png)\n\n## Features\n\n* Embed a **fully-featured Ably CLI** session (xterm.js) inside any React app.\n* Secure WebSocket connection to the Ably terminal-server using HMAC-signed authentication with **signedConfig** and **signature**.\n* First-class terminal UX:\n  * Terminal-native status messages with ANSI colors\n  * Animated spinner while (re)connecting\n  * Live countdown and clear guidance (press **Enter** to cancel / retry)\n  * ASCII modal boxes for important status messages\n* Robust connection handling:\n  * Automatic exponential-back-off reconnects (0 s, 2 s, 4 s, 8 s …)\n  * Configurable maximum reconnection attempts (default: 15) before switching to manual reconnect\n  * Proper handling of server-initiated disconnections with specific error codes\n* **Session resumption** on page reload or transient network loss (`resumeOnReload`).\n* **Split-screen mode** with two independent terminal sessions at once.\n* Works in fullscreen or in a resizable drawer (see `examples/web-cli`).\n* Written in TypeScript & totally tree-shakable.\n\n## Installation\n\n```bash\n# Using npm\nnpm install @ably/react-web-cli\n\n# Using yarn\nyarn add @ably/react-web-cli\n\n# Using pnpm\npnpm add @ably/react-web-cli\n```\n\n## Prerequisites\n\n- React 17.0.0 or higher\n- A running instance of the Ably CLI terminal server (see [@ably/cli-terminal-server](https://github.com/ably/cli-terminal-server))\n- A backend signing endpoint to generate HMAC-signed credentials (see implementation guide below)\n\n## Usage\n\n```tsx\nimport { useState, useEffect } from \"react\";\nimport { AblyCliTerminal } from \"@ably/react-web-cli\";\n\nexport default function MyTerminal() {\n  const [status, setStatus] = useState(\"disconnected\");\n  const [signedConfig, setSignedConfig] = useState(\"\");\n  const [signature, setSignature] = useState(\"\");\n\n  // Sign credentials via your backend endpoint\n  // See examples/web-cli/api/sign.ts for implementation reference\n  async function signCredentials(apiKey: string) {\n    const response = await fetch(\"/api/sign\", {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify({ apiKey }),\n    });\n    const { signedConfig, signature } = await response.json();\n    setSignedConfig(signedConfig);\n    setSignature(signature);\n  }\n\n  // Authenticate on mount (or when user provides credentials)\n  useEffect(() => {\n    const apiKey = \"YOUR_ABLY_API_KEY\"; // Get from user input or config\n    signCredentials(apiKey);\n  }, []);\n\n  if (!signedConfig || !signature) {\n    return <div>Loading...</div>;\n  }\n\n  return (\n    <div style={{ height: 500 }}>\n      <AblyCliTerminal\n        websocketUrl=\"wss://web-cli.ably.com\"\n        signedConfig={signedConfig}\n        signature={signature}\n        initialCommand=\"ably --version\"\n        onConnectionStatusChange={setStatus}\n        onSessionEnd={(reason) => console.log(\"session ended\", reason)}\n        onSessionId={(id) => console.log(\"session id\", id)}\n        resumeOnReload\n        maxReconnectAttempts={15}\n      />\n\n      <p>Status: {status}</p>\n    </div>\n  );\n}\n```\n\n## Props\n\n| Prop | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `websocketUrl` | string | ✅ | - | URL of the WebSocket terminal server |\n| `signedConfig` | string | ✅ | - | JSON-encoded signed config containing credentials and metadata (HMAC authenticated) |\n| `signature` | string | ✅ | - | HMAC-SHA256 signature of the signedConfig for secure authentication |\n| `initialCommand` | string | No | - | Command to run on startup |\n| `onConnectionStatusChange` | function | No | - | Callback when connection status changes |\n| `onSessionId` | function | No | - | Callback when session ID is received |\n| `onSessionEnd` | function | No | - | Callback when session ends |\n| `maxReconnectAttempts` | number | No | 15 | Maximum reconnection attempts before giving up |\n| `resumeOnReload` | boolean | No | false | Whether to attempt to resume an existing session after page reload |\n| `enableSplitScreen` | boolean | No | false | Enable split-screen mode with a second independent terminal |\n\n**Note:** The `signedConfig` and `signature` must be generated by **your backend** using HMAC-SHA256 signing. Never sign credentials in the browser - this would expose your signing secret.\n\n**Reference implementations:**\n- **Vercel:** See `examples/web-cli/api/sign.ts` for a serverless function example\n- **Node.js:** See `examples/web-cli/server/sign-handler.ts` for the shared signing logic\n- **Vite Dev:** See `examples/web-cli/vite.config.ts` for development middleware\n\nYour signing secret must match the terminal server's `SIGNING_SECRET` configuration. Contact your platform team for the secret or refer to the [terminal server documentation](https://github.com/ably/cli-terminal-server).\n\n## Implementing a Signing Endpoint\n\nYou **must** implement a backend endpoint to sign credentials. Here's a minimal example:\n\n```typescript\n// Example: /api/sign endpoint (Node.js/Express/Vercel)\nimport crypto from \"crypto\";\n\nexport default function handler(req, res) {\n  const { apiKey } = req.body;\n  const secret = process.env.SIGNING_SECRET; // From environment variable\n\n  // Build config object\n  const config = {\n    apiKey,\n    timestamp: Date.now(),\n  };\n\n  // Sign it with HMAC-SHA256\n  const configString = JSON.stringify(config);\n  const hmac = crypto.createHmac(\"sha256\", secret);\n  hmac.update(configString);\n  const signature = hmac.digest(\"hex\");\n\n  res.json({ signedConfig: configString, signature });\n}\n```\n\n**Security Requirements:**\n- ⚠️ **Never** embed your signing secret in client-side code\n- ⚠️ **Always** sign on your secure backend server\n- ✅ Signing secret must match the terminal server's configuration\n- ✅ Use HTTPS in production to protect API keys in transit\n\n**Full implementation examples:**\n- See `examples/web-cli/` directory for complete working examples\n- Includes Vercel serverless function, Vite dev middleware, and React integration\n\n## Breaking Changes & Migration\n\n### HMAC-Signed Authentication (Breaking Change)\n\n**This is a breaking change.** The authentication mechanism has been updated to use HMAC-signed credentials for improved security.\n\n**Old API (deprecated):**\n```tsx\n<AblyCliTerminal\n  websocketUrl=\"wss://web-cli.ably.com\"\n  ablyApiKey=\"YOUR_ABLY_API_KEY\"           // ❌ Removed\n  ablyAccessToken=\"YOUR_ABLY_TOKEN\"        // ❌ Removed\n  ablyEndpoint=\"nonprod:sandbox\"           // ❌ Removed\n  ablyControlHost=\"staging-control...\"     // ❌ Removed\n/>\n```\n\n**New API (required):**\n```tsx\n<AblyCliTerminal\n  websocketUrl=\"wss://web-cli.ably.com\"\n  signedConfig={signedConfig}              // ✅ Required\n  signature={signature}                    // ✅ Required\n/>\n```\n\n**Migration Steps:**\n\n1. **Implement backend signing:** Create a `/api/sign` endpoint on your backend (see \"Implementing a Signing Endpoint\" section above)\n2. **Get signing secret:** Obtain the `SIGNING_SECRET` from your platform team (must match terminal server configuration)\n3. **Update your React code:**\n   - Remove old props: `ablyApiKey`, `ablyAccessToken`, `ablyEndpoint`, `ablyControlHost`\n   - Call your `/api/sign` endpoint to get `signedConfig` and `signature`\n   - Pass the signed credentials to `AblyCliTerminal`\n\n**Why this change?**\n\nThe new HMAC-signed authentication prevents credential tampering and ensures that configuration settings (like endpoint and control host) are authenticated by the server. This provides better security for embedded terminal sessions.\n\n## Connection States\n\nThe component manages several connection states that your application can respond to:\n\n- `initial`: Terminal is initializing\n- `connecting`: Attempting to connect to the server\n- `connected`: Successfully connected and ready\n- `disconnected`: Connection closed by server or manually by user\n- `reconnecting`: Attempting to reconnect after a connection drop\n- `error`: Connection error or other terminal error\n\n## Server-Initiated Disconnections\n\nThe terminal properly handles server-initiated disconnections with specific WebSocket close codes:\n\n| Code | Description | Behavior |\n|------|-------------|----------|\n| 1000 | Normal closure | Shows reason in terminal, requires manual reconnect |\n| 1001 | Server going away | Shows service restart message, requires manual reconnect |\n| 1011 | Server error | Shows unexpected condition message, requires manual reconnect |\n| 1013 | Service unavailable | Shows service unavailable message, requires manual reconnect |\n| 4000 | Generic server disconnect | Shows server-provided reason, requires manual reconnect |\n| 4001 | Authentication failed | Shows authentication error with instructions, requires manual reconnect |\n| 4008 | Policy violation | Shows auth timeout/format message, requires manual reconnect |\n| 4429 | Capacity limit reached | Shows capacity message with CLI install instructions, requires manual reconnect |\n\nFor other WebSocket close codes, the terminal will automatically attempt to reconnect using an exponential backoff strategy.\n\n## Session Resumption\n\nWhen `resumeOnReload` is enabled, the terminal will store the session ID in `sessionStorage` and attempt to resume the session after a page reload. This allows for a seamless experience when navigating away and back to the page.\n\n## Split-Screen Mode\n\nWhen `enableSplitScreen` is set to `true`, the component displays a split icon in the top-right corner of the terminal. Clicking this icon splits the view into two independent terminal sessions side by side.\n\nFeatures of split-screen mode:\n\n- Two completely independent terminal sessions sharing the same credentials\n- Each terminal has its own tab with a close button\n- Both terminals resize automatically to maintain optimal layout\n- Status and connection management happens independently for each terminal\n- Close either terminal to return to single-pane mode\n\nThe feature is designed for developers who need to run multiple commands simultaneously, such as subscribing to a channel in one pane while publishing to it in another.\n\n## Setting Up a Terminal Server\n\nThe terminal server required for this component is provided in a separate repository. Please refer to the [@ably/cli-terminal-server](https://github.com/ably/cli-terminal-server) repository for:\n\n- Installation instructions\n- Configuration options\n- Running the server locally\n- Docker deployment instructions\n\nFor production use, the Ably Web CLI connects to `wss://web-cli.ably.com` by default, which is a hosted instance of the terminal server.\n\n## Notes\n\n- The terminal requires a container for sizing, so make sure the parent element has a defined height and width.\n- The component handles reconnection automatically with exponential backoff.\n- Only `ably`, `clear`, and `exit` commands are available in the terminal by default.\n- The terminal supports full xterm.js functionality including colors and Unicode.\n\n## Debugging & Verbose Logging\n\nThe component ships with a built-in verbose logger that is **disabled by default**.\nEnable it in any of the following ways *before* the component mounts:\n\n1. **Query-string flag** – simply add `?cliDebug=true` to the page URL.\n  Example: `http://localhost:5173/?cliDebug=true`\n  (The flag may be combined with other query parameters.)\n\n2. **Runtime global flag** – from the browser DevTools console run:\n\n```js\nwindow.ABLY_CLI_DEBUG = true;\n```\n\nThe terminal will now emit detailed lifecycle logs prefixed with\n`[AblyCLITerminal DEBUG]`.  Remove the flag or refresh without the query\nparameter to return to silent mode.\n\n## Example Project\n\nFor a complete example of using this component, see the [web-cli example](https://github.com/ably/ably-cli/tree/main/examples/web-cli) in the Ably CLI repository.\n\n## Development\n\n```bash\n# Install dependencies\npnpm install\n\n# Build the package\npnpm build\n\n# Run tests\npnpm test\n```\n\n## License\n\n[Apache-2.0](https://github.com/ably/ably-cli/blob/main/LICENSE)\n","readmeFilename":"README.md"}