{"_id":"andrade-soulseek-downloader","_rev":"28-2ce3d38a08442a4239e78864ee084752","name":"andrade-soulseek-downloader","dist-tags":{"latest":"1.0.28"},"versions":{"1.0.1":{"name":"andrade-soulseek-downloader","version":"1.0.1","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.1","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"96ef069e59b129f04dba216010225f6e691c81fa","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.1.tgz","fileCount":258,"integrity":"sha512-wTS66CcDKV8x4XuQu73KjcyMEueQ5BtdymhNQSo/xTUK0oxmFY009nNCUVGXe2gyhAQuDQy0uHOzwNkhwafuQw==","signatures":[{"sig":"MEUCIQDWe4Po69k2P5PtLIFOMtyrIsMhp2FS6av0Utwo9GPF0gIgdIzl4n6wjfOf8iHwF2KeLjg58faG+daqcLvfhz0kRDI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":301554},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"20cf532ee3f495bcb0f7d21687f0797c8bb28c34","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"jest","build":"tsc","start":"node dist/index.js","test:unit":"jest tests/unit","test:watch":"jest --watch","test:coverage":"jest --coverage","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.9.0","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"22.11.0","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","slsk-client":"^1.1.0","cli-progress":"^3.12.0","string-similarity-js":"^2.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","inversify":"^7.7.0","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","reflect-metadata":"^0.2.2","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.1_1754246090607_0.44910587995776696","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"andrade-soulseek-downloader","version":"1.0.2","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.2","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"39d35d4457b213c8f68a5340f6e4eba08ecfcc36","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.2.tgz","fileCount":207,"integrity":"sha512-X1dispfZTUi5jWAlNVjpWpWl/TvU78Hg4vKbR4aNbIH3I+HC0KgNFcQmh/zwNjija90kV906D7ie+utClNx/wA==","signatures":[{"sig":"MEYCIQC0Er1E8z9ZodPEPFnC5Oc//PLF34udoeszlu4rgajQNgIhAPvgi0Z5o4yStwBqfsxcs3sTy5jPj2qRl995h06owKhx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":244952},"main":"dist/api.js","_from":"file:andrade-soulseek-downloader-1.0.2.tgz","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"jest","build":"tsc","start":"node dist/index.js","test:unit":"jest tests/unit","test:watch":"jest --watch","test:coverage":"jest --coverage","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"_resolved":"/tmp/78c8a0d61c6f5d3114956f16c6dab846/andrade-soulseek-downloader-1.0.2.tgz","_integrity":"sha512-X1dispfZTUi5jWAlNVjpWpWl/TvU78Hg4vKbR4aNbIH3I+HC0KgNFcQmh/zwNjija90kV906D7ie+utClNx/wA==","repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","slsk-client":"^1.1.0","cli-progress":"^3.12.0","string-similarity-js":"^2.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","inversify":"^7.7.0","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","reflect-metadata":"^0.2.2","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.2_1754247694933_0.8051481446978666","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"andrade-soulseek-downloader","version":"1.0.3","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.3","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"fafc2e83232b7afb9c13e2bda549487623ed2058","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.3.tgz","fileCount":259,"integrity":"sha512-uRkffeWOV/7mDsyCgRnvPir9OQUdtLdBLtw53cfB+s7entfEBPt5jwZVdD/iUCBdadU8LzR8Qy9qD4+cgDGuvw==","signatures":[{"sig":"MEQCIA8er4xbzjRrPMp3/LEPm6flETp+c1mklNFLoLbxhnGXAiAWbEdU57iEUL5p2ElYQh+SSMVfMrO1oNish9lFvUnzsA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":338841},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"6d6a6bb9093a5c734c7e797560a361d2f5493362","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"jest","build":"tsc","start":"node dist/index.js","test:unit":"jest tests/unit","test:watch":"jest --watch","test:coverage":"jest --coverage","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.9.0","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"22.11.0","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","slsk-client":"^1.1.0","cli-progress":"^3.12.0","string-similarity-js":"^2.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","inversify":"^7.7.0","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","reflect-metadata":"^0.2.2","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.3_1754249366700_0.019945465099898474","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"andrade-soulseek-downloader","version":"1.0.4","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.4","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"75b4f13ce2a23e4d18f2bd877458fb1edb0fa266","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.4.tgz","fileCount":259,"integrity":"sha512-ot1MKTISixe3XDb86eFPShubdNeWT/IjNXhPOkwJ2lSEzTu7eZDPu5nZcpAsvDjIAo4A6azIFqiqdsu8wbKJiQ==","signatures":[{"sig":"MEQCIDCg4MudadNS9zX6GCg9Uqnh/W7HRjjxbOVCftYhscNcAiBCMD0xZ4QuczlMD7KPF1FsCoBDEU1V/Xnj6KLj2yPHWA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":338841},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"45e8ccec5159a8328c08964d5eff3ce884cb6dfb","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"jest","build":"tsc","start":"node dist/index.js","test:unit":"jest tests/unit","test:watch":"jest --watch","test:coverage":"jest --coverage","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.9.0","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"22.11.0","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","slsk-client":"^1.1.0","cli-progress":"^3.12.0","string-similarity-js":"^2.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","inversify":"^7.7.0","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","reflect-metadata":"^0.2.2","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.4_1754249565929_0.5366591398187122","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"andrade-soulseek-downloader","version":"1.0.5","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.5","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"01d2e3ac11be8f9718f55699130c0285a8d37952","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.5.tgz","fileCount":211,"integrity":"sha512-FoKYFXbwrrZj4u1dbnTDIVgCzzyLk9JXMiB4yrWImykhVvVzP4Od63XPaPw+klXkO+nnFBr8fQdD5Vpuwm/aiQ==","signatures":[{"sig":"MEUCIGrdIe5nfU6bhIQTpNnvADEDP365nouAlSTjNyXUHQ06AiEAlkoq50DdCh2YlJJhAWoHiaEvQRs6pumgsC43yNFMUM4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":271483},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"6b78b3b594c36021e2d92016644711cd2948d1f3","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"jest","build":"tsc","start":"node dist/index.js","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"jest tests/unit","test:watch":"jest --watch","test:coverage":"jest --coverage","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","slsk-client":"^1.1.0","cli-progress":"^3.12.0","string-similarity-js":"^2.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","inversify":"^7.7.0","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","reflect-metadata":"^0.2.2","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.5_1754254199241_0.07424500931179456","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"andrade-soulseek-downloader","version":"1.0.6","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.6","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"cb1a457d21fde2fb27919831e130d361ef1f7939","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.6.tgz","fileCount":211,"integrity":"sha512-Rga3g3PV5SxLNovIbNdeDpw+bb6hJGyrBCzzKNtZJGH6yVnSuIsIM1Vus3UJ7Fnt46yUVjVh+ORmO8/Zk9/A+A==","signatures":[{"sig":"MEUCICDIvYUZtaoqqqY+VEFqhRvs+QOLXoa8p3zUYhhSJdjpAiEA5CPAjN/EWs3q/2HotPVF3+hXzK9zvgobzrL/2bxc+hQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":272792},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"1e7b92bfc7d51436607628fab10f2f1fb2f047db","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"jest","build":"tsc","start":"node dist/index.js","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"jest tests/unit","test:watch":"jest --watch","test:coverage":"jest --coverage","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","slsk-client":"^1.1.0","cli-progress":"^3.12.0","string-similarity-js":"^2.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","inversify":"^7.7.0","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","reflect-metadata":"^0.2.2","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.6_1754255067934_0.5671974889026887","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"andrade-soulseek-downloader","version":"1.0.7","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.7","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"d5d1e86b3cd1c9600741360e508c421019aa8e45","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.7.tgz","fileCount":211,"integrity":"sha512-LUYyNAcJUrRVVduViFaCGw9O1pj2kl5tFE3ybyDsVjluV4rXCIZkWKFAnzBIDUwGyouBQq1DHAoqCJ5dNb2SSw==","signatures":[{"sig":"MEUCIQDSUloc117OAXnLRsuWlqDsvzNOsINkzbtvbHApw0+rGwIgQtFEjosLJ0gnz96bQkMWFNRb2LeZaqpsDVU0MC8v+Bk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":272792},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"043d0a663354593387136a0dd64fef2f18ee113f","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"jest","build":"tsc","start":"node dist/index.js","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"jest tests/unit","test:watch":"jest --watch","test:coverage":"jest --coverage","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","slsk-client":"^1.1.0","cli-progress":"^3.12.0","string-similarity-js":"^2.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","inversify":"^7.7.0","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","reflect-metadata":"^0.2.2","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.7_1754255291816_0.4427158059019216","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"andrade-soulseek-downloader","version":"1.0.8","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.8","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"6a3dce33f5f6d4d3527f1a95806aeabbca879ae2","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.8.tgz","fileCount":211,"integrity":"sha512-I7RiyK+I/eQYVXs+fX2QVjmehdsuKLVP7b1B5/H0kCFr0LSqOtDU+oohyFRg53tdp+yBridi1nKaOfRFyhDXuw==","signatures":[{"sig":"MEUCIQC4c3ccDA1f2eEyjz6/mm5v8b9jg7TVBgEdVIdF+vnVkQIgVYcRsG3cfzad+XTeilVWhe4Xdts52XNJdsY9ps7RVy0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":277116},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"733c8ac97b54be7a5bac0bb7daad6c03f343bf44","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"jest","build":"tsc","start":"node dist/index.js","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"jest tests/unit","test:watch":"jest --watch","test:coverage":"jest --coverage","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","slsk-client":"^1.1.0","cli-progress":"^3.12.0","string-similarity-js":"^2.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","inversify":"^7.7.0","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","reflect-metadata":"^0.2.2","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.8_1754255421960_0.14756866410961722","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"andrade-soulseek-downloader","version":"1.0.9","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.9","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"76566d63dbeecf9be55e589a9c06e14b3bd37d91","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.9.tgz","fileCount":211,"integrity":"sha512-fOXmuM8+IUJEb8cCPtQ6FwnfHkquoKzbPQsOwQMVrGv9/0rxOTE+ftTpFEWC7rodFJSaY5QOvy8NqXdlYT5n+Q==","signatures":[{"sig":"MEQCIAOrwDoJG3tMPE9zx0HryikXrJwnfqHU3zZ00yMRE2w4AiBkpFJeg7wi8MOmmaUsayH/nhueTx26s2flNhp609uAgg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":287412},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"38c3cc7a3f516095a029961ff28a5ec39ecbb1c5","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"jest","build":"tsc","start":"node dist/index.js","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"jest tests/unit","test:watch":"jest --watch","test:coverage":"jest --coverage","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","slsk-client":"^1.1.0","cli-progress":"^3.12.0","string-similarity-js":"^2.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","inversify":"^7.7.0","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","reflect-metadata":"^0.2.2","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.9_1754256306928_0.8832734239656359","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"andrade-soulseek-downloader","version":"1.0.10","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.10","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"324a8a887ad4f0f5559456a6c44bfc26a6acf731","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.10.tgz","fileCount":211,"integrity":"sha512-JCSggowUXMNVuK/ViMS162cjXuCVOUJ0oZutv049a1YpEgl774Y+kCA5tAyoOl771IOTOw3XPHNNMtL7z06gtQ==","signatures":[{"sig":"MEUCIQDIHWgO4L6cCAUij2VIdjrrT0dxUY3Di2mQGrQGP5CyHAIgEeZMhOhw36cBE0hSGMh2LyJg+wloCmoYezfinjNF+ys=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":294757},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"b1bc52673361ed4292c3d6802564275eaea1e084","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"jest","build":"tsc","start":"node dist/index.js","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"jest tests/unit","test:watch":"jest --watch","test:coverage":"jest --coverage","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","slsk-client":"^1.1.0","cli-progress":"^3.12.0","string-similarity-js":"^2.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","inversify":"^7.7.0","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","reflect-metadata":"^0.2.2","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.10_1754259552901_0.1155112629888082","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"andrade-soulseek-downloader","version":"1.0.11","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.11","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"6f65a2860c54b9efc10e23750e823fda76f11133","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.11.tgz","fileCount":211,"integrity":"sha512-H8Bwv648RTDQQt/seKGJTwaiCqKfPvfxweAkfwY/eBRy4arATkD4BXoLqzKMo48qCAcK8307IW23GBGlGZZh6g==","signatures":[{"sig":"MEQCIHD25b3mYxYEUtjU7WzYYQARoTVGOgwDyWOdApt/x7XIAiARnXvFed2MJBaFzOWyMo9Iy00IMaW7NaW47RDfyj5vCA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":297924},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"7c54fdbdaf9f45ca1e6b569037c961adeb8c0116","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"jest","build":"tsc","start":"node dist/index.js","test:all":"npm run test:unit && npm run test:e2e","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"jest tests/unit","test:watch":"jest --watch","test:coverage":"jest --coverage","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","slsk-client":"^1.1.0","cli-progress":"^3.12.0","string-similarity-js":"^2.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","inversify":"^7.7.0","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","reflect-metadata":"^0.2.2","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.11_1754261000351_0.32025982862745805","host":"s3://npm-registry-packages-npm-production"}},"1.0.12":{"name":"andrade-soulseek-downloader","version":"1.0.12","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.12","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"17f3989b8c6e7bf126479e6f95acaddc1320990e","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.12.tgz","fileCount":271,"integrity":"sha512-BrmO5fwmoNTTz6wUUS9yU+dB9BtwX6VI03ZZd918aKzHiNcwqiQWU+wMQ9M6+lDqSxrOFsDl9QNV1icx8DH5fA==","signatures":[{"sig":"MEYCIQCnm3qn9np9+0p18tWu6bHX2Z7UB5ZOy2hFeYqNfm6Q3gIhAM0bdwYOsIhr7ZrvWKhvn/eNjV+QKxI1NiVS7/nUWu+c","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":429594},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"15ce7d989a924f88db73237e99afee17c2b39690","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"jest","build":"tsc","start":"node dist/index.js","test:all":"npm run test:unit && npm run test:e2e","test:cli":"npm run build && node dist/index.js \"Toman\" \"verano en NY\"","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"jest tests/unit","test:watch":"jest --watch","test:coverage":"jest --coverage","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","cli-progress":"^3.12.0","string-similarity-js":"^2.1.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","inversify":"^7.7.0","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","reflect-metadata":"^0.2.2","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.12_1754299235875_0.7119033695425772","host":"s3://npm-registry-packages-npm-production"}},"1.0.13":{"name":"andrade-soulseek-downloader","version":"1.0.13","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.13","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"380c028579d36851cc2f66a6f7ee52f414e9bba5","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.13.tgz","fileCount":279,"integrity":"sha512-rlWep+Yw3mwMU8qgtfPY9Waja3ghOXx2ZsI2oaeCneoqggOH7XzYmc7aDNnW0L9ZgMLpCIRlz00G/PVQ64XyzA==","signatures":[{"sig":"MEYCIQCWyxrvo4+ImJM5nUlEXdRmauXGZnEhIPOEh80hok44lwIhAMGCtSy+vFZMVkZ28t5YWOMjHcWfIKphxQo9wWCX1bBh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":461737},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"704443f964e8b232a98921aa711dbce1859a46e0","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"NODE_ENV=test jest","build":"tsc","start":"node dist/index.js","test:all":"npm run test:unit && npm run test:e2e","test:cli":"npm run build && node dist/index.js \"shonky\" \"korgM1\"","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"NODE_ENV=test jest tests/unit","test:watch":"NODE_ENV=test jest --watch","test:coverage":"NODE_ENV=test jest --coverage","test:cli:youtube":"npm run build && node dist/index.js \"Vernis Rouge\" \"Bande organisée (Kimotion Remix)\"","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","cli-progress":"^3.12.0","@distube/ytsr":"^2.0.0","fluent-ffmpeg":"^2.1.3","@distube/ytdl-core":"^4.14.4","string-similarity-js":"^2.1.4","@ffmpeg-installer/ffmpeg":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","inversify":"^7.7.0","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","reflect-metadata":"^0.2.2","@types/cli-progress":"^3.11.6","@types/fluent-ffmpeg":"^2.1.24"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.13_1754419846587_0.5122708317533029","host":"s3://npm-registry-packages-npm-production"}},"1.0.14":{"name":"andrade-soulseek-downloader","version":"1.0.14","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.14","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"6e62dd771f321bb5bb076114fbfcfd300a60802c","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.14.tgz","fileCount":279,"integrity":"sha512-uLHbJ5Nal+MOnWh/Bn/xnnj4093t2T9cQtj0TtNc9lulPk3LP9bpiiNv5NeZrplEw1qI6hKPzThBzWvaX/u6oQ==","signatures":[{"sig":"MEUCIAfZ2hU3v0EDG651aQKQl91N7tM9VEsHy7VsJPdm66MvAiEAo3qczOohHxfat7SjyzA+qt+NaS2FSp/2pXQqLM3WPX8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":476274},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"437bc2bfab0493077ec6d9e3b91b18ec88b1ec98","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"NODE_ENV=test jest","build":"tsc","start":"node dist/index.js","test:all":"npm run test:unit && npm run test:e2e","test:cli":"npm run build && node dist/index.js \"shonky\" \"korgM1\"","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"NODE_ENV=test jest tests/unit","test:watch":"NODE_ENV=test jest --watch","test:coverage":"NODE_ENV=test jest --coverage","test:cli:youtube":"npm run build && node dist/index.js \"Vernis Rouge\" \"Bande organisée (Kimotion Remix)\"","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","cli-progress":"^3.12.0","@distube/ytsr":"^2.0.0","fluent-ffmpeg":"^2.1.3","@distube/ytdl-core":"^4.14.4","string-similarity-js":"^2.1.4","@ffmpeg-installer/ffmpeg":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","inversify":"^7.7.0","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","reflect-metadata":"^0.2.2","@types/cli-progress":"^3.11.6","@types/fluent-ffmpeg":"^2.1.24"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.14_1754436647374_0.8401452781545047","host":"s3://npm-registry-packages-npm-production"}},"1.0.15":{"name":"andrade-soulseek-downloader","version":"1.0.15","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.15","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"d41c759558b0f9c8ae8731636a51c23c99c32f55","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.15.tgz","fileCount":279,"integrity":"sha512-zbmXaIJzDca7/65FFtImYCZ8jpOaVYTeMZ04DxBae5X/tgDYJRn84uZB5uibk5axB8uTK9r8/VnOwwWUfRD7zA==","signatures":[{"sig":"MEUCIEIwAI2qoMfjryKywTu1hQMx7nH/bZV8/vHFXAu7xs0qAiEA97LpgpYvyLAsaBGhGrvdOcNjTwDNFZuzKz4ftlYBIMc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":476321},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"ef2342f9e9d6c534ae0a5edd5f479fcf9ee48f80","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"NODE_ENV=test jest","build":"tsc","start":"node dist/index.js","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:cli":"npm run build && node dist/index.js \"shonky\" \"korgM1\"","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"NODE_ENV=test jest tests/unit","test:watch":"NODE_ENV=test jest --watch","test:coverage":"NODE_ENV=test jest --coverage","test:cli:youtube":"npm run build && node dist/index.js \"Vernis Rouge\" \"Bande organisée (Kimotion Remix)\"","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","cli-progress":"^3.12.0","@distube/ytsr":"^2.0.0","fluent-ffmpeg":"^2.1.3","@distube/ytdl-core":"^4.14.4","string-similarity-js":"^2.1.4","@ffmpeg-installer/ffmpeg":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","husky":"^9.1.7","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","inversify":"^7.7.0","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","reflect-metadata":"^0.2.2","@types/cli-progress":"^3.11.6","@types/fluent-ffmpeg":"^2.1.24"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.15_1754499150915_0.626507810500879","host":"s3://npm-registry-packages-npm-production"}},"1.0.16":{"name":"andrade-soulseek-downloader","version":"1.0.16","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.16","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"2dbf51b74a1c9680dfbd36a2123970dcb08819a8","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.16.tgz","fileCount":279,"integrity":"sha512-MimfnOuF7nPZmCE4ZRSc5h9zOY6i8ZtkWgQHiiWDTpw7cCVWOELtDFd9BAAy+6pCBFMPEgZPgG1WPlQcPmywIQ==","signatures":[{"sig":"MEYCIQDODEYrOnP7m6dD/Rb484dXBpLXqhkMC2S2nf0RyIbCNQIhAIqu7RfVqQDEodo3hrsqVjDf2UMHVJDS3vza0bdr1iu3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":478130},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"6aec3df66e3254abf37ca1a77dfffc55893fcb98","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"NODE_ENV=test jest","build":"tsc","start":"node dist/index.js","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:cli":"npm run build && node dist/index.js \"shonky\" \"korgM1\"","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"NODE_ENV=test jest tests/unit","test:watch":"NODE_ENV=test jest --watch","test:coverage":"NODE_ENV=test jest --coverage","test:cli:youtube":"npm run build && node dist/index.js \"Vernis Rouge\" \"Bande organisée (Kimotion Remix)\"","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","inversify":"^7.7.0","cli-progress":"^3.12.0","@distube/ytsr":"^2.0.0","fluent-ffmpeg":"^2.1.3","reflect-metadata":"^0.2.2","@distube/ytdl-core":"^4.14.4","string-similarity-js":"^2.1.4","@ffmpeg-installer/ffmpeg":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","husky":"^9.1.7","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","@types/cli-progress":"^3.11.6","@types/fluent-ffmpeg":"^2.1.24"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.16_1754525361462_0.8602473932436565","host":"s3://npm-registry-packages-npm-production"}},"1.0.17":{"name":"andrade-soulseek-downloader","version":"1.0.17","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.17","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"c8b551892a2ca21bcdfe5363c15ec2527aabf9db","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.17.tgz","fileCount":279,"integrity":"sha512-GX4dKY9x2kKHJZjOiAl6A3Z7tAsoeYihYCyR6oheGmaMdxwrOIn49TRI/1tSK3ylnG0avgE67o/LG2b6UWqeeA==","signatures":[{"sig":"MEUCIQCogsE9+bW0pdlAVl9h/Gycy8lBFhlNFXJZPVechUE4OgIgDWUWYgmcTBdjrsBpgVceCxoZnaJhVynN5ZIKxBg/JB4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":479989},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"e04be2326ed761d6fd8037bc2567d6a6e7bf82f1","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"NODE_ENV=test jest","build":"tsc","start":"node dist/index.js","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:cli":"npm run build && node dist/index.js \"coldplay\" \"yellow\"","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"NODE_ENV=test jest tests/unit","test:watch":"NODE_ENV=test jest --watch","test:coverage":"NODE_ENV=test jest --coverage","test:cli:youtube":"npm run build && node dist/index.js \"Vernis Rouge\" \"Bande organisée (Kimotion Remix)\"","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","inversify":"^7.7.0","cli-progress":"^3.12.0","@distube/ytsr":"^2.0.0","fluent-ffmpeg":"^2.1.3","reflect-metadata":"^0.2.2","@distube/ytdl-core":"^4.14.4","string-similarity-js":"^2.1.4","@ffmpeg-installer/ffmpeg":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","husky":"^9.1.7","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","@types/cli-progress":"^3.11.6","@types/fluent-ffmpeg":"^2.1.24"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.17_1754526613386_0.36519564988334996","host":"s3://npm-registry-packages-npm-production"}},"1.0.18":{"name":"andrade-soulseek-downloader","version":"1.0.18","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.18","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"8202a6ae4814c08e4ea054c1c06c995ccff6a329","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.18.tgz","fileCount":279,"integrity":"sha512-JDPnHqHwCJCUtV5y1ID52gcuSOFfn+mwmrKiqNELpypy8pmrc6o1znKlxEiloQMQuHqaV+vIbFHVpbHFWrEuUQ==","signatures":[{"sig":"MEQCIDwqWlhQcXbVl9WyBQsxfFrw2UpQQBTcGhRk9XicwkwAAiAeollhrd87GHc3MlGS6ElYKdneVcIrvi0v7wkRY5PztA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":495631},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"36f1b353384a5b41fbbaea046da9d627b93cb848","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"NODE_ENV=test jest","build":"tsc","start":"node dist/index.js","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:cli":"npm run build && node dist/index.js \"radiohead\" \"no surprises\"","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"NODE_ENV=test jest tests/unit","test:watch":"NODE_ENV=test jest --watch","test:coverage":"NODE_ENV=test jest --coverage","test:cli:youtube":"npm run build && node dist/index.js \"Vernis Rouge\" \"Bande organisée (Kimotion Remix)\"","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","inversify":"^7.7.0","cli-progress":"^3.12.0","@distube/ytsr":"^2.0.0","fluent-ffmpeg":"^2.1.3","reflect-metadata":"^0.2.2","@distube/ytdl-core":"^4.14.4","string-similarity-js":"^2.1.4","@ffmpeg-installer/ffmpeg":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","husky":"^9.1.7","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","@types/cli-progress":"^3.11.6","@types/fluent-ffmpeg":"^2.1.24"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.18_1754529612406_0.012006614653706338","host":"s3://npm-registry-packages-npm-production"}},"1.0.19":{"name":"andrade-soulseek-downloader","version":"1.0.19","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.19","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"462a306ba1687f27b523e4e9b9f9a58e19ed94d4","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.19.tgz","fileCount":279,"integrity":"sha512-Rep213hKl2mrB55fuM5FtsUAO3HnXO1HAQ1NmhJ1dQDAt89rquQnTAMU9Ja0riuXolMBk7V8j1qwR2dE2Pe9lA==","signatures":[{"sig":"MEYCIQCESbDFqt1OtKNT8TfL9b4GFN7YCV0rRyyALCCoohGucAIhANKbA7kiesQHYesnVX2rd7AVfMSQuZTr/uBCRUrLpDxL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":498364},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"ea61827c4f4fd744f901aa0309475e9a8f4f4538","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"NODE_ENV=test jest","build":"tsc","start":"node dist/index.js","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:cli":"npm run build && node dist/index.js \"radiohead\" \"no surprises\"","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"NODE_ENV=test jest tests/unit","test:watch":"NODE_ENV=test jest --watch","test:coverage":"NODE_ENV=test jest --coverage","test:cli:youtube":"npm run build && node dist/index.js \"Vernis Rouge\" \"Bande organisée (Kimotion Remix)\"","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","inversify":"^7.7.0","cli-progress":"^3.12.0","@distube/ytsr":"^2.0.0","fluent-ffmpeg":"^2.1.3","reflect-metadata":"^0.2.2","@distube/ytdl-core":"^4.14.4","string-similarity-js":"^2.1.4","@ffmpeg-installer/ffmpeg":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","husky":"^9.1.7","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","@types/cli-progress":"^3.11.6","@types/fluent-ffmpeg":"^2.1.24"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.19_1754529800731_0.41794712006845747","host":"s3://npm-registry-packages-npm-production"}},"1.0.20":{"name":"andrade-soulseek-downloader","version":"1.0.20","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.20","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"4de925404bbdc30e5dc9c55dd0f9f0a6815a7685","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.20.tgz","fileCount":279,"integrity":"sha512-DfZJtN5exk4dmu98w1m+ST9TpN6LypxRYWnSXwzWumw0AMKjHf0WQhJXEOocN3ANZ725Sn8PYcPLi5aav6em1w==","signatures":[{"sig":"MEYCIQCwc+TSYrKo+93VWtJAGqldcTc2QafMKQLecmmaKk12aAIhAJgxGM1Xt+4RcVYFWpiO8Jmqmy4CFE74EV0eBVe+jX2k","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":499851},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"882a95fbe1d6cba1f5a4fb64a39744d8afed953b","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"NODE_ENV=test jest","build":"tsc","start":"node dist/index.js","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:cli":"npm run build && node dist/index.js \"radiohead\" \"no surprises\"","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"NODE_ENV=test jest tests/unit","test:watch":"NODE_ENV=test jest --watch","test:coverage":"NODE_ENV=test jest --coverage","test:cli:youtube":"npm run build && node dist/index.js \"Vernis Rouge\" \"Bande organisée (Kimotion Remix)\"","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","inversify":"^7.7.0","cli-progress":"^3.12.0","@distube/ytsr":"^2.0.0","fluent-ffmpeg":"^2.1.3","reflect-metadata":"^0.2.2","@distube/ytdl-core":"^4.14.4","string-similarity-js":"^2.1.4","@ffmpeg-installer/ffmpeg":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","husky":"^9.1.7","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","@types/cli-progress":"^3.11.6","@types/fluent-ffmpeg":"^2.1.24"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.20_1754530108211_0.10789109213434478","host":"s3://npm-registry-packages-npm-production"}},"1.0.21":{"name":"andrade-soulseek-downloader","version":"1.0.21","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.21","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"6ea8e8a5e5b63affb7ae72b09cc2148c9174fcfa","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.21.tgz","fileCount":279,"integrity":"sha512-COU4UOEJVUVBHBIlBfulB+wYtsEP3/VgGhHjF8YM7ZMFdcnQdKeHSm4OAjxE2bQrPO0rAAxnZuJyNi13HwNHzQ==","signatures":[{"sig":"MEYCIQDnMcnlGrWNNvbSILYNoisxkysw+nf2kd1olFLIjJ32UAIhAIE4D6hPZaMgVvNJUdmZSGGvq6DjTSViiwgvTIoi19uP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":507979},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"f713bcf90ddfc60fb2c954ef628c602d53b990ed","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"NODE_ENV=test jest","build":"tsc","start":"node dist/index.js","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:cli":"npm run build && node dist/index.js \"radiohead\" \"no surprises\"","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"NODE_ENV=test jest tests/unit","test:watch":"NODE_ENV=test jest --watch","test:coverage":"NODE_ENV=test jest --coverage","test:cli:youtube":"npm run build && node dist/index.js \"Vernis Rouge\" \"Bande organisée (Kimotion Remix)\"","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","inversify":"^7.7.0","cli-progress":"^3.12.0","@distube/ytsr":"^2.0.0","fluent-ffmpeg":"^2.1.3","reflect-metadata":"^0.2.2","@distube/ytdl-core":"^4.14.4","string-similarity-js":"^2.1.4","@ffmpeg-installer/ffmpeg":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","husky":"^9.1.7","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","@types/cli-progress":"^3.11.6","@types/fluent-ffmpeg":"^2.1.24"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.21_1754531231123_0.6746663389596839","host":"s3://npm-registry-packages-npm-production"}},"1.0.22":{"name":"andrade-soulseek-downloader","version":"1.0.22","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.22","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"69469381231c05711a83267556f5f127e3e6618f","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.22.tgz","fileCount":279,"integrity":"sha512-leaAgeDLVP241NQrxicoJ865J0DMMIfBJAvcSfQKEUuRjvskeSzDgjeuqY8jGjXarDICtU5V3KtCWCgCCvm/yg==","signatures":[{"sig":"MEUCICDzBqj6D/l+R2wpCjpKKEs6PgdW6yUnzMWn6egYUR4cAiEAtI9e09FrnylHbhTsIlX43tIqePjsj9q8EoZ8cKzdJv8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":523243},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"ef1f07349e4840eb5e187e47c6b60463b0582c68","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"NODE_ENV=test jest","build":"tsc","start":"node dist/index.js","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:cli":"npm run build && node dist/index.js \"radiohead\" \"no surprises\"","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"NODE_ENV=test jest tests/unit","test:watch":"NODE_ENV=test jest --watch","test:coverage":"NODE_ENV=test jest --coverage","test:cli:youtube":"npm run build && node dist/index.js \"Vernis Rouge\" \"Bande organisée (Kimotion Remix)\"","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","inversify":"^7.7.0","cli-progress":"^3.12.0","@distube/ytsr":"^2.0.0","fluent-ffmpeg":"^2.1.3","reflect-metadata":"^0.2.2","@distube/ytdl-core":"^4.14.4","string-similarity-js":"^2.1.4","@ffmpeg-installer/ffmpeg":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","husky":"^9.1.7","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","@types/cli-progress":"^3.11.6","@types/fluent-ffmpeg":"^2.1.24"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.22_1759509608089_0.9946752456844754","host":"s3://npm-registry-packages-npm-production"}},"1.0.23":{"name":"andrade-soulseek-downloader","version":"1.0.23","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.23","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"7c27dc0701d83aca9b48ad84af980fbf411c7dfc","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.23.tgz","fileCount":279,"integrity":"sha512-PenlX07xGNCoaUFUDFOb8u58sttdCAF+JuY6N1UoycI0phVW7DIFNRjQDZKN6zymwQbzKTASvBE3um1Ad8MGIw==","signatures":[{"sig":"MEQCIE+MY83Vm5AvHqv+nUMZUXdmWEx9kIQVNMRNb+N7dVoWAiAnsQvgoznPArSFFcpOsuwhXNm4kIyW3D/ezyJkWkIutQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":523423},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"45ffeb7a36ca7c0e97ce830ec40c8b68ac9551d3","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"NODE_ENV=test jest","build":"tsc","start":"node dist/index.js","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:cli":"npm run build && node dist/index.js \"radiohead\" \"no surprises\"","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"NODE_ENV=test jest tests/unit","test:watch":"NODE_ENV=test jest --watch","test:coverage":"NODE_ENV=test jest --coverage","test:cli:youtube":"npm run build && node dist/index.js \"Vernis Rouge\" \"Bande organisée (Kimotion Remix)\"","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","inversify":"^7.7.0","cli-progress":"^3.12.0","@distube/ytsr":"^2.0.0","fluent-ffmpeg":"^2.1.3","reflect-metadata":"^0.2.2","@distube/ytdl-core":"^4.14.4","string-similarity-js":"^2.1.4","@ffmpeg-installer/ffmpeg":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","husky":"^9.1.7","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","@types/cli-progress":"^3.11.6","@types/fluent-ffmpeg":"^2.1.24"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.23_1759512054874_0.3557915688175435","host":"s3://npm-registry-packages-npm-production"}},"1.0.24":{"name":"andrade-soulseek-downloader","version":"1.0.24","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.24","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"7b8f83c532ba58f573397397c7f38a98c4afd3bf","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.24.tgz","fileCount":279,"integrity":"sha512-MGX0BmjNHtvlHx74p6ERdmK9iKo6Xm6IauE176cfallyvrosglv2jlm8HiPAx9lotAZSVz8AZCcqAHerB00M6A==","signatures":[{"sig":"MEUCIGnxt2NVbOUE1ALYJMw8adhBNDkjcH4G/121II5uMIg+AiEAh8r431K385fXRXOwFwqZ0w9a739S25snjoSxqJfoeks=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":526008},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"c5caaeaeeeeaa72550fb27891447e02558810b2c","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"NODE_ENV=test jest","build":"tsc","start":"node dist/index.js","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:cli":"npm run build && node dist/index.js \"radiohead\" \"no surprises\"","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"NODE_ENV=test jest tests/unit","test:watch":"NODE_ENV=test jest --watch","test:coverage":"NODE_ENV=test jest --coverage","test:cli:youtube":"npm run build && node dist/index.js \"Vernis Rouge\" \"Bande organisée (Kimotion Remix)\"","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","inversify":"^7.7.0","cli-progress":"^3.12.0","@distube/ytsr":"^2.0.0","fluent-ffmpeg":"^2.1.3","reflect-metadata":"^0.2.2","@distube/ytdl-core":"^4.14.4","string-similarity-js":"^2.1.4","@ffmpeg-installer/ffmpeg":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","husky":"^9.1.7","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","@types/cli-progress":"^3.11.6","@types/fluent-ffmpeg":"^2.1.24"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.24_1759512520793_0.5306691194763007","host":"s3://npm-registry-packages-npm-production"}},"1.0.25":{"name":"andrade-soulseek-downloader","version":"1.0.25","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.25","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"9caf88d30c06ba6bcbd3b378a7f6e000abd8c927","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.25.tgz","fileCount":279,"integrity":"sha512-kJ08hrQSiuKv7ucXyomlfsiBgTvX8LL056sPrtTk1E1Bqw1hHjqfmzAw/MDLGzOwlRUuQZMDL3kK98UGAtJabw==","signatures":[{"sig":"MEUCIQDoPOGEyFzrMAUsnEmAr0qdYM/esFDhkAYBNrumgch+IgIgZihn+RhRWuUldpncQQiqsTHOE9mEX5LtD0ttpRnogwM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":526008},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"a4fbcacdc856dd9362fc499c76c6baba909356e9","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"NODE_ENV=test jest","build":"tsc","start":"node dist/index.js","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:cli":"npm run build && node dist/index.js \"radiohead\" \"no surprises\"","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"NODE_ENV=test jest tests/unit","test:watch":"NODE_ENV=test jest --watch","test:coverage":"NODE_ENV=test jest --coverage","test:cli:youtube":"npm run build && node dist/index.js \"Vernis Rouge\" \"Bande organisée (Kimotion Remix)\"","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","inversify":"^7.7.0","cli-progress":"^3.12.0","@distube/ytsr":"^2.0.0","fluent-ffmpeg":"^2.1.3","reflect-metadata":"^0.2.2","@distube/ytdl-core":"^4.14.4","string-similarity-js":"^2.1.4","@ffmpeg-installer/ffmpeg":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","husky":"^9.1.7","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","@types/cli-progress":"^3.11.6","@types/fluent-ffmpeg":"^2.1.24"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.25_1759522002902_0.2600134047713947","host":"s3://npm-registry-packages-npm-production"}},"1.0.26":{"name":"andrade-soulseek-downloader","version":"1.0.26","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.26","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"67a0269cd264ee0e4d5356801a9f49da7d73e93e","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.26.tgz","fileCount":283,"integrity":"sha512-JOMl5JpWk5THfmevw6Er9dj9IBIqSS2SSEWZSNDszs0OocU81rn1Qd5MEt5q0Br2oHoowJ05p6BlTpnMyO2eeA==","signatures":[{"sig":"MEUCIFywbUPfka70f3H3/q9Okeno8rpLI6ESHRGQfRXeiFtjAiEAxDlDF3COTznJJTw9h0jLDwHCns0o32s+28+7mCgQQEE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":557315},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"03e0b2f0a068803469a0406671c441d8c95f0082","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"NODE_ENV=test jest","build":"tsc","start":"node dist/index.js","prepare":"husky","test:all":"npm run test:unit && npm run test:e2e","test:cli":"npm run build && node dist/index.js \"radiohead\" \"no surprises\"","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"NODE_ENV=test jest tests/unit","test:watch":"NODE_ENV=test jest --watch","test:coverage":"NODE_ENV=test jest --coverage","test:cli:youtube":"npm run build && node dist/index.js \"Vernis Rouge\" \"Bande organisée (Kimotion Remix)\"","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","inversify":"^7.7.0","puppeteer":"^24.23.0","cli-progress":"^3.12.0","@distube/ytsr":"^2.0.0","fluent-ffmpeg":"^2.1.3","reflect-metadata":"^0.2.2","@distube/ytdl-core":"^4.14.4","string-similarity-js":"^2.1.4","@ffmpeg-installer/ffmpeg":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","husky":"^9.1.7","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","@types/cli-progress":"^3.11.6","@types/fluent-ffmpeg":"^2.1.24"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.26_1759613040135_0.9229138233493694","host":"s3://npm-registry-packages-npm-production"}},"1.0.27":{"name":"andrade-soulseek-downloader","version":"1.0.27","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","_id":"andrade-soulseek-downloader@1.0.27","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"homepage":"https://github.com/andrade0/soulseek-downloader#readme","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"dist":{"shasum":"b0a82c2e4a710c6004b16561a85021846d05b027","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.27.tgz","fileCount":291,"integrity":"sha512-+mD4ODYMnq77tID2Uu06AaK7tbrvFV+faDohZdNH+YH8XAEem7qsU7oZ4QplOHcYwREL7LdJ5jAK/GoEdQA7/Q==","signatures":[{"sig":"MEUCIQCTdaHAckTA7bv8xTlKw9mpfp+7agHuVU663VhVkq5mwQIgPVMvtcJZ3jz42zg9AvMC6zumfu/DU97qZA0+zVdBvrk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":587983},"main":"dist/api.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"0676c14377509c5bcf0bc76e1dcbe07b682de0ac","scripts":{"dev":"tsx src/index.ts","lint":"tsc --noEmit","test":"NODE_ENV=test jest","build":"tsc","start":"node dist/index.js","prepare":"husky","soulseek":"tsx src/cli-soulseek.ts","test:all":"npm run test:unit && npm run test:e2e","test:cli":"npm run build && node dist/index.js \"radiohead\" \"no surprises\"","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:unit":"NODE_ENV=test jest tests/unit","test:watch":"NODE_ENV=test jest --watch","soulseek:prod":"npm run build && node dist/cli-soulseek.js","test:coverage":"NODE_ENV=test jest --coverage","test:cli:youtube":"npm run build && node dist/index.js \"Vernis Rouge\" \"Bande organisée (Kimotion Remix)\"","test:integration":"jest tests/integration"},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"repository":{"url":"git+https://github.com/andrade0/soulseek-downloader.git","type":"git"},"_npmVersion":"10.8.2","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","directories":{},"_nodeVersion":"18.20.8","dependencies":{"ora":"5","boxen":"5","chalk":"4","dotenv":"^16.3.1","p-queue":"6","prompts":"^2.4.2","inversify":"^7.7.0","puppeteer":"^24.23.0","cli-progress":"^3.12.0","@distube/ytsr":"^2.0.0","fluent-ffmpeg":"^2.1.3","reflect-metadata":"^0.2.2","@distube/ytdl-core":"^4.14.4","string-similarity-js":"^2.1.4","@ffmpeg-installer/ffmpeg":"^1.1.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@8.14.1","devDependencies":{"tsx":"^4.7.0","jest":"^30.0.5","husky":"^9.1.7","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/sinon":"^17.0.4","@jest/globals":"^30.0.5","@types/prompts":"^2.4.9","@types/cli-progress":"^3.11.6","@types/fluent-ffmpeg":"^2.1.24"},"_npmOperationalInternal":{"tmp":"tmp/andrade-soulseek-downloader_1.0.27_1759628214752_0.2145681061043614","host":"s3://npm-registry-packages-npm-production"}},"1.0.28":{"name":"andrade-soulseek-downloader","version":"1.0.28","description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","main":"dist/api.js","types":"dist/index.d.ts","scripts":{"build":"tsc","dev":"tsx src/index.ts","start":"node dist/index.js","soulseek":"tsx src/cli-soulseek.ts","soulseek:prod":"npm run build && node dist/cli-soulseek.js","test":"NODE_ENV=test jest","test:watch":"NODE_ENV=test jest --watch","test:coverage":"NODE_ENV=test jest --coverage","test:unit":"NODE_ENV=test jest tests/unit","test:integration":"jest tests/integration","test:e2e":"jest tests/e2e --setupFilesAfterEnv=./tests/e2e/setup.ts --testTimeout=120000","test:all":"npm run test:unit && npm run test:e2e","lint":"tsc --noEmit","test:cli:youtube":"npm run build && node dist/index.js \"Vernis Rouge\" \"Bande organisée (Kimotion Remix)\"","test:cli":"npm run build && node dist/index.js \"radiohead\" \"no surprises\"","prepare":"husky"},"keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"author":{"name":"andrade"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/andrade0/soulseek-downloader.git"},"devDependencies":{"@jest/globals":"^30.0.5","@types/cli-progress":"^3.11.6","@types/fluent-ffmpeg":"^2.1.24","@types/jest":"^30.0.0","@types/node":"^20.11.0","@types/prompts":"^2.4.9","@types/sinon":"^17.0.4","husky":"^9.1.7","jest":"^30.0.5","sinon":"^21.0.0","ts-jest":"^29.4.1","ts-node":"^10.9.2","tsx":"^4.7.0","typescript":"^5.3.3"},"dependencies":{"@distube/ytdl-core":"^4.14.4","@distube/ytsr":"^2.0.0","@ffmpeg-installer/ffmpeg":"^1.1.0","boxen":"5","chalk":"4","cli-progress":"^3.12.0","dotenv":"^16.3.1","fluent-ffmpeg":"^2.1.3","inversify":"^7.7.0","ora":"5","p-queue":"6","prompts":"^2.4.2","puppeteer":"^24.23.0","reflect-metadata":"^0.2.2","string-similarity-js":"^2.1.4"},"engines":{"node":">=18.0.0"},"packageManager":"pnpm@8.14.1","_id":"andrade-soulseek-downloader@1.0.28","gitHead":"d78019285794595875518dbf8efd6267b556dc01","bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"homepage":"https://github.com/andrade0/soulseek-downloader#readme","_nodeVersion":"18.20.8","_npmVersion":"10.8.2","dist":{"integrity":"sha512-PvjjNYN85DQlYbCCDOGJf/jXOHaP5XKFtgDnyPcnpOYojl0VfNGj6wFJziCOX35zzX5Vcq43HKDU6SlseaqYdw==","shasum":"b4ae4b0fcf64a75d3d412a415b9f510e95452dea","tarball":"https://registry.npmjs.org/andrade-soulseek-downloader/-/andrade-soulseek-downloader-1.0.28.tgz","fileCount":291,"unpackedSize":590404,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBj7A0J0FcAIzXUoZE8xHm5cUTsnZm4WX9VWdvOOSqX2AiB7wM0JR+y0JmSjaRp5ghGIP9sb8kGzJa1H6OkUNzgVGw=="}]},"_npmUser":{"name":"andrade0","email":"andradeolivier@gmail.com"},"directories":{},"maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/andrade-soulseek-downloader_1.0.28_1759630185443_0.38667121423729545"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-03T18:34:50.606Z","modified":"2025-10-05T02:09:45.791Z","1.0.1":"2025-08-03T18:34:50.857Z","1.0.2":"2025-08-03T19:01:35.148Z","1.0.3":"2025-08-03T19:29:26.936Z","1.0.4":"2025-08-03T19:32:46.140Z","1.0.5":"2025-08-03T20:49:59.461Z","1.0.6":"2025-08-03T21:04:28.138Z","1.0.7":"2025-08-03T21:08:12.042Z","1.0.8":"2025-08-03T21:10:22.178Z","1.0.9":"2025-08-03T21:25:07.111Z","1.0.10":"2025-08-03T22:19:13.077Z","1.0.11":"2025-08-03T22:43:20.573Z","1.0.12":"2025-08-04T09:20:36.073Z","1.0.13":"2025-08-05T18:50:46.843Z","1.0.14":"2025-08-05T23:30:47.623Z","1.0.15":"2025-08-06T16:52:31.190Z","1.0.16":"2025-08-07T00:09:21.655Z","1.0.17":"2025-08-07T00:30:13.616Z","1.0.18":"2025-08-07T01:20:12.717Z","1.0.19":"2025-08-07T01:23:20.921Z","1.0.20":"2025-08-07T01:28:28.448Z","1.0.21":"2025-08-07T01:47:11.299Z","1.0.22":"2025-10-03T16:40:08.296Z","1.0.23":"2025-10-03T17:20:55.061Z","1.0.24":"2025-10-03T17:28:41.014Z","1.0.25":"2025-10-03T20:06:43.122Z","1.0.26":"2025-10-04T21:24:00.322Z","1.0.27":"2025-10-05T01:36:55.015Z","1.0.28":"2025-10-05T02:09:45.621Z"},"bugs":{"url":"https://github.com/andrade0/soulseek-downloader/issues"},"author":{"name":"andrade"},"license":"MIT","homepage":"https://github.com/andrade0/soulseek-downloader#readme","keywords":["soulseek","download","music","p2p","slsk","rate-limit","file-sharing"],"repository":{"type":"git","url":"git+https://github.com/andrade0/soulseek-downloader.git"},"description":"Simple, safe Soulseek download library with built-in rate limiting to prevent bans","maintainers":[{"name":"andrade0","email":"andradeolivier@gmail.com"}],"readme":"# 🎵 Soulseek Downloader\n\n<div align=\"center\">\n\n![npm version](https://img.shields.io/npm/v/andrade-soulseek-downloader)\n![npm downloads](https://img.shields.io/npm/dm/andrade-soulseek-downloader)\n![license](https://img.shields.io/npm/l/andrade-soulseek-downloader)\n![node version](https://img.shields.io/node/v/andrade-soulseek-downloader)\n[![TypeScript](https://img.shields.io/badge/TypeScript-100%25-blue.svg)](https://www.typescriptlang.org/)\n[![Tests](https://img.shields.io/badge/Tests-42%20passing-green.svg)](#testing)\n[![Architecture](https://img.shields.io/badge/Architecture-Hexagonal-purple.svg)](#architecture)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](http://makeapullrequest.com)\n\n**🚀 Enterprise-grade Soulseek downloader with automatic quality selection, ban protection, and clean architecture**\n\n[Installation](#-installation) • [Quick Start](#-quick-start) • [Features](#-features) • [API](#-api-reference) • [Architecture](#-architecture) • [Examples](#-examples)\n\n</div>\n\n---\n\n## 📖 Table of Contents\n\n- [⚡ Key Features](#-key-features)\n- [🏗️ Architecture Highlights](#️-architecture-highlights)\n- [🛡️ Ban Protection](#️-ban-protection)\n- [📦 Installation](#-installation)\n- [🚀 Quick Start](#-quick-start)\n- [🎯 How It Works](#-how-it-works)\n- [📚 API Reference](#-api-reference)\n- [⚙️ Configuration](#️-configuration)\n- [💡 Examples](#-examples)\n- [🎨 Quality Selection](#-quality-selection-algorithm)\n- [📊 Architecture](#-architecture)\n- [🧪 Testing](#-testing)\n- [🔧 Advanced Usage](#-advanced-usage)\n- [📝 TypeScript Support](#-typescript-support)\n- [❓ FAQ](#-faq)\n- [🐛 Troubleshooting](#-troubleshooting)\n- [🤝 Contributing](#-contributing)\n\n## ⚡ Key Features\n\n| Feature | Description |\n|---------|-------------|\n| 🎯 **Quality-First Downloads** | Automatically downloads the highest quality available (FLAC → 320kbps → 256kbps → 192kbps) |\n| 🛡️ **Ban Protection** | Built-in rate limiting and queue management to prevent Soulseek bans |\n| 📊 **Smart Selection** | Intelligent file selection based on bitrate, availability, speed, and filename match |\n| 🔄 **Auto-Retry Logic** | Tries multiple sources with progressive quality fallback |\n| 🎨 **Beautiful UI** | Colored output, progress bars, and status indicators |\n| ⚡ **Simple API** | Just one function: `soulseekDownload(artist, title)` |\n| 🔐 **Safe Defaults** | Conservative rate limits and single connection by default |\n| 📈 **Progress Tracking** | Real-time download progress with speed indicators |\n| 🏗️ **Clean Architecture** | Hexagonal architecture with SOLID principles |\n| 🔷 **TypeScript First** | Full TypeScript support with comprehensive type definitions |\n| 🧪 **Well Tested** | 42 comprehensive unit tests with high coverage |\n| 📦 **Barrel Exports** | Clean imports with organized module structure |\n\n## 🏗️ Architecture Highlights\n\nThis project follows **enterprise-grade software architecture principles**:\n\n### 🔷 **Hexagonal Architecture (Ports & Adapters)**\n- **Domain Layer**: Pure business logic with entities and services\n- **Application Layer**: Use cases and orchestration \n- **Infrastructure Layer**: External adapters (Soulseek, filesystem, logging)\n- **Presentation Layer**: CLI and API interfaces\n\n### 🔧 **SOLID Principles Applied**\n- **S**ingle Responsibility: Each class has one clear purpose  \n- **O**pen/Closed: Extensible through interfaces\n- **L**iskov Substitution: Proper inheritance and polymorphism\n- **I**nterface Segregation: Focused, minimal interfaces\n- **D**ependency Inversion: Depend on abstractions, not concretions\n\n### 🏭 **Dependency Injection**\n- Uses InversifyJS for clean dependency management\n- Testable and mockable components\n- Easy to extend and modify\n\n### 📂 **Clean File Organization**\n- **One symbol per file** for maximum clarity\n- **kebab-case naming** following Node.js conventions  \n- **Barrel files** for clean imports\n- **Structured by layer** not by feature\n\n## 🛡️ Ban Protection\n\nThis library includes **automatic protection** against Soulseek bans:\n\n```mermaid\ngraph LR\n    A[Search Request] --> B{Rate Limiter}\n    B -->|Wait 5s| C[Execute Search]\n    C --> D[Download Request]\n    D --> E{Rate Limiter}\n    E -->|Wait 3s| F[Execute Download]\n    F --> G{Success?}\n    G -->|No| H[Error Cooldown 10s]\n    H --> D\n    G -->|Yes| I[Complete]\n    \n    style B fill:#ff9999\n    style E fill:#ff9999\n    style H fill:#ffcc99\n```\n\n### Protection Features:\n- ⏱️ **5-second delay** between searches\n- ⏱️ **3-second delay** between downloads  \n- ⏱️ **10-second cooldown** after errors\n- 🔒 **Single connection** limit\n- 📦 **Queue management** for multiple requests\n- 🔄 **Progressive backoff** on repeated failures\n\n## 📦 Installation\n\n```bash\n# pnpm (recommended)\npnpm add andrade-soulseek-downloader\n\n# npm\nnpm install andrade-soulseek-downloader\n\n# yarn\nyarn add andrade-soulseek-downloader\n```\n\n### TypeScript Support\nTypeScript definitions are **included automatically** - no need for separate `@types` packages!\n\n## 🚀 Quick Start\n\n### 1️⃣ Set up environment variables\n\nCreate a `.env` file in your project root:\n\n```env\n# Required\nSOULSEEK_USER=your_username\nSOULSEEK_PASSWORD=your_password\nSOULSEEK_SHARED_MUSIC_DIR=/path/to/shared/music\nSOULSEEK_DOWNLOAD_DIR=/path/to/downloads\n\n# Optional (defaults shown)\nSOULSEEK_MIN_QUALITY_BITRATE=128      # Minimum acceptable quality\nSOULSEEK_SEARCH_DELAY=5000            # ms between searches\nSOULSEEK_DOWNLOAD_DELAY=3000          # ms between downloads\nSOULSEEK_MAX_ATTEMPTS=10              # Max download attempts\nSOULSEEK_DOWNLOAD_TIMEOUT=120000      # Download timeout in ms\n```\n\n### 2️⃣ Use the Simple API\n\n```typescript\nimport { soulseekDownload } from 'andrade-soulseek-downloader';\n\nasync function downloadTrack() {\n  const filePath = await soulseekDownload('Daft Punk', 'One More Time');\n  \n  if (filePath) {\n    console.log(`✅ Downloaded to: ${filePath}`);\n  } else {\n    console.log('❌ Download failed');\n  }\n}\n\ndownloadTrack();\n```\n\n### 3️⃣ Or use CommonJS\n\n```javascript\nconst { soulseekDownload } = require('andrade-soulseek-downloader');\n\nasync function downloadTrack() {\n  const filePath = await soulseekDownload('Daft Punk', 'One More Time');\n  \n  if (filePath) {\n    console.log(`✅ Downloaded to: ${filePath}`);\n  } else {\n    console.log('❌ Download failed');\n  }\n}\n\ndownloadTrack();\n```\n\n## 🎯 How It Works\n\n```mermaid\nflowchart TD\n    A[Start Download] --> B[Search Soulseek Network]\n    B --> C{Results Found?}\n    C -->|No| D[Return null]\n    C -->|Yes| E[Group by Quality]\n    E --> F[Sort by Availability & Speed]\n    F --> G[Try Highest Quality First]\n    G --> H{Download Success?}\n    H -->|Yes| I[Return File Path]\n    H -->|No| J{More Options?}\n    J -->|Yes| K[Try Next Quality]\n    K --> G\n    J -->|No| L[Progressive Fallback]\n    L --> G\n    \n    style E fill:#e1f5fe\n    style F fill:#e8f5e8\n    style G fill:#fff3e0\n    style H fill:#fce4ec\n```\n\n### Quality Selection Algorithm\n\n1. **🔍 Search Phase**: Finds all available files\n2. **📊 Quality Grouping**: Groups files by bitrate (FLAC, 320kbps, 256kbps, etc.)\n3. **⭐ Smart Scoring**: Scores each file based on:\n   - Bitrate quality (50 points max)\n   - Slot availability (25 points)\n   - Connection speed (15 points)  \n   - Filename match (10 points)\n4. **🎯 Progressive Download**: Tries best options first, falls back gracefully\n\n## 📚 API Reference\n\n### Simple API (Recommended)\n\n```typescript\n// Single function for most use cases\nsoulseekDownload(artist: string, title: string): Promise<string | null>\n\n// Clean up when done\nsoulseekDisconnect(): Promise<void>\n```\n\n### Advanced API\n\n```typescript\nimport { \n  SoulseekDownloader, \n  DownloadConfig,\n  SearchOptions,\n  SoulseekSearchResult \n} from 'andrade-soulseek-downloader';\n\nconst downloader = new SoulseekDownloader({\n  maxAttempts: 10,\n  downloadTimeout: 120000,\n  preferSlotsAvailable: true,\n  minSpeed: 100000,\n  searchDelay: 5000,\n  downloadDelay: 3000,\n  maxConcurrent: 1,\n  cooldownAfterError: 10000\n});\n\n// Manual control\nawait downloader.connect();\nconst results = await downloader.search(options);\nconst filePath = await downloader.download(result, artist, title);\nawait downloader.disconnect();\n```\n\n## ⚙️ Configuration\n\n### Environment Variables\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `SOULSEEK_USER` | *(required)* | Your Soulseek username |\n| `SOULSEEK_PASSWORD` | *(required)* | Your Soulseek password |\n| `SOULSEEK_SHARED_MUSIC_DIR` | *(required)* | Directory to share (can be empty) |\n| `SOULSEEK_DOWNLOAD_DIR` | *(required)* | Where to save downloads |\n| `SOULSEEK_MIN_QUALITY_BITRATE` | `128` | Minimum acceptable bitrate (kbps) |\n| `SOULSEEK_SEARCH_DELAY` | `5000` | Delay between searches (ms) |\n| `SOULSEEK_DOWNLOAD_DELAY` | `3000` | Delay between downloads (ms) |\n| `SOULSEEK_MAX_ATTEMPTS` | `10` | Maximum download attempts |\n| `SOULSEEK_DOWNLOAD_TIMEOUT` | `120000` | Download timeout (ms) |\n\n### Programmatic Configuration\n\n```typescript\nconst config: DownloadConfig = {\n  maxAttempts: 15,          // Try up to 15 different sources\n  downloadTimeout: 180000,  // 3 minute timeout per download\n  preferSlotsAvailable: true, // Prefer users with open slots\n  minSpeed: 500000,         // Minimum 500kb/s connection\n  searchDelay: 3000,        // 3 second delay between searches\n  downloadDelay: 2000,      // 2 second delay between downloads\n  maxConcurrent: 1,         // Always 1 to prevent bans\n  cooldownAfterError: 15000 // 15 second cooldown after errors\n};\n```\n\n## 💡 Examples\n\n### Basic Usage\n\n```typescript\nimport { soulseekDownload, soulseekDisconnect } from 'andrade-soulseek-downloader';\n\n// Download a single track\nconst file1 = await soulseekDownload('The Beatles', 'Hey Jude');\nconst file2 = await soulseekDownload('Pink Floyd', 'Comfortably Numb');\n\n// Clean up when done\nawait soulseekDisconnect();\n```\n\n### Batch Downloads\n\n```typescript\nimport { soulseekDownload, soulseekDisconnect } from 'andrade-soulseek-downloader';\n\nconst tracks = [\n  { artist: 'The Beatles', title: 'Hey Jude' },\n  { artist: 'Pink Floyd', title: 'Comfortably Numb' },\n  { artist: 'Led Zeppelin', title: 'Stairway to Heaven' }\n];\n\nfor (const track of tracks) {\n  console.log(`Downloading ${track.artist} - ${track.title}...`);\n  const filePath = await soulseekDownload(track.artist, track.title);\n  \n  if (filePath) {\n    console.log(`✅ Downloaded: ${filePath}`);\n  } else {\n    console.log(`❌ Failed: ${track.artist} - ${track.title}`);\n  }\n}\n\nawait soulseekDisconnect();\n```\n\n### Advanced Configuration\n\n```typescript\nimport { \n  SoulseekDownloader,\n  DownloadConfig,\n  SearchOptions \n} from 'andrade-soulseek-downloader';\n\nconst config: DownloadConfig = {\n  maxAttempts: 20,\n  downloadTimeout: 300000, // 5 minutes\n  preferSlotsAvailable: true,\n  minSpeed: 1000000, // 1 MB/s minimum\n  searchDelay: 2000,\n  downloadDelay: 1000\n};\n\nconst downloader = new SoulseekDownloader(config);\n\ntry {\n  await downloader.connect();\n  \n  const searchOptions: SearchOptions = {\n    artist: 'Daft Punk',\n    title: 'One More Time',\n    minBitrate: 320, // Only high quality\n    timeout: 60000,\n    maxResults: 50,\n    strictMatching: true\n  };\n  \n  const results = await downloader.search(searchOptions);\n  console.log(`Found ${results.length} high-quality results`);\n  \n  if (results.length > 0) {\n    const bestResult = results[0]; // Already sorted by quality\n    const filePath = await downloader.download(bestResult, 'Daft Punk', 'One More Time');\n    console.log(`Downloaded: ${filePath}`);\n  }\n  \n} finally {\n  await downloader.disconnect();\n}\n```\n\n### CLI Usage\n\n```bash\n# Global installation\npnpm install -g andrade-soulseek-downloader\n\n# Command line usage\nsoulseek-download \"The Beatles\" \"Hey Jude\"\n\n# Or run directly with pnpm\npnpm start \"The Beatles\" \"Hey Jude\"\n```\n\n## 📊 Architecture\n\nThis project demonstrates **professional software architecture** patterns:\n\n```mermaid\ngraph TB\n    subgraph \"Presentation Layer\"\n        CLI[CLI Handler]\n        API[API Handler]\n    end\n    \n    subgraph \"Application Layer\"\n        UC[Use Cases]\n        DTO[DTOs]\n    end\n    \n    subgraph \"Domain Layer\"\n        E[Entities]\n        VO[Value Objects]\n        DS[Domain Services]\n        R[Repository Interfaces]\n    end\n    \n    subgraph \"Infrastructure Layer\"\n        REPO[Soulseek Repository]\n        LOG[Console Logger]\n        RL[Rate Limiter]\n        DI[DI Container]\n    end\n    \n    CLI --> UC\n    API --> UC\n    UC --> DS\n    UC --> R\n    DS --> E\n    DS --> VO\n    R --> REPO\n    UC --> LOG\n    UC --> RL\n    \n    style CLI fill:#e3f2fd\n    style API fill:#e3f2fd\n    style UC fill:#e8f5e8\n    style E fill:#fff3e0\n    style VO fill:#fff3e0\n    style DS fill:#fff3e0\n    style REPO fill:#fce4ec\n```\n\n### Directory Structure\n\n```\nsrc/\n├── presentation/           # User interfaces\n│   ├── api/               # HTTP/Function API\n│   └── cli/               # Command line interface\n├── application/           # Use cases & orchestration\n│   ├── use-cases/         # Business workflows\n│   └── dto/               # Data transfer objects\n├── domain/                # Core business logic\n│   ├── entities/          # Business objects\n│   ├── value-objects/     # Immutable values\n│   ├── services/          # Domain services\n│   └── repositories/      # Repository interfaces (ports)\n├── infrastructure/        # External concerns\n│   ├── repositories/      # Repository implementations (adapters)\n│   ├── services/          # External services\n│   └── container/         # Dependency injection\n├── shared/                # Shared utilities\n│   ├── interfaces/        # Common interfaces\n│   └── types/             # Type definitions\n└── core/                  # Core components\n```\n\n### Benefits of This Architecture\n\n- 🧪 **Highly Testable**: Easy to mock and test each layer\n- 🔧 **Maintainable**: Clear separation of concerns\n- 🔄 **Flexible**: Easy to swap implementations\n- 📈 **Scalable**: Can grow with your needs\n- 🛡️ **Robust**: Handles errors gracefully\n- 📝 **Self-Documenting**: Clear intent and structure\n\n## 🧪 Testing\n\nThe project includes **comprehensive test coverage**:\n\n```bash\n# Run all tests\npnpm test\n\n# Run tests with coverage\npnpm test:coverage\n\n# Run specific test suites\npnpm test:unit\npnpm test:integration\n\n# Watch mode for development\npnpm test:watch\n```\n\n### Test Statistics\n- **42 Tests** across all layers\n- **4 Test Suites** covering domain, application, and infrastructure\n- **High Coverage** on critical business logic\n- **Fast Execution** (< 1 second)\n\n### Test Architecture\n- **Unit Tests**: Domain entities, value objects, services\n- **Integration Tests**: Use cases with mocked dependencies\n- **Mocking**: Comprehensive mocks for external dependencies\n- **Test Utilities**: Shared test factories and helpers\n\n## 📝 TypeScript Support\n\n### Built-in Type Definitions\n\nFull TypeScript support is **included by default**:\n\n```typescript\nimport { \n  soulseekDownload,           // Function\n  SoulseekDownloader,         // Class\n  DownloadConfig,             // Interface\n  SearchOptions,              // Interface\n  SoulseekSearchResult,       // Interface\n  RateLimiter                 // Class\n} from 'andrade-soulseek-downloader';\n\n// All types are automatically available\nconst config: DownloadConfig = {\n  maxAttempts: 10,\n  downloadTimeout: 120000\n  // TypeScript will provide IntelliSense here\n};\n```\n\n### Type Safety Features\n\n- **Comprehensive Interfaces**: All public APIs are fully typed\n- **Generic Support**: Type-safe generic functions where applicable\n- **Strict Null Checks**: Proper handling of nullable values\n- **IntelliSense Support**: Full autocomplete in supported editors\n- **Compile-time Safety**: Catch errors before runtime\n\n### Import Options\n\n```typescript\n// Barrel imports (recommended)\nimport { Track, Bitrate } from 'andrade-soulseek-downloader/domain';\nimport { DownloadTrackUseCase } from 'andrade-soulseek-downloader/application';\n\n// Specific imports\nimport { soulseekDownload } from 'andrade-soulseek-downloader/presentation/api';\nimport { SoulseekDownloader } from 'andrade-soulseek-downloader/core';\n\n// Root imports (simple)\nimport { soulseekDownload, SoulseekDownloader } from 'andrade-soulseek-downloader';\n```\n\n## 🔧 Advanced Usage\n\n### Custom Rate Limiting\n\n```typescript\nimport { RateLimiter, RateLimitConfig } from 'andrade-soulseek-downloader';\n\nconst customConfig: RateLimitConfig = {\n  searchDelay: 2000,      // Faster searches (be careful!)\n  downloadDelay: 4000,    // Slower downloads (safer)\n  maxConcurrent: 1,       // Always 1 for safety\n  cooldownAfterError: 20000 // Longer cooldown\n};\n\nconst rateLimiter = RateLimiter.getInstance(customConfig);\n\n// Use with your own functions\nconst results = await rateLimiter.executeSearch(async () => {\n  return await customSearchFunction();\n});\n```\n\n### Extending the Domain\n\n```typescript\nimport { Track, TrackSelectionService } from 'andrade-soulseek-downloader/domain';\n\nclass CustomTrackSelectionService extends TrackSelectionService {\n  selectBestTracks(tracks: Track[], maxPerBitrate: number = 5): Track[] {\n    // Your custom selection logic\n    const filtered = tracks.filter(track => \n      track.getBitrate().getValue() >= 256 && \n      track.hasAvailableSlots()\n    );\n    \n    return super.selectBestTracks(filtered, maxPerBitrate);\n  }\n}\n```\n\n### Custom Logging\n\n```typescript\nimport { ILogger } from 'andrade-soulseek-downloader/shared';\n\nclass CustomLogger implements ILogger {\n  info(message: string): void {\n    // Send to your logging service\n    console.log(`[INFO] ${new Date().toISOString()} ${message}`);\n  }\n  \n  success(message: string): void {\n    // Custom success handling\n    console.log(`[SUCCESS] ${message}`);\n  }\n  \n  // ... implement other methods\n}\n\n// Use with dependency injection\ncontainer.bind<ILogger>('ILogger').to(CustomLogger);\n```\n\n## ❓ FAQ\n\n### **Q: Is this safe to use? Will I get banned?**\nA: Yes, it's designed with safety first. The built-in rate limiting prevents bans by enforcing conservative delays between operations.\n\n### **Q: What audio quality can I expect?**\nA: The library automatically finds the highest quality available, preferring lossless formats (FLAC) when possible, then falling back to 320kbps, 256kbps, etc.\n\n### **Q: Can I use this in production?**\nA: Yes! The architecture is enterprise-grade with proper error handling, logging, and testing. However, always respect Soulseek's terms of service.\n\n### **Q: Does it work with TypeScript?**\nA: Absolutely! Full TypeScript support is built-in with comprehensive type definitions.\n\n### **Q: Can I customize the download behavior?**\nA: Yes, the architecture is designed for extensibility. You can inject custom services, modify selection algorithms, or add your own retry logic.\n\n### **Q: How do I report issues?**\nA: Please open an issue on GitHub with detailed information about your problem, including logs and environment details.\n\n## 🐛 Troubleshooting\n\n### Common Issues\n\n#### **Connection Problems**\n```bash\nError: Failed to connect to Soulseek\n```\n**Solution**: Check your username/password and network connection.\n\n#### **No Results Found**\n```bash\nNo tracks found\n```\n**Solutions**:\n- Try broader search terms\n- Lower the minimum bitrate requirement\n- Check if the artist/track exists on Soulseek\n\n#### **Download Timeouts**\n```bash\nDownload timeout for user X\n```\n**Solutions**:\n- Increase `SOULSEEK_DOWNLOAD_TIMEOUT`\n- The library will automatically try other sources\n\n#### **Rate Limit Warnings**\n```bash\nWarning: Multiple SoulseekDownloader instances detected!\n```\n**Solution**: Use only one instance of SoulseekDownloader, or use the simple API functions.\n\n### Debug Mode\n\nEnable debug logging:\n\n```bash\nDEBUG=true pnpm start \"Artist\" \"Title\"\n```\n\nOr programmatically:\n\n```typescript\nprocess.env.DEBUG = 'true';\nimport { soulseekDownload } from 'andrade-soulseek-downloader';\n```\n\n## 🤝 Contributing\n\nWe welcome contributions! Here's how to get started:\n\n### Development Setup\n\n```bash\n# Clone the repository\ngit clone https://github.com/andrade/soulseek-downloader.git\ncd soulseek-downloader\n\n# Install dependencies\npnpm install\n\n# Run tests\npnpm test\n\n# Build the project\npnpm build\n\n# Run in development\npnpm dev\n```\n\n### Code Standards\n\n- **TypeScript**: All code must be in TypeScript\n- **Architecture**: Follow hexagonal architecture patterns\n- **Testing**: Maintain high test coverage\n- **Formatting**: Code is automatically formatted\n- **Conventions**: Use kebab-case for files, PascalCase for classes\n\n### Submitting Changes\n\n1. Fork the repository\n2. Create a feature branch: `git checkout -b feature/amazing-feature`\n3. Make your changes following the architecture patterns\n4. Add tests for new functionality\n5. Ensure all tests pass: `pnpm test`\n6. Build successfully: `pnpm build`\n7. Commit your changes: `git commit -m 'Add amazing feature'`\n8. Push to the branch: `git push origin feature/amazing-feature`\n9. Open a Pull Request\n\n### Architecture Guidelines\n\nWhen contributing, please:\n- Keep domain logic pure (no external dependencies)\n- Use dependency injection for external concerns\n- Follow the single responsibility principle\n- Add comprehensive tests for new features\n- Update documentation for API changes\n\n---\n\n## 📄 License\n\nMIT © [andrade](https://github.com/andrade)\n\n---\n\n<div align=\"center\">\n\n**⭐ Star this repo if you found it helpful!**\n\n[Report Bug](https://github.com/andrade/soulseek-downloader/issues) • [Request Feature](https://github.com/andrade/soulseek-downloader/issues) • [Contribute](https://github.com/andrade/soulseek-downloader/pulls)\n\n</div>","readmeFilename":"README.new.md"}