diff --git a/dist/extension-registry.json b/dist/extension-registry.json index 9b9331d..bc9fbcb 100644 --- a/dist/extension-registry.json +++ b/dist/extension-registry.json @@ -154,6 +154,28 @@ "extractors": ["MegaUp"], "isSourceEmbed": true, "haveMultiServers": true + }, + { + "id": "tollywood", + "name": "Tollywood", + "description": "Telugu and Tollywood movies streaming from MovieRulz with multiple servers", + "version": "1.0.0", + "author": { + "name": "RNConsumet Team", + "url": "https://github.com/uwumilabs" + }, + "category": "movies", + "main": "https://raw.githubusercontent.com/uwumilabs/react-native-consumet/refs/heads/main/dist/providers/movies/tollywood/create-tollywood.js", + "factoryName": "createTollywood", + "baseUrl": "https://www.5movierulz.tires", + "logo": "https://www.5movierulz.tires/favicon.ico", + "languages": ["te", "hi", "en"], + "nsfw": false, + "status": "stable", + "lastUpdated": "2025-08-05T00:00:00Z", + "extractors": ["StreamTape"], + "isSourceEmbed": true, + "haveMultiServers": true } ] } diff --git a/dist/extractors/StreamP2P.d.ts b/dist/extractors/StreamP2P.d.ts index 4a30bf6..2f5d3bb 100644 --- a/dist/extractors/StreamP2P.d.ts +++ b/dist/extractors/StreamP2P.d.ts @@ -7,4 +7,4 @@ declare class StreamP2P extends VideoExtractor { extract(videoUrl: URL): Promise; } export default StreamP2P; -//# sourceMappingURL=streamp2p.d.ts.map \ No newline at end of file +//# sourceMappingURL=StreamP2P.d.ts.map \ No newline at end of file diff --git a/dist/extractors/StreamP2P.d.ts.map b/dist/extractors/StreamP2P.d.ts.map index 7c3d9f9..ed524da 100644 --- a/dist/extractors/StreamP2P.d.ts.map +++ b/dist/extractors/StreamP2P.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"streamp2p.d.ts","sourceRoot":"","sources":["../../src/extractors/streamp2p.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,cAAc,MAAM,2BAA2B,CAAC;AAGvD,cAAM,SAAU,SAAQ,cAAc;IACpC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAe;IAC3C,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAM;IAEjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqC;IAEpD,OAAO,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC;CA6C1D;AAED,eAAe,SAAS,CAAC"} \ No newline at end of file +{"version":3,"file":"StreamP2P.d.ts","sourceRoot":"","sources":["../../src/extractors/StreamP2P.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,cAAc,MAAM,2BAA2B,CAAC;AAGvD,cAAM,SAAU,SAAQ,cAAc;IACpC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAe;IAC3C,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAM;IAEjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqC;IAEpD,OAAO,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC;CA6C1D;AAED,eAAe,SAAS,CAAC"} \ No newline at end of file diff --git a/dist/extractors/StreamP2P.js b/dist/extractors/StreamP2P.js index ef9ab6a..152d3cf 100644 --- a/dist/extractors/StreamP2P.js +++ b/dist/extractors/StreamP2P.js @@ -64,4 +64,4 @@ class StreamP2P extends video_extractor_1.default { } } exports.default = StreamP2P; -//# sourceMappingURL=streamp2p.js.map \ No newline at end of file +//# sourceMappingURL=StreamP2P.js.map \ No newline at end of file diff --git a/dist/extractors/StreamP2P.js.map b/dist/extractors/StreamP2P.js.map index 8f8f968..0a84e8f 100644 --- a/dist/extractors/StreamP2P.js.map +++ b/dist/extractors/StreamP2P.js.map @@ -1 +1 @@ -{"version":3,"file":"streamp2p.js","sourceRoot":"","sources":["../../src/extractors/streamp2p.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,cAAc;AACd,kDAA0B;AAE1B,gFAAuD;AACvD,kDAAgD;AAEhD,MAAM,SAAU,SAAQ,yBAAc;IAAtC;;QACY,eAAU,GAAW,WAAW,CAAC;QACjC,YAAO,GAAa,EAAE,CAAC;QAEhB,SAAI,GAAG,iCAAiC,CAAC;IA+C5D,CAAC;IA7CO,OAAO,CAAC,QAAa;;YACzB,MAAM,OAAO,GAAG;gBACd,SAAS,EAAE,IAAI,CAAC,IAAI;gBACpB,YAAY,EAAE,sBAAU;aACzB,CAAC;YAEF,qCAAqC;YACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAE5C,8BAA8B;YAC9B,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,oBAAoB,OAAO,EAAE,CAAC;YAEtD,WAAW;YACX,MAAM,QAAQ,GAAG,kBAAkB,CAAC;YACpC,MAAM,EAAE,GAAG,kBAAkB,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;gBAEjE,2BAA2B;gBAC3B,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAE3D,2BAA2B;gBAC3B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC9C,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAEhD,0CAA0C;gBAC1C,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,aAAa,EAAS,EAAE,GAAG,EAAE;oBAChF,EAAE,EAAE,WAAW;oBACf,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG;oBACvB,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK;iBAC5B,CAAC,CAAC;gBAEH,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAEtC,4CAA4C;gBAC5C,0DAA0D;gBAE1D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBACnD,kCAAkC;gBACpC,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;KAAA;CACF;AAED,kBAAe,SAAS,CAAC"} \ No newline at end of file +{"version":3,"file":"StreamP2P.js","sourceRoot":"","sources":["../../src/extractors/StreamP2P.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,cAAc;AACd,kDAA0B;AAE1B,gFAAuD;AACvD,kDAAgD;AAEhD,MAAM,SAAU,SAAQ,yBAAc;IAAtC;;QACY,eAAU,GAAW,WAAW,CAAC;QACjC,YAAO,GAAa,EAAE,CAAC;QAEhB,SAAI,GAAG,iCAAiC,CAAC;IA+C5D,CAAC;IA7CO,OAAO,CAAC,QAAa;;YACzB,MAAM,OAAO,GAAG;gBACd,SAAS,EAAE,IAAI,CAAC,IAAI;gBACpB,YAAY,EAAE,sBAAU;aACzB,CAAC;YAEF,qCAAqC;YACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAE5C,8BAA8B;YAC9B,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,oBAAoB,OAAO,EAAE,CAAC;YAEtD,WAAW;YACX,MAAM,QAAQ,GAAG,kBAAkB,CAAC;YACpC,MAAM,EAAE,GAAG,kBAAkB,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;gBAEjE,2BAA2B;gBAC3B,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAE3D,2BAA2B;gBAC3B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC9C,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAEhD,0CAA0C;gBAC1C,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,aAAa,EAAS,EAAE,GAAG,EAAE;oBAChF,EAAE,EAAE,WAAW;oBACf,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG;oBACvB,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK;iBAC5B,CAAC,CAAC;gBAEH,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAEtC,4CAA4C;gBAC5C,0DAA0D;gBAE1D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBACnD,kCAAkC;gBACpC,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;KAAA;CACF;AAED,kBAAe,SAAS,CAAC"} \ No newline at end of file diff --git a/dist/providers/movies/index.d.ts b/dist/providers/movies/index.d.ts index 3417594..b02e5ac 100644 --- a/dist/providers/movies/index.d.ts +++ b/dist/providers/movies/index.d.ts @@ -6,15 +6,19 @@ import HiMovies from './himovies/himovies'; import { createHiMovies } from './himovies/create-himovies'; import YFlix from './yflix/yflix'; import { createYFlix } from './yflix/create-yflix'; +import Tollywood from './tollywood/tollywood'; +import { createTollywood } from './tollywood/create-tollywood'; declare const _default: { MultiMovies: typeof MultiMovies; NetflixMirror: typeof NetflixMirror; HiMovies: typeof HiMovies; YFlix: typeof YFlix; + Tollywood: typeof Tollywood; MultiStream: typeof MultiStream; createHiMovies: typeof createHiMovies; createMultiMovies: typeof createMultiMovies; createYFlix: typeof createYFlix; + createTollywood: typeof createTollywood; }; export default _default; //# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/dist/providers/movies/index.d.ts.map b/dist/providers/movies/index.d.ts.map index c273120..d9be813 100644 --- a/dist/providers/movies/index.d.ts.map +++ b/dist/providers/movies/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/movies/index.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;;;;;;;;;;;AAEnD,wBAUE"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/movies/index.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;;;;;;;;;;;;;AAE/D,wBAYE"} \ No newline at end of file diff --git a/dist/providers/movies/index.js b/dist/providers/movies/index.js index 7ec9921..44bcc17 100644 --- a/dist/providers/movies/index.js +++ b/dist/providers/movies/index.js @@ -12,15 +12,19 @@ const himovies_1 = __importDefault(require("./himovies/himovies")); const create_himovies_1 = require("./himovies/create-himovies"); const yflix_1 = __importDefault(require("./yflix/yflix")); const create_yflix_1 = require("./yflix/create-yflix"); +const tollywood_1 = __importDefault(require("./tollywood/tollywood")); +const create_tollywood_1 = require("./tollywood/create-tollywood"); exports.default = { // DramaCool, MultiMovies: multimovies_1.default, NetflixMirror: netflixmirror_1.default, HiMovies: himovies_1.default, YFlix: yflix_1.default, + Tollywood: tollywood_1.default, MultiStream: multistream_1.default, createHiMovies: create_himovies_1.createHiMovies, createMultiMovies: create_multimovies_1.createMultiMovies, createYFlix: create_yflix_1.createYFlix, + createTollywood: create_tollywood_1.createTollywood, }; //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/providers/movies/index.js.map b/dist/providers/movies/index.js.map index 7c30cc9..9534797 100644 --- a/dist/providers/movies/index.js.map +++ b/dist/providers/movies/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/movies/index.ts"],"names":[],"mappings":";;;;;AAAA,uCAAuC;AACvC,4EAAoD;AACpD,yEAAqE;AACrE,oEAA4C;AAC5C,gEAAwC;AACxC,mEAA2C;AAC3C,gEAA4D;AAC5D,0DAAkC;AAClC,uDAAmD;AAEnD,kBAAe;IACb,aAAa;IACb,WAAW,EAAX,qBAAW;IACX,aAAa,EAAb,uBAAa;IACb,QAAQ,EAAR,kBAAQ;IACR,KAAK,EAAL,eAAK;IACL,WAAW,EAAX,qBAAW;IACX,cAAc,EAAd,gCAAc;IACd,iBAAiB,EAAjB,sCAAiB;IACjB,WAAW,EAAX,0BAAW;CACZ,CAAC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/movies/index.ts"],"names":[],"mappings":";;;;;AAAA,uCAAuC;AACvC,4EAAoD;AACpD,yEAAqE;AACrE,oEAA4C;AAC5C,gEAAwC;AACxC,mEAA2C;AAC3C,gEAA4D;AAC5D,0DAAkC;AAClC,uDAAmD;AACnD,sEAA8C;AAC9C,mEAA+D;AAE/D,kBAAe;IACb,aAAa;IACb,WAAW,EAAX,qBAAW;IACX,aAAa,EAAb,uBAAa;IACb,QAAQ,EAAR,kBAAQ;IACR,KAAK,EAAL,eAAK;IACL,SAAS,EAAT,mBAAS;IACT,WAAW,EAAX,qBAAW;IACX,cAAc,EAAd,gCAAc;IACd,iBAAiB,EAAjB,sCAAiB;IACjB,WAAW,EAAX,0BAAW;IACX,eAAe,EAAf,kCAAe;CAChB,CAAC"} \ No newline at end of file diff --git a/dist/providers/movies/tollywood/create-tollywood.d.ts b/dist/providers/movies/tollywood/create-tollywood.d.ts new file mode 100644 index 0000000..0990036 --- /dev/null +++ b/dist/providers/movies/tollywood/create-tollywood.d.ts @@ -0,0 +1,25 @@ +import { type IMovieInfo, type IEpisodeServer, type StreamingServers, type ISource, type IMovieResult, type ISearch, type ProviderContext } from '../../../models'; +/** + * Tollywood Movie Provider for MovieRulz + * Scrapes 5movierulz.tires for Telugu/Tollywood movies + */ +export declare function createTollywood(ctx: ProviderContext, customBaseURL?: string): { + supportedTypes: Set; + search: (query: string, page?: number) => Promise>; + fetchMediaInfo: (mediaId: string) => Promise; + fetchEpisodeSources: (episodeId: string, mediaId: string, server?: StreamingServers) => Promise; + fetchEpisodeServers: (episodeId: string, _mediaId: string) => Promise; + fetchTeluguFeatured: (page?: number) => Promise>; + fetchTeluguByYear: (year: number, page?: number) => Promise>; + fetchLatestMovies: () => Promise; + name: string; + languages: string[] | string; + classPath: string; + baseUrl: string; + isNSFW: boolean; + logo: string; + isWorking?: boolean; + isDubAvailableSeparately?: boolean; +}; +export type TollywoodProviderInstance = ReturnType; +//# sourceMappingURL=create-tollywood.d.ts.map \ No newline at end of file diff --git a/dist/providers/movies/tollywood/create-tollywood.d.ts.map b/dist/providers/movies/tollywood/create-tollywood.d.ts.map new file mode 100644 index 0000000..3e9bb85 --- /dev/null +++ b/dist/providers/movies/tollywood/create-tollywood.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"create-tollywood.d.ts","sourceRoot":"","sources":["../../../../src/providers/movies/tollywood/create-tollywood.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,eAAe,EAErB,MAAM,iBAAiB,CAAC;AAEzB;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,EAAE,aAAa,CAAC,EAAE,MAAM;;oBAsB7C,MAAM,SAAQ,MAAM,KAAO,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;8BA2K/C,MAAM,KAAG,OAAO,CAAC,UAAU,CAAC;qCAmJtD,MAAM,WACR,MAAM,WACP,gBAAgB,KACvB,OAAO,CAAC,OAAO,CAAC;qCA7E2B,MAAM,YAAY,MAAM,KAAG,OAAO,CAAC,cAAc,EAAE,CAAC;iCApLzD,MAAM,KAAO,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;8BAuD7C,MAAM,SAAQ,MAAM,KAAO,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;6BAoS5D,OAAO,CAAC,YAAY,EAAE,CAAC;;;;;;;;;EA4D5D;AAED,MAAM,MAAM,yBAAyB,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC"} \ No newline at end of file diff --git a/dist/providers/movies/tollywood/create-tollywood.js b/dist/providers/movies/tollywood/create-tollywood.js new file mode 100644 index 0000000..ac34949 --- /dev/null +++ b/dist/providers/movies/tollywood/create-tollywood.js @@ -0,0 +1,436 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createTollywood = createTollywood; +/** + * Tollywood Movie Provider for MovieRulz + * Scrapes 5movierulz.tires for Telugu/Tollywood movies + */ +function createTollywood(ctx, customBaseURL) { + const { load, extractors, enums, axios, createCustomBaseUrl } = ctx; + const { StreamTape } = extractors; + const { StreamingServers: StreamingServersEnum, TvType: TvTypeEnum } = enums; + const baseUrl = createCustomBaseUrl('https://www.5movierulz.tires', customBaseURL); + const config = { + name: 'Tollywood', + languages: ['te', 'hi', 'en'], + classPath: 'MOVIES.Tollywood', + logo: 'https://www.5movierulz.tires/favicon.ico', + baseUrl, + isNSFW: false, + isWorking: true, + }; + const supportedTypes = new Set([TvTypeEnum.MOVIE]); + /** + * Search for Telugu/Tollywood movies + */ + const search = (query_1, ...args_1) => __awaiter(this, [query_1, ...args_1], void 0, function* (query, page = 1) { + const searchResult = { + currentPage: page, + hasNextPage: false, + results: [], + }; + try { + const { data } = yield axios.get(`${config.baseUrl}`, { + params: { + s: query, + p: page, + cat: 'telugu', + lang: 'te', + opt: '0', + ac: '0', + }, + }); + const $ = load(data); + $('div[id^="post-"]').each((_idx, el) => { + const titleElement = $(el).find('h2'); + const linkElement = $(el).find('a'); + const imageElement = $(el).find('img'); + const title = titleElement.text().trim(); + const url = linkElement.attr('href'); + const image = imageElement.attr('src') || imageElement.attr('data-src'); + const yearMatch = title.match(/\((\d{4})\)/); + const year = yearMatch ? yearMatch[1] : undefined; + const cleanTitle = title + .replace(/\s*\(\d{4}\)\s*/g, '') + .replace(/\s*(HDRip|DVDScr|BRRip|DVDRip|WebRip|CAM|HDTS|Telugu|Hindi|Dubbed|Movie|Watch Online Free)\s*/g, '') + .trim(); + if (url && cleanTitle) { + const movieId = url.replace(config.baseUrl, '').replace(/^\/+/, '').replace(/\/$/, ''); + searchResult.results.push({ + id: movieId, + title: cleanTitle, + url: url.startsWith('http') ? url : `${config.baseUrl}/${url}`, + image: (image === null || image === void 0 ? void 0 : image.startsWith('http')) ? image : undefined, + releaseDate: year, + type: TvTypeEnum.MOVIE, + }); + } + }); + const nextButton = $('.pagination .next'); + searchResult.hasNextPage = nextButton.length > 0; + return searchResult; + } + catch (err) { + throw new Error(`Tollywood search failed: ${err.message}`); + } + }); + /** + * Fetch Telugu featured movies + */ + const fetchTeluguFeatured = (...args_1) => __awaiter(this, [...args_1], void 0, function* (page = 1) { + const searchResult = { + currentPage: page, + hasNextPage: false, + results: [], + }; + try { + const { data } = yield axios.get(`${config.baseUrl}/category/telugu-featured/page/${page}/`); + const $ = load(data); + $('div[id^="post-"]').each((_idx, el) => { + const titleElement = $(el).find('h2'); + const linkElement = $(el).find('a'); + const imageElement = $(el).find('img'); + const title = titleElement.text().trim(); + const url = linkElement.attr('href'); + const image = imageElement.attr('src') || imageElement.attr('data-src'); + const yearMatch = title.match(/\((\d{4})\)/); + const year = yearMatch ? yearMatch[1] : undefined; + const cleanTitle = title + .replace(/\s*\(\d{4}\)\s*/g, '') + .replace(/\s*(HDRip|DVDScr|BRRip|DVDRip|WebRip|CAM|HDTS|Telugu|Movie|Watch Online Free)\s*/g, '') + .trim(); + if (url && cleanTitle) { + const movieId = url.replace(config.baseUrl, '').replace(/^\/+/, '').replace(/\/$/, ''); + searchResult.results.push({ + id: movieId, + title: cleanTitle, + url: url.startsWith('http') ? url : `${config.baseUrl}/${url}`, + image: (image === null || image === void 0 ? void 0 : image.startsWith('http')) ? image : undefined, + releaseDate: year, + type: TvTypeEnum.MOVIE, + }); + } + }); + const nextButton = $('.pagination .next'); + searchResult.hasNextPage = nextButton.length > 0; + return searchResult; + } + catch (err) { + throw new Error(`Tollywood fetchTeluguFeatured failed: ${err.message}`); + } + }); + /** + * Fetch Telugu movies by year + */ + const fetchTeluguByYear = (year_1, ...args_1) => __awaiter(this, [year_1, ...args_1], void 0, function* (year, page = 1) { + const searchResult = { + currentPage: page, + hasNextPage: false, + results: [], + }; + try { + const { data } = yield axios.get(`${config.baseUrl}/category/telugu-movies-${year}/page/${page}/`); + const $ = load(data); + $('div[id^="post-"]').each((_idx, el) => { + const titleElement = $(el).find('h2'); + const linkElement = $(el).find('a'); + const imageElement = $(el).find('img'); + const title = titleElement.text().trim(); + const url = linkElement.attr('href'); + const image = imageElement.attr('src') || imageElement.attr('data-src'); + const cleanTitle = title + .replace(/\s*\(\d{4}\)\s*/g, '') + .replace(/\s*(HDRip|DVDScr|BRRip|DVDRip|WebRip|CAM|HDTS|Telugu|Movie|Watch Online Free)\s*/g, '') + .trim(); + if (url && cleanTitle) { + const movieId = url.replace(config.baseUrl, '').replace(/^\/+/, '').replace(/\/$/, ''); + searchResult.results.push({ + id: movieId, + title: cleanTitle, + url: url.startsWith('http') ? url : `${config.baseUrl}/${url}`, + image: (image === null || image === void 0 ? void 0 : image.startsWith('http')) ? image : undefined, + releaseDate: year.toString(), + type: TvTypeEnum.MOVIE, + }); + } + }); + const nextButton = $('.pagination .next'); + searchResult.hasNextPage = nextButton.length > 0; + return searchResult; + } + catch (err) { + throw new Error(`Tollywood fetchTeluguByYear failed: ${err.message}`); + } + }); + /** + * Fetch media info for a movie + */ + const fetchMediaInfo = (mediaId) => __awaiter(this, void 0, void 0, function* () { + const url = mediaId.startsWith('http') ? mediaId : `${config.baseUrl}/${mediaId}`; + const movieInfo = { + id: mediaId, + title: '', + url, + }; + try { + const { data } = yield axios.get(url, { + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', + }, + }); + const $ = load(data); + const title = $('h1').first().text().trim(); + movieInfo.title = title; + const descriptionElement = $('div[class*="summary"], div[class*="description"], p.description').first(); + movieInfo.description = descriptionElement.text().trim() || ''; + const posterElement = $('img[class*="poster"], img.wp-post-image').first(); + movieInfo.image = posterElement.attr('src') || posterElement.attr('data-src'); + const yearMatch = title.match(/\((\d{4})\)/); + movieInfo.releaseDate = yearMatch ? yearMatch[1] : undefined; + const genres = []; + $('a[rel="category tag"]').each((_idx, el) => { + const genre = $(el).text().trim(); + if (genre && !genres.includes(genre)) { + genres.push(genre); + } + }); + movieInfo.genres = genres; + movieInfo.episodes = [ + { + id: mediaId, + title: title || 'Full Movie', + number: 1, + url, + }, + ]; + movieInfo.type = TvTypeEnum.MOVIE; + return movieInfo; + } + catch (err) { + throw new Error(`Tollywood fetchMediaInfo failed: ${err.message}`); + } + }); + /** + * Helper function to identify server name from URL + */ + function getServerName(urlStr) { + if (urlStr.includes('streamtape')) + return 'StreamTape'; + if (urlStr.includes('vcdnlare')) + return 'VcdnLare'; + if (urlStr.includes('uperbox')) + return 'UperBox'; + if (urlStr.includes('dropress')) + return 'Dropress'; + if (urlStr.includes('vidshare')) + return 'VidShare'; + if (urlStr.includes('mixdrop')) + return 'MixDrop'; + if (urlStr.includes('dood')) + return 'DoodStream'; + return 'Unknown'; + } + /** + * Fetch episode servers (streaming sources) + */ + const fetchEpisodeServers = (episodeId, _mediaId) => __awaiter(this, void 0, void 0, function* () { + const url = episodeId.startsWith('http') ? episodeId : `${config.baseUrl}/${episodeId}`; + try { + const { data } = yield axios.get(url, { + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', + }, + }); + const $ = load(data); + const servers = []; + const scripts = $('script').map((_idx, el) => $(el).html()).get(); + for (const script of scripts) { + if (!script) + continue; + const iframeMatches = script.match(/https?:\/\/[^"'\s<>]+/gi) || []; + for (const match of iframeMatches) { + if (match.includes('streamtape') || + match.includes('vcdnlare') || + match.includes('uperbox') || + match.includes('dropress') || + match.includes('vidshare') || + match.includes('mixdrop') || + match.includes('dood')) { + const cleanUrl = match.replace(/[,\s"'"]$/, ''); + const serverName = getServerName(cleanUrl); + if (!servers.find(s => s.url === cleanUrl)) { + servers.push({ + name: serverName, + url: cleanUrl, + }); + } + } + } + } + $('iframe').each((_idx, el) => { + const src = $(el).attr('src'); + if (src && (src.includes('streamtape') || src.includes('vcdnlare') || src.includes('uperbox') || src.includes('dropress'))) { + const serverName = getServerName(src); + if (!servers.find(s => s.url === src)) { + servers.push({ + name: serverName, + url: src, + }); + } + } + }); + if (servers.length === 0) { + servers.push({ + name: 'StreamTape', + url, + }); + } + return servers; + } + catch (err) { + throw new Error(`Tollywood fetchEpisodeServers failed: ${err.message}`); + } + }); + /** + * Fetch episode sources (actual video URLs) + */ + const fetchEpisodeSources = (episodeId_1, mediaId_1, ...args_1) => __awaiter(this, [episodeId_1, mediaId_1, ...args_1], void 0, function* (episodeId, mediaId, server = StreamingServersEnum.StreamTape) { + try { + const servers = yield fetchEpisodeServers(episodeId, mediaId); + if (servers.length === 0) { + throw new Error('No streaming servers found'); + } + const serverData = servers.find(s => s.name.toLowerCase() === server.toLowerCase()) || servers[0]; + const serverUrl = new URL(serverData.url); + if (serverData.url.includes('streamtape.com') || serverData.url.includes('streamtape')) { + try { + if (!StreamTape) { + throw new Error('StreamTape extractor not available'); + } + const streamTapeExtractor = new StreamTape(); + const sources = yield streamTapeExtractor.extract(serverUrl); + return { + headers: { Referer: config.baseUrl }, + sources, + }; + } + catch (_a) { + return { + headers: { Referer: config.baseUrl }, + sources: [ + { + url: serverData.url, + isM3U8: serverData.url.includes('.m3u8'), + }, + ], + }; + } + } + if (serverData.url.includes('vcdnlare')) { + return { + headers: { Referer: config.baseUrl }, + sources: [ + { + url: serverData.url, + isM3U8: true, + }, + ], + }; + } + if (serverData.url.includes('uperbox')) { + return { + headers: { Referer: config.baseUrl }, + sources: [ + { + url: serverData.url, + isM3U8: serverData.url.includes('.m3u8'), + }, + ], + }; + } + if (serverData.url.includes('dropress')) { + return { + headers: { Referer: config.baseUrl }, + sources: [ + { + url: serverData.url, + isM3U8: serverData.url.includes('.m3u8'), + }, + ], + }; + } + return { + headers: { Referer: config.baseUrl }, + sources: [ + { + url: serverData.url, + isM3U8: serverData.url.includes('.m3u8'), + }, + ], + }; + } + catch (err) { + throw new Error(`Tollywood fetchEpisodeSources failed: ${err.message}`); + } + }); + /** + * Fetch latest Telugu movies from homepage + */ + const fetchLatestMovies = () => __awaiter(this, void 0, void 0, function* () { + try { + const { data } = yield axios.get(config.baseUrl); + const $ = load(data); + const movies = []; + $('div[id^="post-"]').each((_idx, el) => { + const titleElement = $(el).find('h2'); + const linkElement = $(el).find('a'); + const imageElement = $(el).find('img'); + const title = titleElement.text().trim(); + const url = linkElement.attr('href'); + const image = imageElement.attr('src') || imageElement.attr('data-src'); + const yearMatch = title.match(/\((\d{4})\)/); + const year = yearMatch ? yearMatch[1] : undefined; + const cleanTitle = title + .replace(/\s*\(\d{4}\)\s*/g, '') + .replace(/\s*(HDRip|DVDScr|BRRip|DVDRip|WebRip|CAM|HDTS|Telugu|Hindi|Movie|Watch Online Free)\s*/g, '') + .trim(); + if (url && cleanTitle) { + const movieId = url.replace(config.baseUrl, '').replace(/^\/+/, '').replace(/\/$/, ''); + movies.push({ + id: movieId, + title: cleanTitle, + url: url.startsWith('http') ? url : `${config.baseUrl}/${url}`, + image: (image === null || image === void 0 ? void 0 : image.startsWith('http')) ? image : undefined, + releaseDate: year, + type: TvTypeEnum.MOVIE, + }); + } + }); + return movies; + } + catch (err) { + throw new Error(`Tollywood fetchLatestMovies failed: ${err.message}`); + } + }); + // Return functional provider object + return Object.assign(Object.assign({}, config), { supportedTypes, + // Core methods + search, + fetchMediaInfo, + fetchEpisodeSources, + fetchEpisodeServers, + // Tollywood-specific methods + fetchTeluguFeatured, + fetchTeluguByYear, + fetchLatestMovies }); +} +//# sourceMappingURL=create-tollywood.js.map \ No newline at end of file diff --git a/dist/providers/movies/tollywood/create-tollywood.js.map b/dist/providers/movies/tollywood/create-tollywood.js.map new file mode 100644 index 0000000..ff96266 --- /dev/null +++ b/dist/providers/movies/tollywood/create-tollywood.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-tollywood.js","sourceRoot":"","sources":["../../../../src/providers/movies/tollywood/create-tollywood.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/providers/movies/tollywood/test.d.ts b/dist/providers/movies/tollywood/test.d.ts new file mode 100644 index 0000000..9bcc471 --- /dev/null +++ b/dist/providers/movies/tollywood/test.d.ts @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=test.d.ts.map \ No newline at end of file diff --git a/dist/providers/movies/tollywood/test.d.ts.map b/dist/providers/movies/tollywood/test.d.ts.map new file mode 100644 index 0000000..b8fd3ed --- /dev/null +++ b/dist/providers/movies/tollywood/test.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../../src/providers/movies/tollywood/test.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/providers/movies/tollywood/test.js b/dist/providers/movies/tollywood/test.js new file mode 100644 index 0000000..fd392d6 --- /dev/null +++ b/dist/providers/movies/tollywood/test.js @@ -0,0 +1,59 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +// Test file for Tollywood provider +const tollywood_1 = __importDefault(require("./tollywood")); +function testTollywood() { + return __awaiter(this, void 0, void 0, function* () { + console.log('Testing Tollywood Provider...'); + const provider = new tollywood_1.default(); + try { + // Test 1: Fetch latest movies + console.log('\n=== Test 1: Fetch Latest Movies ==='); + const latestMovies = yield provider.fetchLatestMovies(); + console.log(`Found ${latestMovies.length} movies`); + if (latestMovies.length > 0) { + console.log('First movie:', latestMovies[0]); + } + // Test 2: Fetch Telugu featured + console.log('\n=== Test 2: Fetch Telugu Featured ==='); + const featured = yield provider.fetchTeluguFeatured(1); + console.log(`Found ${featured.results.length} featured movies`); + console.log(`Has next page: ${featured.hasNextPage}`); + // Test 3: Search + console.log('\n=== Test 3: Search ==='); + const searchResults = yield provider.search('Baahubali'); + console.log(`Found ${searchResults.results.length} search results`); + // Test 4: Fetch media info + if (latestMovies.length > 0) { + console.log('\n=== Test 4: Fetch Media Info ==='); + const movieId = latestMovies[0].id; + console.log(`Fetching info for: ${movieId}`); + const mediaInfo = yield provider.fetchMediaInfo(movieId); + console.log('Media info:', { + title: mediaInfo.title, + genres: mediaInfo.genres, + type: mediaInfo.type, + }); + } + console.log('\n=== All tests passed! ==='); + } + catch (error) { + console.error('Test failed:', error); + } + }); +} +// Run tests +testTollywood(); +//# sourceMappingURL=test.js.map \ No newline at end of file diff --git a/dist/providers/movies/tollywood/test.js.map b/dist/providers/movies/tollywood/test.js.map new file mode 100644 index 0000000..f3d9d07 --- /dev/null +++ b/dist/providers/movies/tollywood/test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../../src/providers/movies/tollywood/test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,mCAAmC;AACnC,4DAAoC;AAGpC,SAAe,aAAa;;QAC1B,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAE7C,MAAM,QAAQ,GAAG,IAAI,mBAAS,EAAE,CAAC;QAEjC,IAAI,CAAC;YACH,8BAA8B;YAC9B,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YACrD,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,iBAAiB,EAAE,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,SAAS,YAAY,CAAC,MAAM,SAAS,CAAC,CAAC;YACnD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC;YAED,gCAAgC;YAChC,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YACvD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,SAAS,QAAQ,CAAC,OAAO,CAAC,MAAM,kBAAkB,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,kBAAkB,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;YAEtD,iBAAiB;YACjB,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YACxC,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,MAAM,iBAAiB,CAAC,CAAC;YAEpE,2BAA2B;YAC3B,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;gBAClD,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAC;gBAC7C,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE;oBACzB,KAAK,EAAE,SAAS,CAAC,KAAK;oBACtB,MAAM,EAAE,SAAS,CAAC,MAAM;oBACxB,IAAI,EAAE,SAAS,CAAC,IAAI;iBACrB,CAAC,CAAC;YACL,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;CAAA;AAED,YAAY;AACZ,aAAa,EAAE,CAAC"} \ No newline at end of file diff --git a/dist/providers/movies/tollywood/tollywood.d.ts b/dist/providers/movies/tollywood/tollywood.d.ts new file mode 100644 index 0000000..6d34f0d --- /dev/null +++ b/dist/providers/movies/tollywood/tollywood.d.ts @@ -0,0 +1,43 @@ +import { MovieParser } from '../../../models'; +import { type TollywoodProviderInstance } from './create-tollywood'; +declare class Tollywood extends MovieParser { + private instance; + logo: string; + name: string; + baseUrl: string; + classPath: string; + supportedTypes: Set; + isNSFW: boolean; + isWorking: boolean; + constructor(customBaseURL?: string); + /** + * Search for Telugu/Tollywood movies + */ + search: TollywoodProviderInstance['search']; + /** + * Fetch media info for a movie + */ + fetchMediaInfo: TollywoodProviderInstance['fetchMediaInfo']; + /** + * Fetch episode sources (actual video URLs) + */ + fetchEpisodeSources: TollywoodProviderInstance['fetchEpisodeSources']; + /** + * Fetch episode servers (streaming sources) + */ + fetchEpisodeServers: TollywoodProviderInstance['fetchEpisodeServers']; + /** + * Fetch Telugu featured movies + */ + fetchTeluguFeatured: TollywoodProviderInstance['fetchTeluguFeatured']; + /** + * Fetch Telugu movies by year + */ + fetchTeluguByYear: TollywoodProviderInstance['fetchTeluguByYear']; + /** + * Fetch latest Telugu movies from homepage + */ + fetchLatestMovies: TollywoodProviderInstance['fetchLatestMovies']; +} +export default Tollywood; +//# sourceMappingURL=tollywood.d.ts.map \ No newline at end of file diff --git a/dist/providers/movies/tollywood/tollywood.d.ts.map b/dist/providers/movies/tollywood/tollywood.d.ts.map new file mode 100644 index 0000000..7b1ca2d --- /dev/null +++ b/dist/providers/movies/tollywood/tollywood.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"tollywood.d.ts","sourceRoot":"","sources":["../../../../src/providers/movies/tollywood/tollywood.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAmB,KAAK,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAGrF,cAAM,SAAU,SAAQ,WAAW;IACjC,OAAO,CAAC,QAAQ,CAA4B;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;gBAEhB,aAAa,CAAC,EAAE,MAAM;IA0BlC;;OAEG;IACH,MAAM,EAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IAE7C;;OAEG;IACH,cAAc,EAAG,yBAAyB,CAAC,gBAAgB,CAAC,CAAC;IAE7D;;OAEG;IACH,mBAAmB,EAAG,yBAAyB,CAAC,qBAAqB,CAAC,CAAC;IAEvE;;OAEG;IACH,mBAAmB,EAAG,yBAAyB,CAAC,qBAAqB,CAAC,CAAC;IAEvE;;OAEG;IACH,mBAAmB,EAAG,yBAAyB,CAAC,qBAAqB,CAAC,CAAC;IAEvE;;OAEG;IACH,iBAAiB,EAAG,yBAAyB,CAAC,mBAAmB,CAAC,CAAC;IAEnE;;OAEG;IACH,iBAAiB,EAAG,yBAAyB,CAAC,mBAAmB,CAAC,CAAC;CACpE;AAED,eAAe,SAAS,CAAC"} \ No newline at end of file diff --git a/dist/providers/movies/tollywood/tollywood.js b/dist/providers/movies/tollywood/tollywood.js new file mode 100644 index 0000000..170f9ea --- /dev/null +++ b/dist/providers/movies/tollywood/tollywood.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const models_1 = require("../../../models"); +const utils_1 = require("../../../utils"); +const create_tollywood_1 = require("./create-tollywood"); +// Backward compatibility wrapper class +class Tollywood extends models_1.MovieParser { + constructor(customBaseURL) { + var _a; + super(); + // Use of context factory to create a complete context with all defaults + const defaultContext = (0, utils_1.createProviderContext)(); + this.instance = (0, create_tollywood_1.createTollywood)(defaultContext, customBaseURL); + this.logo = this.instance.logo; + this.name = this.instance.name; + this.baseUrl = this.instance.baseUrl; + this.classPath = this.instance.classPath; + this.supportedTypes = this.instance.supportedTypes; + this.isNSFW = this.instance.isNSFW; + this.isWorking = (_a = this.instance.isWorking) !== null && _a !== void 0 ? _a : true; + // Bind all methods to preserve proper typing + this.search = this.instance.search; + this.fetchMediaInfo = this.instance.fetchMediaInfo; + this.fetchEpisodeSources = this.instance.fetchEpisodeSources; + this.fetchEpisodeServers = this.instance.fetchEpisodeServers; + this.fetchTeluguFeatured = this.instance.fetchTeluguFeatured; + this.fetchTeluguByYear = this.instance.fetchTeluguByYear; + this.fetchLatestMovies = this.instance.fetchLatestMovies; + } +} +exports.default = Tollywood; +//# sourceMappingURL=tollywood.js.map \ No newline at end of file diff --git a/dist/providers/movies/tollywood/tollywood.js.map b/dist/providers/movies/tollywood/tollywood.js.map new file mode 100644 index 0000000..61150f1 --- /dev/null +++ b/dist/providers/movies/tollywood/tollywood.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tollywood.js","sourceRoot":"","sources":["../../../../src/providers/movies/tollywood/tollywood.ts"],"names":[],"mappings":";;AAAA,4CAA8C;AAC9C,0CAAuD;AACvD,yDAAqF;AAErF,uCAAuC;AACvC,MAAM,SAAU,SAAQ,oBAAW;IAUjC,YAAY,aAAsB;;QAChC,KAAK,EAAE,CAAC;QAER,wEAAwE;QACxE,MAAM,cAAc,GAAG,IAAA,6BAAqB,GAAE,CAAC;QAE/C,IAAI,CAAC,QAAQ,GAAG,IAAA,kCAAe,EAAC,cAAc,EAAE,aAAa,CAAC,CAAC;QAE/D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;QACnD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,MAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,mCAAI,IAAI,CAAC;QAEjD,6CAA6C;QAC7C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;QACnD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC7D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC7D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC7D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACzD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC3D,CAAC;CAoCF;AAED,kBAAe,SAAS,CAAC"} \ No newline at end of file diff --git a/dist/utils/provider-maps.d.ts b/dist/utils/provider-maps.d.ts index 5da519a..7dc0efe 100644 --- a/dist/utils/provider-maps.d.ts +++ b/dist/utils/provider-maps.d.ts @@ -17,6 +17,7 @@ export declare const movieProviders: { readonly MultiMovies: any; readonly MultiStream: any; readonly YFlix: any; + readonly Tollywood: any; }; declare const metaProviders: { readonly Anilist: any; diff --git a/dist/utils/provider-maps.d.ts.map b/dist/utils/provider-maps.d.ts.map index 8c4cbda..ea9d85a 100644 --- a/dist/utils/provider-maps.d.ts.map +++ b/dist/utils/provider-maps.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"provider-maps.d.ts","sourceRoot":"","sources":["../../src/utils/provider-maps.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,eAAO,MAAM,cAAc;;;;CAU1B,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;CAa1B,CAAC;AAEF,QAAA,MAAM,aAAa;;;;CAUlB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,cAAc,CAAC;AACxD,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,cAAc,CAAC;AACxD,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,aAAa,CAAC"} \ No newline at end of file +{"version":3,"file":"provider-maps.d.ts","sourceRoot":"","sources":["../../src/utils/provider-maps.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,eAAO,MAAM,cAAc;;;;CAU1B,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;CAgB1B,CAAC;AAEF,QAAA,MAAM,aAAa;;;;CAUlB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,cAAc,CAAC;AACxD,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,cAAc,CAAC;AACxD,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,aAAa,CAAC"} \ No newline at end of file diff --git a/dist/utils/provider-maps.js b/dist/utils/provider-maps.js index 4c5747a..1df9b81 100644 --- a/dist/utils/provider-maps.js +++ b/dist/utils/provider-maps.js @@ -36,6 +36,9 @@ exports.movieProviders = { get YFlix() { return require('../providers/movies/yflix/yflix').default; }, + get Tollywood() { + return require('../providers/movies/tollywood/tollywood').default; + }, }; const metaProviders = { get Anilist() { diff --git a/dist/utils/provider-maps.js.map b/dist/utils/provider-maps.js.map index dc33e3c..13398e3 100644 --- a/dist/utils/provider-maps.js.map +++ b/dist/utils/provider-maps.js.map @@ -1 +1 @@ -{"version":3,"file":"provider-maps.js","sourceRoot":"","sources":["../../src/utils/provider-maps.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,uDAAuD;AACvD,6EAA6E;AAChE,QAAA,cAAc,GAAG;IAC5B,IAAI,IAAI;QACN,OAAO,OAAO,CAAC,8BAA8B,CAAC,CAAC,OAAO,CAAC;IACzD,CAAC;IACD,IAAI,SAAS;QACX,OAAO,OAAO,CAAC,wCAAwC,CAAC,CAAC,OAAO,CAAC;IACnE,CAAC;IACD,IAAI,QAAQ;QACV,OAAO,OAAO,CAAC,sCAAsC,CAAC,CAAC,OAAO,CAAC;IACjE,CAAC;CACF,CAAC;AAEW,QAAA,cAAc,GAAG;IAC5B,IAAI,QAAQ;QACV,OAAO,OAAO,CAAC,uCAAuC,CAAC,CAAC,OAAO,CAAC;IAClE,CAAC;IACD,IAAI,WAAW;QACb,OAAO,OAAO,CAAC,6CAA6C,CAAC,CAAC,OAAO,CAAC;IACxE,CAAC;IACD,IAAI,WAAW;QACb,OAAO,OAAO,CAAC,iCAAiC,CAAC,CAAC,OAAO,CAAC;IAC5D,CAAC;IACD,IAAI,KAAK;QACP,OAAO,OAAO,CAAC,iCAAiC,CAAC,CAAC,OAAO,CAAC;IAC5D,CAAC;CACF,CAAC;AAEF,MAAM,aAAa,GAAG;IACpB,IAAI,OAAO;QACT,OAAO,OAAO,CAAC,2BAA2B,CAAC,CAAC,OAAO,CAAC;IACtD,CAAC;IACD,IAAI,IAAI;QACN,OAAO,OAAO,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC;IACnD,CAAC;IACD,IAAI,GAAG;QACL,OAAO,OAAO,CAAC,uBAAuB,CAAC,CAAC,OAAO,CAAC;IAClD,CAAC;CACF,CAAC"} \ No newline at end of file +{"version":3,"file":"provider-maps.js","sourceRoot":"","sources":["../../src/utils/provider-maps.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,uDAAuD;AACvD,6EAA6E;AAChE,QAAA,cAAc,GAAG;IAC5B,IAAI,IAAI;QACN,OAAO,OAAO,CAAC,8BAA8B,CAAC,CAAC,OAAO,CAAC;IACzD,CAAC;IACD,IAAI,SAAS;QACX,OAAO,OAAO,CAAC,wCAAwC,CAAC,CAAC,OAAO,CAAC;IACnE,CAAC;IACD,IAAI,QAAQ;QACV,OAAO,OAAO,CAAC,sCAAsC,CAAC,CAAC,OAAO,CAAC;IACjE,CAAC;CACF,CAAC;AAEW,QAAA,cAAc,GAAG;IAC5B,IAAI,QAAQ;QACV,OAAO,OAAO,CAAC,uCAAuC,CAAC,CAAC,OAAO,CAAC;IAClE,CAAC;IACD,IAAI,WAAW;QACb,OAAO,OAAO,CAAC,6CAA6C,CAAC,CAAC,OAAO,CAAC;IACxE,CAAC;IACD,IAAI,WAAW;QACb,OAAO,OAAO,CAAC,iCAAiC,CAAC,CAAC,OAAO,CAAC;IAC5D,CAAC;IACD,IAAI,KAAK;QACP,OAAO,OAAO,CAAC,iCAAiC,CAAC,CAAC,OAAO,CAAC;IAC5D,CAAC;IACD,IAAI,SAAS;QACX,OAAO,OAAO,CAAC,yCAAyC,CAAC,CAAC,OAAO,CAAC;IACpE,CAAC;CACF,CAAC;AAEF,MAAM,aAAa,GAAG;IACpB,IAAI,OAAO;QACT,OAAO,OAAO,CAAC,2BAA2B,CAAC,CAAC,OAAO,CAAC;IACtD,CAAC;IACD,IAAI,IAAI;QACN,OAAO,OAAO,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC;IACnD,CAAC;IACD,IAAI,GAAG;QACL,OAAO,OAAO,CAAC,uBAAuB,CAAC,CAAC,OAAO,CAAC;IAClD,CAAC;CACF,CAAC"} \ No newline at end of file diff --git a/react-native-consumet-1.2.2.tgz b/react-native-consumet-1.2.2.tgz new file mode 100644 index 0000000..1f0f02a Binary files /dev/null and b/react-native-consumet-1.2.2.tgz differ diff --git a/src/extension-registry.json b/src/extension-registry.json index 7e73a7e..136d89d 100644 --- a/src/extension-registry.json +++ b/src/extension-registry.json @@ -154,6 +154,28 @@ "extractors": ["MegaUp"], "isSourceEmbed": true, "haveMultiServers": true + }, + { + "id": "tollywood", + "name": "Tollywood", + "description": "Telugu and Tollywood movies streaming from MovieRulz with multiple servers", + "version": "1.0.0", + "author": { + "name": "RNConsumet Team", + "url": "https://github.com/uwumilabs" + }, + "category": "movies", + "main": "https://raw.githubusercontent.com/uwumilabs/react-native-consumet/refs/heads/main/dist/providers/movies/tollywood/create-tollywood.js", + "factoryName": "createTollywood", + "baseUrl": "https://www.5movierulz.tires", + "logo": "https://www.5movierulz.tires/favicon.ico", + "languages": ["te", "hi", "en"], + "nsfw": false, + "status": "stable", + "lastUpdated": "2025-08-05T00:00:00Z", + "extractors": ["StreamTape"], + "isSourceEmbed": true, + "haveMultiServers": true } ] } diff --git a/src/providers/movies/index.ts b/src/providers/movies/index.ts index e730d94..f846419 100644 --- a/src/providers/movies/index.ts +++ b/src/providers/movies/index.ts @@ -7,6 +7,8 @@ import HiMovies from './himovies/himovies'; import { createHiMovies } from './himovies/create-himovies'; import YFlix from './yflix/yflix'; import { createYFlix } from './yflix/create-yflix'; +import Tollywood from './tollywood/tollywood'; +import { createTollywood } from './tollywood/create-tollywood'; export default { // DramaCool, @@ -14,8 +16,10 @@ export default { NetflixMirror, HiMovies, YFlix, + Tollywood, MultiStream, createHiMovies, createMultiMovies, createYFlix, + createTollywood, }; diff --git a/src/providers/movies/tollywood/create-tollywood.ts b/src/providers/movies/tollywood/create-tollywood.ts new file mode 100644 index 0000000..7715581 --- /dev/null +++ b/src/providers/movies/tollywood/create-tollywood.ts @@ -0,0 +1,511 @@ +import { + type IMovieInfo, + type IEpisodeServer, + type StreamingServers, + type ISource, + type IMovieResult, + type ISearch, + type ProviderContext, + type ProviderConfig, +} from '../../../models'; + +/** + * Tollywood Movie Provider for MovieRulz + * Scrapes 5movierulz.tires for Telugu/Tollywood movies + */ +export function createTollywood(ctx: ProviderContext, customBaseURL?: string) { + const { load, extractors, enums, axios, createCustomBaseUrl } = ctx; + const { StreamTape } = extractors; + const { StreamingServers: StreamingServersEnum, TvType: TvTypeEnum } = enums; + + const baseUrl = createCustomBaseUrl('https://www.5movierulz.tires', customBaseURL); + + const config: ProviderConfig = { + name: 'Tollywood', + languages: ['te', 'hi', 'en'], + classPath: 'MOVIES.Tollywood', + logo: 'https://www.5movierulz.tires/favicon.ico', + baseUrl, + isNSFW: false, + isWorking: true, + }; + + const supportedTypes = new Set([TvTypeEnum.MOVIE]); + + /** + * Search for Telugu/Tollywood movies + */ + const search = async (query: string, page: number = 1): Promise> => { + const searchResult: ISearch = { + currentPage: page, + hasNextPage: false, + results: [], + }; + + try { + const { data } = await axios.get(`${config.baseUrl}`, { + params: { + s: query, + p: page, + cat: 'telugu', + lang: 'te', + opt: '0', + ac: '0', + }, + }); + + const $ = load(data); + + $('div[id^="post-"]').each((_idx, el) => { + const titleElement = $(el).find('h2'); + const linkElement = $(el).find('a'); + const imageElement = $(el).find('img'); + + const title = titleElement.text().trim(); + const url = linkElement.attr('href'); + const image = imageElement.attr('src') || imageElement.attr('data-src'); + + const yearMatch = title.match(/\((\d{4})\)/); + const year = yearMatch ? yearMatch[1] : undefined; + + const cleanTitle = title + .replace(/\s*\(\d{4}\)\s*/g, '') + .replace(/\s*(HDRip|DVDScr|BRRip|DVDRip|WebRip|CAM|HDTS|Telugu|Hindi|Dubbed|Movie|Watch Online Free)\s*/g, '') + .trim(); + + if (url && cleanTitle) { + const movieId = url.replace(config.baseUrl, '').replace(/^\/+/, '').replace(/\/$/, ''); + + searchResult.results.push({ + id: movieId, + title: cleanTitle, + url: url.startsWith('http') ? url : `${config.baseUrl}/${url}`, + image: image?.startsWith('http') ? image : undefined, + releaseDate: year, + type: TvTypeEnum.MOVIE, + }); + } + }); + + const nextButton = $('.pagination .next'); + searchResult.hasNextPage = nextButton.length > 0; + + return searchResult; + } catch (err) { + throw new Error(`Tollywood search failed: ${(err as Error).message}`); + } + }; + + /** + * Fetch Telugu featured movies + */ + const fetchTeluguFeatured = async (page: number = 1): Promise> => { + const searchResult: ISearch = { + currentPage: page, + hasNextPage: false, + results: [], + }; + + try { + const { data } = await axios.get(`${config.baseUrl}/category/telugu-featured/page/${page}/`); + + const $ = load(data); + + $('div[id^="post-"]').each((_idx, el) => { + const titleElement = $(el).find('h2'); + const linkElement = $(el).find('a'); + const imageElement = $(el).find('img'); + + const title = titleElement.text().trim(); + const url = linkElement.attr('href'); + const image = imageElement.attr('src') || imageElement.attr('data-src'); + + const yearMatch = title.match(/\((\d{4})\)/); + const year = yearMatch ? yearMatch[1] : undefined; + + const cleanTitle = title + .replace(/\s*\(\d{4}\)\s*/g, '') + .replace(/\s*(HDRip|DVDScr|BRRip|DVDRip|WebRip|CAM|HDTS|Telugu|Movie|Watch Online Free)\s*/g, '') + .trim(); + + if (url && cleanTitle) { + const movieId = url.replace(config.baseUrl, '').replace(/^\/+/, '').replace(/\/$/, ''); + + searchResult.results.push({ + id: movieId, + title: cleanTitle, + url: url.startsWith('http') ? url : `${config.baseUrl}/${url}`, + image: image?.startsWith('http') ? image : undefined, + releaseDate: year, + type: TvTypeEnum.MOVIE, + }); + } + }); + + const nextButton = $('.pagination .next'); + searchResult.hasNextPage = nextButton.length > 0; + + return searchResult; + } catch (err) { + throw new Error(`Tollywood fetchTeluguFeatured failed: ${(err as Error).message}`); + } + }; + + /** + * Fetch Telugu movies by year + */ + const fetchTeluguByYear = async (year: number, page: number = 1): Promise> => { + const searchResult: ISearch = { + currentPage: page, + hasNextPage: false, + results: [], + }; + + try { + const { data } = await axios.get(`${config.baseUrl}/category/telugu-movies-${year}/page/${page}/`); + + const $ = load(data); + + $('div[id^="post-"]').each((_idx, el) => { + const titleElement = $(el).find('h2'); + const linkElement = $(el).find('a'); + const imageElement = $(el).find('img'); + + const title = titleElement.text().trim(); + const url = linkElement.attr('href'); + const image = imageElement.attr('src') || imageElement.attr('data-src'); + + const cleanTitle = title + .replace(/\s*\(\d{4}\)\s*/g, '') + .replace(/\s*(HDRip|DVDScr|BRRip|DVDRip|WebRip|CAM|HDTS|Telugu|Movie|Watch Online Free)\s*/g, '') + .trim(); + + if (url && cleanTitle) { + const movieId = url.replace(config.baseUrl, '').replace(/^\/+/, '').replace(/\/$/, ''); + + searchResult.results.push({ + id: movieId, + title: cleanTitle, + url: url.startsWith('http') ? url : `${config.baseUrl}/${url}`, + image: image?.startsWith('http') ? image : undefined, + releaseDate: year.toString(), + type: TvTypeEnum.MOVIE, + }); + } + }); + + const nextButton = $('.pagination .next'); + searchResult.hasNextPage = nextButton.length > 0; + + return searchResult; + } catch (err) { + throw new Error(`Tollywood fetchTeluguByYear failed: ${(err as Error).message}`); + } + }; + + /** + * Fetch media info for a movie + */ + const fetchMediaInfo = async (mediaId: string): Promise => { + const url = mediaId.startsWith('http') ? mediaId : `${config.baseUrl}/${mediaId}`; + + const movieInfo: IMovieInfo = { + id: mediaId, + title: '', + url, + }; + + try { + const { data } = await axios.get(url, { + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', + }, + }); + + const $ = load(data); + + const title = $('h1').first().text().trim(); + movieInfo.title = title; + + const descriptionElement = $('div[class*="summary"], div[class*="description"], p.description').first(); + movieInfo.description = descriptionElement.text().trim() || ''; + + const posterElement = $('img[class*="poster"], img.wp-post-image').first(); + movieInfo.image = posterElement.attr('src') || posterElement.attr('data-src'); + + const yearMatch = title.match(/\((\d{4})\)/); + movieInfo.releaseDate = yearMatch ? yearMatch[1] : undefined; + + const genres: string[] = []; + $('a[rel="category tag"]').each((_idx, el) => { + const genre = $(el).text().trim(); + if (genre && !genres.includes(genre)) { + genres.push(genre); + } + }); + movieInfo.genres = genres; + + movieInfo.episodes = [ + { + id: mediaId, + title: title || 'Full Movie', + number: 1, + url, + }, + ]; + + movieInfo.type = TvTypeEnum.MOVIE; + + return movieInfo; + } catch (err) { + throw new Error(`Tollywood fetchMediaInfo failed: ${(err as Error).message}`); + } + }; + + /** + * Helper function to identify server name from URL + */ + function getServerName(urlStr: string): string { + if (urlStr.includes('streamtape')) return 'StreamTape'; + if (urlStr.includes('vcdnlare')) return 'VcdnLare'; + if (urlStr.includes('uperbox')) return 'UperBox'; + if (urlStr.includes('dropress')) return 'Dropress'; + if (urlStr.includes('vidshare')) return 'VidShare'; + if (urlStr.includes('mixdrop')) return 'MixDrop'; + if (urlStr.includes('dood')) return 'DoodStream'; + return 'Unknown'; + } + + /** + * Fetch episode servers (streaming sources) + */ + const fetchEpisodeServers = async (episodeId: string, _mediaId: string): Promise => { + const url = episodeId.startsWith('http') ? episodeId : `${config.baseUrl}/${episodeId}`; + + try { + const { data } = await axios.get(url, { + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', + }, + }); + + const $ = load(data); + + const servers: IEpisodeServer[] = []; + + const scripts = $('script').map((_idx, el) => $(el).html()).get(); + + for (const script of scripts) { + if (!script) continue; + + const iframeMatches = script.match(/https?:\/\/[^"'\s<>]+/gi) || []; + + for (const match of iframeMatches) { + if ( + match.includes('streamtape') || + match.includes('vcdnlare') || + match.includes('uperbox') || + match.includes('dropress') || + match.includes('vidshare') || + match.includes('mixdrop') || + match.includes('dood') + ) { + const cleanUrl = match.replace(/[,\s"'"]$/, ''); + const serverName = getServerName(cleanUrl); + + if (!servers.find(s => s.url === cleanUrl)) { + servers.push({ + name: serverName, + url: cleanUrl, + }); + } + } + } + } + + $('iframe').each((_idx, el) => { + const src = $(el).attr('src'); + if (src && (src.includes('streamtape') || src.includes('vcdnlare') || src.includes('uperbox') || src.includes('dropress'))) { + const serverName = getServerName(src); + if (!servers.find(s => s.url === src)) { + servers.push({ + name: serverName, + url: src, + }); + } + } + }); + + if (servers.length === 0) { + servers.push({ + name: 'StreamTape', + url, + }); + } + + return servers; + } catch (err) { + throw new Error(`Tollywood fetchEpisodeServers failed: ${(err as Error).message}`); + } + }; + + /** + * Fetch episode sources (actual video URLs) + */ + const fetchEpisodeSources = async ( + episodeId: string, + mediaId: string, + server: StreamingServers = StreamingServersEnum.StreamTape + ): Promise => { + try { + const servers = await fetchEpisodeServers(episodeId, mediaId); + + if (servers.length === 0) { + throw new Error('No streaming servers found'); + } + + const serverData = + servers.find(s => s.name.toLowerCase() === server.toLowerCase()) || servers[0]!; + + const serverUrl = new URL(serverData.url); + + if (serverData.url.includes('streamtape.com') || serverData.url.includes('streamtape')) { + try { + if (!StreamTape) { + throw new Error('StreamTape extractor not available'); + } + const streamTapeExtractor = new StreamTape(); + const sources = await streamTapeExtractor.extract(serverUrl); + return { + headers: { Referer: config.baseUrl }, + sources, + }; + } catch { + return { + headers: { Referer: config.baseUrl }, + sources: [ + { + url: serverData.url, + isM3U8: serverData.url.includes('.m3u8'), + }, + ], + }; + } + } + + if (serverData.url.includes('vcdnlare')) { + return { + headers: { Referer: config.baseUrl }, + sources: [ + { + url: serverData.url, + isM3U8: true, + }, + ], + }; + } + + if (serverData.url.includes('uperbox')) { + return { + headers: { Referer: config.baseUrl }, + sources: [ + { + url: serverData.url, + isM3U8: serverData.url.includes('.m3u8'), + }, + ], + }; + } + + if (serverData.url.includes('dropress')) { + return { + headers: { Referer: config.baseUrl }, + sources: [ + { + url: serverData.url, + isM3U8: serverData.url.includes('.m3u8'), + }, + ], + }; + } + + return { + headers: { Referer: config.baseUrl }, + sources: [ + { + url: serverData.url, + isM3U8: serverData.url.includes('.m3u8'), + }, + ], + }; + } catch (err) { + throw new Error(`Tollywood fetchEpisodeSources failed: ${(err as Error).message}`); + } + }; + + /** + * Fetch latest Telugu movies from homepage + */ + const fetchLatestMovies = async (): Promise => { + try { + const { data } = await axios.get(config.baseUrl); + + const $ = load(data); + const movies: IMovieResult[] = []; + + $('div[id^="post-"]').each((_idx, el) => { + const titleElement = $(el).find('h2'); + const linkElement = $(el).find('a'); + const imageElement = $(el).find('img'); + + const title = titleElement.text().trim(); + const url = linkElement.attr('href'); + const image = imageElement.attr('src') || imageElement.attr('data-src'); + + const yearMatch = title.match(/\((\d{4})\)/); + const year = yearMatch ? yearMatch[1] : undefined; + + const cleanTitle = title + .replace(/\s*\(\d{4}\)\s*/g, '') + .replace(/\s*(HDRip|DVDScr|BRRip|DVDRip|WebRip|CAM|HDTS|Telugu|Hindi|Movie|Watch Online Free)\s*/g, '') + .trim(); + + if (url && cleanTitle) { + const movieId = url.replace(config.baseUrl, '').replace(/^\/+/, '').replace(/\/$/, ''); + + movies.push({ + id: movieId, + title: cleanTitle, + url: url.startsWith('http') ? url : `${config.baseUrl}/${url}`, + image: image?.startsWith('http') ? image : undefined, + releaseDate: year, + type: TvTypeEnum.MOVIE, + }); + } + }); + + return movies; + } catch (err) { + throw new Error(`Tollywood fetchLatestMovies failed: ${(err as Error).message}`); + } + }; + + // Return functional provider object + return { + ...config, + supportedTypes, + + // Core methods + search, + fetchMediaInfo, + fetchEpisodeSources, + fetchEpisodeServers, + + // Tollywood-specific methods + fetchTeluguFeatured, + fetchTeluguByYear, + fetchLatestMovies, + }; +} + +export type TollywoodProviderInstance = ReturnType; diff --git a/src/providers/movies/tollywood/test.ts b/src/providers/movies/tollywood/test.ts new file mode 100644 index 0000000..2fd0c62 --- /dev/null +++ b/src/providers/movies/tollywood/test.ts @@ -0,0 +1,50 @@ +// Test file for Tollywood provider +import Tollywood from './tollywood'; +import { createProviderContext } from '../../../utils'; + +async function testTollywood() { + console.log('Testing Tollywood Provider...'); + + const provider = new Tollywood(); + + try { + // Test 1: Fetch latest movies + console.log('\n=== Test 1: Fetch Latest Movies ==='); + const latestMovies = await provider.fetchLatestMovies(); + console.log(`Found ${latestMovies.length} movies`); + if (latestMovies.length > 0) { + console.log('First movie:', latestMovies[0]); + } + + // Test 2: Fetch Telugu featured + console.log('\n=== Test 2: Fetch Telugu Featured ==='); + const featured = await provider.fetchTeluguFeatured(1); + console.log(`Found ${featured.results.length} featured movies`); + console.log(`Has next page: ${featured.hasNextPage}`); + + // Test 3: Search + console.log('\n=== Test 3: Search ==='); + const searchResults = await provider.search('Baahubali'); + console.log(`Found ${searchResults.results.length} search results`); + + // Test 4: Fetch media info + if (latestMovies.length > 0) { + console.log('\n=== Test 4: Fetch Media Info ==='); + const movieId = latestMovies[0]!.id; + console.log(`Fetching info for: ${movieId}`); + const mediaInfo = await provider.fetchMediaInfo(movieId); + console.log('Media info:', { + title: mediaInfo.title, + genres: mediaInfo.genres, + type: mediaInfo.type, + }); + } + + console.log('\n=== All tests passed! ==='); + } catch (error) { + console.error('Test failed:', error); + } +} + +// Run tests +testTollywood(); diff --git a/src/providers/movies/tollywood/tollywood.ts b/src/providers/movies/tollywood/tollywood.ts new file mode 100644 index 0000000..da2ff04 --- /dev/null +++ b/src/providers/movies/tollywood/tollywood.ts @@ -0,0 +1,78 @@ +import { MovieParser } from '../../../models'; +import { createProviderContext } from '../../../utils'; +import { createTollywood, type TollywoodProviderInstance } from './create-tollywood'; + +// Backward compatibility wrapper class +class Tollywood extends MovieParser { + private instance: TollywoodProviderInstance; + override logo: string; + override name: string; + override baseUrl: string; + override classPath: string; + override supportedTypes: Set; + override isNSFW: boolean; + override isWorking: boolean; + + constructor(customBaseURL?: string) { + super(); + + // Use of context factory to create a complete context with all defaults + const defaultContext = createProviderContext(); + + this.instance = createTollywood(defaultContext, customBaseURL); + + this.logo = this.instance.logo; + this.name = this.instance.name; + this.baseUrl = this.instance.baseUrl; + this.classPath = this.instance.classPath; + this.supportedTypes = this.instance.supportedTypes; + this.isNSFW = this.instance.isNSFW; + this.isWorking = this.instance.isWorking ?? true; + + // Bind all methods to preserve proper typing + this.search = this.instance.search; + this.fetchMediaInfo = this.instance.fetchMediaInfo; + this.fetchEpisodeSources = this.instance.fetchEpisodeSources; + this.fetchEpisodeServers = this.instance.fetchEpisodeServers; + this.fetchTeluguFeatured = this.instance.fetchTeluguFeatured; + this.fetchTeluguByYear = this.instance.fetchTeluguByYear; + this.fetchLatestMovies = this.instance.fetchLatestMovies; + } + + /** + * Search for Telugu/Tollywood movies + */ + search!: TollywoodProviderInstance['search']; + + /** + * Fetch media info for a movie + */ + fetchMediaInfo!: TollywoodProviderInstance['fetchMediaInfo']; + + /** + * Fetch episode sources (actual video URLs) + */ + fetchEpisodeSources!: TollywoodProviderInstance['fetchEpisodeSources']; + + /** + * Fetch episode servers (streaming sources) + */ + fetchEpisodeServers!: TollywoodProviderInstance['fetchEpisodeServers']; + + /** + * Fetch Telugu featured movies + */ + fetchTeluguFeatured!: TollywoodProviderInstance['fetchTeluguFeatured']; + + /** + * Fetch Telugu movies by year + */ + fetchTeluguByYear!: TollywoodProviderInstance['fetchTeluguByYear']; + + /** + * Fetch latest Telugu movies from homepage + */ + fetchLatestMovies!: TollywoodProviderInstance['fetchLatestMovies']; +} + +export default Tollywood; diff --git a/src/utils/provider-maps.ts b/src/utils/provider-maps.ts index 13285e8..9a8bbd7 100644 --- a/src/utils/provider-maps.ts +++ b/src/utils/provider-maps.ts @@ -35,6 +35,9 @@ export const movieProviders = { get YFlix() { return require('../providers/movies/yflix/yflix').default; }, + get Tollywood() { + return require('../providers/movies/tollywood/tollywood').default; + }, }; const metaProviders = { diff --git a/test-tollywood.js b/test-tollywood.js new file mode 100644 index 0000000..0abddc9 --- /dev/null +++ b/test-tollywood.js @@ -0,0 +1,55 @@ +// Simple test for Tollywood provider +const { createProviderContext } = require('./dist/utils/create-provider-context').default; +const Tollywood = require('./dist/providers/movies/tollywood/tollywood').default; + +console.log('=== Testing Tollywood Provider ===\n'); + +async function testTollywood() { + console.log('1. Creating Tollywood provider...'); + const provider = new Tollywood(); + console.log(' Provider:', { name: provider.name, baseUrl: provider.baseUrl, languages: provider.languages }); + + console.log('\n2. Testing fetchLatestMovies()...'); + try { + const latest = await provider.fetchLatestMovies(); + console.log(` Found ${latest.length} movies`); + if (latest.length > 0) { + console.log(' First movie:', { + id: latest[0].id, + title: latest[0].title, + image: latest[0].image?.substring(0, 50) + '...', + }); + } + } catch (err) { + console.error(' Error:', err.message); + } + + console.log('\n3. Testing fetchTeluguFeatured()...'); + try { + const featured = await provider.fetchTeluguFeatured(1); + console.log(` Found ${featured.results.length} featured movies`); + console.log(` Has next page: ${featured.hasNextPage}`); + } catch (err) { + console.error(' Error:', err.message); + } + + console.log('\n4. Testing search()...'); + try { + const searchResults = await provider.search('Baahubali'); + console.log(` Found ${searchResults.results.length} search results`); + if (searchResults.results.length > 0) { + console.log(' First result:', { + id: searchResults.results[0].id, + title: searchResults.results[0].title, + }); + } + } catch (err) { + console.error(' Error:', err.message); + } + + console.log('\n=== All tests completed! ===\n'); +} + +testTollywood().catch(err => { + console.error('Test failed:', err); +});