File size: 2,551 Bytes
3b05b3f
e3f8657
499c35a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import axios from "axios";
import * as cheerio from "cheerio";
import qs from "qs";

const domain = "https://ssscapcut.com/";

function getCookies() {
  return new Promise((resolve, reject) => {
    axios
      .get("https://ssscapcut.com/")
      .then((response) => {
        const cookiesArray = response.headers["set-cookie"];
        const cookies = cookiesArray.map((cookie) => cookie.split(";")[0]); // Ambil hanya bagian yang diperlukan
        resolve(cookies);
      })
      .catch((error) => {
        console.error(error);
        reject(error);
      });
  });
}

const getOriginalUrl = async (shortUrl) => {
  try {
    const response = await axios.get(shortUrl, {
      maxRedirects: 0,
      validateStatus: null,
    });
    const originalUrl = response.headers.location;
    return originalUrl;
  } catch (error) {
    return shortUrl;
  }
};

function capcutdl(Url) {
  return new Promise(async (resolve, reject) => {
    try {
      if (!global.isUrlFSPR(Url) || !/capcut\.com/i.test(Url))
        return global.rejectFSPR("Invalid URL: " + Url);

      const cookies = await getCookies();
      Url = await getOriginalUrl(Url);
      const token = Url.match(/\d+/)[0];

      await axios
        .get(`https://ssscap.net/api/download/${token}`, {
          headers: {
            authority: "ssscap.net",
            accept: "application/json, text/plain, */*",
            "accept-language": "ms-MY,ms;q=0.9,en-US;q=0.8,en;q=0.7,id;q=0.6",
            cookie: cookies.join("; "),
            referer: "https://ssscap.net/",
            "sec-ch-ua": '"Not)A;Brand";v="24", "Chromium";v="116"',
            "sec-ch-ua-mobile": "?1",
            "sec-ch-ua-platform": '"Android"',
            "sec-fetch-dest": "empty",
            "sec-fetch-mode": "cors",
            "sec-fetch-site": "same-origin",
            "user-agent":
              "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Mobile Safari/537.36",
          },
        })
        .then(({ data }) => {
          resolve(global.resolveFSPR(updateUrls(data)));
        })
        .catch((error) => {
          resolve(global.rejectFSPR(error));
        });
    } catch (error) {
      resolve(global.rejectFSPR(error));
    }
  });
}

function updateUrls(obj) {
  const regex =
    /("originalVideoUrl": "| "authorUrl": "|"coverUrl": ")(\/[^"]+)/g;
  const updatedData = JSON.stringify(obj, null, 2).replace(
    regex,
    (match, p1, p2) => p1 + domain + p2,
  );
  return JSON.parse(updatedData);
}

export { capcutdl };