{"_id":"@bzenky/spoti","_rev":"18-7a96589e132dec7cd2ee4c0b4cb82e5b","name":"@bzenky/spoti","dist-tags":{"latest":"1.6.0"},"versions":{"0.1.0":{"name":"@bzenky/spoti","version":"0.1.0","keywords":["spotify","cli","spotify-connect"],"license":"MIT","_id":"@bzenky/spoti@0.1.0","maintainers":[{"name":"bzenky","email":"bzenky@gmail.com"}],"homepage":"https://github.com/bzenky/spoti#readme","bugs":{"url":"https://github.com/bzenky/spoti/issues"},"bin":{"spoti":"dist/cli.js"},"dist":{"shasum":"026ee9b8075f2b806279678059efb5527cf343f4","tarball":"https://registry.npmjs.org/@bzenky/spoti/-/spoti-0.1.0.tgz","fileCount":63,"integrity":"sha512-T0ggBwcehktU4McK/YIXc6MniwWkit0YEc3vEVSLWRdxc0FGkQIn9iSnR/ik5bE7y/ZpwhdZFenjMnJZj55D1g==","signatures":[{"sig":"MEQCIEBLgP3HYDAxUszL+Xl0XBEhT4TVo8J/0wIs7r8VyOoBAiBmTwPhdh1NBWEpZAPCLgV/KdFQ9KaxtQ9n+M6zKXwaUw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89746},"type":"module","engines":{"node":">=20"},"gitHead":"20079f2b6d9f56a614471348730bbcb6b2c814ea","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc && node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","check":"npm run typecheck && npm run lint && npm test","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","verify":"npm run check && npm run build","prepack":"npm run build","typecheck":"tsc --noEmit && tsc --noEmit -p tests/tsconfig.json","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"bzenky","email":"bzenky@gmail.com"},"repository":{"url":"git+https://github.com/bzenky/spoti.git","type":"git"},"_npmVersion":"10.9.8","description":"A local-first command-line client for controlling Spotify","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.5.4","open":"^11.0.2","commander":"^15.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"npm@10.9.8","devDependencies":{"tsx":"^4.23.13","eslint":"^10.10.0","vitest":"^5.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^26.4.1","typescript-eslint":"^8.69.0"},"_npmOperationalInternal":{"tmp":"tmp/spoti_0.1.0_1788569188215_0.03586884159285808","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@bzenky/spoti","version":"0.2.0","keywords":["spotify","cli","spotify-connect"],"license":"MIT","_id":"@bzenky/spoti@0.2.0","maintainers":[{"name":"bzenky","email":"bzenky@gmail.com"}],"homepage":"https://github.com/bzenky/spoti#readme","bugs":{"url":"https://github.com/bzenky/spoti/issues"},"bin":{"spoti":"dist/cli.js"},"dist":{"shasum":"5017aa14f520b6ec4963971dd7f5928927fbbb93","tarball":"https://registry.npmjs.org/@bzenky/spoti/-/spoti-0.2.0.tgz","fileCount":78,"integrity":"sha512-e8S7YurBtee7QdPIAi8QutskXbdjSbhSJSYqygZ3r94LsEabBJRkrCd6mMsOo8dzNPPHH7ZrKfulh5D4rQ4JQQ==","signatures":[{"sig":"MEQCIGvudO/mhS+RYlNplfPRFFxQU+mvnmxI5vn7lZD5gNgNAiA5aNBGJ9VKg6HS9QQVnDH7ue3eAxndLMv7PODJ0us1SA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140130},"type":"module","engines":{"node":">=20"},"gitHead":"d6eade4744d2b2f33f19d3f038167368a0f8bc5f","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc && node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","check":"npm run typecheck && npm run lint && npm test","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","verify":"npm run check && npm run build","prepack":"npm run build","typecheck":"tsc --noEmit && tsc --noEmit -p tests/tsconfig.json","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"bzenky","email":"bzenky@gmail.com"},"repository":{"url":"git+https://github.com/bzenky/spoti.git","type":"git"},"_npmVersion":"10.9.8","description":"A local-first command-line client for controlling Spotify","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.5.4","open":"^11.0.2","commander":"^15.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"npm@10.9.8","devDependencies":{"tsx":"^4.23.13","eslint":"^10.10.0","vitest":"^5.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^26.4.1","typescript-eslint":"^8.69.0"},"_npmOperationalInternal":{"tmp":"tmp/spoti_0.2.0_1788630756998_0.6473322046278223","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@bzenky/spoti","version":"0.3.0","keywords":["spotify","cli","spotify-connect"],"license":"MIT","_id":"@bzenky/spoti@0.3.0","maintainers":[{"name":"bzenky","email":"bzenky@gmail.com"}],"homepage":"https://github.com/bzenky/spoti#readme","bugs":{"url":"https://github.com/bzenky/spoti/issues"},"bin":{"spoti":"dist/cli.js"},"dist":{"shasum":"ab35714f38b32e461d03aeb278dc95e5d6363cf4","tarball":"https://registry.npmjs.org/@bzenky/spoti/-/spoti-0.3.0.tgz","fileCount":102,"integrity":"sha512-hyIm0HrHPeejVG0vWFMmaDK024dEoxOAXD5FySUwYCrx7e1nFQ2kLPs4XjoTYrun/MZp9BafsZyUdRAJ/X2uVw==","signatures":[{"sig":"MEUCIEdSxK+o9syJY4VQJ/21N6KfAMnGtHYRzd5Fz7j9Y539AiEArfD+afCuurT3swK1Hyjeo2SifQXy92cvvIrUimR8ko8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":259737},"type":"module","engines":{"node":">=20"},"gitHead":"259cbc6f9ea444d0442f4617e4b964a6c4501f7a","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc && node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","check":"npm run typecheck && npm run lint && npm test","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","verify":"npm run check && npm run build","prepack":"npm run build","typecheck":"tsc --noEmit && tsc --noEmit -p tests/tsconfig.json","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"bzenky","email":"bzenky@gmail.com"},"repository":{"url":"git+https://github.com/bzenky/spoti.git","type":"git"},"_npmVersion":"10.9.8","description":"A local-first command-line client for controlling Spotify","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.5.4","open":"^11.0.2","commander":"^15.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"npm@10.9.8","devDependencies":{"tsx":"^4.23.13","eslint":"^10.10.0","vitest":"^5.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^26.4.1","typescript-eslint":"^8.69.0"},"_npmOperationalInternal":{"tmp":"tmp/spoti_0.3.0_1788704966446_0.7928697861080518","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@bzenky/spoti","version":"0.4.0","keywords":["spotify","cli","spotify-connect"],"license":"MIT","_id":"@bzenky/spoti@0.4.0","maintainers":[{"name":"bzenky","email":"bzenky@gmail.com"}],"homepage":"https://github.com/bzenky/spoti#readme","bugs":{"url":"https://github.com/bzenky/spoti/issues"},"bin":{"spoti":"dist/cli.js"},"dist":{"shasum":"172129f72c54229258a74987ee4e72d26ddae439","tarball":"https://registry.npmjs.org/@bzenky/spoti/-/spoti-0.4.0.tgz","fileCount":111,"integrity":"sha512-EKq+mk2rCo0wiaV0tdgLs/LwlsaQaWhwTpoN95EeNBz2vGh/ccQnv8lhwp2xeiVpHVdv+zZec7ZBLI6FH5ks8w==","signatures":[{"sig":"MEQCIFNIK6ieYuyBpM1DFbsD1E4E/8EumArHKetBnncv/JPUAiA6SXdqsGfgLanrmwS9Kgb25tm7OsyUp9xO7Grj+5yC8A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":296853},"type":"module","engines":{"node":">=20"},"gitHead":"c4e45e5507beb0231e3da5aee90a52c3ad29797b","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc && node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","check":"npm run typecheck && npm run lint && npm test","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","verify":"npm run check && npm run build","prepack":"npm run build","typecheck":"tsc --noEmit && tsc --noEmit -p tests/tsconfig.json","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"bzenky","email":"bzenky@gmail.com"},"repository":{"url":"git+https://github.com/bzenky/spoti.git","type":"git"},"_npmVersion":"10.9.8","description":"A local-first command-line client for controlling Spotify","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.5.4","open":"^11.0.2","commander":"^15.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"npm@10.9.8","devDependencies":{"tsx":"^4.23.13","eslint":"^10.10.0","vitest":"^5.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^26.4.1","typescript-eslint":"^8.69.0"},"_npmOperationalInternal":{"tmp":"tmp/spoti_0.4.0_1788734856445_0.5191677121615026","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@bzenky/spoti","version":"0.5.0","keywords":["spotify","cli","spotify-connect"],"license":"MIT","_id":"@bzenky/spoti@0.5.0","maintainers":[{"name":"bzenky","email":"bzenky@gmail.com"}],"homepage":"https://github.com/bzenky/spoti#readme","bugs":{"url":"https://github.com/bzenky/spoti/issues"},"bin":{"spoti":"dist/cli.js"},"dist":{"shasum":"b99aaf5f4bbb3697f60d3fb00e3f221770b6d0ad","tarball":"https://registry.npmjs.org/@bzenky/spoti/-/spoti-0.5.0.tgz","fileCount":114,"integrity":"sha512-sOpyY0L//OuEBviZSMieYjVkQ2Mcc6CVxYTnYNaPFBfU0jo3EDjhpXdxIf//gg+GRogRWwTWGsbKz7R6IwwcLg==","signatures":[{"sig":"MEUCIQD0Rl06RviBRcNayg/Kb8wzlMWsh9nHYXWhNYzMv7AY4gIgB+9LEWxSgX/gI4SOwm3uae7zEWqnTzaldzbhBsH7agA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":344692},"type":"module","engines":{"node":">=20"},"gitHead":"d5c32378dc57db764ae61f3c3585aece3279476b","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc && node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","check":"npm run typecheck && npm run lint && npm test","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","verify":"npm run check && npm run build","prepack":"npm run build","typecheck":"tsc --noEmit && tsc --noEmit -p tests/tsconfig.json","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"bzenky","email":"bzenky@gmail.com"},"repository":{"url":"git+https://github.com/bzenky/spoti.git","type":"git"},"_npmVersion":"10.9.8","description":"A local-first command-line client for controlling Spotify","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.5.4","open":"^11.0.2","commander":"^15.0.0","picocolors":"^1.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"npm@10.9.8","devDependencies":{"tsx":"^4.23.13","eslint":"^10.10.0","vitest":"^5.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^26.4.1","typescript-eslint":"^8.69.0"},"_npmOperationalInternal":{"tmp":"tmp/spoti_0.5.0_1788808289171_0.3097956059952587","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@bzenky/spoti","version":"0.6.0","keywords":["spotify","cli","spotify-connect"],"license":"MIT","_id":"@bzenky/spoti@0.6.0","maintainers":[{"name":"bzenky","email":"bzenky@gmail.com"}],"homepage":"https://github.com/bzenky/spoti#readme","bugs":{"url":"https://github.com/bzenky/spoti/issues"},"bin":{"spoti":"dist/cli.js"},"dist":{"shasum":"75729c61b2afde08c302c9a71e6261072fd0a48b","tarball":"https://registry.npmjs.org/@bzenky/spoti/-/spoti-0.6.0.tgz","fileCount":120,"integrity":"sha512-xYbg/5MAalzUis65c0M9nSL94cU3nyLfWSbaMmdcBPzrjspQRomZ/klIYGl8e9cz64KyVNDXvzPb/G29dTXTvg==","signatures":[{"sig":"MEYCIQCAvpa43VICPjCKAMsLwf3i83a6VfB2KtwKlLG9gGCLYQIhAOkUsP6B4rIgOUVmTVi3qGvRZws1U2z1X9QufEfkoCEV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":370720},"type":"module","engines":{"node":">=20"},"gitHead":"54f027888099ab61e8213b3eccb6da9139b2dddd","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc && node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","check":"npm run typecheck && npm run lint && npm test","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","verify":"npm run check && npm run build","prepack":"npm run build","typecheck":"tsc --noEmit && tsc --noEmit -p tests/tsconfig.json","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"bzenky","email":"bzenky@gmail.com"},"repository":{"url":"git+https://github.com/bzenky/spoti.git","type":"git"},"_npmVersion":"10.9.8","description":"A local-first command-line client for controlling Spotify","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.5.4","open":"^11.0.2","commander":"^15.0.0","picocolors":"^1.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"npm@10.9.8","devDependencies":{"tsx":"^4.23.13","eslint":"^10.10.0","vitest":"^5.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^26.4.1","typescript-eslint":"^8.69.0"},"_npmOperationalInternal":{"tmp":"tmp/spoti_0.6.0_1788906343468_0.8076786711255606","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@bzenky/spoti","version":"0.7.0","keywords":["spotify","cli","spotify-connect"],"license":"MIT","_id":"@bzenky/spoti@0.7.0","maintainers":[{"name":"bzenky","email":"bzenky@gmail.com"}],"homepage":"https://github.com/bzenky/spoti#readme","bugs":{"url":"https://github.com/bzenky/spoti/issues"},"bin":{"spoti":"dist/cli.js"},"dist":{"shasum":"89456937a532fd78825a2fa28730575c75d550f8","tarball":"https://registry.npmjs.org/@bzenky/spoti/-/spoti-0.7.0.tgz","fileCount":147,"integrity":"sha512-XcTCVI3kTXdu3V5TWRvSLYvuxr5nMbEuRjTJraE1r7S7GJ/jZEQZK6St6AA/orl+qE70YAJHmlYHW7HTxgk75A==","signatures":[{"sig":"MEUCIEHL2L8S6BYENZAXg2FrtW/Y01IEVB0nX4D0Ht2cep74AiEAso/BCo84V94YE1/XOdNciU7SDqjG924qGnHuQK5mPV8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":495397},"type":"module","engines":{"node":">=22"},"gitHead":"846ab9b2f8d4c9d63e076a861791fbae8c217e48","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc && node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","check":"npm run typecheck && npm run lint && npm test","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","verify":"npm run check && npm run build","prepack":"npm run build","typecheck":"tsc --noEmit && tsc --noEmit -p tests/tsconfig.json","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"bzenky","email":"bzenky@gmail.com"},"repository":{"url":"git+https://github.com/bzenky/spoti.git","type":"git"},"_npmVersion":"10.9.8","description":"A local-first command-line client for controlling Spotify","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ink":"^7.1.1","zod":"^4.5.4","open":"^11.0.2","react":"^19.2.8","commander":"^15.0.0","picocolors":"^1.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"npm@10.9.8","devDependencies":{"tsx":"^4.23.13","eslint":"^10.10.0","vitest":"^5.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^22.20.2","@types/react":"^19.2.18","typescript-eslint":"^8.69.0","ink-testing-library":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spoti_0.7.0_1789083278601_0.5177134873063962","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@bzenky/spoti","version":"0.8.0","keywords":["spotify","cli","spotify-connect"],"license":"MIT","_id":"@bzenky/spoti@0.8.0","maintainers":[{"name":"bzenky","email":"bzenky@gmail.com"}],"homepage":"https://github.com/bzenky/spoti#readme","bugs":{"url":"https://github.com/bzenky/spoti/issues"},"bin":{"spoti":"dist/cli.js"},"dist":{"shasum":"f1da3c677b6f1f1dca6e70a3c8e31a889a6a44ce","tarball":"https://registry.npmjs.org/@bzenky/spoti/-/spoti-0.8.0.tgz","fileCount":153,"integrity":"sha512-XStFt6MZUbG4Br40WfXi+i2g41PsagCaipcRqqr8aPsvtSslqG4FIqPKdppucCseJwj9exAeObREEx9McPcpuw==","signatures":[{"sig":"MEUCIGKmZ7Ns+7NUGuYNK3fkeVwSELL8MVh0vn2J06vu1N/AAiEA4BjvD0znWEyDqTukXZ1mjy6F6scrqSEwZeiQ/GDo2mw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":538182},"type":"module","engines":{"node":">=22"},"gitHead":"2ffdbb79373b4f9ca8d2bde2f477f1cdc48ab468","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc && node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","check":"npm run typecheck && npm run lint && npm test","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","verify":"npm run check && npm run build","prepack":"npm run build","typecheck":"tsc --noEmit && tsc --noEmit -p tests/tsconfig.json","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"bzenky","email":"bzenky@gmail.com"},"repository":{"url":"git+https://github.com/bzenky/spoti.git","type":"git"},"_npmVersion":"10.9.8","description":"A local-first command-line client for controlling Spotify","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ink":"^7.1.1","zod":"^4.5.4","open":"^11.0.2","react":"^19.2.8","commander":"^15.0.0","picocolors":"^1.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"npm@10.9.8","devDependencies":{"tsx":"^4.23.13","eslint":"^10.10.0","vitest":"^5.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^22.20.2","@types/react":"^19.2.18","typescript-eslint":"^8.69.0","ink-testing-library":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spoti_0.8.0_1789164104302_0.44314841700897567","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@bzenky/spoti","version":"0.9.0","keywords":["spotify","cli","spotify-connect"],"license":"MIT","_id":"@bzenky/spoti@0.9.0","maintainers":[{"name":"bzenky","email":"bzenky@gmail.com"}],"homepage":"https://spoti.bzenky.dev/","bugs":{"url":"https://github.com/bzenky/spoti/issues"},"bin":{"spoti":"dist/cli.js"},"dist":{"shasum":"ed1080c1ba763ef71f6ce57c13107d9404277880","tarball":"https://registry.npmjs.org/@bzenky/spoti/-/spoti-0.9.0.tgz","fileCount":153,"integrity":"sha512-rWo5AwTB3UKc/J36uA2S6rYIdvWmJVwZXiN7MsMbAixEgsFZXSnwt5TuN/R8h6cneVNOEDDgChun//qXXbaolw==","signatures":[{"sig":"MEYCIQCBE/95QKopGWQrWknAVcyeTArOcb4CN7l1hYNlfQJFSgIhAOrQNCpC3U/4H0svCXesTYEn7RyQj0YaAOhqNszbLu8S","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":548549},"type":"module","engines":{"node":">=22"},"gitHead":"a55179d836140f431a9b3d089114b152b5eeecaf","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc && node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","check":"npm run typecheck && npm run lint && npm test","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","verify":"npm run check && npm run build","prepack":"npm run build","typecheck":"tsc --noEmit && tsc --noEmit -p tests/tsconfig.json","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"bzenky","email":"bzenky@gmail.com"},"repository":{"url":"git+https://github.com/bzenky/spoti.git","type":"git"},"_npmVersion":"10.9.8","description":"A local-first command-line client for controlling Spotify","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ink":"^7.1.1","zod":"^4.5.4","open":"^11.0.2","react":"^19.2.8","commander":"^15.0.0","picocolors":"^1.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"npm@10.9.8","devDependencies":{"tsx":"^4.23.13","eslint":"^10.10.0","vitest":"^5.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^22.20.2","@types/react":"^19.2.18","typescript-eslint":"^8.69.0","ink-testing-library":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spoti_0.9.0_1789232952218_0.19818809416040994","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@bzenky/spoti","version":"0.10.0","keywords":["spotify","cli","spotify-connect"],"license":"MIT","_id":"@bzenky/spoti@0.10.0","maintainers":[{"name":"bzenky","email":"bzenky@gmail.com"}],"homepage":"https://spoti.bzenky.dev/","bugs":{"url":"https://github.com/bzenky/spoti/issues"},"bin":{"spoti":"dist/cli.js"},"dist":{"shasum":"440f9380e4fc325093bd1c3c47de40703a05616d","tarball":"https://registry.npmjs.org/@bzenky/spoti/-/spoti-0.10.0.tgz","fileCount":156,"integrity":"sha512-s/BeXv8OQaQoqBKzJiRM5WmqAGYS7X23gfuRjEP0QiPkXdp5aYeXyQ86X3Isg5DG5EwnbF7NM/OR47aDdPuY6w==","signatures":[{"sig":"MEQCIBazkTZBmqPn4IuDfU2Vw8yfL0YN20lJiUXa1/wzHoc/AiA1HHMMBVs88XlzSnT478mLgWJCKrIY+HKN3afumLbxWw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":586315},"type":"module","engines":{"node":">=22"},"gitHead":"2f7a102b37c778d69fa52465fbe818a426f8eab8","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc && node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","check":"npm run typecheck && npm run lint && npm test","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","verify":"npm run check && npm run build","prepack":"npm run build","typecheck":"tsc --noEmit && tsc --noEmit -p tests/tsconfig.json","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"bzenky","email":"bzenky@gmail.com"},"repository":{"url":"git+https://github.com/bzenky/spoti.git","type":"git"},"_npmVersion":"10.9.8","description":"A local-first command-line client for controlling Spotify","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ink":"^7.1.1","zod":"^4.5.4","open":"^11.0.2","react":"^19.2.8","commander":"^15.0.0","picocolors":"^1.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"npm@10.9.8","devDependencies":{"tsx":"^4.23.13","eslint":"^10.10.0","vitest":"^5.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^22.20.2","@types/react":"^19.2.18","typescript-eslint":"^8.69.0","ink-testing-library":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spoti_0.10.0_1789304058305_0.15864500873093745","host":"s3://npm-registry-packages-npm-production"}},"0.10.1":{"name":"@bzenky/spoti","version":"0.10.1","keywords":["spotify","cli","spotify-connect"],"license":"MIT","_id":"@bzenky/spoti@0.10.1","maintainers":[{"name":"bzenky","email":"bzenky@gmail.com"}],"homepage":"https://spoti.bzenky.dev/","bugs":{"url":"https://github.com/bzenky/spoti/issues"},"bin":{"spoti":"dist/cli.js"},"dist":{"shasum":"946e605a43688348b758f17fd5e0dd869cdac1ad","tarball":"https://registry.npmjs.org/@bzenky/spoti/-/spoti-0.10.1.tgz","fileCount":156,"integrity":"sha512-7WNdQKrPvD8UfWS07XE/5mdibCzXG1HNhfJ2CgyvNGhgKnrH7l65qiu1fYEtc4cksYwv9ak7KLBBPMY7IuPHbg==","signatures":[{"sig":"MEYCIQDgJpTKoNxLWMrfTwPJJbyZgy6o8gRGeDleKe54FT4blAIhAMGXPmRe/yepNnE3m99Faqen8CUejcIsgBeZat4YwtZX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":588601},"type":"module","engines":{"node":">=22"},"gitHead":"83b55ae15c9673982045c46c1c156fad8e860e7b","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc && node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","check":"npm run typecheck && npm run lint && npm test","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","verify":"npm run check && npm run build","prepack":"npm run build","typecheck":"tsc --noEmit && tsc --noEmit -p tests/tsconfig.json","test:watch":"vitest","prepublishOnly":"npm run check"},"_npmUser":{"name":"bzenky","email":"bzenky@gmail.com"},"repository":{"url":"git+https://github.com/bzenky/spoti.git","type":"git"},"_npmVersion":"10.9.8","description":"A local-first command-line client for controlling Spotify","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ink":"^7.1.1","zod":"^4.5.4","open":"^11.0.2","react":"^19.2.8","commander":"^15.0.0","picocolors":"^1.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"npm@10.9.8","devDependencies":{"tsx":"^4.23.13","eslint":"^10.10.0","vitest":"^5.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^22.20.2","@types/react":"^19.2.18","typescript-eslint":"^8.69.0","ink-testing-library":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spoti_0.10.1_1789404177598_0.6582914433706399","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@bzenky/spoti","version":"1.0.0","keywords":["spotify","cli","spotify-connect"],"license":"MIT","_id":"@bzenky/spoti@1.0.0","maintainers":[{"name":"bzenky","email":"bzenky@gmail.com"}],"homepage":"https://spoti.bzenky.dev/","bugs":{"url":"https://github.com/bzenky/spoti/issues"},"bin":{"spoti":"dist/cli.js"},"dist":{"shasum":"c608e9f80ace6bbc38c5e4451d9e2595f8fbb422","tarball":"https://registry.npmjs.org/@bzenky/spoti/-/spoti-1.0.0.tgz","fileCount":156,"integrity":"sha512-Xmy9999muGJL3pvH3Tx09NyRgYPEUGMewACi0j/z449p0KOlK6vWoxqietaIUwAVR7lX+Y/lJYMUPyRa/eZ9DQ==","signatures":[{"sig":"MEUCIDpuhjA6fokwD1iDpdad8hWnh6FgsdF4mjeUws8LxlhjAiEAk7X+cHwYznNOpFZ0e7qOpeHNdI+S4MC0gC15LZCxkHs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCULYXiHxKxhDRlc0wsFi7RM2eX1FZ/cZz4cJJhUl0n/gIgaNjBQBQFfAxD3JoBBykENe0DU2WnoYt4vvGoyIrprl0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":588980},"type":"module","engines":{"node":">=22"},"gitHead":"57c1be1df85f41a1cfde5cbe44017d521512b62b","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc && node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","check":"npm run typecheck && npm run lint && npm test","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","verify":"npm run check && npm run build","prepack":"npm run build","typecheck":"tsc --noEmit && tsc --noEmit -p tests/tsconfig.json","test:watch":"vitest","smoke:package":"node scripts/smoke-package.mjs","prepublishOnly":"npm run check"},"_npmUser":{"name":"bzenky","email":"bzenky@gmail.com"},"repository":{"url":"git+https://github.com/bzenky/spoti.git","type":"git"},"_npmVersion":"10.9.8","description":"A local-first command-line client for controlling Spotify","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ink":"^7.1.1","zod":"^4.5.4","open":"^11.0.2","react":"^19.2.8","commander":"^15.0.0","picocolors":"^1.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"npm@10.9.8","devDependencies":{"tsx":"^4.23.13","eslint":"^10.10.0","vitest":"^5.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^22.20.2","@types/react":"^19.2.18","typescript-eslint":"^8.69.0","ink-testing-library":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spoti_1.0.0_1790247031041_0.28392441078470476","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@bzenky/spoti","version":"1.1.0","keywords":["spotify","cli","spotify-connect"],"license":"MIT","_id":"@bzenky/spoti@1.1.0","maintainers":[{"name":"bzenky","email":"bzenky@gmail.com"}],"homepage":"https://spoti.bzenky.dev/","bugs":{"url":"https://github.com/bzenky/spoti/issues"},"bin":{"spoti":"dist/cli.js"},"dist":{"shasum":"834de3ba7c3f19a38cac0568390da6ced4059647","tarball":"https://registry.npmjs.org/@bzenky/spoti/-/spoti-1.1.0.tgz","fileCount":156,"integrity":"sha512-s0yMtb8aL/DaYJfkllx71YWCE5QXEVt43FfyL4cXcLNyOq5lOVhXNJtOx4vifmY58LrInOVM5lhMXfVh12RKrg==","signatures":[{"sig":"MEUCIB/fzbKGK8PDGn57S7npmrmkgrHU6mCxkWgIWYKhmcuMAiEAzObzb3A8Ts9mzJ6eLlKoml2+CZxdyPckD481tbtTtBw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDZdOYjAnTp+y/6PwTrCXEh+qPeY7y8sU//nfed+A6o0AiEAsWfoTVsVHbi3Eh7sSwRvIekL9+qYzWNHs/4IFIVedrM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":596236},"type":"module","engines":{"node":">=22"},"gitHead":"bc9c4168669f041f9500b30bcf8dfa75486a01d1","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc && node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","check":"npm run typecheck && npm run lint && npm test","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","verify":"npm run check && npm run build","prepack":"npm run build","typecheck":"tsc --noEmit && tsc --noEmit -p tests/tsconfig.json","test:watch":"vitest","smoke:package":"node scripts/smoke-package.mjs","prepublishOnly":"npm run check"},"_npmUser":{"name":"bzenky","email":"bzenky@gmail.com"},"repository":{"url":"git+https://github.com/bzenky/spoti.git","type":"git"},"_npmVersion":"10.9.8","description":"A local-first command-line client for controlling Spotify","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ink":"^7.1.1","zod":"^4.5.4","open":"^11.0.2","react":"^19.2.8","commander":"^15.0.0","picocolors":"^1.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"npm@10.9.8","devDependencies":{"tsx":"^4.23.13","eslint":"^10.10.0","vitest":"^5.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^22.20.2","@types/react":"^19.2.18","typescript-eslint":"^8.69.0","ink-testing-library":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spoti_1.1.0_1790295076595_0.7156314030321527","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@bzenky/spoti","version":"1.2.0","keywords":["spotify","cli","spotify-connect"],"license":"MIT","_id":"@bzenky/spoti@1.2.0","maintainers":[{"name":"bzenky","email":"bzenky@gmail.com"}],"homepage":"https://spoti.bzenky.dev/","bugs":{"url":"https://github.com/bzenky/spoti/issues"},"bin":{"spoti":"dist/cli.js"},"dist":{"shasum":"46958923c03db2311567cf21b05c989bb4a00c1a","tarball":"https://registry.npmjs.org/@bzenky/spoti/-/spoti-1.2.0.tgz","fileCount":156,"integrity":"sha512-51akShninvRp87KFbFshqZTxx8PTJlmDO6yBm8vgY8I6TNHje9gKA1SYGf0hvMfzOaP8HecMd/8vYkCNd2pExQ==","signatures":[{"sig":"MEUCIQC5Sv0WW941F1CHVkrsq5J+weHeyQbb8mmKEm3KjxDqDAIgf7cM7hjO+W2N1WVDIvpkubqGNHllXKDXAWKDAVQSepw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBYf87UZTo7kMnrtsW7F1wrZuiRLN6l+Zy6fWn7hhhufAiEAljPuGgvp+bQHi39kwmxpWPpG7OhT+gnajCjk5TZSPWA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":606480},"type":"module","engines":{"node":">=22"},"gitHead":"cb4d408c997f717808a846eca2498c8a9dd5def5","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc && node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","check":"npm run typecheck && npm run lint && npm test","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","verify":"npm run check && npm run build","prepack":"npm run build","typecheck":"tsc --noEmit && tsc --noEmit -p tests/tsconfig.json","test:watch":"vitest","smoke:package":"node scripts/smoke-package.mjs","prepublishOnly":"npm run check"},"_npmUser":{"name":"bzenky","email":"bzenky@gmail.com"},"repository":{"url":"git+https://github.com/bzenky/spoti.git","type":"git"},"_npmVersion":"10.9.8","description":"A local-first command-line client for controlling Spotify","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ink":"^7.1.1","zod":"^4.5.4","open":"^11.0.2","react":"^19.2.8","commander":"^15.0.0","picocolors":"^1.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"npm@10.9.8","devDependencies":{"tsx":"^4.23.13","eslint":"^10.10.0","vitest":"^5.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^22.20.2","@types/react":"^19.2.18","typescript-eslint":"^8.69.0","ink-testing-library":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spoti_1.2.0_1790441478828_0.4554952669415646","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@bzenky/spoti","version":"1.3.0","keywords":["spotify","cli","spotify-connect"],"license":"MIT","_id":"@bzenky/spoti@1.3.0","maintainers":[{"name":"bzenky","email":"bzenky@gmail.com"}],"homepage":"https://spoti.bzenky.dev/","bugs":{"url":"https://github.com/bzenky/spoti/issues"},"bin":{"spoti":"dist/cli.js"},"dist":{"shasum":"8aad6c7b6cfb19a82e52ae20c1c0187fb72d9f93","tarball":"https://registry.npmjs.org/@bzenky/spoti/-/spoti-1.3.0.tgz","fileCount":156,"integrity":"sha512-CNSStnrTEwv83mJKRe4i0HB4s+nEwts1eu681bgUuT4neHIA0dDqsY5LydN7Fr69XHCjrHmUDSoj8g0kaPaNxA==","signatures":[{"sig":"MEYCIQDD53ZvyLUOAwoG559r2Qlv+eqJrCgHcI2Ov+wxht6vzwIhAL6AZ8n/XDwADH3782xF9UalLT49gG6AbSM4eCCiaRWR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIA1kcc7ewM3ow0gzvpuDAXQ3WrMzBYc7o9C1b4g6UK2jAiBUrY74x9D7w1y2eXcqYCRU6UAYvoQKzoTjSsAOoTssrA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":628755},"type":"module","engines":{"node":">=22"},"gitHead":"f987f599899bc10ee462ed5f95cfdcb6e8ef69e9","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc && node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","check":"npm run typecheck && npm run lint && npm test","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","verify":"npm run check && npm run build","prepack":"npm run build","typecheck":"tsc --noEmit && tsc --noEmit -p tests/tsconfig.json","test:watch":"vitest","smoke:package":"node scripts/smoke-package.mjs","prepublishOnly":"npm run check"},"_npmUser":{"name":"bzenky","email":"bzenky@gmail.com"},"repository":{"url":"git+https://github.com/bzenky/spoti.git","type":"git"},"_npmVersion":"10.9.8","description":"A local-first command-line client for controlling Spotify","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ink":"^7.1.1","zod":"^4.5.4","open":"^11.0.2","react":"^19.2.8","commander":"^15.0.0","picocolors":"^1.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"npm@10.9.8","devDependencies":{"tsx":"^4.23.13","eslint":"^10.10.0","vitest":"^5.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^22.20.2","@types/react":"^19.2.18","typescript-eslint":"^8.69.0","ink-testing-library":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spoti_1.3.0_1790524209481_0.6764791187645927","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@bzenky/spoti","version":"1.4.0","keywords":["spotify","cli","spotify-connect"],"license":"MIT","_id":"@bzenky/spoti@1.4.0","maintainers":[{"name":"bzenky","email":"bzenky@gmail.com"}],"homepage":"https://spoti.bzenky.dev/","bugs":{"url":"https://github.com/bzenky/spoti/issues"},"bin":{"spoti":"dist/cli.js"},"dist":{"shasum":"4bb6eb70fee6c22cd4e775fca2609630ee09de67","tarball":"https://registry.npmjs.org/@bzenky/spoti/-/spoti-1.4.0.tgz","fileCount":156,"integrity":"sha512-Q4gQKrit700Szv55SCpp/Zxlay1WQQ5mmBwwi4QwXrzRfxQUzWprNaESu/OMNiqbDgC0cK23kXI7xLEQFpeVNw==","signatures":[{"sig":"MEYCIQD2nr95bDSDcsByKATdQQJescy3AVU4ibQzEyFoQF+yJgIhAMxYoqSugfO4FjChm8cpr5Suk8w9fMEUW4SkSywVdZmj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCtD8/Gb3wCeANQ5gsCjRUB7nUIkCzVxR3YBgNPdLO0bgIhAJUAN1jspvkcxB6Hv544qMFNEFIqtX/MHuuJR4UZ4oPQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":641326},"type":"module","engines":{"node":">=22"},"gitHead":"083b7b9dec07a2b77a39aaaf97fe210184f1a3a6","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc && node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","check":"npm run typecheck && npm run lint && npm test","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","verify":"npm run check && npm run build","prepack":"npm run build","typecheck":"tsc --noEmit && tsc --noEmit -p tests/tsconfig.json","test:watch":"vitest","smoke:package":"node scripts/smoke-package.mjs","prepublishOnly":"npm run check"},"_npmUser":{"name":"bzenky","email":"bzenky@gmail.com"},"repository":{"url":"git+https://github.com/bzenky/spoti.git","type":"git"},"_npmVersion":"10.9.8","description":"A local-first command-line client for controlling Spotify","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ink":"^7.1.1","zod":"^4.5.4","open":"^11.0.2","react":"^19.2.8","commander":"^15.0.0","picocolors":"^1.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"npm@10.9.8","devDependencies":{"tsx":"^4.23.13","eslint":"^10.10.0","vitest":"^5.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^22.20.2","@types/react":"^19.2.18","typescript-eslint":"^8.69.0","ink-testing-library":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spoti_1.4.0_1790598590586_0.5750291607463434","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@bzenky/spoti","version":"1.5.0","keywords":["spotify","cli","spotify-connect"],"license":"MIT","_id":"@bzenky/spoti@1.5.0","maintainers":[{"name":"bzenky","email":"bzenky@gmail.com"}],"homepage":"https://spoti.bzenky.dev/","bugs":{"url":"https://github.com/bzenky/spoti/issues"},"bin":{"spoti":"dist/cli.js"},"dist":{"shasum":"e6dd728ee49f4879d12324169e70eaba4e7ae16e","tarball":"https://registry.npmjs.org/@bzenky/spoti/-/spoti-1.5.0.tgz","fileCount":156,"integrity":"sha512-+qCurH4t/HtuoJYzwxi9g+uPrEC8/V5mc4BcEVhoXoSmXz6M0PtZGTx+TGrgNKf8/+YCHUsHTZTYwylq6OWr7A==","signatures":[{"sig":"MEYCIQDlp6BXc0TN1DJc0VydZpubO611EnA1zFoffhhECtRR/wIhAPNI+alp36BIj4d0pAClpc3XdK8/h4XUs/8W1CDR1s0a","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDSglnsoRO1BVbhoqZfsrR2Ei45rynnDi7ahJBEPZ3sxAIgMfaoklqAnJik/DVw1n+uM72cY5zVRrGhzy7/o0ls+sE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":656684},"type":"module","engines":{"node":">=22"},"gitHead":"32884ff67defd9aa1ccb56cc28030822a02a13a8","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc && node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","check":"npm run typecheck && npm run lint && npm test","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","verify":"npm run check && npm run build","prepack":"npm run build","typecheck":"tsc --noEmit && tsc --noEmit -p tests/tsconfig.json","test:watch":"vitest","smoke:package":"node scripts/smoke-package.mjs","prepublishOnly":"npm run check"},"_npmUser":{"name":"bzenky","email":"bzenky@gmail.com"},"repository":{"url":"git+https://github.com/bzenky/spoti.git","type":"git"},"_npmVersion":"10.9.8","description":"A local-first command-line client for controlling Spotify","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ink":"^7.1.1","zod":"^4.5.4","open":"^11.0.2","react":"^19.2.8","commander":"^15.0.0","picocolors":"^1.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"npm@10.9.8","devDependencies":{"tsx":"^4.23.13","eslint":"^10.10.0","vitest":"^5.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^22.20.2","@types/react":"^19.2.18","typescript-eslint":"^8.69.0","ink-testing-library":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spoti_1.5.0_1790638094766_0.6586889463874936","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"_id":"@bzenky/spoti@1.6.0","bin":{"spoti":"dist/cli.js"},"bugs":{"url":"https://github.com/bzenky/spoti/issues"},"dist":{"shasum":"3a7f8153648fc66c19917c6c68714a51897b9007","tarball":"https://registry.npmjs.org/@bzenky/spoti/-/spoti-1.6.0.tgz","fileCount":156,"integrity":"sha512-rnFSqFxRpS6DtjCFT4AsW6arp8G3nzj5l4TU0xqzwQHH5B9jK98gEAM2USEhFh7WPiEwH/RG2xVX18jhZBpliw==","signatures":[{"sig":"MEQCIBavaXiyWtPYSlFHZPW+gPS+V24uz10cUrQs03edUD8sAiB/372qrw2KEoEWql1YhQRAamnU+Fc65IZDDJtflETnAw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC5TOn2F6ovvMhxaOuB+Z7fQJ6kteAfvgwF3dqErehWHgIgecyB7fypx2P2YHVgIbH05AbK00P30pGL59iN0/LiufY="}],"unpackedSize":661293},"name":"@bzenky/spoti","type":"module","engines":{"node":">=22"},"gitHead":"d048578d368761cca7078f3842a366166a3de3b2","license":"MIT","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"npm run clean && tsc && node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","check":"npm run typecheck && npm run lint && npm test","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","verify":"npm run check && npm run build","prepack":"npm run build","typecheck":"tsc --noEmit && tsc --noEmit -p tests/tsconfig.json","test:watch":"vitest","smoke:package":"node scripts/smoke-package.mjs","prepublishOnly":"npm run check"},"version":"1.6.0","_npmUser":{"name":"bzenky","email":"bzenky@gmail.com"},"homepage":"https://spoti.bzenky.dev/","keywords":["spotify","cli","spotify-connect"],"repository":{"url":"git+https://github.com/bzenky/spoti.git","type":"git"},"_npmVersion":"10.9.8","description":"A local-first command-line client for controlling Spotify","directories":{},"maintainers":[{"name":"bzenky","email":"bzenky@gmail.com"}],"_nodeVersion":"22.23.2","dependencies":{"ink":"^7.1.1","zod":"^4.5.4","open":"^11.0.2","react":"^19.2.8","commander":"^15.0.0","picocolors":"^1.1.1","ink-picture":"^2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"npm@10.9.8","devDependencies":{"tsx":"^4.23.13","eslint":"^10.10.0","vitest":"^5.0.0","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^22.20.2","@types/react":"^19.2.18","typescript-eslint":"^8.69.0","ink-testing-library":"^4.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/spoti_1.6.0_1790716721242_0.8976612233628669"}}},"time":{"created":"2026-09-05T00:46:27.854Z","modified":"2026-09-29T21:18:41.526Z","0.1.0":"2026-09-05T00:46:28.405Z","0.2.0":"2026-09-05T17:52:37.132Z","0.3.0":"2026-09-06T14:29:26.569Z","0.4.0":"2026-09-06T22:47:36.636Z","0.5.0":"2026-09-07T19:11:29.320Z","0.6.0":"2026-09-08T22:25:43.656Z","0.7.0":"2026-09-10T23:34:38.747Z","0.8.0":"2026-09-11T22:01:44.468Z","0.9.0":"2026-09-12T17:09:12.374Z","0.10.0":"2026-09-13T12:54:18.466Z","0.10.1":"2026-09-14T16:42:57.762Z","1.0.0":"2026-09-24T10:50:31.130Z","1.1.0":"2026-09-25T00:11:16.693Z","1.2.0":"2026-09-26T16:51:18.931Z","1.3.0":"2026-09-27T15:50:09.573Z","1.4.0":"2026-09-28T12:29:50.687Z","1.5.0":"2026-09-28T23:28:14.868Z","1.6.0":"2026-09-29T21:18:41.345Z"},"bugs":{"url":"https://github.com/bzenky/spoti/issues"},"license":"MIT","homepage":"https://spoti.bzenky.dev/","keywords":["spotify","cli","spotify-connect"],"repository":{"url":"git+https://github.com/bzenky/spoti.git","type":"git"},"description":"A local-first command-line client for controlling Spotify","maintainers":[{"name":"bzenky","email":"bzenky@gmail.com"}],"readme":"# spoti\n\nA local-first command-line client for controlling Spotify through Spotify Connect.\n\n[Website](https://spoti.bzenky.dev/) · [npm](https://www.npmjs.com/package/@bzenky/spoti) · [Releases](https://github.com/bzenky/spoti/releases)\n\n> `spoti` is an independent project and is not affiliated with, endorsed by, or sponsored by Spotify AB.\n\n`spoti` controls playback on an existing Spotify client or Connect device; it does not stream audio itself.\n\n## Requirements\n\n- Node.js 22 or newer\n- A Spotify developer application and client ID\n- Spotify Premium for playback-control commands\n- A Spotify client or Connect device available for playback\n\n## Spotify application setup\n\nCreate an application in the [Spotify Developer Dashboard](https://developer.spotify.com/dashboard) and register this exact redirect URI:\n\n```text\nhttp://127.0.0.1:43821/callback\n```\n\nAfter installing `spoti`, save the application's client ID once:\n\n```bash\nspoti setup\nspoti login\n```\n\nWhen developing from source, use:\n\n```bash\nnpm run dev -- setup\nnpm run dev -- login\n```\n\nThe setup command stores the public client ID in your local `spoti` configuration. For temporary sessions, CI, or an explicit override, you can still use:\n\n```bash\nexport SPOTIFY_CLIENT_ID=\"your-client-id\"\n```\n\nPowerShell:\n\n```powershell\n$env:SPOTIFY_CLIENT_ID = \"your-client-id\"\n```\n\nThe environment variable takes precedence over the stored value. To use a different local callback, register it in the same Spotify application and set:\n\n```bash\nexport SPOTIFY_REDIRECT_URI=\"http://127.0.0.1:5000/callback\"\n```\n\nPowerShell:\n\n```powershell\n$env:SPOTIFY_REDIRECT_URI = \"http://127.0.0.1:5000/callback\"\n```\n\nThe redirect URI must use HTTPS except for local development, where an explicit `http://127.0.0.1` URI is allowed. Do not use `localhost` or wildcard redirect URIs. No client secret is needed or accepted by `spoti`; authentication uses Authorization Code with PKCE.\n\n## Installation\n\nInstall the latest published release from npm:\n\n```bash\nnpm install --global @bzenky/spoti\nspoti --help\n```\n\n## Install for development\n\n```bash\nnpm install\nnpm run build\nnpm link\n```\n\nThen verify the executable:\n\n```bash\nspoti --help\n```\n\nYou can also run commands without linking:\n\n```bash\nnpm run dev -- --help\nnpm run dev -- status\n```\n\n## Usage\n\nRun `spoti` with no command, or use `spoti --help`, to see the complete command overview:\n\n```bash\nspoti\nspoti --help\n```\n\nOpen the full interactive TUI explicitly:\n\n```bash\nspoti interactive\n# alias: spoti i\n```\n\nThe TUI opens on current playback, updates progress locally every second, and refreshes Spotify state every ten seconds only while the Player screen is active. Use:\n\nThe Player displays Spotify album artwork in terminals with inline image support. Other terminals keep the existing text-only playback view.\n\n```text\n1       Player\n/       Search\nq       Queue\nd       Devices\nl       Library\ny       Lyrics\n?       Help\n\nSpace   play or pause (Player)\nn       next track (Player)\np       previous track (Player)\n← / →   seek backward or forward 10 seconds (Player)\n- / +   lower or raise volume by 5% (Player)\ns       toggle shuffle (Player)\nr       cycle repeat off, track, and context (Player)\na       add the current track to a playlist (Player)\nCtrl+R  refresh now (Player)\n\nEsc     back one level, or exit from Player\nx       exit from Player or Help\nCtrl+X  exit from Search, Queue, Devices, or Library\n```\n\nOn Search, type a query and press Enter. Use up/down to select a result, then Enter to play it. For a selected track, press `a` to choose a playlist and add the track without starting playback. Tab or left/right switches between tracks, albums, artists, and playlists. Search results are cached for the active TUI session, stale requests are cancelled when the query changes, and leaving Search cancels an in-flight search or playback request.\n\nQueue displays the current item and Spotify's upcoming items. Press `a` to search for a track, use up/down to select it, and press Enter to add it. Press `r` to refresh. Spotify does not expose arbitrary queue removal or position jumping, so the TUI does not offer those actions.\n\nDevices lists all Spotify Connect devices with active status, type, volume, and the saved default. The active device is selected automatically. Use up/down and Enter to transfer playback; pressing Enter on the active device is a safe no-op. Press `s` to set or clear the selected default device, `i` to show or hide device IDs when names are duplicated, and `r` to refresh. Restricted devices or entries without a usable ID remain visible with an explanation but cannot be selected for transfer.\n\nLibrary uses Tab or left/right to switch among Playlists, Liked, Recent, Top tracks, and Top artists. Use up/down and Enter to open a playlist or play the selected track or artist; `n` and `p` navigate lazily loaded pages. In Top tracks or Top artists, press `t` to cycle between the last 4 weeks, about 6 months, and about 1 year. In a playlist you own, press `e` to edit its details or move the selected track to a one-based position. Previously visited pages remain cached for the TUI session, and Esc returns from playlist tracks to the playlist list before returning to Player.\n\nPress `y` from Player to open lyrics for the current track. When synchronized lyrics are available, the TUI follows and highlights the current line; use up/down to scroll manually and `f` to resume following. Lyrics are loaded live from LRCLIB and are not stored persistently.\n\nAll command-driven usage remains available. The `interactive` command requires an interactive stdin and stdout; outside a TTY it prints its command help instead of starting Ink.\n\nAuthenticate once through Spotify's browser authorization page:\n\n```bash\nspoti login\nspoti status\n```\n\nControl playback. Quotes are optional for ordinary multi-word queries because `spoti` combines the remaining command arguments. Use quotes when a query contains shell-special characters such as `&`, `*`, `?`, or parentheses.\n\n```bash\nspoti now\nspoti now --short\nspoti now --watch\nspoti open\nspoti play Numb\nspoti play Fear of the Dark\nspoti play Numb --first\nspoti play Numb --watch\nspoti play Numb --no-watch\nspoti pause\nspoti resume\nspoti next\nspoti previous\nspoti volume\nspoti volume 50\nspoti volume +10\nspoti volume -10\nspoti shuffle\nspoti shuffle on\nspoti shuffle off\nspoti repeat\nspoti repeat off\nspoti repeat track\nspoti repeat context\nspoti lyrics\nspoti lyrics Numb Linkin Park\nspoti lyrics Numb --first\n```\n\nManage playback devices:\n\n```bash\nspoti launch # alias: spoti app\nspoti devices\nspoti device 2\nspoti device \"My Computer\"\nspoti device \"My Computer\" --default\n```\n\n`spoti launch` asks your operating system to open the locally installed Spotify app through its `spotify:` URI handler. It cannot wake Spotify on remote devices, but can make your current computer available to Spotify Connect before you run `spoti devices` or `spoti interactive`.\n\nUse the displayed one-based number, exact device name, or Spotify device ID. Add `--default` to save the selected device name as the fallback when no device is active. You can also manage it directly with `spoti config set defaultDevice \"My Computer\"` and `spoti config unset defaultDevice`. An already-active device always takes precedence over the saved default.\n\nWhen playback reports no active device, `spoti play` and `spoti resume` retry the one active controllable device if Spotify reports one, or the only controllable device when exactly one is available. If several inactive devices are available, `spoti` asks you to select one explicitly.\n\nSeek within the current track:\n\n```bash\nspoti seek 1:30\nspoti seek +30\nspoti seek -10\nspoti restart # alias: spoti rst\n```\n\nView the queue or search for a track to add. When Spotify represents an otherwise empty queue by repeating only the current track, `spoti` reports the queue as empty instead of printing duplicate entries:\n\n```bash\nspoti queue\nspoti queue \"Faint\"\nspoti queue \"Faint\" --first\n```\n\nSearch without starting playback:\n\n```bash\nspoti search \"Breaking the Habit\"\nspoti search \"Breaking the Habit\" --limit 5\n```\n\nSearch, inspect, and play Spotify contexts:\n\n```bash\nspoti album \"Meteora\"\nspoti artist \"Linkin Park\"\nspoti playlists\nspoti playlist 1\nspoti playlist \"Workout\"\nspoti playlist-create \"Road trip\"\nspoti playlist-create \"Release radar\" --public\nspoti playlist-edit \"Road trip\" --name \"Road trip 2026\"\nspoti playlist-edit \"Road trip\" --description \"Songs for the drive\" --private\nspoti playlist-move \"Road trip\" 12 3\nspoti add\nspoti add 1\nspoti add \"Workout\" --search \"Numb\"\nspoti add \"Workout\" --search \"Numb\" --first\nspoti add \"Workout\" --first\nspoti play track \"Numb\"\nspoti play album \"Meteora\"\nspoti play artist \"Linkin Park\"\nspoti play playlist \"Workout\"\nspoti play playlist 1\n```\n\n`spoti playlist-create <name>` creates a private playlist by default; pass `--public` to create a public one. `spoti playlist-edit <playlist>` updates a playlist you own: provide `--name`, `--description`, `--public`, or `--private` (the visibility options cannot be combined). `spoti playlist-move <playlist> <from> <to>` moves an item between one-based positions in a playlist you own; quote playlist names containing spaces. The TUI offers the same operation from Library: open a playlist, select a track, press `e`, then `m`, and enter its destination position. `spoti add` adds the currently playing track to an existing playlist. Pass `--search <query>` to select a searched track instead; `--first` chooses the first track and matching playlist without prompting. In an interactive terminal, omit the playlist to browse lazily loaded pages; otherwise pass a displayed number or playlist name. The TUI offers the same flow with `a` from Player or for a selected track in Search. These features require Spotify playlist-modification scopes, so existing users upgrading to this version must run `spoti login` once to authorize the permissions.\n\nUser playlists preserve Spotify’s order so their global displayed numbers remain stable across pages. A displayed number can be reused with `spoti playlist <number>` or `spoti play playlist <number>`, including numbers beyond the first page.\n\nIn an interactive terminal, `spoti album` can play the entire album or a selected track after showing its details. `spoti artist` can play the artist context or let you browse the artist’s albums lazily, with each fetched page ordered from newest to oldest by release date. From an album selected through an artist, choose **Back to albums** to reuse that list and select another release; pressing Enter in the album browser returns to the artist actions. `spoti playlist` can start the selected playlist or browse its tracks across all available pages and play one directly. Non-interactive runs remain display-only and never start playback implicitly.\n\n`spoti play <query>` remains shorthand for track playback. The words `track`, `album`, `artist`, and `playlist` are treated as explicit types when followed by another argument. For a track query that starts with one of those reserved words, use `spoti play track <query>` (or quote the complete query as one shell argument). Context commands support `--first` to skip interactive selection.\n\nManage and inspect your Spotify library:\n\n```bash\nspoti liked\nspoti liked --limit 10\nspoti like\nspoti unlike\nspoti recent\nspoti recent --limit 10\nspoti top tracks\nspoti top artists --range short\n```\n\n`spoti like` and `spoti unlike` operate on the currently playing track. Episodes, advertisements, local files, and unavailable items are ignored safely. `spoti top tracks|artists` browses Spotify's affinity rankings, which estimate your top items over a time window rather than report exact play counts. Use `--range short|medium|long` (default `medium`): short covers about 4 weeks, medium about 6 months, and long about 1 year. The CLI page title shows the selected range. Artist albums, `spoti playlists`, `spoti liked`, `spoti recent`, and `spoti top` use paginated browsers: enter a displayed number to select it, `n` for the next page, `p` for the previous page, or press Enter to go back or leave playback unchanged. Pages are requested only when needed, and previously visited pages are cached for the duration of the command. Short Spotify rate limits are retried automatically with bounded backoff; when `Retry-After` exceeds five seconds, `spoti` exits immediately with a human-readable retry time instead of holding the terminal on a spinner. For collection commands, `--limit` controls the page size from 1 to 50; artist album pages use Spotify’s maximum of 10. Non-interactive runs display only the first page and never start playback implicitly.\n\nCheck for updates or install the latest npm release:\n\n```bash\nspoti update --check\nspoti update\n```\n\n`spoti now --short` prints a single line such as `▶ Linkin Park — Numb` and exits, making it suitable for prompts and status bars. `spoti open` opens the current track's Spotify page in the system browser or registered Spotify handler.\n\n`spoti update` asks for confirmation before installing the exact version returned by the update check. It never installs an update silently. Normal commands use a cached update result and refresh it in a detached process at most once every 24 hours, so npm availability does not delay or break Spotify controls.\n\nRemove local credentials:\n\n```bash\nspoti logout\n```\n\nWhen attached to an interactive terminal, `spoti play <query>` asks you to select a result. In non-interactive usage it chooses the first result automatically; `--first` makes that behavior explicit.\n\nWatch mode continuously refreshes the current track and progress until `Ctrl+C` is pressed. `--watch` enables it for one command, while `--no-watch` overrides a saved preference. Run `spoti volume`, `spoti shuffle`, or `spoti repeat` without a value to inspect the current state. Pass a volume value or use `spoti shuffle on|off` or `spoti repeat off|track|context` to change it.\n\n\n### Command aliases\n\nCommon aliases include:\n\n```text\ni     interactive  p     play       pa    pause\nly    lyrics       r     resume       np    now        q     queue      s     search\nvol   volume       sk    seek        rst  restart     alb   album\nart   artist       dev   device      devs  devices\npl    playlist     pls   playlists   rep   repeat\nrec   recent       n     next        prev  previous\ntt    top tracks   ta    top artists\n```\n\n### Shell completions\n\nGenerate a static completion script without invoking Spotify or making network requests:\n\n```bash\nspoti completion bash\nspoti completion zsh\nspoti completion fish\n```\n\nFor the current shell session:\n\n```bash\nsource <(spoti completion bash) # Bash\nsource <(spoti completion zsh)  # Zsh\nspoti completion fish | source  # Fish\n```\n\nInteractive network operations display a spinner on stderr. Indicators remain disabled outside a TTY.\n\n### Terminal formatting\n\nInteractive terminals use restrained styling for names, metadata, headings, and playback progress. Redirected output remains plain text. Set the standard `NO_COLOR` environment variable to disable decorative styling:\n\n```bash\nNO_COLOR=1 spoti now\n```\n\nPowerShell:\n\n```powershell\n$env:NO_COLOR = \"1\"\nspoti now\n```\n\nSpotify-provided names and descriptions are normalized to safe single-line terminal text before display.\n\n### Lyrics and LRCLIB\n\nSpotify's Web API does not provide lyrics. `spoti lyrics` and the TUI Lyrics screen therefore query the community-operated [LRCLIB](https://lrclib.net) service using the selected track's title, artists, album, and duration. This metadata is sent to LRCLIB only when lyrics are requested. `spoti` identifies itself through the required `User-Agent`, performs bounded retries for short `429` and `503` responses, and does not persist lyrics locally.\n\nLyrics are displayed for personal, immediate use with visible LRCLIB attribution. LRCLIB's software license does not grant redistribution rights to copyrighted song lyrics; do not treat displayed lyrics as freely licensed content. Availability and synchronization depend on LRCLIB's community data, and some tracks may be missing, instrumental, or incorrectly matched.\n\n## Configuration\n\nView all settings:\n\n```bash\nspoti config\n```\n\nRead, update, or reset settings:\n\n```bash\nspoti config get spotifyClientId\nspoti config set spotifyClientId \"your-client-id\"\nspoti config get watchAfterPlay\nspoti config set watchAfterPlay true\nspoti config set refreshIntervalMs 2000\nspoti config unset spotifyClientId\nspoti config path\nspoti config reset\n```\n\nAvailable settings:\n\n| Setting | Default | Description |\n| --- | ---: | --- |\n| `spotifyClientId` | `null` | Public Spotify application client ID saved by `spoti setup`. |\n| `defaultDevice` | `null` | Exact Spotify Connect device name or ID used when no device is active. |\n| `watchAfterPlay` | `false` | Keep `spoti play` open in watch mode after playback starts. |\n| `refreshIntervalMs` | `1000` | Watch refresh interval from `1000` to `30000` milliseconds. |\n\nCommand flags take precedence over saved configuration. Application preferences are stored in `$XDG_CONFIG_HOME/spoti/config.json`, or `~/.config/spoti/config.json` when `XDG_CONFIG_HOME` is not set. This path convention is currently used on Linux, macOS, and Windows; run `spoti config path` to print the exact path for the current system.\n\n## Credentials\n\nCredentials are stored locally in:\n\n```text\n$XDG_CONFIG_HOME/spoti/credentials.json\n```\n\nor, when `XDG_CONFIG_HOME` is not set:\n\n```text\n~/.config/spoti/credentials.json\n```\n\nOn POSIX systems, the credentials file is created with user-only permissions (`0600`). Access tokens refresh automatically using the environment client ID when present, otherwise the client ID saved by `spoti setup`. New installs request the minimum scopes for supported features; when a feature adds a new scope, existing installations are asked to run `spoti login` again to authorize it. Top tracks and artists require Spotify's `user-top-read` scope. Never provide or store a Spotify client secret in `spoti`.\n\n## Spotify API policy\n\n`spoti` uses Spotify data only for immediate command output and playback control. It does not persist Spotify catalog content, use Spotify data for machine-learning training, or download audio. Spotify content and links remain attributed to Spotify.\n\nEndpoint work must be checked against Spotify's [official OpenAPI specification](https://developer.spotify.com/reference/web-api/open-api-schema.yaml) and [Developer Terms](https://developer.spotify.com/terms).\n\n### Spotify quota and rate limits\n\nSpotify can return HTTP `429` for two related situations:\n\n- a normal short-term rate limit, which can usually be retried after the response's `Retry-After` delay\n- development quota exhaustion, reported by Spotify as `QUOTA_EXCEEDED`, which may have a much longer delay\n\n`spoti` automatically retries only bounded waits of five seconds or less. Longer waits exit immediately and show when to try again. Development quota cannot be manually cleared from `spoti`.\n\nSpotify development mode currently supports a small allowlist of users and requires the app owner to have Premium. Quota may be shared by development-mode applications owned by the same Spotify developer account, so creating another application under that account is not a reliable way to obtain fresh quota. Extended quota access is subject to Spotify's eligibility and application requirements.\n\nEach user should create their own Spotify developer application and save its public client ID:\n\n```bash\nspoti setup\nspoti login\n```\n\nThis avoids putting all public `spoti` users on one developer application's quota. A client ID is public configuration; never provide a client secret to `spoti`.\n\nSee Spotify's official documentation for current details:\n\n- [Rate limits](https://developer.spotify.com/documentation/web-api/concepts/rate-limits)\n- [Quota modes](https://developer.spotify.com/documentation/web-api/concepts/quota-modes)\n\n## Development\n\n```bash\nnpm run typecheck\nnpm run lint\nnpm test\nnpm run build\n```\n\n## Releases\n\nGitHub Releases are created automatically when a version tag is pushed. Maintainers release in this order so npm publication and the GitHub Release cannot drift:\n\n```text\n1. Update package.json, package-lock.json, and CHANGELOG.md.\n2. Run npm run verify and npm run smoke:package.\n3. Commit, push main, and wait for cross-platform CI.\n4. Run npm publish --access public and verify the registry version.\n5. Create and push the matching vX.Y.Z tag.\n6. Verify the GitHub Release workflow and attached checksums.\n```\n\nThe tag must exactly match the package version. Never push a release tag before npm publication succeeds. The release workflow independently verifies the project, installs the packed artifact, attaches the npm tarball and a `SHA256SUMS` file, and generates release notes from Git history.\n\n## Current scope\n\nVersion `1.0.0` establishes the command-driven CLI, Ink TUI, configuration model, and documented command aliases as stable. The release includes Spotify Connect controls, paginated search and library browsing, playlist insertion, secure PKCE authentication, quota-aware request handling, LRCLIB lyrics, update checks, shell completions, a configurable default device, compact status output, cross-platform source and packaged-install CI, and the companion website.\n","readmeFilename":"README.md"}