{"_id":"musicstream-sdk","_rev":"35-9e595680a8f0419801c3bc5327c15a19","name":"musicstream-sdk","dist-tags":{"latest":"4.4.0"},"versions":{"0.2.0":{"name":"musicstream-sdk","version":"0.2.0","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@0.2.0","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"e89260f7495b2ac7e6ac5d7292299d90677d60e1","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-0.2.0.tgz","fileCount":6,"integrity":"sha512-wrmsGXnxmqanGL2KacSKEPdMZUIuKN2AHYoYXnE8THzQyHlCtDDOk8E9fwcpNWoUqELlzfcn/KaVKpS9ZHOVTw==","signatures":[{"sig":"MEUCIQD3Zd31GYopaxIGYPzB2JAo8uzSasP4Yeo6sdRz1fIjvQIgAWtWdJ3poAJozHG9CWIb65Z3eBliqfxDkpAdEDCm3QY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80490},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"c86334014688bd8dc442e5155ac304c463d45022","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"11.11.0","description":"YouTube Music SDK — clean API for search, stream, browse, and download","directories":{},"_nodeVersion":"24.14.1","dependencies":{"youtubei.js":"^17.0.1","better-sqlite3":"^12.9.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^1.3.0","typescript":"^5.3.0","@types/node":"^20.11.0","@vitest/coverage-v8":"^1.3.0","@types/better-sqlite3":"^7.6.8"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_0.2.0_1776611875671_0.30323837730816594","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"musicstream-sdk","version":"0.2.2","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@0.2.2","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"87de4791bf9643935977fcba61ce7b15e71f85b9","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-0.2.2.tgz","fileCount":6,"integrity":"sha512-0F66yji3Hfl3OdrpRJKMAoeSAf4GdZQlhh7FFJ7Ayv0Nd5y2YljERKofipt0UOHL6czP60LujzpPVxsVA0lLXQ==","signatures":[{"sig":"MEUCIQCOkALtvO3Uk4SGdxLcEzGdOi+wlFh9Yii5iMNjffvR6wIgJgS1pBp+TmZeSoex5LFNaBdFzhlt20FIaT2u27Ophdk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86999},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"6ba6834cf33621fe6495492e2ec39e5922c85d4a","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.8.2","description":"YouTube Music SDK — clean API for search, stream, browse, and download","directories":{},"_nodeVersion":"20.20.2","dependencies":{"youtubei.js":"^17.0.1","better-sqlite3":"^12.9.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^1.3.0","typescript":"^5.3.0","@types/node":"^20.11.0","@vitest/coverage-v8":"^1.3.0","@types/better-sqlite3":"^7.6.8"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_0.2.2_1776615680283_0.6427419863677863","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"musicstream-sdk","version":"0.2.3","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@0.2.3","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"017477f46c645fa9e8420c9892b377429bbf9656","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-0.2.3.tgz","fileCount":6,"integrity":"sha512-kPyRWMYrSWAf5ILAvlYgozLF3G7BVKilSIYlB6I1bxJjc4Bkr4QK3rG27KUMlXB7/uZ/d7pMPSRbwO7gb32+KA==","signatures":[{"sig":"MEUCICiA+w3Ba9VbY/WI8FBBg7awhwKxR3YLvx3VdNMJUHjjAiEAsvECsWKM74D2i6wxVZch7Lsv5UufJ5WiT6UoFDRfkm0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87181},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"7185fde476fab99da13c4a27cdb9473aaff4d506","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.8.2","description":"YouTube Music SDK — clean API for search, stream, browse, and download","directories":{},"_nodeVersion":"20.20.2","dependencies":{"youtubei.js":"^17.0.1","better-sqlite3":"^12.9.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^1.3.0","typescript":"^5.3.0","@types/node":"^20.11.0","@vitest/coverage-v8":"^1.3.0","@types/better-sqlite3":"^7.6.8"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_0.2.3_1776616084012_0.9462775007219795","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"musicstream-sdk","version":"0.2.4","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@0.2.4","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"dcb57365e83c792f02b1e05aae764a830f68d460","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-0.2.4.tgz","fileCount":6,"integrity":"sha512-D6n1a6/8n8t/r5mlDKhVzug8gf3tfnQFyN9K/aJgWNdqeXVI9BpNs99rBxvDZVnZfOj/S2D0XKlXRwuYYU4HTQ==","signatures":[{"sig":"MEUCIGP8+XOw0nyrZc6x1XZ0ZQirw7FmkhmlbWDswTtUlcYGAiEAtrLeC1/LWAVl9/cQ/mQzOL9OtNDBwGoHi2KlOdyFpGE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87181},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"5aec17f4f22088af24974e7687001a5efcb4dc2f","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.8.2","description":"YouTube Music SDK — clean API for search, stream, browse, and download","directories":{},"_nodeVersion":"20.20.2","dependencies":{"youtubei.js":"^17.0.1","better-sqlite3":"^12.9.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^1.3.0","typescript":"^5.3.0","@types/node":"^20.11.0","@vitest/coverage-v8":"^1.3.0","@types/better-sqlite3":"^7.6.8"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_0.2.4_1776616343948_0.884133474263437","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"musicstream-sdk","version":"0.3.0","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@0.3.0","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"596b2f6f6532b8aa252493922f359b015df977a7","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-0.3.0.tgz","fileCount":6,"integrity":"sha512-bUNtWDQBjocU8yBOk/6LlAvjgZhCCr14wivG2jlqvVuuCVZShR0g8i2evikQNYAn19EVTIJe02BOSRM8RbeMZA==","signatures":[{"sig":"MEUCIEs6Q9PCVJDHUsAPN1+IiflHoaHDBdbQQGsUQbk78QaiAiEA8fGW0LNG/bGTRNbyw1bSyL2TCdqfB0LHKAK/42VPEm0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129822},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"b9621ced9d4d7072304b5f9486f7ec32b2ceb025","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.8.2","description":"Music SDK for search, streaming, browse, lyrics and download. Unified API across JioSaavn and YouTube Music. No API keys required.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"node-forge":"^1.4.0","youtubei.js":"^17.0.1","better-sqlite3":"^12.9.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^1.3.0","typescript":"^5.3.0","@types/node":"^20.11.0","@types/node-forge":"^1.3.14","@vitest/coverage-v8":"^1.3.0","@types/better-sqlite3":"^7.6.8"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_0.3.0_1776794288462_0.15583186337571164","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"musicstream-sdk","version":"0.3.1","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@0.3.1","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"abaca24de1bb99b7dedd3ae2e2d24a480b63663e","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-0.3.1.tgz","fileCount":6,"integrity":"sha512-s2NLTU0hpoJiB+nGuoas4ZXNLXh24oVI74VxyDp4rTPU1DKk1WUtgV6NvgZylUT9Ku3LMWMK4H1EqodY7/HkzA==","signatures":[{"sig":"MEQCIA2XYeSCcuJK+8vjhKXyffIeDstiSiL4gFbmF6X4wWv2AiBi1klRnPgRPBM6tV2m4t72fN9MX4wPi7d7fN7MSENrTA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130346},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"375273bd9ccb39051248299f7c24776680c06712","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.8.2","description":"Music SDK for search, streaming, browse, lyrics and download. Unified API across JioSaavn and YouTube Music. No API keys required.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"node-forge":"^1.4.0","youtubei.js":"^17.0.1","better-sqlite3":"^12.9.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^1.3.0","typescript":"^5.3.0","@types/node":"^20.11.0","@types/node-forge":"^1.3.14","@vitest/coverage-v8":"^1.3.0","@types/better-sqlite3":"^7.6.8"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_0.3.1_1776801522108_0.35198415535777583","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"musicstream-sdk","version":"0.3.2","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@0.3.2","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"9407c1f7e999c3facf8a74853458037c86e71b01","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-0.3.2.tgz","fileCount":6,"integrity":"sha512-eB9KgF99J7UfIP4HSHEiS2JZaJ47dWoUycmtZfQmuBhXb+b0KQTohndkXfdhvVKPd2pD1ja+eXJVnI80hK4NSg==","signatures":[{"sig":"MEUCIEiXV2CN7A79vRHFl6yqU/pB67SxTdjvIacdcs65DTFNAiEA/gII/r/r5SSUc2oZoRSLku53ebIVXKh/7/TMFQqKL8Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130346},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"aa0a3f9367926107bdc73aa48fdde14a3369c1de","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.8.2","description":"Music SDK for search, streaming, browse, lyrics and download. Unified API across JioSaavn and YouTube Music. No API keys required.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"node-forge":"^1.4.0","youtubei.js":"^17.0.1","better-sqlite3":"^12.9.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^1.3.0","typescript":"^5.3.0","@types/node":"^20.11.0","@types/node-forge":"^1.3.14","@vitest/coverage-v8":"^1.3.0","@types/better-sqlite3":"^7.6.8"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_0.3.2_1776801560824_0.19695281094971717","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"musicstream-sdk","version":"0.3.3","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@0.3.3","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"166d1ac78bed9b589970d7f8add65beee9152eed","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-0.3.3.tgz","fileCount":6,"integrity":"sha512-79v+BhDJI/HuISC6+7KmXOHKFweXAa4R8fJrjFsIStqG5w5QBicPu5gXRNcK6+TNWGjGgOU/MXkh9GCaQtTuLw==","signatures":[{"sig":"MEUCIEI2+8h5XIkrHWOyYFA48pAc7OoMhn/EUN1DWNQVTQ21AiEAxTUzAcRw8oe/25LliR+H1c/xbRItFTd6MH2WGB/njZ4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":136242},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"e6fd282cdeda05bfcfb16ebb85621b812a2e045b","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.8.2","description":"Music SDK for search, streaming, browse, lyrics and download. Unified API across JioSaavn and YouTube Music. No API keys required.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"node-forge":"^1.4.0","youtubei.js":"^17.0.1","better-sqlite3":"^12.9.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^1.3.0","typescript":"^5.3.0","@types/node":"^20.11.0","@types/node-forge":"^1.3.14","@vitest/coverage-v8":"^1.3.0","@types/better-sqlite3":"^7.6.8"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_0.3.3_1776804508360_0.8052854300929773","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"musicstream-sdk","version":"0.3.4","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@0.3.4","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"77761330d6b105e7201ca87be742c57293168a94","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-0.3.4.tgz","fileCount":6,"integrity":"sha512-zAseWg+RthYEcJaU+B3ZLgBNkvA8FgtevWsG/T59Hj8IFDE5crlVeyAjuAicZFHekSZ6+H/azsEUcmha76EARA==","signatures":[{"sig":"MEYCIQCSROKNGaIU16f81Yotf8jT33H7si5gTpDyUmC2lu+BtQIhANabWoox/H3PIIcczI/l9f31fPlq2TlARwGOQxvzPuM+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137415},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"70ecfbfeaf3559420aa477fef96930118f0613ca","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.8.2","description":"Music SDK for search, streaming, browse, lyrics and download. Unified API across JioSaavn and YouTube Music. No API keys required.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"node-forge":"^1.4.0","youtubei.js":"^17.0.1","better-sqlite3":"^12.9.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^1.3.0","typescript":"^5.3.0","@types/node":"^20.11.0","@types/node-forge":"^1.3.14","@vitest/coverage-v8":"^1.3.0","@types/better-sqlite3":"^7.6.8"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_0.3.4_1776805489098_0.6961607674749848","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"musicstream-sdk","version":"0.3.5","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@0.3.5","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"cba2ecb0d3c802020480724a2032a64ef6d268af","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-0.3.5.tgz","fileCount":6,"integrity":"sha512-A3jY6SUaSPb5AlXjueRCybPdKktPsBXMdJ8QV8ScjYXIQbAr2cymJ1U8OvVMLJ37XHcGOWCR7YJDhphc6vfIWA==","signatures":[{"sig":"MEQCIFjoNLENUQ0PsRAYl/9OdTTk+1BM/8D3itrFrDW0kyYSAiBOOyCyHBmkxgoSBKcMAu8PPr1fhXDWIgA+LWjfl24bbg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":138177},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"80705117de3b6cdaf9241612d7f5a16116e7a820","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.8.2","description":"Music SDK for search, streaming, browse, lyrics and download. Unified API across JioSaavn and YouTube Music. No API keys required.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"node-forge":"^1.4.0","youtubei.js":"^17.0.1","better-sqlite3":"^12.9.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^1.3.0","typescript":"^5.3.0","@types/node":"^20.11.0","@types/node-forge":"^1.3.14","@vitest/coverage-v8":"^1.3.0","@types/better-sqlite3":"^7.6.8"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_0.3.5_1776806606703_0.902588788402809","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"musicstream-sdk","version":"0.3.6","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@0.3.6","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"a9326edd0208550ad013779e527ce2677dd2a16a","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-0.3.6.tgz","fileCount":6,"integrity":"sha512-PiAVJ6x2dRU0uWqL+uDYKjff63tLugvBLw/eCYfH1VRvw5Hj+iz7XnigsV7Chu5OttPRfdVgKvmXllKfE/paHw==","signatures":[{"sig":"MEYCIQDrRlC8nQkH82ypKH7mBtjvYRkpPbJyM8oIv4aJBci7eQIhALYuEwanh1RcvbgPBVrixuZjY8xxugCnkWbITX2nIDkE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139240},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"9b925c5357416c661578e80dd7a5671b1340dcff","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.8.2","description":"Music SDK for search, streaming, browse, lyrics and download. Unified API across JioSaavn and YouTube Music. No API keys required.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"node-forge":"^1.4.0","youtubei.js":"^17.0.1","better-sqlite3":"^12.9.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^1.3.0","typescript":"^5.3.0","@types/node":"^20.11.0","@types/node-forge":"^1.3.14","@vitest/coverage-v8":"^1.3.0","@types/better-sqlite3":"^7.6.8"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_0.3.6_1776806953588_0.6602397891801932","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"musicstream-sdk","version":"0.4.0","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@0.4.0","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"0c86b6893178c874518be097d9b1a98f55aae23c","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-0.4.0.tgz","fileCount":6,"integrity":"sha512-wyB/vq/S1gtmd1f1cGC4ROP8OKu/A5wPBLVn8YASFY3Eu009uPf0VRjY8o86/KIq7Uz1k5X3x/yEev6zzlNaUA==","signatures":[{"sig":"MEQCIGe/ibdVNCrvLmOoUuhySN6+mVauFyxTPhWQ6RKvrVXuAiBYmTu1Vz4J3TYhT47CKTOfg/rw5YGdhM/gw609+T7lMA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":150959},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"6b87a33f1af2f72b0373b0107af071ed2ac3c34b","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.8.2","description":"Music SDK for search, streaming, browse, lyrics and download. Unified API across JioSaavn and YouTube Music. No API keys required.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"node-forge":"^1.4.0","youtubei.js":"^17.0.1","better-sqlite3":"^12.9.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^1.3.0","typescript":"^5.3.0","@types/node":"^20.11.0","@types/node-forge":"^1.3.14","@vitest/coverage-v8":"^1.3.0","@types/better-sqlite3":"^7.6.8"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_0.4.0_1776985957954_0.7544854225688975","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"musicstream-sdk","version":"0.5.0","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@0.5.0","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"78bb04767fb46c5f229e756d6bb083632a87f576","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-0.5.0.tgz","fileCount":6,"integrity":"sha512-XknTfXFSYwcGfVcc5MlPinAwhcsOm4fIvAQYC31h3j7egl3igNYUoyTI4drWZVAOnlguM750BlpJSe/ik/Z+nQ==","signatures":[{"sig":"MEYCIQCGGbzTLF6irmvncznTh9INAO35A/mVonES+VcczHcgTgIhALQHK8fV6eoexAXpSlxLXvOlfN3pKvGikdcyue5tMdHN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159969},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"9660b9effbdd947a9f4847898e882b0d00666ba8","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.9.7","description":"Music SDK for search, streaming, browse, lyrics and download. Unified API across JioSaavn and YouTube Music. No API keys required.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"node-forge":"^1.4.0","youtubei.js":"^17.0.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^22.19.17","@types/node-forge":"^1.3.14","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_0.5.0_1777053701233_0.26194008251958545","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"musicstream-sdk","version":"0.5.1","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@0.5.1","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"5463943f50a9b9fc6e8c38b0b6602a0ac3d37760","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-0.5.1.tgz","fileCount":6,"integrity":"sha512-aXxCiFPyU03QeFerBUEzGGPGeDBXVD74Hi80fngrF8l1csZbYVajlS0zwAtRK5JZ7rT2QBrCi6kn9sCkqTrrHQ==","signatures":[{"sig":"MEYCIQD/IuAWYoFi06iHxaWFmVmjW6hHVhouvo0per7cFCNfDwIhAMfCElMUsdAKeyLPkCua1tZqxVOCbWRqI7CmkcmY9knm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167306},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"e36fc878de317c7fb31038e5b323d45966a5e8ae","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup src/index.ts --format cjs,esm --dts --clean","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.9.7","description":"Music SDK for search, streaming, browse, lyrics and download. Unified API across JioSaavn and YouTube Music. No API keys required.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"node-forge":"^1.4.0","youtubei.js":"^17.0.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^22.19.17","@types/node-forge":"^1.3.14","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_0.5.1_1777056624601_0.3587048946686304","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"musicstream-sdk","version":"0.5.2","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@0.5.2","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"3c45925901c188cdc6ff1a5d29080fb690ee9987","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-0.5.2.tgz","fileCount":6,"integrity":"sha512-2OdK/3fCozBsUnH2QlGVHzHXHugiygqHQCJu1m9KNQ6yBPMmFrcdCiM/CggO/C/4fPR6cDG4MchnX0rFtVF0Qg==","signatures":[{"sig":"MEQCIHT/7aeYrDyBlC9X5aUSMIq/zbYuLeibFCjk1fSJMjypAiBDl/raLZDWy6NB7Vt+rVJQxIZssdZlAsJKJP9RXm+esA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167272},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"d25ab9b47b33d3bae5ca584081198c6442d57812","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.9.7","description":"Music SDK for search, streaming, browse, lyrics and download. Unified API across JioSaavn and YouTube Music. No API keys required.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"node-forge":"^1.4.0","youtubei.js":"^17.0.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^22.19.17","@types/node-forge":"^1.3.14","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_0.5.2_1777058224769_0.05282651797203597","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"musicstream-sdk","version":"0.6.0","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@0.6.0","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"514f2a752af290a8029d547ec4192a223ec0fa47","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-0.6.0.tgz","fileCount":6,"integrity":"sha512-HjuCqFoGTPcCGbKGNJ3e+Y0HZijDPLDn5MvuuMaawcmAGt1V4fQ+ObWVf6Qo4efPOvx6hQ+mvpypmQ/2ud+Hjw==","signatures":[{"sig":"MEUCIQDm8g+3HC5MX/xYIrqWz/qbOg5nz/Wr8pbMQVofgmkZeAIgLTreeEsS8gywjyNuSEAoXImSt2/5+Bf9FvOBvl8HC6A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":172200},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"379fd10a9ff6308173cbf1988acfa7f6e6dd64b7","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.9.7","description":"Music SDK for search, streaming, browse, lyrics and download. Unified API across JioSaavn and YouTube Music. No API keys required.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"node-forge":"^1.4.0","youtubei.js":"^17.0.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^22.19.17","@types/node-forge":"^1.3.14","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_0.6.0_1777062889511_0.4795307386772907","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"musicstream-sdk","version":"1.0.0","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@1.0.0","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"096cf5b36fcee73ea5cf6c5ac78b2680190c4823","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-1.0.0.tgz","fileCount":6,"integrity":"sha512-93v/uQHvlf3MzJ7VUEab+Tbo00Gtcn0HROu5uMYhzkAtGkp9rT8/Fue/S6ynqBd6WSUtnxS7Du/LXNtg5oiElg==","signatures":[{"sig":"MEUCIAUs/4Nw6ae7S4Okwy0g+sj5PtcvTUxqkviP2cVdRSyFAiEA2bN+KuWaUstjYtZmC7HHI77dnEVkpzsOOVUoJKoT2Q0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":172034},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"dda0ff940b392038c00c900e8a6822722f793c8b","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.9.7","description":"Music SDK for search, streaming, browse, lyrics and download. Unified API across JioSaavn and YouTube Music. No API keys required.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"node-forge":"^1.4.0","youtubei.js":"^17.0.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^22.19.17","@types/node-forge":"^1.3.14","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_1.0.0_1777066875109_0.2986513621823721","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"musicstream-sdk","version":"1.0.1","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@1.0.1","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"80691c0b892aaa67f8161c9e36aed80e17a31450","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-1.0.1.tgz","fileCount":6,"integrity":"sha512-A/kWpPVb7fHYrBvH54RwVmPfFcbWX7HFm2xFVKr87Cz+wL7Ai2k4tIIhHc5/TDqj52iMT+7G9xIvxl6FCCD13A==","signatures":[{"sig":"MEUCIDzNMz3cCiizyNGKWkNZiKJEZfhcXeiFyVqILNZI39BXAiEAlVLJ6ZFYu96F2TALC5D7MB30xXEWlc5WeZk90vf43IY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":174030},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"cd80f5144fabdc6c55b6056f316dde96ae0bb37e","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.9.7","description":"Music SDK for search, streaming, browse, lyrics and download. Unified API across JioSaavn and YouTube Music. No API keys required.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"node-forge":"^1.4.0","youtubei.js":"^17.0.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^22.19.17","@types/node-forge":"^1.3.14","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_1.0.1_1777376385645_0.7813650297018173","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"musicstream-sdk","version":"1.0.2","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@1.0.2","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"6053e62221b37b5743eef0ceb90e181599970849","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-1.0.2.tgz","fileCount":6,"integrity":"sha512-QBGBCpNJplZKlT6No8oiFpyi/0OPwjAdpVbEznSkUzEZfIm4f4UmjoDQTTL6dWsf9FHe+LvuDCQ3rvCQ9zna0Q==","signatures":[{"sig":"MEYCIQC1oGYARMAbCgkttC6VnfTp5JEgnFmaSCxZylZN5yFgYwIhALD9OvICAOqSZq3IKWHVdDVNm1eVGJ5KtJ515I6oXuVB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":175326},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"a714fc0afbf0dc2c628a9127f30cff67be7d4108","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.9.7","description":"Music SDK for search, streaming, browse, lyrics and download. Unified API across JioSaavn and YouTube Music. No API keys required.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"node-forge":"^1.4.0","youtubei.js":"^17.0.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^22.19.17","@types/node-forge":"^1.3.14","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_1.0.2_1777400813804_0.15020045402231097","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"musicstream-sdk","version":"1.1.0","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@1.1.0","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"e151aff8532e76488896fc73dfdd94aad7ed6f50","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-1.1.0.tgz","fileCount":6,"integrity":"sha512-cxVJQ73Ht3DyAg0LRTUOguC7UfDW40K4TSRliaez+NOlTR9pSHeEi/4Q17SkrIalVtAJcKLVCE6n2UgEIM4oXQ==","signatures":[{"sig":"MEUCIHyVqD0O3tJoMo6fOVVvcC0Dy7llc3fDi3AxHCEoviJFAiEAy/Pk+GmbYZlms3053Gv1ZEO91qkdJIYHm+cZFaqwR4M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":237381},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"f5b26b8187fd6c792c9318a3f4de9d362e69af7c","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.9.7","description":"Music SDK for search, streaming, browse, lyrics and download. Unified API across JioSaavn and YouTube Music. No API keys required.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.3.6","node-forge":"^1.4.0","rss-parser":"^3.13.0","youtubei.js":"^17.0.1","@unimusic/chromaprint":"^0.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^22.19.17","@types/node-forge":"^1.3.14","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_1.1.0_1777489631007_0.9404904140822519","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"musicstream-sdk","version":"2.0.0","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@2.0.0","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"b1b305be603dae06a130ae3660674c7d41a7683d","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-2.0.0.tgz","fileCount":6,"integrity":"sha512-XF4Bp8mrkI3Ett3RkCIEP0TVa5LriBSHpql9NcQq4U9z4LGCcx7ZUjulNL2HtvJt57SvsB5bA03ZFx6jdzvT1Q==","signatures":[{"sig":"MEQCIBikzwMMj7Xx1Td6ddHsbGirira4dqeWp3iXCXAvipLiAiBsKNg/zHUqhK6bzFoJehojTy4OQYekw1Mf8/Lf9/ux/A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":237381},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"f5b26b8187fd6c792c9318a3f4de9d362e69af7c","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.9.7","description":"Music SDK for search, streaming, browse, lyrics and download. Unified API across JioSaavn and YouTube Music. No API keys required.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.3.6","node-forge":"^1.4.0","rss-parser":"^3.13.0","youtubei.js":"^17.0.1","@unimusic/chromaprint":"^0.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^22.19.17","@types/node-forge":"^1.3.14","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_2.0.0_1777489685549_0.4123519962753577","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"musicstream-sdk","version":"2.0.1","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@2.0.1","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"d1abe5ecc8c80ac64deb444318f9ad35669532d2","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-2.0.1.tgz","fileCount":6,"integrity":"sha512-8wm2qbmbWgtAlPIwFiPBXODYefTe/EVsTPfyX1wELqj/W4dXGs/RmUNA4wXhAQ/D7iMiaQCrAOKt0bQQ9jcWfg==","signatures":[{"sig":"MEQCIATZbpRbGDYe7b4rDa4hc3D7kN2424ykTf6TJUNl3ZUcAiAaXDodFrqTgZgrrr7tmjGqAJ60Oi9JjQw4o0KfRY8c+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":240104},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"c07ec0b5a8542931a259e4ec3e3d68a44ed4107d","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.9.7","description":"Music SDK for search, streaming, browse, lyrics and download. Unified API across JioSaavn and YouTube Music. No API keys required.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.3.6","node-forge":"^1.4.0","rss-parser":"^3.13.0","youtubei.js":"^17.0.1","@unimusic/chromaprint":"^0.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^22.19.17","@types/node-forge":"^1.3.14","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_2.0.1_1777490121980_0.8782276305350629","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"musicstream-sdk","version":"2.0.2","keywords":["youtube","music","sdk","streaming","api"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@2.0.2","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"097b4b9d670fd8803d3775909bcea618d562a004","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-2.0.2.tgz","fileCount":6,"integrity":"sha512-9GvFG1IiwwieYEziDDA/1hRorGjMFno0rJeCychG+SNapssWfDCJMNI3LU/ssPF1IUWERjGql+aEIs5kOUYRSA==","signatures":[{"sig":"MEQCIDfXnR2+3AtkjDFfULK/B40WeKQpDz7qK36s6yG7hNkzAiAHDpXF6RS1bY6yvUsVKgUo9fzuDajnBfBOAMEs7cx9ow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":235206},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"4bbb8b28fca79917a948a76bb3aaeecf80dfcb73","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.9.7","description":"Music SDK for search, streaming, browse, lyrics and download. Unified API across JioSaavn and YouTube Music. No API keys required.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.3.6","node-forge":"^1.4.0","rss-parser":"^3.13.0","youtubei.js":"^17.0.1","@unimusic/chromaprint":"^0.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^22.19.17","@types/node-forge":"^1.3.14","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_2.0.2_1777490605101_0.2552192130551463","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"musicstream-sdk","version":"2.0.3","keywords":["youtube-music","jiosaavn","music","sdk","streaming","audio","search","lyrics","podcast","download","youtube","music-api","music-streaming","innertube","waveform","fingerprint","no-api-key","typescript"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@2.0.3","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"13f4aaa2cd1edd65602c0b9c221126b1f235611e","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-2.0.3.tgz","fileCount":6,"integrity":"sha512-sxO/OzIMqa6cH9G+u9QxEEg34vOaIKzGXjIORf9utffYJHSn+TD/Wo1/3xzdMpr1an0X2DvBjjL1ba4nTiC8Cg==","signatures":[{"sig":"MEUCIQDaL/wLdJHPCBJHBBMytWrKAVdylM1uAc4+1Jn41YximgIgd+erBbMeAheaAVaDw9+uc7r5Y8F4iofwrV+zKShWG30=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":235420},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"6fc51ba24b732df67b3e569a9824005346c137ea","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.9.7","description":"Unified music SDK for YouTube Music and JioSaavn — search, stream, lyrics, podcasts, download. No API keys required.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.3.6","node-forge":"^1.4.0","rss-parser":"^3.13.0","youtubei.js":"^17.0.1","@unimusic/chromaprint":"^0.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^22.19.17","@types/node-forge":"^1.3.14","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_2.0.3_1777490962986_0.7114159329719953","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"name":"musicstream-sdk","version":"2.0.4","keywords":["youtube-music","jiosaavn","music","sdk","streaming","audio","search","lyrics","synced-lyrics","lrc","podcast","rss","download","youtube","youtube-url","music-api","music-streaming","music-player","music-downloader","music-bot","discord-bot","discord-music","discord-music-bot","pcm","innertube","fingerprint","acoustid","shazam","audio-identification","yt-dlp","spotify","hindi-music","indian-music","bollywood","radio","queue","no-api-key","typescript","node-music"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@2.0.4","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"4018d1b4f2d9eb847cbbb1555f79c0f6961114de","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-2.0.4.tgz","fileCount":6,"integrity":"sha512-lrICQJ7HtkNEHU2YmJokqx/btbKx4HEwK6TYE3V7EkvoH1mtbAk0FZpj91GG4bKlQzo6r9rBY0VurWpNUWkutQ==","signatures":[{"sig":"MEUCIFp6a5U6CkkxbVGvL1pu+zlgEndOtCKGJ0n5NJJLeFDlAiEAyzQ72EcGgghb0b/2bUW719MRh1JKURY1iEXopj4uYLI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":238432},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"3323ebd6218d43ee71a857632ccb5e1638af8709","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.9.7","description":"Unified music SDK for YouTube Music and JioSaavn — search, stream, lyrics, podcasts, download. No API keys required.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.3.6","node-forge":"^1.4.0","rss-parser":"^3.13.0","youtubei.js":"^17.0.1","@unimusic/chromaprint":"^0.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^22.19.17","@types/node-forge":"^1.3.14","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_2.0.4_1777491159176_0.9594471956371273","host":"s3://npm-registry-packages-npm-production"}},"2.0.5":{"name":"musicstream-sdk","version":"2.0.5","keywords":["youtube-music","music","sdk","streaming","audio","search","lyrics","synced-lyrics","lrc","podcast","rss","download","youtube","youtube-url","music-api","music-streaming","music-player","music-downloader","music-bot","discord-bot","discord-music","discord-music-bot","pcm","innertube","fingerprint","acoustid","shazam","audio-identification","yt-dlp","spotify","radio","queue","no-api-key","typescript","node-music"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@2.0.5","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"f0432c39a5fee0d694ad189600493fef3189ffeb","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-2.0.5.tgz","fileCount":6,"integrity":"sha512-1AdUfQC5a1kqUxy552IG4axpRaZXchXqX7GvoPeW/fZgLOQDKoawwlRMw+uLeJQDWRigL4HAUjPwtoS+l9vkRA==","signatures":[{"sig":"MEUCIQCMCxHN7jQbGMR1B+dUcJiG3DF368WWFgTLU5jWqqEDrQIgG0GDpUjJ5Rg4BqMThLoQAB0WnmJjwyQGafa4b6RkQQM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":237813},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"5644fdada18def14f5ddfdfd5247916855f5545b","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.9.7","description":"Music SDK for Node.js — search, stream, lyrics, podcasts, download. Powered by YouTube Music. No API keys required.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.3.6","node-forge":"^1.4.0","rss-parser":"^3.13.0","youtubei.js":"^17.0.1","@unimusic/chromaprint":"^0.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^22.19.17","@types/node-forge":"^1.3.14","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_2.0.5_1777491430692_0.2162556326658196","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"musicstream-sdk","version":"3.0.0","keywords":["youtube-music","music","sdk","streaming","audio","search","lyrics","synced-lyrics","lrc","podcast","rss","download","youtube","youtube-url","music-api","music-streaming","music-player","music-downloader","music-bot","discord-bot","discord-music","discord-music-bot","pcm","innertube","fingerprint","acoustid","shazam","audio-identification","yt-dlp","spotify","radio","queue","no-api-key","typescript","node-music"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@3.0.0","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"fbd7659368a4fe170d08d6f73c5dfa79ed3c4414","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-3.0.0.tgz","fileCount":6,"integrity":"sha512-h1k7mDz8qVVoymyqmKYpoZBa8Atyi6WDRHCEx8L22oN0aZG2lLfC1LEBBgcsBo9eSTa+ph7CwTW5Ct4mCTBe4Q==","signatures":[{"sig":"MEUCIQChXz1N8DGog2vqhPxoI9eIVLLeI3Abkur26mOSpn6NowIgCKQsYtKaaN4xkl5lYujGckTYTbn4hzblJI3cxzSFv8M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":195199},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"9d33f960d502e16a0d9617371d9444d2be48086c","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.9.7","description":"Music SDK for Node.js — search, stream, lyrics, podcasts, download. Powered by YouTube Music. No API keys required.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.3.6","rss-parser":"^3.13.0","youtubei.js":"^17.0.1","@unimusic/chromaprint":"^0.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^22.19.17","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_3.0.0_1777493542854_0.9911312275079267","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"musicstream-sdk","version":"3.0.1","keywords":["youtube-music","music","sdk","streaming","audio","search","lyrics","synced-lyrics","lrc","podcast","rss","download","youtube","youtube-url","music-api","music-streaming","music-player","music-downloader","music-bot","discord-bot","discord-music","discord-music-bot","pcm","innertube","fingerprint","acoustid","shazam","audio-identification","yt-dlp","spotify","radio","queue","no-api-key","typescript","node-music"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@3.0.1","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"a3dc96621e6f638b300b85c05bb7a465e276258c","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-3.0.1.tgz","fileCount":6,"integrity":"sha512-nmpQeUoBI+IillK8D2TuizkENeFQ/BZJbtpD5TSU1O37tcvOr1sKNklk0o+VWMRvnZNvsS0A99y7zTS1pWMinw==","signatures":[{"sig":"MEQCIAoVuoEfWoqs5gZ45gqyPYoIsNpPya+7K7VY7WBkozrVAiBkz76PXuc6g12pj73Lp7NUAkRitxB2C7T4whSyOWWqhA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":195199},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"705332b567fe592385ff4f80ca4d14acfdd21964","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.9.7","description":"Music SDK for Node.js — search, stream, lyrics, podcasts, download. Powered by YouTube Music. No API keys required.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.3.6","rss-parser":"^3.13.0","youtubei.js":"^17.0.1","@unimusic/chromaprint":"^0.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^22.19.17","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_3.0.1_1777494040375_0.017720362399113787","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"musicstream-sdk","version":"4.0.0","keywords":["youtube-music","music","sdk","streaming","audio","search","lyrics","synced-lyrics","lrc","podcast","rss","download","youtube","youtube-url","music-api","music-streaming","music-player","music-downloader","music-bot","discord-bot","discord-music","discord-music-bot","pcm","innertube","fingerprint","acoustid","shazam","audio-identification","yt-dlp","spotify","radio","queue","no-api-key","typescript","node-music"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@4.0.0","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"8df0fd14a4b49a543ccbe44194393671a2d5b945","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-4.0.0.tgz","fileCount":6,"integrity":"sha512-LpZ6tiwsUKgr9a/47xffsWESEg8v0IBZDVrwWDYLD6K+mQVP7DIWyVG4o8pyFELjQf4u13vKQCr0MRhby2ve/A==","signatures":[{"sig":"MEUCIHYNLAh3dET+ld0JwvIfUUtIGuNQSAIVKF7Mh0DYGlTTAiEA3KBnn1LUdka9P7lcMtnjqj9HoZZfDkd+Nm9ygXCM0A4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":218038},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"f8bd94017a1345fabfb553f4ad7068086fc5ac89","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.9.7","description":"Music SDK for Node.js — search, stream, lyrics, podcasts, download. Powered by YouTube Music. No API keys required.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.3.6","rss-parser":"^3.13.0","youtubei.js":"^17.0.1","@unimusic/chromaprint":"^0.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^22.19.17","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_4.0.0_1777550141598_0.7292025782377216","host":"s3://npm-registry-packages-npm-production"}},"4.1.0":{"name":"musicstream-sdk","version":"4.1.0","keywords":["youtube-music","music","sdk","streaming","audio","search","lyrics","synced-lyrics","lrc","podcast","rss","download","youtube","youtube-url","music-api","music-streaming","music-player","music-downloader","music-bot","discord-bot","discord-music","discord-music-bot","pcm","innertube","fingerprint","acoustid","shazam","audio-identification","yt-dlp","spotify","radio","queue","no-api-key","typescript","node-music"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@4.1.0","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"8fd4fd17901f27c39e72522805e5188cc3fe7c38","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-4.1.0.tgz","fileCount":6,"integrity":"sha512-82zXPYFNPemw//7Db1pFHMqsEqvjFx0dQgVO3ZwAdrWjYBKnUjk5OqzsaWqyj68BUXMQycQsw260tGzdkiCX/w==","signatures":[{"sig":"MEUCIQC0exId6Yq+oDsKgIUfYt867Qdikg6igmw60WYTmrYgVwIgEtaz2SnOlKFNTVjXQDOm7uyHDJkYcjkEQNIkFoMXqLg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":246980},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"17ee5fd355dac7c8c0e0a887d538c7cbf23605e5","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.9.7","description":"Music SDK for Node.js — search, stream, lyrics, podcasts, download. Powered by YouTube Music. No API keys required.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.3.6","rss-parser":"^3.13.0","youtubei.js":"^17.0.1","@unimusic/chromaprint":"^0.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^22.19.17","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_4.1.0_1777558340327_0.872507172911372","host":"s3://npm-registry-packages-npm-production"}},"4.2.0":{"name":"musicstream-sdk","version":"4.2.0","keywords":["youtube-music","music","sdk","streaming","audio","search","lyrics","synced-lyrics","lrc","podcast","rss","download","youtube","youtube-url","music-api","music-streaming","music-player","music-downloader","music-bot","discord-bot","discord-music","discord-music-bot","pcm","innertube","fingerprint","acoustid","shazam","audio-identification","yt-dlp","spotify","radio","queue","no-api-key","typescript","node-music"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@4.2.0","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"996d9fef6a47c3b4d4d723c19057759e38047ffd","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-4.2.0.tgz","fileCount":6,"integrity":"sha512-hs3wD0lv1OMfsSCILig7I+tJw7Bdlred2xnU0EPKFf3wQrr63mUYqNUgyE1jKAOQXUEOU2hZrFrHC3oMO1Fekw==","signatures":[{"sig":"MEYCIQCKcdH+SnXVwtTvuLtr1U79+eIFbEyK9CrcjzvA8wz6rAIhAImkEsVxCeYBsYwBz8CK/GGD2J1Qk0sFr/vz1obRUNL+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":308855},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"ce4cf8cf73ac9a3e9a33d44affcf2edbd47a1e54","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.9.7","description":"Music SDK for Node.js — search, stream, lyrics, podcasts, download. Powered by YouTube Music. No API keys required.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.3.6","rss-parser":"^3.13.0","youtubei.js":"^17.0.1","@unimusic/chromaprint":"^0.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^22.19.17","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_4.2.0_1777564743835_0.19971920381956476","host":"s3://npm-registry-packages-npm-production"}},"4.2.1":{"name":"musicstream-sdk","version":"4.2.1","keywords":["youtube-music","music","sdk","streaming","audio","search","lyrics","synced-lyrics","word-by-word-lyrics","word-level-lyrics","karaoke","lrc","ttml","lrclib","betterlyrics","kugou","simpmusic","lyrics-provider","lyrics-api","podcast","rss","download","youtube","youtube-url","music-api","music-streaming","music-player","music-downloader","music-bot","discord-bot","discord-music","discord-music-bot","pcm","innertube","youtubei","potoken","multi-client","anti-ban","rate-limiter","proxy","fingerprint","chromaprint","acoustid","shazam","songrec","audio-identification","yt-dlp","spotify","radio","queue","no-api-key","typescript","node-music","node22"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@4.2.1","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"d16addc06b0011261d44eeb03d220a94d87a94f6","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-4.2.1.tgz","fileCount":6,"integrity":"sha512-OYN6pjtWNssPPsVbTvCwLYhSUwzEms0w3ZqDxqReNC7gWpy9THa8zFpY4N2Dd/qlB78KfAI0qK2fUrRT4L1M9w==","signatures":[{"sig":"MEUCICb0Ty0ug7xXqLvIJ71WboqXpNSaaRyhQdstsmepIZoTAiEAngsIg2RpWIXl3PLbfwHNW3GjAjUFk7Jz2y/BnK4SjTI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":309187},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"efcf6951f63d151a91d23295a6afb6b271e388b5","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.9.7","description":"Music SDK for Node.js — search, stream, lyrics, podcasts, download. Powered by YouTube Music. No API keys required.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.3.6","rss-parser":"^3.13.0","youtubei.js":"^17.0.1","@unimusic/chromaprint":"^0.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^22.19.17","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_4.2.1_1777565002669_0.8288351091600636","host":"s3://npm-registry-packages-npm-production"}},"4.2.2":{"name":"musicstream-sdk","version":"4.2.2","keywords":["youtube-music","music","sdk","streaming","audio","search","lyrics","synced-lyrics","word-by-word-lyrics","word-level-lyrics","karaoke","lrc","ttml","lrclib","betterlyrics","kugou","simpmusic","lyrics-provider","lyrics-api","podcast","rss","download","youtube","youtube-url","music-api","music-streaming","music-player","music-downloader","music-bot","discord-bot","discord-music","discord-music-bot","pcm","innertube","youtubei","potoken","multi-client","anti-ban","rate-limiter","proxy","fingerprint","chromaprint","acoustid","shazam","songrec","audio-identification","yt-dlp","spotify","radio","queue","no-api-key","typescript","node-music","node22"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@4.2.2","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"7aa3d01db6938206d9fb654e457b1dba58cb0e2b","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-4.2.2.tgz","fileCount":6,"integrity":"sha512-5IEY6fp2IhfjEV94Ow/ZPxmrFjRNyjdmxvBr62n+cS61wsA8+N5Aft7h1bz/5WzK8exAhrcO5vJlfhuy89iyiA==","signatures":[{"sig":"MEQCID74wI/hjc6Jld0n4kuFjC8F0GmBjoZ7UezB40nGmZI3AiBgDOP5Ux/UiPOAGCOrqG9CnFysBoda2Ei2eRp6QZvEbg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":314117},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"29245c8b2e1234d16ac41d171dd4b0118a02b317","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.9.7","description":"Music SDK for Node.js — search, stream, lyrics, podcasts, download. Powered by YouTube Music. No API keys required.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.3.6","rss-parser":"^3.13.0","youtubei.js":"^17.0.1","@unimusic/chromaprint":"^0.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^22.19.17","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_4.2.2_1777658108449_0.34337581360843905","host":"s3://npm-registry-packages-npm-production"}},"4.3.1":{"name":"musicstream-sdk","version":"4.3.1","keywords":["youtube-music","music","sdk","streaming","audio","search","lyrics","synced-lyrics","word-by-word-lyrics","word-level-lyrics","karaoke","lrc","ttml","lrclib","betterlyrics","kugou","simpmusic","lyrics-provider","lyrics-api","podcast","rss","download","youtube","youtube-url","music-api","music-streaming","music-player","music-downloader","music-bot","discord-bot","discord-music","discord-music-bot","pcm","innertube","youtubei","potoken","multi-client","anti-ban","rate-limiter","proxy","fingerprint","chromaprint","acoustid","shazam","songrec","audio-identification","yt-dlp","spotify","radio","queue","no-api-key","typescript","node-music","node22"],"author":{"name":"capitalcurv8"},"license":"MIT","_id":"musicstream-sdk@4.3.1","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"dist":{"shasum":"d9b799aeb25c4d85f56a98afbb74202d4405b868","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-4.3.1.tgz","fileCount":6,"integrity":"sha512-hgO2BlYQ9RqzUIUWzYV7f7g9TmWRRPTDUmOUvnnxDc58qNlb+Dok3dZAKd88TsZrg90zz0G3Z9fnQ97m3Lfhfw==","signatures":[{"sig":"MEUCIEhQbPJKs6Eu5TIqEPKo3o8gLgPGZUtRrZO7GZsBBs97AiEAzw/nlt+aX5U6a81/uL5iW85L2EZtL/kZ3UFkSRhxBWU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":354836},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"dc183116fb7f2b3ec588c69226d7e488f3c6346f","scripts":{"play":"tsx playground/download-test.ts","test":"vitest run tests/unit --reporter=verbose","build":"tsup","test:all":"vitest run --reporter=verbose","typecheck":"tsc --noEmit","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose"},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"_npmVersion":"10.9.7","description":"Music SDK for Node.js — search, stream, lyrics, podcasts, download. Powered by YouTube Music. No API keys required.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.3.6","rss-parser":"^3.13.0","essentia.js":"^0.1.3","youtubei.js":"^17.0.1","@unimusic/chromaprint":"^0.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.0","devDependencies":{"tsx":"^4.21.0","pnpm":"^10.0.0","tsup":"^8.0.0","vitest":"^3.2.4","typescript":"^5.3.0","@types/node":"^22.19.17","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/musicstream-sdk_4.3.1_1777806718823_0.28885530068249055","host":"s3://npm-registry-packages-npm-production"}},"4.4.0":{"name":"musicstream-sdk","version":"4.4.0","description":"Music SDK for Node.js — search, stream, lyrics, podcasts, download. Powered by YouTube Music. No API keys required.","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"engines":{"node":">=22"},"scripts":{"build":"tsup","typecheck":"tsc --noEmit","test":"vitest run tests/unit --reporter=verbose","test:watch":"vitest tests/unit","test:coverage":"vitest run tests/unit --coverage","test:integration":"RUN_INTEGRATION=1 vitest run --config vitest.integration.config.ts --reporter=verbose","test:all":"vitest run --reporter=verbose","play":"tsx playground/download-test.ts"},"keywords":["youtube-music","music","sdk","streaming","audio","search","lyrics","synced-lyrics","word-by-word-lyrics","word-level-lyrics","karaoke","lrc","ttml","lrclib","betterlyrics","kugou","simpmusic","lyrics-provider","lyrics-api","podcast","rss","download","youtube","youtube-url","music-api","music-streaming","music-player","music-downloader","music-bot","discord-bot","discord-music","discord-music-bot","pcm","innertube","youtubei","potoken","multi-client","anti-ban","rate-limiter","proxy","fingerprint","chromaprint","acoustid","shazam","songrec","audio-identification","yt-dlp","spotify","radio","queue","no-api-key","typescript","node-music","node22"],"author":{"name":"capitalcurv8"},"license":"MIT","sideEffects":false,"packageManager":"pnpm@10.33.0","dependencies":{"@unimusic/chromaprint":"^0.1.4","essentia.js":"^0.1.3","rss-parser":"^3.13.0","youtubei.js":"^17.0.1","zod":"^4.3.6"},"devDependencies":{"@types/node":"^22.19.17","@vitest/coverage-v8":"^3.2.4","pnpm":"^10.0.0","tsup":"^8.0.0","tsx":"^4.21.0","typescript":"^5.3.0","vitest":"^3.2.4"},"_id":"musicstream-sdk@4.4.0","gitHead":"94c1203cf995c6ebc95a4433f32177c38555e94e","_nodeVersion":"22.22.3","_npmVersion":"10.9.8","dist":{"integrity":"sha512-LsfQSEQ7gpEbZwCYD7tL5Ig6bLS8DpShE4KUEF9ycnyd47iNKvnU8jwxA2AeC2xIwpAPa8d4ZZNkiLOSeH+6xA==","shasum":"4cadc95cf0b1f4e41b544732dc6c8cb1634936d2","tarball":"https://registry.npmjs.org/musicstream-sdk/-/musicstream-sdk-4.4.0.tgz","fileCount":6,"unpackedSize":356222,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDFmmWJts1GZZllt4AmWe1azrRyC02ZU4BvCgTVxS5hrQIhAM+v3jbnm03XaxhN2S6yp+tj1BPbawOOF7iX5LQEaQFz"}]},"_npmUser":{"name":"addynoven","email":"dmcbaditya@gmail.com"},"directories":{},"maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/musicstream-sdk_4.4.0_1780096173902_0.4826075462211119"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-19T15:17:55.556Z","modified":"2026-05-29T23:09:34.151Z","0.2.0":"2026-04-19T15:17:55.825Z","0.2.2":"2026-04-19T16:21:20.422Z","0.2.3":"2026-04-19T16:28:04.140Z","0.2.4":"2026-04-19T16:32:24.094Z","0.3.0":"2026-04-21T17:58:08.604Z","0.3.1":"2026-04-21T19:58:42.237Z","0.3.2":"2026-04-21T19:59:20.951Z","0.3.3":"2026-04-21T20:48:28.492Z","0.3.4":"2026-04-21T21:04:49.256Z","0.3.5":"2026-04-21T21:23:26.833Z","0.3.6":"2026-04-21T21:29:13.736Z","0.4.0":"2026-04-23T23:12:38.078Z","0.5.0":"2026-04-24T18:01:41.370Z","0.5.1":"2026-04-24T18:50:24.747Z","0.5.2":"2026-04-24T19:17:04.974Z","0.6.0":"2026-04-24T20:34:49.733Z","1.0.0":"2026-04-24T21:41:15.250Z","1.0.1":"2026-04-28T11:39:45.776Z","1.0.2":"2026-04-28T18:26:53.972Z","1.1.0":"2026-04-29T19:07:11.149Z","2.0.0":"2026-04-29T19:08:05.695Z","2.0.1":"2026-04-29T19:15:22.113Z","2.0.2":"2026-04-29T19:23:25.266Z","2.0.3":"2026-04-29T19:29:23.118Z","2.0.4":"2026-04-29T19:32:39.310Z","2.0.5":"2026-04-29T19:37:10.809Z","3.0.0":"2026-04-29T20:12:23.012Z","3.0.1":"2026-04-29T20:20:40.527Z","4.0.0":"2026-04-30T11:55:41.736Z","4.1.0":"2026-04-30T14:12:20.505Z","4.2.0":"2026-04-30T15:59:03.982Z","4.2.1":"2026-04-30T16:03:22.840Z","4.2.2":"2026-05-01T17:55:08.601Z","4.3.1":"2026-05-03T11:11:58.974Z","4.4.0":"2026-05-29T23:09:34.035Z"},"author":{"name":"capitalcurv8"},"license":"MIT","keywords":["youtube-music","music","sdk","streaming","audio","search","lyrics","synced-lyrics","word-by-word-lyrics","word-level-lyrics","karaoke","lrc","ttml","lrclib","betterlyrics","kugou","simpmusic","lyrics-provider","lyrics-api","podcast","rss","download","youtube","youtube-url","music-api","music-streaming","music-player","music-downloader","music-bot","discord-bot","discord-music","discord-music-bot","pcm","innertube","youtubei","potoken","multi-client","anti-ban","rate-limiter","proxy","fingerprint","chromaprint","acoustid","shazam","songrec","audio-identification","yt-dlp","spotify","radio","queue","no-api-key","typescript","node-music","node22"],"description":"Music SDK for Node.js — search, stream, lyrics, podcasts, download. Powered by YouTube Music. No API keys required.","maintainers":[{"name":"addynoven","email":"dmcbaditya@gmail.com"}],"readme":"# musicstream-sdk\n\n[![npm](https://img.shields.io/npm/v/musicstream-sdk)](https://www.npmjs.com/package/musicstream-sdk)\n[![license](https://img.shields.io/npm/l/musicstream-sdk)](LICENSE)\n[![node](https://img.shields.io/node/v/musicstream-sdk)](package.json)\n\nMusic search, streaming, lyrics, download, and playback queue for Node.js.  \nPowered by YouTube Music — no API keys required to get started.\n\n```bash\nnpm install musicstream-sdk\n```\n\n> Requires [yt-dlp](https://github.com/yt-dlp/yt-dlp) on your PATH.\n\n---\n\n```ts\nimport { MusicKit } from 'musicstream-sdk'\n\nconst mk = new MusicKit()\nconst songs  = await mk.search('bohemian rhapsody', { filter: 'songs' })\nconst stream = await mk.getStream(songs[0].videoId)\nconst lyrics = await mk.getLyrics(songs[0].videoId)\n```\n\n---\n\n## Features\n\n**Search & Discovery**\n- **Search** — songs, albums, artists, playlists — typed return type per filter\n- **Autocomplete** — real-time search suggestions as you type\n- **Charts** — country-specific top charts\n- **Mood / genre playlists** — browse YouTube Music mood categories\n- **Home feed** — personalized sections (\"Trending\", \"New Releases\", \"Top Picks\", etc.)\n\n**Streaming**\n- **InnerTube multi-client fallback** — `YTMUSIC → ANDROID_VR → TVHTML5` automatic rotation when one client fails (geo block, cipher rotation, throttling)\n- **Pluggable PoToken** — accept a static `poToken` or async `getPoToken` callback for clients that need BotGuard tokens\n- **Playable stream URLs** — pre-signed, cached ~6 hours, auto-refreshed\n- **Quality control** — `high` / `low` quality per individual request\n- **Private-track aware** — detects `MUSIC_VIDEO_TYPE_PRIVATELY_OWNED_TRACK` (user-uploaded library tracks)\n- **Raw audio stream** — yt-dlp stdout as a Node.js Readable, zero decode overhead\n- **Raw PCM stream** — 48 kHz / 16-bit LE / stereo — drop straight into a Discord voice connection\n- **yt-dlp universal fallback** — final safety net when every InnerTube client fails\n\n**URL Resolution**\n- **Paste any URL, it just works** — YouTube (`youtube.com/watch`, `youtu.be`), YouTube Music (`music.youtube.com/watch`, `/browse`, `/playlist`, `/search`) — all resolve to the right ID automatically\n- **Spotify resolver** — converts a Spotify track URL to a `\"Title Artist\"` search query\n\n**Metadata & Lyrics**\n- **Track metadata** — title, artist, album, duration, thumbnails\n- **7-provider lyrics chain** — BetterLyrics, LRCLIB, SimpMusic, YouTube Music native, KuGou, lyrics.ovh, YouTube subtitles. First non-null wins.\n- **Real per-word timings** — Apple Music TTML `<span begin end>` from BetterLyrics, surfaced as `LyricLine.words[]` (no fake interpolation)\n- **User-configurable chain** — reorder, disable, add custom providers via config, runtime registration, or per-call override\n- **Provider attribution** — `Lyrics.source` reports which provider produced the result\n- **Multi-language coverage** — KuGou for Chinese music, YouTube subtitles as universal last-resort\n- **LRC utilities** — parse, seek to timestamp, offset, reserialize `.lrc` files\n\n**Browse**\n- **Artist pages** — top songs, albums, singles\n- **Album pages** — full track listing\n- **Playlist pages** — all songs with metadata\n- **Radio / seed stations** — generate a station from any track ID\n- **Related tracks** — \"you might also like\" recommendations\n- **Up-next suggestions** — YouTube's continuation queue for any track\n\n**Download & Identification**\n- **Download** — save audio as `opus` or `m4a` via yt-dlp, with per-chunk progress callback\n- **Audio identification** — fingerprint any local file via AcoustID + optional SongRec (Shazam)\n- **Podcast / RSS** — parse any RSS feed, full iTunes namespace, direct episode audio URLs\n\n**Infrastructure**\n- **Multi-source routing** — automatic best-source selection, configurable order, per-request override\n- **SQLite cache** — built on Node 22's `node:sqlite` (zero native deps), automatic TTL per data type\n- **Rate limiter + retry** — per-endpoint limits, exponential backoff, 429-aware\n- **Visitor-ID rotation + cookie auth + proxy** — full anti-ban toolkit (`undici.ProxyAgent`, persistent visitor-ID, Netscape cookies)\n- **Event system** — `beforeRequest`, `afterRequest`, `cacheHit`, `cacheMiss`, `rateLimited`, `retry`, `error`\n- **Custom sources** — implement `AudioSource` and register any platform with `mk.registerSource()`\n- **Custom lyrics providers** — implement `LyricsProvider` and register via config or `mk.registerLyricsProvider()`\n- **Zod validation** — schemas + `safeParse` helpers for all core models\n- **Full TypeScript** — strict types, typed search overloads, typed events\n- **Playback queue** — in-memory queue with repeat modes (`off`/`one`/`all`), shuffle, history, reorder\n\n---\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n- [Production Setup](#production-setup)\n- [API Reference](#api-reference)\n  - [Search](#search)\n  - [Streaming](#streaming)\n  - [Metadata](#metadata)\n  - [Lyrics](#lyrics)\n  - [Browse](#browse)\n  - [Download](#download)\n  - [Queue](#queue)\n  - [Podcast](#podcast)\n  - [Audio Identification](#audio-identification)\n  - [Events](#events)\n- [Configuration](#configuration)\n  - [`.env` template](#env--recommended-template)\n  - [Wiring `.env` → `MusicKitConfig`](#wiring-env--musickitconfig)\n  - [Full option reference](#full-option-reference)\n  - [External binaries (PATH dependencies)](#external-binaries-path-dependencies)\n- [Custom Sources](#custom-sources)\n- [Custom Lyrics Providers](#lyrics)\n- [Validation](#validation)\n- [Error Handling](#error-handling)\n- [Utilities](#utilities)\n  - [URL Resolver](#url-resolver)\n- [Data Models](#data-models)\n- [Requirements](#requirements)\n\n---\n\n## Installation\n\n```bash\nnpm install musicstream-sdk\n# pnpm\npnpm add musicstream-sdk\n```\n\n---\n\n## Quick Start\n\n```ts\nimport { MusicKit } from 'musicstream-sdk'\n\nconst mk = new MusicKit()\n\nconst songs = await mk.search('bohemian rhapsody', { filter: 'songs' })\nconst song  = songs[0]\n\nconst stream = await mk.getStream(song.videoId)\nconsole.log(stream.url)      // playable URL\nconsole.log(stream.codec)    // \"opus\" | \"mp4a\"\nconsole.log(stream.bitrate)  // 320000\n\nconst lyrics = await mk.getLyrics(song.videoId)\nconsole.log(lyrics?.plain)\nconsole.log(lyrics?.synced)  // LyricLine[] | null\n```\n\n---\n\n## Production Setup\n\nFor high-traffic apps, set both credentials to avoid rate limits:\n\n```ts\nconst mk = new MusicKit({\n  youtubeApiKey: process.env.YT_API_KEY,   // YouTube Data API v3 — for search\n  cookiesPath:   process.env.COOKIES_PATH, // cookies.txt — for streams\n})\n```\n\n| Credential | Purpose | How to get |\n|---|---|---|\n| `youtubeApiKey` | YouTube Data API v3 for search | [Google Cloud Console](https://console.cloud.google.com) → YouTube Data API v3 |\n| `cookiesPath` | Logged-in yt-dlp session for streams | `yt-dlp --cookies-from-browser chrome --cookies cookies.txt --skip-download \"https://youtube.com\"` |\n\nWithout either, the SDK falls back to anonymous InnerTube + yt-dlp (fine for personal use).\n\n---\n\n## API Reference\n\n### Search\n\n```ts\n// Autocomplete\nconst hints = await mk.autocomplete('bohemian')  // string[]\n\n// All types\nconst results = await mk.search('queen')\n// results.songs · results.albums · results.artists · results.playlists\n\n// Typed by filter — TypeScript infers the return type\nconst songs     = await mk.search('bohemian rhapsody', { filter: 'songs' })    // Song[]\nconst albums    = await mk.search('a night at the opera', { filter: 'albums' }) // Album[]\nconst artists   = await mk.search('queen', { filter: 'artists' })               // Artist[]\nconst playlists = await mk.search('rock classics', { filter: 'playlists' })     // Playlist[]\n\n// Limit + source override\nconst top5 = await mk.search('shakira', { filter: 'songs', limit: 5 })\nconst top5 = await mk.search('shakira', { filter: 'songs', limit: 5 })\n\n// Spotify URL → search query → results\nimport { resolveSpotifyUrl } from 'musicstream-sdk'\nconst query = await resolveSpotifyUrl('https://open.spotify.com/track/...')\nif (query) await mk.search(query, { filter: 'songs' })\n```\n\n---\n\n### Streaming\n\n```ts\n// Playable URL (cached ~6h)\nconst stream = await mk.getStream(songId)\n// stream.url · stream.codec · stream.bitrate · stream.expiresAt · stream.loudnessDb?\n\n// Quality\nconst hq = await mk.getStream(songId, { quality: 'high' })  // default\nconst lq = await mk.getStream(songId, { quality: 'low' })\n\n// Metadata + stream together\nconst track = await mk.getTrack(songId)  // AudioTrack = Song + StreamingData\n\n// Raw audio bytes (yt-dlp stdout, no decode)\nconst readable = await mk.streamAudio(videoId)\nreadable.pipe(destination)\n\n// Raw PCM — 48 kHz, 16-bit LE, stereo\nconst pcm = await mk.streamPCM(videoId)\npcm.pipe(discordVoiceConnection)\n\n// Check if a cached URL is still valid\nimport { isStreamExpired } from 'musicstream-sdk'\nif (isStreamExpired(cachedStream)) {\n  const fresh = await mk.getStream(songId)\n}\n```\n\n---\n\n### Metadata\n\n```ts\nconst song = await mk.getMetadata(songId)\n// song.title · song.artist · song.album · song.duration · song.thumbnails\n\nimport { getBestThumbnail } from 'musicstream-sdk'\nconst thumb = getBestThumbnail(song.thumbnails, 300)  // closest to 300px\n```\n\n---\n\n### Lyrics\n\nReturns `Lyrics | null`. `synced` is `null` when only plain text is available. `source` reports which provider won.\n\n```ts\nconst lyrics = await mk.getLyrics(songId)\n\nlyrics?.plain          // full plain text string\nlyrics?.synced         // LyricLine[] | null\nlyrics?.source         // 'better-lyrics' | 'lrclib' | ... — provider that won\n\n// LyricLine: { time: number, text: string, words?: WordTime[] }\n// WordTime:  { time: number, duration?: number, text: string }\n//\n// Per-word timings (words[]) are populated only by BetterLyrics — Apple Music TTML\n// with real <span begin end> timestamps. Other providers leave words undefined.\n```\n\n#### Provider chain — default\n\n```\n1. BetterLyrics       (lyrics-api.boidu.dev)        — Apple Music TTML, real word timings\n2. LRCLIB             (lrclib.net)                  — synced lyrics, broad coverage\n3. SimpMusic          (api-lyrics.simpmusic.org)    — synced, videoId fallback\n4. YouTube Music      (yt.music.getLyrics)          — official major-label, plain text\n5. KuGou              (lyrics.kugou.com)            — Chinese music coverage\n6. lyrics.ovh         (lyrics.ovh)                  — plain text fallback\n7. YouTube subtitles  (info.getTranscript)          — auto-captions, last resort\n```\n\n#### Customizing the chain\n\n```ts\n// Config-time — replace the default chain entirely\nconst mk = new MusicKit({\n  lyrics: {\n    providers: ['lrclib', 'simpmusic', 'lyrics-ovh'],   // synced-focused\n  },\n})\n\n// Runtime — register custom or built-in providers\nmk.registerLyricsProvider(myGeniusProvider)             // append\nmk.registerLyricsProvider(myProvider, 'first')          // prepend\nmk.registerLyricsProvider(myProvider, 'before:lrclib')  // ordered insert\n\n// Per-call override — bypass the default chain for one request\nconst synced = await mk.getLyrics(id, { providers: ['lrclib', 'kugou'] })\nconst wordLevel = await mk.getLyrics(id, { providers: ['better-lyrics'] })\n```\n\n#### Custom providers\n\nImplement the `LyricsProvider` interface for any source:\n\n```ts\nimport type { LyricsProvider, LyricsProviderName, Lyrics } from 'musicstream-sdk'\n\nconst myProvider: LyricsProvider = {\n  name: 'my-provider' as LyricsProviderName,  // pick one of the built-in names or extend the union\n  async fetch(artist, title, duration?, fetchFn?, videoId?): Promise<Lyrics | null> {\n    // Return synced/plain lyrics, or null if you can't find them.\n    return null\n  },\n}\n\nmk.registerLyricsProvider(myProvider, 'first')\n```\n\n#### LRC utilities\n\n```ts\nimport { parseLrc, getActiveLine, getActiveLineIndex, formatTimestamp, offsetLrc, serializeLrc } from 'musicstream-sdk'\n\nconst lines  = parseLrc(rawLrcString)           // LyricLine[]\nconst active = getActiveLine(lines, 42.5)        // current line at 42.5s\nconst idx    = getActiveLineIndex(lines, 42.5)   // index (-1 if before start)\nconst ts     = formatTimestamp(42.5)             // \"[00:42.50]\"\nconst fixed  = offsetLrc(lines, 1.0)             // shift all timestamps by +1s\nconst lrc    = serializeLrc(lines)               // back to .lrc string\n```\n\n---\n\n### Browse\n\n```ts\n// Home feed\nconst home = await mk.getHome()\nconst home = await mk.getHome({ language: 'ja' })  // locale-aware\n\nfor (const section of home) {\n  console.log(section.title)  // \"Trending Songs\", \"New Releases\", etc.\n  console.log(section.items)  // (Song | Album | Playlist)[]\n}\n\n\n// Artist / album / playlist pages\nconst artist   = await mk.getArtist(channelId)   // songs · albums · singles\nconst album    = await mk.getAlbum(browseId)      // tracks[]\nconst playlist = await mk.getPlaylist(playlistId) // songs[]\n\n// Suggestions + radio\nconst upNext = await mk.getSuggestions(songId)  // YouTube recommendations\nconst radio  = await mk.getRadio(songId)        // seed-based station\nconst related = await mk.getRelated(videoId)    // \"you might also like\"\n\n// Charts\nconst charts = await mk.getCharts()\nconst us     = await mk.getCharts({ country: 'US' })\n\n// Mood / genre (YouTube Music)\nconst categories = await mk.getMoodCategories()\n// [{ title: 'Feeling Happy', params: '...' }, ...]\nconst sections = await mk.getMoodPlaylists(categories[0].params)\n\n```\n\n---\n\n### Download\n\n```ts\nawait mk.download(videoId, {\n  path:   './downloads',\n  format: 'opus',            // 'opus' | 'm4a'  (default: 'opus')\n  onProgress: (p) => process.stdout.write(`\\r${p.percent.toFixed(0)}%`),\n})\n// Saved as: <title> (<artist>).opus\n```\n\n---\n\n### Queue\n\n```ts\nimport { Queue } from 'musicstream-sdk'\nimport type { RepeatMode } from 'musicstream-sdk'\n\nconst queue = new Queue<Song>()\n\nqueue.add(song)           // append to end\nqueue.playNext(song)      // insert at front\n\nqueue.next()              // advance — returns Song | null\nqueue.previous()          // step back through history\n\nqueue.current             // Song | null\nqueue.upcoming            // Song[] remaining\nqueue.history             // Song[] played\nqueue.size                // upcoming count\nqueue.isEmpty             // boolean\n\nqueue.repeat = 'off'      // 'off' | 'one' | 'all'\nqueue.shuffle()           // Fisher-Yates in-place\n\nqueue.move(2, 0)          // reorder: move index 2 to front\nqueue.skipTo(3)           // drop everything before index 3\nqueue.remove(1)           // remove upcoming[1]\nqueue.clear()             // wipe all\n```\n\n---\n\n### Podcast\n\n```ts\nimport { PodcastClient } from 'musicstream-sdk'\n\n// Via MusicKit\nconst podcast = await mk.getPodcast('https://feeds.example.com/podcast.rss')\n\n// Or standalone\nconst client  = new PodcastClient()\nconst podcast = await client.getFeed('https://...')\n\npodcast.title · podcast.author · podcast.thumbnails · podcast.episodes\n\nconst ep = podcast.episodes[0]\nep.title · ep.url · ep.duration · ep.publishedAt\nep.season · ep.episode · ep.explicit · ep.thumbnails\n// ep.url is the direct audio URL — pipe to any player\n```\n\n---\n\n### Audio Identification\n\nIdentify a song from a local audio file using AcoustID fingerprinting + optional SongRec.\n\n```ts\nconst mk = new MusicKit({\n  identify: {\n    acoustidApiKey: process.env.ACOUSTID_KEY,  // free at acoustid.org\n    songrecBin: '/usr/bin/songrec',            // optional Shazam-backed recognizer\n  },\n})\n\nconst song = await mk.identify('./unknown-track.mp3')  // Song | null\n// Tries SongRec first (faster), then AcoustID fingerprint.\n// Returns a full Song with videoId on match.\n```\n\nRequires `fpcalc` on PATH (from [Chromaprint](https://acoustid.org/chromaprint)).\n\n---\n\n### Events\n\n```ts\nmk.on('beforeRequest',  (req) => {})\nmk.on('afterRequest',   (req, durationMs, statusCode) => {})\nmk.on('cacheHit',       (key, ttl) => {})\nmk.on('cacheMiss',      (key) => {})\nmk.on('rateLimited',    (endpoint, waitMs) => {})\nmk.on('retry',          (endpoint, attempt, reason) => {})\nmk.on('error',          (err) => {})\nmk.off('error', handler)\nmk.once('error', handler)\n```\n\n---\n\n## Configuration\n\nAll options are optional. The SDK doesn't read environment variables directly — you pass them in via `MusicKitConfig`. The `.env` template below is the canonical convention; map them as shown in the example.\n\n### `.env` — recommended template\n\n```bash\n# ── Credentials (recommended for production) ──────────────────────────────\nYT_API_KEY=               # YouTube Data API v3 — better search + lower rate limits\nCOOKIES_PATH=             # Netscape cookies.txt for yt-dlp + InnerTube auth\n                          # Export with: yt-dlp --cookies-from-browser chrome --cookies cookies.txt\n                          #              --skip-download \"https://youtube.com\"\n\n# ── Logging ───────────────────────────────────────────────────────────────\nLOG_LEVEL=info            # silent | error | warn | info | debug\n\n# ── YouTube Music locale ─────────────────────────────────────────────────\nYT_LANGUAGE=              # BCP-47 language tag (en, hi, ja, ta, ...)\nYT_LOCATION=              # ISO 3166-1 alpha-2 country code (US, IN, JP, ...)\n\n# ── Network ──────────────────────────────────────────────────────────────\nPROXY=                    # http://user:pass@host:port — applied to InnerTube + lyrics + AcoustID + yt-dlp\nUSER_AGENT=               # override the User-Agent for outbound external API calls\nVISITOR_ID=               # pin a YouTube X-Goog-Visitor-Id (rotated automatically if unset)\n\n# ── Rate limiting (ms between requests per bucket) ───────────────────────\nRATE_LIMIT_SEARCH=        # default ~ unrestricted\nRATE_LIMIT_BROWSE=        # default ~ unrestricted\nRATE_LIMIT_STREAM=        # default ~ unrestricted\nRATE_LIMIT_AUTOCOMPLETE=  # default ~ unrestricted\n\n# ── PoToken (advanced — only needed for some web/age-restricted content) ─\nPO_TOKEN=                 # static BotGuard token (paste from a logged-in session)\n                          # OR provide a getPoToken callback in code (see below)\n\n# ── Audio identification (mk.identify) ───────────────────────────────────\nACOUSTID_KEY=             # free key at acoustid.org\nSONGREC_BIN=              # optional /usr/bin/songrec — Shazam-backed fallback\n```\n\n### Wiring `.env` → `MusicKitConfig`\n\n```ts\nimport { MusicKit } from 'musicstream-sdk'\n\nconst mk = await MusicKit.create({\n  // Logging\n  logLevel: process.env.LOG_LEVEL as any ?? 'info',\n  logHandler: (level, msg, meta) => myLogger.log(level, msg, meta),\n\n  // Credentials\n  youtubeApiKey: process.env.YT_API_KEY,\n  cookiesPath:   process.env.COOKIES_PATH,\n\n  // Locale\n  language: process.env.YT_LANGUAGE,\n  location: process.env.YT_LOCATION,\n\n  // Network\n  proxy:     process.env.PROXY,\n  userAgent: process.env.USER_AGENT,\n  visitorId: process.env.VISITOR_ID,\n\n  // Rate limiting (ms between requests per bucket)\n  rateLimit: {\n    search:       process.env.RATE_LIMIT_SEARCH       ? Number(process.env.RATE_LIMIT_SEARCH)       : undefined,\n    browse:       process.env.RATE_LIMIT_BROWSE       ? Number(process.env.RATE_LIMIT_BROWSE)       : undefined,\n    stream:       process.env.RATE_LIMIT_STREAM       ? Number(process.env.RATE_LIMIT_STREAM)       : undefined,\n    autocomplete: process.env.RATE_LIMIT_AUTOCOMPLETE ? Number(process.env.RATE_LIMIT_AUTOCOMPLETE) : undefined,\n  },\n  minRequestGap: 100,\n\n  // Retry\n  maxRetries: 3,\n  backoffBase: 1000,\n  backoffMax: 30000,\n\n  // Cache (SQLite)\n  cache: {\n    enabled: true,\n    dir: './cache',\n    ttl: { stream: 21600, search: 300, home: 28800, artist: 3600 },\n  },\n\n  // PoToken (static or callback — getPoToken wins if both set)\n  poToken: process.env.PO_TOKEN,\n  getPoToken: async (videoId, client) => {\n    // Plug your own generator (puppeteer, external service, etc.)\n    return null\n  },\n\n  // Audio identification\n  identify: process.env.ACOUSTID_KEY ? {\n    acoustidApiKey: process.env.ACOUSTID_KEY,\n    songrecBin:     process.env.SONGREC_BIN,\n  } : undefined,\n\n  // Source routing — default 'best' picks the right source automatically\n  sourceOrder: 'best',\n\n  // Lyrics provider chain — defaults to all 7, in quality order\n  lyrics: {\n    providers: ['better-lyrics', 'lrclib', 'simpmusic', 'youtube-native', 'kugou', 'lyrics-ovh', 'youtube-subtitle'],\n  },\n})\n```\n\n### Full option reference\n\n| Option | Type | Default | What it controls |\n|---|---|---|---|\n| `logLevel` | `'silent' \\| 'error' \\| 'warn' \\| 'info' \\| 'debug'` | `'info'` | Verbosity |\n| `logHandler` | `(level, msg, meta) => void` | `console` | Custom log sink |\n| `youtubeApiKey` | `string` | — | YouTube Data API v3 — improved search, lower rate limits |\n| `cookiesPath` | `string` | — | Path to Netscape `cookies.txt` — passed to InnerTube + yt-dlp |\n| `language` | `string` | — | BCP-47 language for YT Music (e.g. `'hi'`, `'ja'`) |\n| `location` | `string` | — | ISO country for YT Music (e.g. `'IN'`, `'US'`) |\n| `proxy` | `string` | — | Proxy URL routed to InnerTube + LRCLIB + lyrics.ovh + AcoustID + yt-dlp |\n| `userAgent` | `string` | youtubei.js default | UA for external API calls (LRCLIB, AcoustID, etc.) |\n| `visitorId` | `string` | auto-generated, cached 30 days | Pin a YouTube `X-Goog-Visitor-Id` |\n| `rateLimit.{search,browse,stream,autocomplete}` | `number` (ms) | unrestricted | Min ms between requests per bucket |\n| `minRequestGap` | `number` (ms) | `100` | Hard floor between any two outbound requests |\n| `maxRetries` | `number` | `3` | Per-request retry count |\n| `backoffBase` | `number` (ms) | `1000` | Initial retry backoff |\n| `backoffMax` | `number` (ms) | `30000` | Backoff ceiling |\n| `cache.enabled` | `boolean` | `true` | SQLite cache on/off |\n| `cache.dir` | `string` | `~/.musicstream-sdk` | Cache directory |\n| `cache.ttl.{stream,search,home,artist}` | `number` (sec) | `21600 / 300 / 28800 / 3600` | Cache TTL per data type |\n| `sourceOrder` | `'best' \\| SourceName[]` | `'best'` | Source-routing preference |\n| `poToken` | `string` | — | Static BotGuard token for InnerTube web clients |\n| `getPoToken` | `(videoId, client) => Promise<string \\| null>` | — | Async PoToken generator (overrides static) |\n| `lyrics.providers` | `Array<LyricsProviderName \\| LyricsProvider>` | all 7 in quality order | Custom lyrics chain |\n| `identify.acoustidApiKey` | `string` | — | Required for `mk.identify()` |\n| `identify.songrecBin` | `string` | — | Optional path to SongRec for Shazam fallback |\n\n### External binaries (PATH dependencies)\n\nThe SDK isn't all-Node — some features call out to system binaries:\n\n| Binary | Required for | Where to get |\n|---|---|---|\n| `yt-dlp` | `getStream` (yt-dlp fallback path), `download`, `streamAudio`, `streamPCM` | [yt-dlp.org](https://github.com/yt-dlp/yt-dlp) |\n| `fpcalc` | `identify` (Chromaprint fingerprint) | [Chromaprint](https://acoustid.org/chromaprint) |\n| `songrec` | `identify` — optional Shazam fallback | [marin-m/SongRec](https://github.com/marin-m/SongRec) |\n\n---\n\n## Custom Sources\n\nImplement `AudioSource` to add any platform:\n\n```ts\nimport type { Song, Album, Artist, Playlist, Section, StreamingData, SearchResults } from 'musicstream-sdk'\n\nclass MySource {\n  readonly name = 'my-source'\n  canHandle(query: string) { return query.startsWith('mysrc:') }\n\n  async search(query: string): Promise<SearchResults> { /* ... */ }\n  async getStream(id: string, quality: 'high' | 'low'): Promise<StreamingData> { /* ... */ }\n  async getMetadata(id: string): Promise<Song> { /* ... */ }\n\n  // Optional\n  async getAlbum?(id: string): Promise<Album> { /* ... */ }\n  async getArtist?(id: string): Promise<Artist> { /* ... */ }\n  async getPlaylist?(id: string): Promise<Playlist> { /* ... */ }\n  async getRadio?(id: string): Promise<Song[]> { /* ... */ }\n  async getHome?(language?: string): Promise<Section[]> { /* ... */ }\n}\n\nmk.registerSource(new MySource())\n// Registered sources take priority over built-in sources.\n```\n\n---\n\n## Validation\n\nZod schemas and safe-parse helpers for all core models:\n\n```ts\nimport {\n  SongSchema, AlbumSchema, ArtistSchema, PlaylistSchema, ThumbnailSchema,\n  safeParseSong, safeParseAlbum, safeParseArtist, safeParsePlaylist,\n} from 'musicstream-sdk'\n\nSongSchema.parse(data)     // throws ZodError if invalid\nsafeParseSong(data)        // returns Song | null — never throws\nsafeParseAlbum(data)       // Album | null\nsafeParseArtist(data)      // Artist | null\nsafeParsePlaylist(data)    // Playlist | null\n```\n\n---\n\n## Error Handling\n\nAll errors extend `MusicKitBaseError` and carry a `code` string.\n\n```ts\nimport {\n  NotFoundError, RateLimitError, NetworkError,\n  ValidationError, StreamError, HttpError, NonRetryableError,\n} from 'musicstream-sdk'\n\ntry {\n  await mk.getStream(id)\n} catch (err) {\n  if (err instanceof RateLimitError)  console.log(err.retryAfterMs)\n  if (err instanceof NetworkError)    console.log(err.statusCode, err.cause)\n  if (err instanceof NotFoundError)   console.log(err.resourceId)\n  if (err instanceof StreamError)     console.log(err.videoId)\n}\n```\n\n| Class | Code | When |\n|---|---|---|\n| `NotFoundError` | `NOT_FOUND` | Resource doesn't exist |\n| `RateLimitError` | `RATE_LIMITED` | 429 from any source |\n| `NetworkError` | `NETWORK_ERROR` | HTTP failure or fetch error |\n| `ValidationError` | `VALIDATION_ERROR` | Bad input / missing config |\n| `StreamError` | `STREAM_ERROR` | Stream URL resolution failed |\n| `HttpError` | — | Raw HTTP error (for custom sources) |\n| `NonRetryableError` | — | Stop retry engine immediately |\n\n---\n\n## Utilities\n\n### URL resolver\n\nPaste any URL — the SDK figures out the ID or query automatically:\n\n```ts\nimport { resolveInput } from 'musicstream-sdk'\n\nresolveInput('https://www.youtube.com/watch?v=dQw4w9WgXcQ')   // \"dQw4w9WgXcQ\"\nresolveInput('https://youtu.be/dQw4w9WgXcQ')                  // \"dQw4w9WgXcQ\"\nresolveInput('https://music.youtube.com/watch?v=dQw4w9WgXcQ') // \"dQw4w9WgXcQ\"\nresolveInput('https://music.youtube.com/browse/MPREb_...')     // \"MPREb_...\"  (album/artist)\nresolveInput('https://music.youtube.com/playlist?list=PL...') // \"PL...\"      (playlist)\nresolveInput('https://music.youtube.com/search?q=bohemian+rhapsody')  // \"bohemian rhapsody\"\nresolveInput('some plain search query')                        // \"some plain search query\"\n\n// So you can do:\nconst id = resolveInput(anyInput)\nconst stream = await mk.getStream(id)  // works for any URL or plain video ID\n```\n\n```ts\nimport {\n  getBestThumbnail,    // (thumbnails, targetPx) → Thumbnail | null\n  isStreamExpired,     // (stream) → boolean — true within 5min of expiry\n  resolveInput,        // (url | id | query) → canonical ID string\n  resolveSpotifyUrl,   // (spotifyTrackUrl) → \"Title Artist\" | null\n  version,             // SDK version string e.g. \"3.0.0\"\n} from 'musicstream-sdk'\n```\n\n---\n\n## Data Models\n\n```ts\ninterface Song        { type: 'song';     videoId: string; title: string; artist: string; album?: string; duration: number; thumbnails: Thumbnail[] }\ninterface Album       { type: 'album';    browseId: string; title: string; artist: string; year?: string; thumbnails: Thumbnail[]; tracks: Song[] }\ninterface Artist      { type: 'artist';   channelId: string; name: string; subscribers?: string; thumbnails: Thumbnail[]; songs: Song[]; albums: Album[]; singles: Album[] }\ninterface Playlist    { type: 'playlist'; playlistId: string; title: string; thumbnails: Thumbnail[]; songs?: Song[]; songCount?: number }\ninterface AudioTrack extends Song { stream: StreamingData }\ninterface StreamingData { url: string; codec: 'opus' | 'mp4a'; mimeType: string; bitrate: number; expiresAt: number; loudnessDb?: number; sizeBytes?: number }\ninterface Thumbnail   { url: string; width: number; height: number }\ninterface Section     { title: string; items: (Song | Album | Artist | Playlist)[] }\ninterface Lyrics      { plain: string; synced: LyricLine[] | null; source?: LyricsProviderName }\ninterface LyricLine   { time: number; text: string; words?: WordTime[] }\ninterface WordTime    { time: number; duration?: number; text: string }\ntype LyricsProviderName =\n  | 'better-lyrics' | 'lrclib' | 'lyrics-ovh' | 'kugou'\n  | 'simpmusic' | 'youtube-native' | 'youtube-subtitle'\ninterface LyricsProvider {\n  readonly name: LyricsProviderName\n  fetch(artist: string, title: string, duration?: number, fetchFn?: typeof fetch, videoId?: string): Promise<Lyrics | null>\n}\ninterface Podcast     { type: 'podcast'; feedUrl: string; title: string; description: string; author: string; language: string; link: string; thumbnails: Thumbnail[]; episodes: PodcastEpisode[] }\ninterface PodcastEpisode { type: 'episode'; guid: string; title: string; description: string; url: string; mimeType: string; duration: number; publishedAt: string; thumbnails: Thumbnail[]; season?: number; episode?: number; explicit: boolean }\n```\n\n---\n\n## Stability\n\nThis SDK uses **unofficial APIs** (YouTube InnerTube). No published SLA.\n\n- YouTube stream cipher can break when YouTube rotates its player JS — usually fixed in [youtubei.js](https://github.com/LuanRT/YouTube.js) within days. Update the package.\n- Use for Discord bots, CLI tools, desktop apps, personal projects. Not for infrastructure where an hour of downtime is unacceptable.\n\n---\n\n## Requirements\n\n| Dependency | Required for |\n|---|---|\n| Node.js 22+ | Everything |\n| [yt-dlp](https://github.com/yt-dlp/yt-dlp) on PATH | Stream resolution, `download()`, `streamAudio()`, `streamPCM()` |\n| [fpcalc](https://acoustid.org/chromaprint) on PATH | `identify()` only |\n| [songrec](https://github.com/marin-m/SongRec) | `identify()` — optional, adds Shazam recognition |\n\n---\n\n## License\n\nMIT\n","readmeFilename":"README.md"}