cinderbyte 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -0
- package/README.md +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/models/parsers/anime.d.ts +21 -0
- package/dist/models/parsers/anime.js +11 -0
- package/dist/models/parsers/anime.js.map +1 -0
- package/dist/models/parsers/base.d.ts +9 -0
- package/dist/models/parsers/base.js +5 -0
- package/dist/models/parsers/base.js.map +1 -0
- package/dist/models/parsers/index.d.ts +2 -0
- package/dist/models/parsers/index.js +3 -0
- package/dist/models/parsers/index.js.map +1 -0
- package/dist/models/providers/anime/animepahe.d.ts +45 -0
- package/dist/models/providers/anime/animepahe.js +248 -0
- package/dist/models/providers/anime/animepahe.js.map +1 -0
- package/dist/models/providers/anime/index.d.ts +2 -0
- package/dist/models/providers/anime/index.js +3 -0
- package/dist/models/providers/anime/index.js.map +1 -0
- package/dist/models/providers/baseProvider.d.ts +21 -0
- package/dist/models/providers/baseProvider.js +14 -0
- package/dist/models/providers/baseProvider.js.map +1 -0
- package/dist/models/providers/index.d.ts +7 -0
- package/dist/models/providers/index.js +8 -0
- package/dist/models/providers/index.js.map +1 -0
- package/dist/utils/heplers/kwik.d.ts +21 -0
- package/dist/utils/heplers/kwik.js +60 -0
- package/dist/utils/heplers/kwik.js.map +1 -0
- package/dist/utils/types/anime.d.ts +13 -0
- package/dist/utils/types/anime.js +1 -0
- package/dist/utils/types/anime.js.map +1 -0
- package/dist/utils/types/index.d.ts +22 -0
- package/dist/utils/types/index.js +1 -0
- package/dist/utils/types/index.js.map +1 -0
- package/dist/utils/types/provider.d.ts +12 -0
- package/dist/utils/types/provider.js +1 -0
- package/dist/utils/types/provider.js.map +1 -0
- package/dist/utils/use/browser.d.ts +0 -0
- package/dist/utils/use/browser.js +94 -0
- package/dist/utils/use/browser.js.map +1 -0
- package/dist/utils/use/cookie-cache.d.ts +4 -0
- package/dist/utils/use/cookie-cache.js +24 -0
- package/dist/utils/use/cookie-cache.js.map +1 -0
- package/dist/utils/use/index.d.ts +7 -0
- package/dist/utils/use/index.js +41 -0
- package/dist/utils/use/index.js.map +1 -0
- package/package.json +41 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,oBAAoB,CAAC;AAEvC,OAAO,EAAE,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import BaseParser from "./base";
|
|
2
|
+
import type { AnimeSearchResultsInterface } from "../../utils/types/anime";
|
|
3
|
+
declare abstract class AnimeParser extends BaseParser {
|
|
4
|
+
/**
|
|
5
|
+
* are dub and sub available separately
|
|
6
|
+
* - false: the anime is available as a single item
|
|
7
|
+
* - true: the anime has variants like `anime title (sub)` and `anime title (dub)`
|
|
8
|
+
*/
|
|
9
|
+
protected readonly separateDubandSub: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* - get search results for a search query
|
|
12
|
+
* @param query - search query
|
|
13
|
+
* @param page - page number of response
|
|
14
|
+
* @param perPage - number of items to show in each page
|
|
15
|
+
* @param args - other arguments (depend on the provider)
|
|
16
|
+
*/
|
|
17
|
+
abstract search(query: string, page: number, perPage: number, ...args: any[]): Promise<AnimeSearchResultsInterface>;
|
|
18
|
+
abstract getAnimeInfo(...args: any): Promise<any>;
|
|
19
|
+
abstract getEpisodeSources(...args: any): Promise<any>;
|
|
20
|
+
}
|
|
21
|
+
export default AnimeParser;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import BaseParser from "./base";
|
|
2
|
+
class AnimeParser extends BaseParser {
|
|
3
|
+
/**
|
|
4
|
+
* are dub and sub available separately
|
|
5
|
+
* - false: the anime is available as a single item
|
|
6
|
+
* - true: the anime has variants like `anime title (sub)` and `anime title (dub)`
|
|
7
|
+
*/
|
|
8
|
+
separateDubandSub = false;
|
|
9
|
+
}
|
|
10
|
+
export default AnimeParser;
|
|
11
|
+
//# sourceMappingURL=anime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anime.js","sourceRoot":"","sources":["../../../src/models/parsers/anime.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,QAAQ,CAAC;AAGhC,MAAe,WAAY,SAAQ,UAAU;IAC3C;;;;OAIG;IACgB,iBAAiB,GAAY,KAAK,CAAC;CAkBvD;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/models/parsers/base.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,2BAA2B,CAAC;AAErD,MAAe,UAAW,SAAQ,YAAY;CAM7C;AAED,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/models/parsers/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { AnimeSearchResultsInterface } from "../../../utils/types/anime";
|
|
2
|
+
import type { ProviderInfo } from "../../../utils/types/provider";
|
|
3
|
+
import { AnimeParser } from "../../parsers";
|
|
4
|
+
export default class AnimePahe extends AnimeParser {
|
|
5
|
+
data: ProviderInfo;
|
|
6
|
+
cachePath: string;
|
|
7
|
+
constructor(basePath?: string);
|
|
8
|
+
private getHeaders;
|
|
9
|
+
private readCache;
|
|
10
|
+
private getCookieString;
|
|
11
|
+
private bypassToCache;
|
|
12
|
+
/**
|
|
13
|
+
* Ensures cache is fresh. Returns true when cache is usable.
|
|
14
|
+
*/
|
|
15
|
+
writeToCache({ url, cachePath, force, }: {
|
|
16
|
+
url: string;
|
|
17
|
+
cachePath?: string;
|
|
18
|
+
force?: boolean;
|
|
19
|
+
}): Promise<boolean>;
|
|
20
|
+
search(query: string, page?: number, perPage?: number, ...args: any[]): Promise<AnimeSearchResultsInterface>;
|
|
21
|
+
getSession(title: string, animeId?: string): Promise<string>;
|
|
22
|
+
getEpisodes({ title, session, sort, page, }: {
|
|
23
|
+
title?: string;
|
|
24
|
+
session?: string;
|
|
25
|
+
sort?: string;
|
|
26
|
+
page?: number;
|
|
27
|
+
}): Promise<any>;
|
|
28
|
+
getAnimeInfo({ title, session, ep_page, }: {
|
|
29
|
+
title: string;
|
|
30
|
+
session?: string;
|
|
31
|
+
ep_page?: number;
|
|
32
|
+
}): Promise<{
|
|
33
|
+
session: string;
|
|
34
|
+
anilist_id: string;
|
|
35
|
+
title: string;
|
|
36
|
+
image: string;
|
|
37
|
+
synopsis: string;
|
|
38
|
+
episodes: any;
|
|
39
|
+
}>;
|
|
40
|
+
getEpisodeSources({ title, session, episode_id, }: {
|
|
41
|
+
title: string;
|
|
42
|
+
session?: string;
|
|
43
|
+
episode_id: string;
|
|
44
|
+
}): Promise<any>;
|
|
45
|
+
}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
import { bypass } from "cinderbyte-bypass-ddg";
|
|
3
|
+
import * as cheerio from "cheerio";
|
|
4
|
+
import { readFile } from "node:fs/promises";
|
|
5
|
+
import { userAgent } from "../../../utils/use";
|
|
6
|
+
import { editJsonFile } from "../../../utils/use/cookie-cache";
|
|
7
|
+
import { AnimeParser } from "../../parsers";
|
|
8
|
+
import extractKwikVideo, { organizeStreamLinks, } from "../../../utils/heplers/kwik";
|
|
9
|
+
export default class AnimePahe extends AnimeParser {
|
|
10
|
+
data = {
|
|
11
|
+
name: "AnimePahe",
|
|
12
|
+
language: "en",
|
|
13
|
+
type: "ANIME",
|
|
14
|
+
icon: "https://animepahe.si/pikacon.ico",
|
|
15
|
+
author: "Skunktank69",
|
|
16
|
+
baseUrl: "https://animepahe.si",
|
|
17
|
+
altUrls: ["https://animepahe.com", "https://animepahe.org"],
|
|
18
|
+
isNSFW: false,
|
|
19
|
+
};
|
|
20
|
+
cachePath;
|
|
21
|
+
constructor(basePath) {
|
|
22
|
+
super();
|
|
23
|
+
this.cachePath =
|
|
24
|
+
basePath ??
|
|
25
|
+
process.env.ANIMEPAHE_CACHE_DIR ??
|
|
26
|
+
"./cache/animepahe/cache.json";
|
|
27
|
+
}
|
|
28
|
+
getHeaders({ sessionId, cookie, }) {
|
|
29
|
+
const host = new URL(this.data.baseUrl).host;
|
|
30
|
+
// NOTE TO SELF ( by skunktank69 ):
|
|
31
|
+
// authority must match the actual host you are calling, otherwise some setups get weird.
|
|
32
|
+
// also: cookie must be omitted if empty, not `cookie: false`.
|
|
33
|
+
const headers = {
|
|
34
|
+
accept: "application/json, text/javascript, */*; q=0.01",
|
|
35
|
+
"accept-language": "en-US,en;q=0.9",
|
|
36
|
+
dnt: "1",
|
|
37
|
+
"sec-ch-ua": '"Not A(Brand";v="99", "Microsoft Edge";v="121", "Chromium";v="121"',
|
|
38
|
+
"sec-ch-ua-mobile": "?0",
|
|
39
|
+
"sec-ch-ua-platform": '"Windows"',
|
|
40
|
+
"sec-fetch-dest": "empty",
|
|
41
|
+
"sec-fetch-mode": "cors",
|
|
42
|
+
"sec-fetch-site": "same-origin",
|
|
43
|
+
"x-requested-with": "XMLHttpRequest",
|
|
44
|
+
referer: sessionId
|
|
45
|
+
? `${this.data.baseUrl}/anime/${sessionId}`
|
|
46
|
+
: this.data.baseUrl,
|
|
47
|
+
"user-agent": userAgent,
|
|
48
|
+
authority: host,
|
|
49
|
+
};
|
|
50
|
+
if (cookie)
|
|
51
|
+
headers.cookie = cookie;
|
|
52
|
+
return headers;
|
|
53
|
+
}
|
|
54
|
+
async readCache(cachePath = this.cachePath) {
|
|
55
|
+
try {
|
|
56
|
+
const raw = await readFile(cachePath, "utf8");
|
|
57
|
+
const json = JSON.parse(raw);
|
|
58
|
+
// tolerate either {string: "..."} or raw object
|
|
59
|
+
return (json ?? {});
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return {};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async getCookieString(cachePath = this.cachePath) {
|
|
66
|
+
const cache = await this.readCache(cachePath);
|
|
67
|
+
return typeof cache.string === "string" ? cache.string : "";
|
|
68
|
+
}
|
|
69
|
+
async bypassToCache(url) {
|
|
70
|
+
return new Promise((resolve, reject) => {
|
|
71
|
+
bypass(url, (err, resp) => {
|
|
72
|
+
if (err)
|
|
73
|
+
return reject(err);
|
|
74
|
+
const cookiesObj = resp?.cookies ?? {};
|
|
75
|
+
const cacheData = {
|
|
76
|
+
...cookiesObj,
|
|
77
|
+
timeStamp: Date.now(),
|
|
78
|
+
expires: Date.now() + 604_800_000, // 7 days
|
|
79
|
+
};
|
|
80
|
+
resolve(cacheData);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Ensures cache is fresh. Returns true when cache is usable.
|
|
86
|
+
*/
|
|
87
|
+
async writeToCache({ url, cachePath = this.cachePath, force = false, }) {
|
|
88
|
+
const apc = await this.readCache(cachePath);
|
|
89
|
+
const expires = typeof apc.expires === "number" ? apc.expires : 0;
|
|
90
|
+
const now = Date.now();
|
|
91
|
+
if (!force && expires > now) {
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
const cacheData = await this.bypassToCache(url);
|
|
96
|
+
// editJsonFile is your util; assume it writes JSON atomically-ish
|
|
97
|
+
await Promise.resolve(editJsonFile(cachePath, cacheData));
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
const fallbackCookie = typeof apc.string === "string" ? apc.string.trim() : "";
|
|
102
|
+
if (fallbackCookie)
|
|
103
|
+
return true;
|
|
104
|
+
throw err;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
async search(query, page, perPage, ...args) {
|
|
108
|
+
const url = `${this.data.baseUrl}/api?m=search&q=${encodeURIComponent(query)}`;
|
|
109
|
+
await this.writeToCache({ url, force: true });
|
|
110
|
+
const cookie = await this.getCookieString();
|
|
111
|
+
const headers = this.getHeaders({ cookie });
|
|
112
|
+
const res = await axios.get(url, { ...headers });
|
|
113
|
+
return res.data;
|
|
114
|
+
}
|
|
115
|
+
async getSession(title, animeId) {
|
|
116
|
+
const url = `${this.data.baseUrl}/api?m=search&q=${encodeURIComponent(title)}`;
|
|
117
|
+
await this.writeToCache({ url, force: true });
|
|
118
|
+
const cookie = await this.getCookieString();
|
|
119
|
+
const headers = this.getHeaders({ cookie });
|
|
120
|
+
const res = await axios.get(url, { headers });
|
|
121
|
+
const data = res.data;
|
|
122
|
+
if (!data?.data || !Array.isArray(data.data)) {
|
|
123
|
+
throw new Error("Invalid search response");
|
|
124
|
+
}
|
|
125
|
+
const byId = animeId &&
|
|
126
|
+
data.data.find((a) => a?.id === animeId || a?.anime_id === animeId);
|
|
127
|
+
const byTitle = data.data.find((a) => a?.title === title);
|
|
128
|
+
const pick = byId ?? byTitle ?? data.data[0];
|
|
129
|
+
const session = pick?.session;
|
|
130
|
+
if (!session)
|
|
131
|
+
throw new Error("No matching anime found (missing session)");
|
|
132
|
+
return String(session);
|
|
133
|
+
}
|
|
134
|
+
async getEpisodes({ title, session, sort, page, }) {
|
|
135
|
+
await this.writeToCache({ url: this.data.baseUrl });
|
|
136
|
+
const cookie = await this.getCookieString();
|
|
137
|
+
const headers = this.getHeaders({ cookie });
|
|
138
|
+
if (!session && title) {
|
|
139
|
+
session = await this.getSession(title);
|
|
140
|
+
}
|
|
141
|
+
const url = `${this.data.baseUrl}/api?m=release&id=${session}&sort=${sort ?? "episode_desc"}&page=${page ?? 1}`;
|
|
142
|
+
const res = await axios.get(url, { headers });
|
|
143
|
+
const data = res.data;
|
|
144
|
+
return {
|
|
145
|
+
...data,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
async getAnimeInfo({ title, session, ep_page, }) {
|
|
149
|
+
await this.writeToCache({ url: this.data.baseUrl });
|
|
150
|
+
const cookie = await this.getCookieString();
|
|
151
|
+
const headers = this.getHeaders({ cookie });
|
|
152
|
+
if (!session && title) {
|
|
153
|
+
session = await this.getSession(title);
|
|
154
|
+
}
|
|
155
|
+
const episodes = await this.getEpisodes({
|
|
156
|
+
session: session,
|
|
157
|
+
page: ep_page ?? 1,
|
|
158
|
+
});
|
|
159
|
+
const url = `${this.data.baseUrl}/anime/${session}`;
|
|
160
|
+
const res = await axios.get(url, { headers });
|
|
161
|
+
const $ = cheerio.load(res.data);
|
|
162
|
+
const data = {
|
|
163
|
+
session,
|
|
164
|
+
anilist_id: $(".external-links > a:nth-of-type(1)")
|
|
165
|
+
.attr("href")
|
|
166
|
+
?.split("/anime/")[1],
|
|
167
|
+
title: title ??
|
|
168
|
+
$(".anime-header > .title-wrapper > .user-select-none > span")
|
|
169
|
+
.text()
|
|
170
|
+
.trim(),
|
|
171
|
+
image: $(".youtube-preview > img").attr("data-src"),
|
|
172
|
+
synopsis: $(".anime-synopsis").text().trim(),
|
|
173
|
+
episodes,
|
|
174
|
+
};
|
|
175
|
+
return data;
|
|
176
|
+
}
|
|
177
|
+
async getEpisodeSources({ title, session, episode_id, }) {
|
|
178
|
+
try {
|
|
179
|
+
await this.writeToCache({ url: this.data.baseUrl });
|
|
180
|
+
const cookie = await this.getCookieString();
|
|
181
|
+
let headers = this.getHeaders({ cookie });
|
|
182
|
+
if (!session && title) {
|
|
183
|
+
session = await this.getSession(title);
|
|
184
|
+
}
|
|
185
|
+
headers = {
|
|
186
|
+
...headers,
|
|
187
|
+
sessionId: session,
|
|
188
|
+
Referer: this.data.baseUrl,
|
|
189
|
+
};
|
|
190
|
+
const url = `${this.data.baseUrl}/play/${session}/${episode_id}`;
|
|
191
|
+
const res = await axios.get(url, { headers });
|
|
192
|
+
const $ = cheerio.load(res.data);
|
|
193
|
+
const buttons = $("#resolutionMenu button");
|
|
194
|
+
const videoLinks = [];
|
|
195
|
+
for (const button of buttons) {
|
|
196
|
+
const quality = $(button).text().trim();
|
|
197
|
+
const kwikLink = $(button).attr("data-src");
|
|
198
|
+
const audio = $(button).attr("data-audio");
|
|
199
|
+
if (kwikLink) {
|
|
200
|
+
const videoResult = await extractKwikVideo(kwikLink, {
|
|
201
|
+
baseUrl: this.data.baseUrl,
|
|
202
|
+
headers: headers,
|
|
203
|
+
});
|
|
204
|
+
if (!videoResult.error) {
|
|
205
|
+
videoLinks.push({
|
|
206
|
+
quality: quality,
|
|
207
|
+
url: videoResult.url,
|
|
208
|
+
referer: "https://kwik.cx",
|
|
209
|
+
isDub: audio === "eng",
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
const qualityOrder = {
|
|
213
|
+
"1080p": 1,
|
|
214
|
+
"720p": 2,
|
|
215
|
+
"480p": 3,
|
|
216
|
+
"360p": 4,
|
|
217
|
+
};
|
|
218
|
+
videoLinks.sort((a, b) => {
|
|
219
|
+
const qualityA =
|
|
220
|
+
//@ts-expect-error ----
|
|
221
|
+
qualityOrder[a.quality.replace(/.*?(\d+p).*/, "$1")] || 999;
|
|
222
|
+
const qualityB =
|
|
223
|
+
//@ts-expect-error ----
|
|
224
|
+
qualityOrder[b.quality.replace(/.*?(\d+p).*/, "$1")] || 999;
|
|
225
|
+
return qualityA - qualityB;
|
|
226
|
+
});
|
|
227
|
+
const organizedLinks = organizeStreamLinks(videoLinks);
|
|
228
|
+
return {
|
|
229
|
+
headers: {
|
|
230
|
+
Referer: "https://kwik.cx/",
|
|
231
|
+
},
|
|
232
|
+
sources: [
|
|
233
|
+
{
|
|
234
|
+
url: organizedLinks.sub[0] || organizedLinks.dub[0],
|
|
235
|
+
},
|
|
236
|
+
],
|
|
237
|
+
multiSrc: videoLinks,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
console.error("Error getting episode sources:", error);
|
|
244
|
+
return { sources: [], multiSrc: [] };
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=animepahe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animepahe.js","sourceRoot":"","sources":["../../../../src/models/providers/anime/animepahe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/models/providers/anime/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ExtensionTypeEnum, ProviderInfo } from "../../utils/types/provider";
|
|
2
|
+
declare abstract class BaseProvider {
|
|
3
|
+
/**
|
|
4
|
+
* provider info
|
|
5
|
+
*/
|
|
6
|
+
protected abstract readonly data: ProviderInfo;
|
|
7
|
+
cachePath?: string;
|
|
8
|
+
protected generateIdentifier(name: string, isNSFW: boolean, type: ExtensionTypeEnum): string;
|
|
9
|
+
getInfo(): {
|
|
10
|
+
identifier: string;
|
|
11
|
+
name: string;
|
|
12
|
+
type: ExtensionTypeEnum;
|
|
13
|
+
author: string;
|
|
14
|
+
baseUrl: string;
|
|
15
|
+
altUrls?: string[];
|
|
16
|
+
icon: string;
|
|
17
|
+
language: string | string[];
|
|
18
|
+
isNSFW: boolean;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export default BaseProvider;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class BaseProvider {
|
|
2
|
+
cachePath;
|
|
3
|
+
generateIdentifier(name, isNSFW, type) {
|
|
4
|
+
return `${type.toLowerCase()}.${isNSFW ? "nsfw" : "sfw"}.${name}`.replaceAll("/[^0-9a-zA-Z]+/gm", "-");
|
|
5
|
+
}
|
|
6
|
+
getInfo() {
|
|
7
|
+
return {
|
|
8
|
+
...this.data,
|
|
9
|
+
identifier: this.generateIdentifier(this.data.name, this.data.isNSFW, this.data.type),
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export default BaseProvider;
|
|
14
|
+
//# sourceMappingURL=baseProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseProvider.js","sourceRoot":"","sources":["../../../src/models/providers/baseProvider.ts"],"names":[],"mappings":"AAKA,MAAe,YAAY;IAKzB,SAAS,CAAU;IAET,kBAAkB,CAC1B,IAAY,EACZ,MAAe,EACf,IAAuB;QAEvB,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,UAAU,CAC1E,mBAAmB,EACnB,GAAG,CACJ,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO;YACL,GAAG,IAAI,CAAC,IAAI;YACZ,UAAU,EAAE,IAAI,CAAC,kBAAkB,CACjC,IAAI,CAAC,IAAI,CAAC,IAAI,EACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAChB,IAAI,CAAC,IAAI,CAAC,IAAI,CACf;SACF,CAAC;IACJ,CAAC;CACF;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/models/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,MAAM,KAAK,GAAG;IACZ,GAAG,EAAE;QACH,SAAS;KACV;CACF,CAAC;AAEF,eAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { AxiosHeaders } from "axios";
|
|
2
|
+
export default function extractKwikVideo(url: string, { baseUrl, headers }: {
|
|
3
|
+
baseUrl: string;
|
|
4
|
+
headers: AxiosHeaders;
|
|
5
|
+
}): Promise<{
|
|
6
|
+
error: boolean;
|
|
7
|
+
url: any;
|
|
8
|
+
isM3U8: boolean;
|
|
9
|
+
originalUrl: string;
|
|
10
|
+
message?: undefined;
|
|
11
|
+
} | {
|
|
12
|
+
error: boolean;
|
|
13
|
+
message: any;
|
|
14
|
+
originalUrl: string;
|
|
15
|
+
url?: undefined;
|
|
16
|
+
isM3U8?: undefined;
|
|
17
|
+
}>;
|
|
18
|
+
export declare function organizeStreamLinks(links: any): {
|
|
19
|
+
sub: any[];
|
|
20
|
+
dub: any[];
|
|
21
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
export default async function extractKwikVideo(url, { baseUrl, headers }) {
|
|
3
|
+
try {
|
|
4
|
+
const response = await axios.get(url, {
|
|
5
|
+
headers,
|
|
6
|
+
});
|
|
7
|
+
const html = await response.data;
|
|
8
|
+
const scriptMatch = /(eval)(\(f.*?)(\n<\/script>)/s.exec(html);
|
|
9
|
+
if (!scriptMatch) {
|
|
10
|
+
return {
|
|
11
|
+
error: true,
|
|
12
|
+
message: "Could not find obfuscated script",
|
|
13
|
+
originalUrl: url,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
const evalCode = scriptMatch[2]?.replace("eval", "");
|
|
17
|
+
const deobfuscated = eval(evalCode);
|
|
18
|
+
const m3u8Match = deobfuscated.match(/https.*?m3u8/);
|
|
19
|
+
if (m3u8Match && m3u8Match[0]) {
|
|
20
|
+
return {
|
|
21
|
+
error: false,
|
|
22
|
+
url: m3u8Match[0],
|
|
23
|
+
isM3U8: true,
|
|
24
|
+
originalUrl: url,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
error: true,
|
|
29
|
+
message: "Could not extract m3u8 URL",
|
|
30
|
+
originalUrl: url,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
console.error("Error extracting Kwik video:", error);
|
|
35
|
+
return {
|
|
36
|
+
error: true,
|
|
37
|
+
message: error.message,
|
|
38
|
+
originalUrl: url,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export function organizeStreamLinks(links) {
|
|
43
|
+
const result = { sub: [], dub: [] };
|
|
44
|
+
const qualityOrder = ["1080p", "720p", "360p"];
|
|
45
|
+
for (const link of links) {
|
|
46
|
+
const isDub = link.isDub;
|
|
47
|
+
const targetList = isDub ? result.dub : result.sub;
|
|
48
|
+
targetList.push(link.url);
|
|
49
|
+
}
|
|
50
|
+
// Sort by quality
|
|
51
|
+
const sortByQuality = (a, b) => {
|
|
52
|
+
const qualityA = qualityOrder.indexOf(a.match(/\d+p/)?.[0] || "");
|
|
53
|
+
const qualityB = qualityOrder.indexOf(b.match(/\d+p/)?.[0] || "");
|
|
54
|
+
return qualityB - qualityA;
|
|
55
|
+
};
|
|
56
|
+
result.sub.sort(sortByQuality);
|
|
57
|
+
result.dub.sort(sortByQuality);
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=kwik.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kwik.js","sourceRoot":"","sources":["../../../src/utils/heplers/kwik.ts"],"names":[],"mappings":"AAAA,OAAO,KAAuB,MAAM,OAAO,CAAC;AAE5C,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,gBAAgB,CAC5C,GAAW,EACX,EAAE,OAAO,EAAE,OAAO,EAA8C;IAEhE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YACpC,OAAO;SACR,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC;QACjC,MAAM,WAAW,GAAG,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE/D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO;gBACL,KAAK,EAAE,IAAI;gBACX,OAAO,EAAE,kCAAkC;gBAC3C,WAAW,EAAE,GAAG;aACjB,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAkB,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAErD,IAAI,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9B,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;gBACjB,MAAM,EAAE,IAAI;gBACZ,WAAW,EAAE,GAAG;aACjB,CAAC;QACJ,CAAC;QAED,OAAO;YACL,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,4BAA4B;YACrC,WAAW,EAAE,GAAG;SACjB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACrD,OAAO;YACL,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,GAAG;SACjB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAU;IAC5C,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IACpC,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAE/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QACnD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAY,CAAC,CAAC;IACrC,CAAC;IAED,kBAAkB;IAClB,MAAM,aAAa,GAAG,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE;QACvC,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAClE,OAAO,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC,CAAC;IAEF,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAE/B,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { BaseResultsInterface } from ".";
|
|
2
|
+
type episodeDataType = {
|
|
3
|
+
id: string | string[] | null;
|
|
4
|
+
title: string | string[] | null;
|
|
5
|
+
link: string | string[] | null;
|
|
6
|
+
image: string | null;
|
|
7
|
+
[x: string]: any;
|
|
8
|
+
};
|
|
9
|
+
interface AnimeSearchResultsInterface extends BaseResultsInterface {
|
|
10
|
+
episodes: episodeDataType;
|
|
11
|
+
[x: string]: any;
|
|
12
|
+
}
|
|
13
|
+
export type { AnimeSearchResultsInterface };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=anime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anime.js","sourceRoot":"","sources":["../../../src/utils/types/anime.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
interface BaseResultsInterface {
|
|
2
|
+
id: {
|
|
3
|
+
source: string | number | null;
|
|
4
|
+
[x: string]: any;
|
|
5
|
+
};
|
|
6
|
+
title: {
|
|
7
|
+
source: string | null;
|
|
8
|
+
original: string | null;
|
|
9
|
+
lang: {
|
|
10
|
+
[x: string]: any;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
synopsis: {
|
|
14
|
+
source: string | null;
|
|
15
|
+
[x: string]: any;
|
|
16
|
+
};
|
|
17
|
+
images: {
|
|
18
|
+
cover: string | [] | null;
|
|
19
|
+
banner: string | [] | null;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export type { BaseResultsInterface };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/types/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type ExtensionTypeEnum = "ANIME" | "MANGA" | "NOVELS" | "META" | "MOVIES";
|
|
2
|
+
interface ProviderInfo {
|
|
3
|
+
name: string;
|
|
4
|
+
type: ExtensionTypeEnum;
|
|
5
|
+
author: string;
|
|
6
|
+
baseUrl: string;
|
|
7
|
+
altUrls?: string[];
|
|
8
|
+
icon: string;
|
|
9
|
+
language: string | string[];
|
|
10
|
+
isNSFW: boolean;
|
|
11
|
+
}
|
|
12
|
+
export type { ProviderInfo, ExtensionTypeEnum };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/utils/types/provider.ts"],"names":[],"mappings":""}
|
|
File without changes
|