{"_id":"@serifpersia/dango","_rev":"183-49cca57be97a518ca96376812f771a80","name":"@serifpersia/dango","dist-tags":{"latest":"3.3.9"},"versions":{"3.3.4":{"name":"@serifpersia/dango","version":"3.3.4","keywords":["anime","react","express","typescript","streaming","cli"],"author":"","license":"MIT","_id":"@serifpersia/dango@3.3.4","maintainers":[{"name":"serifpersia","email":"duopremade023@gmail.com"}],"homepage":"https://github.com/serifpersia/dango#readme","bugs":{"url":"https://github.com/serifpersia/dango/issues"},"bin":{"dango":"orchestrator.js"},"dist":{"shasum":"218ee4f77a25aa705eb209b5d365ea626a915903","tarball":"https://registry.npmjs.org/@serifpersia/dango/-/dango-3.3.4.tgz","fileCount":190,"integrity":"sha512-D4lfXlcN2+ClciOGzjGFM4tBnNO5JpSyH+ZVnCGr3noSOYY9twLoggkk1W9Fkr40P9fz0Rme3xtsZSzBonnIqw==","signatures":[{"sig":"MEYCIQDOyWSSq64aTDadRmV4c3N9K/N5/4hErh7NXmn6TcT6vwIhANgFizm1RWBvOzRok+TFOyMC6KvfQUCBku4HLijI7dGf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDQuzEzbCMzm2DG98/WOVUckeSWMPPAFMZHc/5ZGtQI6AIgHcfz2C81+zVyDw8tSzYR3KxS+XV3O0EQa7ZtMBY9hXc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@serifpersia%2fdango@3.3.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6130907},"main":"orchestrator.js","type":"commonjs","engines":{"node":">=22.12.0"},"gitHead":"6ba139ff5ae9dd201abfe5681dbcfe0f8bf30585","scripts":{"dev":"node orchestrator.js dev","lint":"pnpm -r --if-present run lint","test":"pnpm --filter dango-client run test","build":"pnpm -r run build","start":"node orchestrator.js prod","client":"pnpm --filter dango-client run start","format":"prettier --write .","server":"pnpm --filter dango-server run start","prelint":"node -e \"if(!String(process.env.npm_config_user_agent||'').startsWith('pnpm/')){console.error('[dango] Use pnpm, not npm. Run: pnpm run lint');process.exit(1)}\"","preview":"node orchestrator.js prod","prebuild":"node -e \"if(!String(process.env.npm_config_user_agent||'').startsWith('pnpm/')){console.error('[dango] Use pnpm, not npm. Run: pnpm run build');process.exit(1)}\"","preformat":"node -e \"if(!String(process.env.npm_config_user_agent||'').startsWith('pnpm/')){console.error('[dango] Use pnpm, not npm. Run: pnpm run format');process.exit(1)}\"","prepublishOnly":"node sync-deps.js && pnpm run build","update-version":"node update-version.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c79cb51e-b5f7-4bcf-b5f6-e2cb4ab8096d"}},"deprecated":"Update dango to get new features/fixes!","repository":{"url":"git+https://github.com/serifpersia/dango.git","type":"git"},"_npmVersion":"12.1.0","description":"A web application for watching anime.","directories":{},"versionDate":"2026-09-23T19:38:08.380Z","_nodeVersion":"22.23.2","allowScripts":{"esbuild@0.28.2":true},"dependencies":{"ws":"^8.18.0","cors":"^2.8.5","pino":"^10.3.1","dotenv":"^17.4.2","multer":"^2.0.2","cheerio":"^1.2.0","express":"^5.1.0","lru-cache":"^11.5.2","compression":"^1.8.1","youtubei.js":"^18.1.0","got-scraping":"^3.2.9","@octokit/rest":"^22.0.1","fast-xml-parser":"^5.11.1","@xhayper/discord-rpc":"^1.3.4","@octokit/auth-oauth-device":"^8.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.27.0","devDependencies":{"eslint":"^10.2.1","globals":"^17.5.0","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^6.0.3","typescript-eslint":"^8.62.0"},"_npmOperationalInternal":{"tmp":"tmp/dango_3.3.4_1790192642330_0.5939124762568384","host":"s3://npm-registry-packages-npm-production"}},"3.3.5":{"name":"@serifpersia/dango","version":"3.3.5","keywords":["anime","react","express","typescript","streaming","cli"],"author":"","license":"MIT","_id":"@serifpersia/dango@3.3.5","maintainers":[{"name":"serifpersia","email":"duopremade023@gmail.com"}],"homepage":"https://github.com/serifpersia/dango#readme","bugs":{"url":"https://github.com/serifpersia/dango/issues"},"bin":{"dango":"orchestrator.js"},"dist":{"shasum":"b92f6847e24da3bb1ed5ff3681b1e70c9ff244a3","tarball":"https://registry.npmjs.org/@serifpersia/dango/-/dango-3.3.5.tgz","fileCount":190,"integrity":"sha512-scx+UMy2kaXWjX8+Gz/2erObhhnnFRT1jzU9YhA2bysIRhABYDaCB9BVfAYjKXwJ6dwUPaELJdM+BfON2PbkeQ==","signatures":[{"sig":"MEYCIQCEuVsyzB4kFe5xw6nAmN+Q8qApMfV2HLELpVys8K1plQIhAJkHDqmQ3FPx3Dm5W+0lTC8OMogpcnsO9ok2zdIO72l/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIA8P0hbHsCHDBDnzRvhm+A8owjKQbXEEsomW4C1mokmsAiEAtAXSucvK5PW+PGMjKK4+z+O5zaODNeAH2ix108mTnw0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@serifpersia%2fdango@3.3.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6142057},"main":"orchestrator.js","type":"commonjs","engines":{"node":">=22.12.0"},"gitHead":"70251ed2c48dab8ccbfcfe1e14891dc11c51ac11","scripts":{"dev":"node orchestrator.js dev","lint":"pnpm -r --if-present run lint","test":"pnpm --filter dango-client run test","build":"pnpm -r run build","start":"node orchestrator.js prod","client":"pnpm --filter dango-client run start","format":"prettier --write .","server":"pnpm --filter dango-server run start","prelint":"node -e \"if(!String(process.env.npm_config_user_agent||'').startsWith('pnpm/')){console.error('[dango] Use pnpm, not npm. Run: pnpm run lint');process.exit(1)}\"","preview":"node orchestrator.js prod","prebuild":"node -e \"if(!String(process.env.npm_config_user_agent||'').startsWith('pnpm/')){console.error('[dango] Use pnpm, not npm. Run: pnpm run build');process.exit(1)}\"","preformat":"node -e \"if(!String(process.env.npm_config_user_agent||'').startsWith('pnpm/')){console.error('[dango] Use pnpm, not npm. Run: pnpm run format');process.exit(1)}\"","prepublishOnly":"node sync-deps.js && pnpm run build","update-version":"node update-version.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c79cb51e-b5f7-4bcf-b5f6-e2cb4ab8096d"}},"deprecated":"Update dango to get new features/fixes!","repository":{"url":"git+https://github.com/serifpersia/dango.git","type":"git"},"_npmVersion":"12.1.0","description":"A web application for watching anime.","directories":{},"versionDate":"2026-09-24T10:00:06.202Z","_nodeVersion":"22.23.2","allowScripts":{"esbuild@0.28.2":true},"dependencies":{"ws":"^8.18.0","cors":"^2.8.5","pino":"^10.3.1","dotenv":"^17.4.2","multer":"^2.0.2","cheerio":"^1.2.0","express":"^5.1.0","lru-cache":"^11.5.2","compression":"^1.8.1","youtubei.js":"^18.1.0","got-scraping":"^3.2.9","@octokit/rest":"^22.0.1","fast-xml-parser":"^5.11.1","@xhayper/discord-rpc":"^1.3.4","@octokit/auth-oauth-device":"^8.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.27.0","devDependencies":{"eslint":"^10.2.1","globals":"^17.5.0","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^6.0.3","typescript-eslint":"^8.62.0"},"_npmOperationalInternal":{"tmp":"tmp/dango_3.3.5_1790244352359_0.36182310754903124","host":"s3://npm-registry-packages-npm-production"}},"3.3.6":{"name":"@serifpersia/dango","version":"3.3.6","keywords":["anime","react","express","typescript","streaming","cli"],"author":"","license":"MIT","_id":"@serifpersia/dango@3.3.6","maintainers":[{"name":"serifpersia","email":"duopremade023@gmail.com"}],"homepage":"https://github.com/serifpersia/dango#readme","bugs":{"url":"https://github.com/serifpersia/dango/issues"},"bin":{"dango":"orchestrator.js"},"dist":{"shasum":"3f8a623d2e9e56ff56b83d1365e9124a8e46787c","tarball":"https://registry.npmjs.org/@serifpersia/dango/-/dango-3.3.6.tgz","fileCount":190,"integrity":"sha512-Sus4QBnE/Wzlk36GehdgDBwoxq//r+qDazFWnSKymWesghC+gU6FL9XspwE8jaM2ZM0/vnru6wwoMbiYSy6Ghw==","signatures":[{"sig":"MEQCIFjc6rDSXDkz7oZVqmLdTYrdP7qQl5Mt7N0J7OKwy7YOAiAlPlLNJg0cVk+OIYObEU51Wp9Fx4wy569qcjzFfs46ow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFlGGt0WjAczkBwn7D9yGeT3cQq7uTuD/sQOUTWdI3bQAiEA5xXAVafW2g7ym2OsdSFyRaDfCufNMCcHdL2wuJDIAIA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@serifpersia%2fdango@3.3.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6144376},"main":"orchestrator.js","type":"commonjs","engines":{"node":">=22.12.0"},"gitHead":"868b9351f254313b73647669d2e6a0963530a494","scripts":{"dev":"node orchestrator.js dev","lint":"pnpm -r --if-present run lint","test":"pnpm --filter dango-client run test","build":"pnpm -r run build","start":"node orchestrator.js prod","client":"pnpm --filter dango-client run start","format":"prettier --write .","server":"pnpm --filter dango-server run start","prelint":"node -e \"if(!String(process.env.npm_config_user_agent||'').startsWith('pnpm/')){console.error('[dango] Use pnpm, not npm. Run: pnpm run lint');process.exit(1)}\"","preview":"node orchestrator.js prod","prebuild":"node -e \"if(!String(process.env.npm_config_user_agent||'').startsWith('pnpm/')){console.error('[dango] Use pnpm, not npm. Run: pnpm run build');process.exit(1)}\"","preformat":"node -e \"if(!String(process.env.npm_config_user_agent||'').startsWith('pnpm/')){console.error('[dango] Use pnpm, not npm. Run: pnpm run format');process.exit(1)}\"","prepublishOnly":"node sync-deps.js && pnpm run build","update-version":"node update-version.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c79cb51e-b5f7-4bcf-b5f6-e2cb4ab8096d"}},"deprecated":"Update dango to get new features/fixes!","repository":{"url":"git+https://github.com/serifpersia/dango.git","type":"git"},"_npmVersion":"12.1.0","description":"A web application for watching anime.","directories":{},"versionDate":"2026-09-25T11:33:57.632Z","_nodeVersion":"22.23.2","allowScripts":{"esbuild@0.28.2":true},"dependencies":{"ws":"^8.18.0","cors":"^2.8.5","pino":"^10.3.1","dotenv":"^17.4.2","multer":"^2.0.2","cheerio":"^1.2.0","express":"^5.1.0","lru-cache":"^11.5.2","compression":"^1.8.1","youtubei.js":"^18.1.0","got-scraping":"^3.2.9","@octokit/rest":"^22.0.1","fast-xml-parser":"^5.11.1","@xhayper/discord-rpc":"^1.3.4","@octokit/auth-oauth-device":"^8.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.27.0","devDependencies":{"eslint":"^10.2.1","globals":"^17.5.0","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^6.0.3","typescript-eslint":"^8.62.0"},"_npmOperationalInternal":{"tmp":"tmp/dango_3.3.6_1790336211354_0.6513612610864159","host":"s3://npm-registry-packages-npm-production"}},"3.3.7":{"name":"@serifpersia/dango","version":"3.3.7","keywords":["anime","react","express","typescript","streaming","cli"],"author":"","license":"MIT","_id":"@serifpersia/dango@3.3.7","maintainers":[{"name":"serifpersia","email":"duopremade023@gmail.com"}],"homepage":"https://github.com/serifpersia/dango#readme","bugs":{"url":"https://github.com/serifpersia/dango/issues"},"bin":{"dango":"orchestrator.js"},"dist":{"shasum":"e8455fb89ccb6e77e2e0048d8994f423522071a3","tarball":"https://registry.npmjs.org/@serifpersia/dango/-/dango-3.3.7.tgz","fileCount":190,"integrity":"sha512-sStn6lUkWqVPmMqwGYPnHwiu6FsNcU/ae6mEcGsidVU/TvvzLBufiiyN7ANTAsSZigkHTs6pNBK+7oE7JS8Heg==","signatures":[{"sig":"MEQCIBr1m+FwcWpexvV04OL9C0LuQOt+1O5opxPs/qBEqY5wAiBBkhShZYNMEFbRkW01QnSkZtcqNGH609rJTdo3t8LRsw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHVthxfrFbB+n3kjWykeGeclS1gk47Ia9Z+HrAIaTbt8AiEAg50RLy0kQYldyUIwBDKJTiUHoBKibSn0fzPtE35jqUw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@serifpersia%2fdango@3.3.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6164320},"main":"orchestrator.js","type":"commonjs","engines":{"node":">=22.12.0"},"gitHead":"ff105a4a88a4a54fcb8a93b22242701782618472","scripts":{"dev":"node orchestrator.js dev","lint":"pnpm -r --if-present run lint","test":"pnpm --filter dango-client run test","build":"pnpm -r run build","start":"node orchestrator.js prod","client":"pnpm --filter dango-client run start","format":"prettier --write .","server":"pnpm --filter dango-server run start","prelint":"node -e \"if(!String(process.env.npm_config_user_agent||'').startsWith('pnpm/')){console.error('[dango] Use pnpm, not npm. Run: pnpm run lint');process.exit(1)}\"","preview":"node orchestrator.js prod","prebuild":"node -e \"if(!String(process.env.npm_config_user_agent||'').startsWith('pnpm/')){console.error('[dango] Use pnpm, not npm. Run: pnpm run build');process.exit(1)}\"","preformat":"node -e \"if(!String(process.env.npm_config_user_agent||'').startsWith('pnpm/')){console.error('[dango] Use pnpm, not npm. Run: pnpm run format');process.exit(1)}\"","prepublishOnly":"node sync-deps.js && pnpm run build","update-version":"node update-version.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c79cb51e-b5f7-4bcf-b5f6-e2cb4ab8096d"}},"deprecated":"Update dango to get new features/fixes!","repository":{"url":"git+https://github.com/serifpersia/dango.git","type":"git"},"_npmVersion":"12.1.0","description":"A web application for watching anime.","directories":{},"versionDate":"2026-09-25T14:47:03.564Z","_nodeVersion":"22.23.2","allowScripts":{"esbuild@0.28.2":true},"dependencies":{"ws":"^8.18.0","cors":"^2.8.5","pino":"^10.3.1","dotenv":"^17.4.2","multer":"^2.0.2","cheerio":"^1.2.0","express":"^5.1.0","lru-cache":"^11.5.2","compression":"^1.8.1","youtubei.js":"^18.1.0","got-scraping":"^3.2.9","@octokit/rest":"^22.0.1","fast-xml-parser":"^5.11.1","@xhayper/discord-rpc":"^1.3.4","@octokit/auth-oauth-device":"^8.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.27.0","devDependencies":{"eslint":"^10.2.1","globals":"^17.5.0","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^6.0.3","typescript-eslint":"^8.62.0"},"_npmOperationalInternal":{"tmp":"tmp/dango_3.3.7_1790347925632_0.5562240580432385","host":"s3://npm-registry-packages-npm-production"}},"3.3.8":{"name":"@serifpersia/dango","version":"3.3.8","keywords":["anime","react","express","typescript","streaming","cli"],"author":"","license":"MIT","_id":"@serifpersia/dango@3.3.8","maintainers":[{"name":"serifpersia","email":"duopremade023@gmail.com"}],"homepage":"https://github.com/serifpersia/dango#readme","bugs":{"url":"https://github.com/serifpersia/dango/issues"},"bin":{"dango":"orchestrator.js"},"dist":{"shasum":"30bb046d9ab58889993248700cc1847df29a8c39","tarball":"https://registry.npmjs.org/@serifpersia/dango/-/dango-3.3.8.tgz","fileCount":191,"integrity":"sha512-A8deKLuZ0bmx+pvpgiNpsxSQT0qFgPnuUZZh/ThxwLLmbAlFSHwRGEM68yB1nJbQAo6fX1cfmNU2TA5GwHLC+A==","signatures":[{"sig":"MEUCIQC1CarchseIkEY1H6h+01N7hVLvavFRkUlelvN0km2WMgIgAe5UMMhzL/JxO5d1qc2Z9A5BLh/ryc4JjniowCJ8nKU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFCZmln4BZhgE2kIb8PXzkrd3iOFuYBaU1F5StdmArTqAiEA5ibEy9WHdriWGDLr42JXWu/XaMHSC86ntHkdd7WXzTw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@serifpersia%2fdango@3.3.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6229188},"main":"orchestrator.js","type":"commonjs","engines":{"node":">=22.12.0"},"gitHead":"754a0229110628cb07a7d5ce884d13da8cf75a9f","scripts":{"dev":"node orchestrator.js dev","lint":"pnpm -r --if-present run lint","test":"pnpm --filter dango-client run test","build":"pnpm -r run build","start":"node orchestrator.js prod","client":"pnpm --filter dango-client run start","format":"prettier --write .","server":"pnpm --filter dango-server run start","prelint":"node -e \"if(!String(process.env.npm_config_user_agent||'').startsWith('pnpm/')){console.error('[dango] Use pnpm, not npm. Run: pnpm run lint');process.exit(1)}\"","preview":"node orchestrator.js prod","prebuild":"node -e \"if(!String(process.env.npm_config_user_agent||'').startsWith('pnpm/')){console.error('[dango] Use pnpm, not npm. Run: pnpm run build');process.exit(1)}\"","preformat":"node -e \"if(!String(process.env.npm_config_user_agent||'').startsWith('pnpm/')){console.error('[dango] Use pnpm, not npm. Run: pnpm run format');process.exit(1)}\"","prepublishOnly":"node sync-deps.js && pnpm run build","update-version":"node update-version.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c79cb51e-b5f7-4bcf-b5f6-e2cb4ab8096d"}},"deprecated":"Update dango to get new features/fixes!","repository":{"url":"git+https://github.com/serifpersia/dango.git","type":"git"},"_npmVersion":"12.1.0","description":"A web application for watching anime.","directories":{},"versionDate":"2026-09-25T17:32:09.105Z","_nodeVersion":"22.23.2","allowScripts":{"esbuild@0.28.2":true},"dependencies":{"ws":"^8.18.0","cors":"^2.8.5","pino":"^10.3.1","dotenv":"^17.4.2","multer":"^2.0.2","cheerio":"^1.2.0","express":"^5.1.0","lru-cache":"^11.5.2","compression":"^1.8.1","youtubei.js":"^18.1.0","got-scraping":"^3.2.9","@octokit/rest":"^22.0.1","fast-xml-parser":"^5.11.1","@xhayper/discord-rpc":"^1.3.4","@octokit/auth-oauth-device":"^8.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.27.0","devDependencies":{"eslint":"^10.2.1","globals":"^17.5.0","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^6.0.3","typescript-eslint":"^8.62.0"},"_npmOperationalInternal":{"tmp":"tmp/dango_3.3.8_1790357766640_0.7980669879426514","host":"s3://npm-registry-packages-npm-production"}},"3.3.9":{"_id":"@serifpersia/dango@3.3.9","bin":{"dango":"orchestrator.js"},"bugs":{"url":"https://github.com/serifpersia/dango/issues"},"dist":{"shasum":"5b60a8bcd5dd04eabf20925b138e5f878f7c0abd","tarball":"https://registry.npmjs.org/@serifpersia/dango/-/dango-3.3.9.tgz","fileCount":191,"integrity":"sha512-57A8DKljtSk9ptAeHO/pRMFIQFrxb69+VG4WTTutYAl6jetIHcabzgl+TBwsq3j9nuImjvMujiAwhe2BSGlbhw==","signatures":[{"sig":"MEUCIQDMXbN0fqvaB0lzhZKcY2zjMo63thBLLhmtbjNsWNHLSAIgPH6k3Flfm3ARM+wq0I2TP+DwtDq7jEAmWiXDQSuY2wk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFLIKGqKECRmlviSW45ovfMSk3lmnI8BhHCH94kckcQ2AiA7Vw5bMc2zK8pU1PBuYee24qMH4DQr0dAZIjBSi3Nfyw=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@serifpersia%2fdango@3.3.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6234356},"main":"orchestrator.js","name":"@serifpersia/dango","type":"commonjs","author":"","engines":{"node":">=22.12.0"},"gitHead":"41a754bbaab7146422298af9369cfdd657241a4f","license":"MIT","scripts":{"dev":"node orchestrator.js dev","lint":"pnpm -r --if-present run lint","test":"pnpm --filter dango-client run test","build":"pnpm -r run build","start":"node orchestrator.js prod","client":"pnpm --filter dango-client run start","format":"prettier --write .","server":"pnpm --filter dango-server run start","prelint":"node -e \"if(!String(process.env.npm_config_user_agent||'').startsWith('pnpm/')){console.error('[dango] Use pnpm, not npm. Run: pnpm run lint');process.exit(1)}\"","preview":"node orchestrator.js prod","prebuild":"node -e \"if(!String(process.env.npm_config_user_agent||'').startsWith('pnpm/')){console.error('[dango] Use pnpm, not npm. Run: pnpm run build');process.exit(1)}\"","preformat":"node -e \"if(!String(process.env.npm_config_user_agent||'').startsWith('pnpm/')){console.error('[dango] Use pnpm, not npm. Run: pnpm run format');process.exit(1)}\"","prepublishOnly":"node sync-deps.js && pnpm run build","update-version":"node update-version.js"},"version":"3.3.9","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c79cb51e-b5f7-4bcf-b5f6-e2cb4ab8096d"}},"homepage":"https://github.com/serifpersia/dango#readme","keywords":["anime","react","express","typescript","streaming","cli"],"repository":{"url":"git+https://github.com/serifpersia/dango.git","type":"git"},"_npmVersion":"12.1.0","description":"A web application for watching anime.","directories":{},"maintainers":[{"name":"serifpersia","email":"duopremade023@gmail.com"}],"versionDate":"2026-09-25T21:08:55.146Z","_nodeVersion":"22.23.2","allowScripts":{"esbuild@0.28.2":true},"dependencies":{"ws":"^8.18.0","cors":"^2.8.5","pino":"^10.3.1","dotenv":"^17.4.2","multer":"^2.0.2","cheerio":"^1.2.0","express":"^5.1.0","lru-cache":"^11.5.2","compression":"^1.8.1","youtubei.js":"^18.1.0","got-scraping":"^3.2.9","@octokit/rest":"^22.0.1","fast-xml-parser":"^5.11.1","@xhayper/discord-rpc":"^1.3.4","@octokit/auth-oauth-device":"^8.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.27.0","devDependencies":{"eslint":"^10.2.1","globals":"^17.5.0","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^6.0.3","typescript-eslint":"^8.62.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dango_3.3.9_1790370830193_0.8920780247314852"}}},"time":{"created":"2026-08-16T12:55:39.501Z","modified":"2026-09-25T21:13:50.624Z","2.4.7":"2026-08-16T12:55:39.768Z","2.4.8":"2026-08-16T13:28:13.164Z","2.4.9":"2026-08-18T16:53:47.545Z","2.5.0":"2026-08-18T17:04:35.284Z","2.5.1":"2026-08-19T21:34:04.952Z","2.5.2":"2026-08-22T10:22:43.051Z","2.5.3":"2026-08-22T11:18:15.756Z","2.5.4":"2026-08-22T11:48:35.637Z","2.5.5":"2026-08-23T13:54:50.758Z","2.5.6":"2026-08-24T19:19:47.064Z","2.5.7":"2026-08-25T08:38:52.274Z","2.5.8":"2026-08-25T11:55:32.752Z","2.5.9":"2026-08-25T16:37:04.609Z","2.6.0":"2026-08-26T01:40:14.591Z","2.6.1":"2026-08-26T10:33:27.421Z","2.6.2":"2026-08-26T22:57:51.349Z","2.6.3":"2026-08-28T21:26:12.825Z","2.6.4":"2026-08-28T21:39:43.206Z","2.6.5":"2026-08-29T09:42:41.430Z","2.6.6":"2026-08-29T20:52:30.493Z","2.6.7":"2026-08-29T21:40:07.618Z","2.6.8":"2026-08-29T23:15:42.515Z","2.6.9":"2026-08-30T19:36:20.232Z","2.7.0":"2026-08-31T13:11:34.224Z","2.7.1":"2026-08-31T17:51:38.881Z","2.7.2":"2026-09-02T10:36:16.364Z","2.7.3":"2026-09-02T16:36:35.219Z","2.7.4":"2026-09-03T09:10:21.451Z","2.7.5":"2026-09-03T09:15:29.566Z","2.7.6":"2026-09-03T10:37:22.135Z","2.7.7":"2026-09-04T13:18:24.247Z","2.7.8":"2026-09-04T16:48:59.797Z","2.7.9":"2026-09-04T17:05:46.099Z","2.8.0":"2026-09-04T17:19:47.572Z","2.8.1":"2026-09-04T17:25:59.938Z","2.8.2":"2026-09-05T17:27:53.801Z","2.8.3":"2026-09-06T11:29:54.788Z","2.8.4":"2026-09-06T14:34:32.909Z","2.8.5":"2026-09-06T16:46:33.911Z","2.8.6":"2026-09-07T17:56:45.055Z","2.8.7":"2026-09-07T19:07:59.178Z","2.8.9":"2026-09-08T10:13:23.507Z","2.9.0":"2026-09-08T15:29:09.174Z","2.9.1":"2026-09-08T19:31:12.370Z","2.9.2":"2026-09-09T14:03:58.344Z","2.9.3":"2026-09-09T15:40:41.353Z","2.9.4":"2026-09-09T17:02:41.922Z","2.9.5":"2026-09-09T17:13:56.472Z","2.9.6":"2026-09-09T20:21:26.840Z","2.9.7":"2026-09-10T06:36:32.301Z","2.9.8":"2026-09-10T06:43:03.674Z","2.9.9":"2026-09-10T09:37:38.984Z","3.0.0":"2026-09-11T08:49:51.842Z","3.0.1":"2026-09-11T09:04:44.106Z","3.0.2":"2026-09-12T09:22:07.954Z","3.0.3":"2026-09-12T18:45:34.370Z","3.0.4":"2026-09-13T14:15:08.842Z","3.0.5":"2026-09-14T11:25:40.732Z","3.0.6":"2026-09-15T13:56:44.646Z","3.0.7":"2026-09-15T14:38:42.174Z","3.0.8":"2026-09-15T14:53:19.834Z","3.0.9":"2026-09-15T16:05:28.539Z","3.1.0":"2026-09-16T09:20:19.211Z","3.1.1":"2026-09-16T10:55:38.803Z","3.1.2":"2026-09-17T07:16:22.488Z","3.1.3":"2026-09-17T14:10:35.249Z","3.1.4":"2026-09-19T09:49:15.681Z","3.1.5":"2026-09-19T12:45:35.620Z","3.1.6":"2026-09-20T11:01:28.653Z","3.1.7":"2026-09-20T11:15:31.266Z","3.1.8":"2026-09-20T11:54:10.980Z","3.1.9":"2026-09-20T20:25:06.211Z","3.2.0":"2026-09-21T16:42:48.634Z","3.2.1":"2026-09-21T17:01:38.127Z","3.2.2":"2026-09-22T12:52:49.287Z","3.2.3":"2026-09-22T13:37:04.585Z","3.2.4":"2026-09-22T17:56:25.059Z","3.2.5":"2026-09-22T18:37:31.308Z","3.2.6":"2026-09-22T18:44:49.226Z","3.2.7":"2026-09-22T19:58:15.848Z","3.2.8":"2026-09-22T20:20:14.600Z","3.2.9":"2026-09-22T22:39:49.573Z","3.3.0":"2026-09-22T22:53:30.009Z","3.3.1":"2026-09-23T00:18:45.655Z","3.3.2":"2026-09-23T09:20:29.247Z","3.3.3":"2026-09-23T09:38:54.252Z","3.3.4":"2026-09-23T19:44:02.462Z","3.3.5":"2026-09-24T10:05:52.541Z","3.3.6":"2026-09-25T11:36:51.476Z","3.3.7":"2026-09-25T14:52:05.788Z","3.3.8":"2026-09-25T17:36:06.754Z","3.3.9":"2026-09-25T21:13:50.303Z"},"bugs":{"url":"https://github.com/serifpersia/dango/issues"},"license":"MIT","homepage":"https://github.com/serifpersia/dango#readme","keywords":["anime","react","express","typescript","streaming","cli"],"repository":{"url":"git+https://github.com/serifpersia/dango.git","type":"git"},"description":"A web application for watching anime.","maintainers":[{"name":"serifpersia","email":"duopremade023@gmail.com"}],"readme":"<div align=\"center\">\n\n<img src=\"client/public/logo.png\" alt=\"dango logo\" width=\"400\"/>\n\n_A local-first anime web app focused on performance, privacy, and personal library tracking._\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-897cff?style=for-the-badge)](https://opensource.org/licenses/MIT)\n![Github stars](https://img.shields.io/github/stars/serifpersia/dango.svg?style=for-the-badge&color=897cff)\n[![App version](https://img.shields.io/badge/dango-3.3.9-897cff?style=for-the-badge)](https://github.com/serifpersia/dango)\n\n![Users](https://dango-users-badge.ramiserifpersia.workers.dev)\n\n[![Provider Status](https://dango-users-badge.ramiserifpersia.workers.dev/?provider=all)](https://dango-users-badge.ramiserifpersia.workers.dev/?view=status)\n\n![Animation](docs/showcase.webp)\n\n</div>\n\n---\n\n**dango** is a lightweight, self-hosted Node.js application built for querying anime metadata, managing personal watchlists, and logging viewing progress through a fast local interface.\n\n## Highlights\n\n- **Hardware Efficient:** Engineered with a minimal footprint to run effortlessly on low-spec hardware, SBCs, and mobile environments.\n- **Metadata & Discovery:** Browse trending titles, search catalog entries, and view release schedules locally.\n- **Multi-Provider Playback:** Switch seamlessly between multiple third-party streaming providers directly within the player interface.\n- **Watchlist Tracking:** Categorize titles (Watching, Completed, Plan to Watch) with fine-grained progress states.\n- **Library Insights:** Built-in dashboard tracking viewing habits, personal stats, and completion ratios.\n- **Trackers & Sync:** Bi-directional AniList sync and one-way MyAnimeList list imports.\n- **Expanded Media Hub:** Dedicated interfaces for Manga, ASMR, Youtube Music, Internet Radio and TV/Movies.\n- **LAN Security:** Optional LAN authentication with password enforcement for multi-device local network deployments.\n\n---\n\n## Installation\n\n### Prerequisites\n\n| Requirement | Supported Version      | Notes                                                     |\n| :---------- | :--------------------- | :-------------------------------------------------------- |\n| **Node.js** | `>= 22.12.0`           | Required runtime ([Download](https://nodejs.org/))        |\n| **npm**     | Bundled with Node      | Global install (`npm install -g @serifpersia/dango`)      |\n| **pnpm**    | `11` (`npm i -g pnpm`) | Only needed for source development (`run.bat` / `run.sh`) |\n\n---\n\n### Quick Install (CLI)\n\nInstall the global CLI binary via npm:\n\n```bash\nnpm install -g @serifpersia/dango\n```\n\nLaunch the interface from anywhere:\n\n```bash\ndango\n```\n\n> [!IMPORTANT]\n> Once the server initializes, navigate to `http://localhost:3000` in your browser. The background process runs locally until terminated (`Ctrl + C or q key press as well as window X button closing action`).\n\n---\n\n### Release Zip (no install)\n\nNo `npm install` needed — dependencies ship inside the zip, client is prebuilt:\n\n1. Download and extract `dango.zip` from [Releases](https://github.com/serifpersia/dango/releases).\n2. Install Node.js 22.12+ (`node --version` to check).\n3. Launch using `run.bat` (Windows) or `./run.sh` (Linux/macOS), then open `http://localhost:3000`.\n\n---\n\n### Android Installation\n\n<details>\n<summary><b>Option 1: Termux Environment</b></summary>\n\n<br>\n\nRun standard dango via Termux:\n\n1. Install **[Termux](https://termux.dev/)** (obtain via [F-Droid](https://f-droid.org/en/packages/com.termux/)).\n2. Update base dependencies:\n   ```bash\n   pkg update\n   ```\n   ```bash\n   pkg upgrade -y\n   ```\n3. Install Node.js:\n   ```bash\n   pkg install nodejs -y\n   ```\n4. Install and run dango:\n   ```bash\n   npm install -g @serifpersia/dango\n   dango\n   ```\n5. Open your mobile browser at `http://localhost:3000`.\n\n</details>\n\n<details>\n<summary><b>Option 2: Standalone APK</b></summary>\n\n<br>\n\nA standalone bundle packaging Node.js, dango, and a local WebView container.\n\n1. Grab the latest `.apk` from [Releases](https://github.com/serifpersia/dango/releases).\n2. Install the APK (allow _Install from Unknown Sources_ when prompted).\n3. Open the app. Core runtimes auto-provision on first launch.\n\n**Compiling from Source:**\n\n```bash\ncd android-app\npython fetch-termux-node.py\n\n# Windows\nbuild-debug.bat\n\n# Linux / macOS\nchmod +x build-debug.sh && ./build-debug.sh\n```\n\n_Build requirements: Python 3, JDK 17+, Android SDK (Platform 36, Build-Tools 36.0.0)._\n\n</details>\n\n---\n\n## Manual Setup (Development)\n\nThe project is structured as a **pnpm workspace** (`client` and `server`) managed by a unified lockfile. You need Node.js 22.12+ and pnpm 11 (`npm install -g pnpm`).\n\n```bash\n# Clone the repository\ngit clone https://github.com/serifpersia/dango.git\ncd dango\n\n# Install dependencies (root + workspaces)\npnpm install\n\n# Compile workspaces (Vite frontend + tsc backend)\npnpm run build\n```\n\nRun via interactive environment scripts:\n\n```bash\n# Linux / macOS\nchmod +x run.sh && ./run.sh\n\n# Windows\nrun.bat\n```\n\n### Command Reference\n\n| Command                              | Action                                     |\n| :----------------------------------- | :----------------------------------------- |\n| `dango`                              | Start the installed client daemon          |\n| `dango --version`                    | Display current installed version          |\n| `pnpm run dev`                       | Start full dev stack via `orchestrator.js` |\n| `pnpm --filter dango-client run dev` | Run Vite frontend independently            |\n| `pnpm --filter dango-server run dev` | Run backend via `tsx watch`                |\n| `pnpm -r run lint`                   | Run ESLint passes across all packages      |\n\n---\n\n## Storage & Persistence\n\ndango stores SQLite databases, cached indices, and credentials in the OS application data registry rather than the global `node_modules` path:\n\n| Platform    | Default Path                                     |\n| :---------- | :----------------------------------------------- |\n| **Windows** | `%APPDATA%\\dango`                                |\n| **macOS**   | `~/Library/Application Support/dango`            |\n| **Linux**   | `$XDG_DATA_HOME/dango` or `~/.local/share/dango` |\n\n> [!IMPORTANT]\n> Legacy installs will automatically migrate `.env` variables and SQLite records from older `server/` structures into the proper user directory on launch.\n\n---\n\n## Data Synchronization\n\ndango is **local-first**: primary application state lives in your local SQLite store. Cloud syncing creates point-in-time JSON snapshots to maintain seamless backups across multiple installations.\n\n```\nSync Priority Engine:\n[1] GitHub Sync ──(fallback)──> [2] Google Drive ──(fallback)──> [3] Rclone\n```\n\n### 1. GitHub Sync\n\n1. Open **Settings → Synchronization**.\n2. Click **Sign in with GitHub**.\n3. Authorize via the OAuth device code flow.\n\ndango creates a private repository named `dango-sync-data` to read/write JSON snapshots (`sync.json` for production, `sync.dev.json` for development).\n\n### 2. Google Drive\n\n1. Open **Settings → Synchronization**.\n2. Click **Sign in with Google** and authorize permissions.\n\nData writes directly to a sandbox `appDataFolder` on your personal Drive. To clear backups, revoke app permissions under Google Drive's _Manage Apps_ menu.\n\n> [!IMPORTANT]\n> Advanced users can supply their own custom Github and Google OAuth Client ID & Secret in settings.\n\n### 3. Rclone (Third-Party Remotes)\n\nUsed as a manual fallback for services like Mega, Dropbox, or custom WebDAV:\n\n1. Ensure `rclone` is installed and mapped to your system `PATH`.\n2. Configure your desired target via `rclone config`.\n3. Pick your configured remote profile inside **Settings → Synchronization**.\n\n---\n\n## Tracker Integrations\n\n### AniList\n\nBidirectional sync is fully supported:\n\n- Go to **Trackers** in the navigation panel.\n- Select **Sync Now**.\n- Local episode progress updates remotely; external catalog updates merge safely into your local database without overwriting uncommitted states.\n\n---\n\n## Community\n\nNeed help configuring your setup, troubleshooting builds, discussing feature requests or simply just chat about anime?\n\n<div align=\"left\">\n\n[![Join Discord](https://invidget.switchblade.xyz/2FTSPXCsvn)](https://discord.gg/2FTSPXCsvn)\n\n</div>\n\n---\n\n## Disclaimer & Legal\n\ndango is an open-source, local-first web app. It does not host or distribute unauthorized media or copyrighted video assets. Users are solely responsible for ensuring their usage aligns with relevant local laws and digital copyright regulations.\n\n## License\n\nDistributed under the terms of the [MIT License](LICENSE).\n","readmeFilename":"README.md"}