Server 1<\/span>/;
+ const server1Match = server1Regex.exec(cleanedHtml);
+
+ if (!server1Match) {
+ console.log("Server 1 not found");
+ return "error";
+ }
+
+ const serverId = server1Match[1];
+
+ const tokenRequestData = [{ name: "Server1", data: serverId }];
+
+ const tokenBatchResponse = await fetchv2(
+ "https://ilovekai.simplepostrequest.workers.dev/ilovethighs",
+ {},
+ "POST",
+ JSON.stringify(tokenRequestData)
+ );
+ const tokenResults = await tokenBatchResponse.json();
+ const token = tokenResults[0]?.data;
+
+ if (!token) {
+ console.log("Token not found");
+ return "error";
+ }
+
+ const streamUrl = `https://1movies.bz/ajax/links/view?id=${serverId}&_=${token}`;
+ const streamResponse = await fetchv2(streamUrl);
+ const streamData = await streamResponse.json();
+
+ if (!streamData.result) {
+ console.log("Stream result not found");
+ return "error";
+ }
+
+ const decryptRequestData = [{ name: "Server1", data: streamData.result }];
+
+ const decryptBatchResponse = await fetchv2(
+ "https://ilovekai.simplepostrequest.workers.dev/iloveboobs",
+ {},
+ "POST",
+ JSON.stringify(decryptRequestData)
+ );
+ const decryptedResponse = await decryptBatchResponse.json();
+ const decryptedUrl = decryptedResponse[0]?.data.url;
+
+ const subListEncoded = decryptedUrl.split("sub.list=")[1]?.split("&")[0];
+ const subListUrl = decodeURIComponent(subListEncoded);
+
+ const subResponse = await fetchv2(subListUrl);
+ const subtitles = await subResponse.json();
+
+ const englishSubUrl = subtitles.find(sub => sub.label === "English")?.file.replace(/\\\//g, "/");
+
+ if (!decryptedUrl) {
+ console.log("Decryption failed");
+ return "error";
+ }
+
+ const headers = {
+ "Referer": "https://1movies.bz/",
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36"
+ };
+
+ const mediaResponse = await fetchv2(decryptedUrl.replace("/e/", "/media/"), headers);
+ const mediaJson = await mediaResponse.json();
+
+ const result = mediaJson?.result;
+ if (!result) {
+ console.log("Media result not found");
+ return "error";
+ }
+
+ const postData = {
+ "text": result,
+ "Useragent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36"
+ };
+
+ const finalResponse = await fetchv2("https://ilovekai.simplepostrequest.workers.dev/ilovebush", {}, "POST", JSON.stringify(postData));
+ const finalJson = await finalResponse.json();
+
+ const m3u8Link = finalJson?.result?.sources?.[0]?.file;
+
+ const returnValue = {
+ stream: m3u8Link,
+ subtitles: englishSubUrl
+ };
+ console.log(JSON.stringify(returnValue));
+ return JSON.stringify(returnValue);
+ } catch (error) {
+ console.log("Fetch error:"+ error);
+ return "https://error.org";
+ }
+}
+
+function cleanHtmlSymbols(string) {
+ if (!string) {
+ return "";
+ }
+ return string
+ .replace(/’/g, "'")
+ .replace(/–/g, "-")
+ .replace(/[0-9]+;/g, "")
+ .replace(/\r?\n|\r/g, " ")
+ .replace(/\s+/g, " ")
+ .trim();
+}
+
+function cleanJsonHtml(jsonHtml) {
+ if (!jsonHtml) {
+ return "";
+ }
+ return jsonHtml
+ .replace(/\\"/g, "\"")
+ .replace(/\\'/g, "'")
+ .replace(/\\\\/g, "\\")
+ .replace(/\\n/g, "\n")
+ .replace(/\\t/g, "\t")
+ .replace(/\\r/g, "\r");
+}
+
+function decodeHtmlEntities(text) {
+ if (!text) {
+ return "";
+ }
+ return text
+ .replace(/'/g, "'")
+ .replace(/"/g, "\"")
+ .replace(/&/g, "&")
+ .replace(/</g, "<")
+ .replace(/>/g, ">")
+ .replace(/ /g, " ");
+}
diff --git a/1movies/1movies.json b/1movies/1movies.json
new file mode 100644
index 0000000..3108327
--- /dev/null
+++ b/1movies/1movies.json
@@ -0,0 +1,19 @@
+{
+ "sourceName": "1Movies",
+ "iconUrl": "https://1movies.bz/assets/uploads/675b5c22f2829fc8e3a4030af7f4284acad017e5241280b3dc21.png",
+ "author": {
+ "name": "50/50",
+ "icon": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ3122kQwublLkZ6rf1fEpUP79BxZOFmH9BSA&s"
+ },
+ "version": "1.0.5",
+ "language": "English",
+ "streamType": "HLS",
+ "quality": "1080p",
+ "baseUrl": "https://animekai.to/",
+ "searchBaseUrl": "https://1movies.bz/home",
+ "scriptUrl": "https://gitlab.com/50n50/sources/-/raw/main/1movies/1movies.js",
+ "type": "shows/movies",
+ "asyncJS": true,
+ "softsub": true,
+ "downloadSupport": true
+}
diff --git a/1tamilcrow/1tamilcrow.js b/1tamilcrow/1tamilcrow.js
new file mode 100644
index 0000000..857cfbb
--- /dev/null
+++ b/1tamilcrow/1tamilcrow.js
@@ -0,0 +1,225 @@
+async function searchResults(keyword) {
+ const results = [];
+ const regex = /]*>\s*([^<]+)\s*<\/a>/g;
+
+ try {
+ const response = await fetchv2("https://www.1tamilcrow.net/?s=" + keyword);
+ const html = await response.text();
+
+ let match;
+ while ((match = regex.exec(html)) !== null) {
+ results.push({
+ href: match[2].trim(),
+ title: decodeHtml(match[3].trim()),
+ image: match[1] ? match[1].trim() : "No Image"
+ });
+ }
+
+ return JSON.stringify(results);
+ } catch (err) {
+ return JSON.stringify([{
+ title: "Error",
+ image: "Error",
+ href: "Error"
+ }]);
+ }
+}
+
+function decodeHtml(str) {
+ return str
+ .replace(/&/g, "&")
+ .replace(/’/g, "’")
+ .replace(/"/g, "\"")
+ .replace(/'/g, "'")
+ .replace(/</g, "<")
+ .replace(/>/g, ">");
+}
+
+
+async function extractDetails(url) {
+ try {
+ return JSON.stringify([{
+ description: "No description on the website",
+ aliases: "N/A",
+ airdate: "N/A"
+ }]);
+ } catch (err) {
+ return JSON.stringify([{
+ description: "Error",
+ aliases: "Error",
+ airdate: "Error"
+ }]);
+ }
+}
+
+async function extractEpisodes(url) {
+ const results = [];
+ try {
+ const response = await fetchv2(url);
+ const html = await response.text();
+ console.log(html);
+ const regex = /