const { MochOptions } = require('../moch/moch'); const { Providers } = require('./filter'); const { showDebridCatalog } = require('../moch/options'); const { getManifestOverride } = require('./configuration'); const { Type } = require('./types'); const DefaultProviders = Providers.options.map(provider => provider.key); const CatalogMochs = Object.values(MochOptions).filter(moch => moch.catalog); function manifest(config = {}) { const defaultManifest = { id: 'com.stremio.torrentio.addon', version: '0.0.13', name: 'Torrentio', description: getDescription(config), catalogs: getCatalogs(config), resources: getResources(config), types: [Type.MOVIE, Type.SERIES, Type.ANIME, Type.OTHER], background: `https://i.ibb.co/VtSfFP9/t8wVwcg.jpg`, logo: `https://i.ibb.co/w4BnkC9/GwxAcDV.png`, behaviorHints: { configurable: true, configurationRequired: false } } const overrideManifest = getManifestOverride(config); return Object.assign(defaultManifest, overrideManifest); } function dummyManifest() { const manifestDefault = manifest(); manifestDefault.catalogs = [{ id: 'dummy', type: Type.OTHER }]; manifestDefault.resources = ['stream', 'meta']; return manifestDefault; } function getDescription(config) { const providersList = config.providers || DefaultProviders; const enabledProvidersDesc = Providers.options .map(provider => `${provider.label}${providersList.includes(provider.key) ? '(+)' : '(-)'}`) .join(', ') const enabledMochs = Object.values(MochOptions) .filter(moch => config[moch.key]) .map(moch => moch.name) .join(' & '); const possibleMochs = Object.values(MochOptions).map(moch => moch.name).join('/') const mochsDesc = enabledMochs ? ` and ${enabledMochs} enabled` : ''; return 'Provides torrent streams from scraped torrent providers.' + ` Currently supports ${enabledProvidersDesc}${mochsDesc}.` + ` To configure providers, ${possibleMochs} support and other settings visit https://torrentio.strem.fun` } function getCatalogs(config) { return CatalogMochs .filter(moch => showDebridCatalog(config) && config[moch.key]) .map(moch => ({ id: `torrentio-${moch.key}`, name: `${moch.name}`, type: 'other', })); } function getResources(config) { const streamResource = { name: 'stream', types: [Type.MOVIE, Type.SERIES], idPrefixes: ['tt', 'kitsu'] }; const metaResource = { name: 'meta', types: [Type.OTHER], idPrefixes: CatalogMochs.filter(moch => config[moch.key]).map(moch => moch.key) }; if (showDebridCatalog(config) && CatalogMochs.filter(moch => config[moch.key]).length) { return [streamResource, metaResource]; } return [streamResource]; } module.exports = { manifest, dummyManifest };