@pieda/video-dl 1.10.2 → 1.10.3

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/dist/video-dl.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=(e=!1)=>({log:(...o)=>{e&&console.log(...o)},error:(...o)=>{e&&console.error(...o)}});var s=[];for(var S=0;S<256;++S)s.push((S+256).toString(16).slice(1));function E(e,o=0){return(s[e[o+0]]+s[e[o+1]]+s[e[o+2]]+s[e[o+3]]+"-"+s[e[o+4]]+s[e[o+5]]+"-"+s[e[o+6]]+s[e[o+7]]+"-"+s[e[o+8]]+s[e[o+9]]+"-"+s[e[o+10]]+s[e[o+11]]+s[e[o+12]]+s[e[o+13]]+s[e[o+14]]+s[e[o+15]]).toLowerCase()}var $,I=new Uint8Array(16);function K(){if(!$&&($=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!$))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return $(I)}var _=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto);const D={randomUUID:_};function C(e,o,n){if(D.randomUUID&&!o&&!e)return D.randomUUID();e=e||{};var r=e.random||(e.rng||K)();if(r[6]=r[6]&15|64,r[8]=r[8]&63|128,o){n=n||0;for(var t=0;t<16;++t)o[n+t]=r[t];return o}return E(r)}const w=e=>new Promise((o,n)=>{import(e).then(r=>o(r.default)).catch(n)}),P=async(e,o,n)=>{const r=await w("fs"),t=await w("axios");return console.log(`Downloading ${e} to ${o}`),new Promise((c,i)=>{t.get(e,{responseType:"stream",headers:n}).then(a=>{const u=a.data,g=r.createWriteStream(o);u.pipe(g),g.on("finish",function(){g.close(()=>{c()})})}).catch(i)})},U=async({debug:e=!1,ytdlpPath:o,videoUrl:n,dest:r,tempDir:t,ffmpegConfig:c})=>{const i=h(e);i.log(`Downloading video: ${n} to: ${r}`);const a=await w("fs"),u=await w("path"),{exec:g,execSync:y}=await w("child_process"),l=u.join(t,C()),p=()=>new Promise((d,b)=>{const m=`${o} -f mergeall --audio-multistreams --video-multistreams ${n} --downloader ffmpeg -o "${l}/%(id)s.%(ext)s" --merge-output-format mp4`;i.log(`[yt-dlp] 執行命令: ${m}`),g(m,(v,f,k)=>{if(i.log(`[yt-dlp] stdout: ${f}`),v){b(v);return}d()})});return a.existsSync(u.dirname(r))||(a.mkdirSync(u.dirname(r),{recursive:!0},777),i.log(`建立 ${u.dirname(r)}`)),new Promise(async(d,b)=>{try{await p();let m=!1;const v=a.readdirSync(l);for(const f of v){const k=u.join(l,f),j=`${c.ffmpegProbePath} -v error -show_entries stream=codec_type -of csv=p=0 "${k}"`,x=y(j).toString("utf-8"),R=x.includes("video"),W=x.includes("audio");if(R&&W){m=!0,a.copyFileSync(k,r);break}}if(!m)throw new Error("無法下載影音正常的影片");i.log(`下載完成 ${r}`),d([null,!0])}catch(m){i.error(`下載失敗: ${m.message}`),d([m,null])}})},A=async({debug:e=!1,ytdlpPath:o,videoId:n,dest:r,tempDir:t,ffmpegConfig:c})=>{h(e).log(`Downloading video: ${n} to: ${r}`);const a=`https://www.youtube.com/watch?v=${n}`;return U({debug:e,ytdlpPath:o,videoUrl:a,dest:r,tempDir:t,ffmpegConfig:c})},F=async({videoId:e,dest:o,debug:n=!1,headless:r=!0})=>{try{const t=h(n);t.log(`Downloading video: ${e} to: ${o}`);const c=`https://m.facebook.com/watch/?v=${e}`,i=await w("fs"),a=await w("path"),u=await w("puppeteer");i.existsSync(a.dirname(o))||(i.mkdirSync(a.dirname(o),{recursive:!0},777),t.log(`建立 ${a.dirname(o)}`));const g={};r||(g.headless=!1);const y=await u.launch(g);t.log("啟動 puppeteer");const l=await y.newPage();await l.setUserAgent("'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1'"),t.log("開新分頁"),t.log(`前往 ${c}`),await Promise.race([l.goto(c,{waitUntil:"networkidle0"}),l.waitForSelector("video")]),t.log("找到 video 元素");const p=await l.$eval("video",d=>d.getAttribute("src"));return t.log(`取得 video url: ${p}`),await y.close(),t.log("關閉 puppeteer"),await P(p,o),t.log(`下載完成 ${p}`),[null,!0]}catch(t){return[t,null]}},M=async({debug:e=!1,ytdlpPath:o,videoId:n,dest:r,tempDir:t,ffmpegConfig:c})=>{h(e).log(`Downloading video: ${n} to: ${r}`);const a=`https://vimeo.com/${n}`;return U({debug:e,ytdlpPath:o,videoUrl:a,dest:r,tempDir:t,ffmpegConfig:c})},T=async({debug:e=!1,ytdlpPath:o,videoId:n,dest:r,tempDir:t,ffmpegConfig:c})=>{h(e).log(`Downloading video: ${n} to: ${r}`);const a=`https://www.instagram.com/reel/${n}/`;return U({debug:e,ytdlpPath:o,videoUrl:a,dest:r,tempDir:t,ffmpegConfig:c})},V=async({videoLink:e,dest:o,debug:n=!1,headless:r=!0})=>{try{const t=h(n);t.log(`Downloading video: ${e} to: ${o}`);const c=e,i=await w("fs"),a=await w("path"),u=await w("puppeteer");i.existsSync(a.dirname(o))||(i.mkdirSync(a.dirname(o),{recursive:!0},777),t.log(`建立 ${a.dirname(o)}`));const g={};r||(g.headless=!1);const y=await u.launch(g);t.log("啟動 puppeteer");const l=await y.newPage();t.log("開新分頁"),t.log(`前往 ${c}`),await Promise.race([l.goto(c,{waitUntil:"networkidle0"}),l.waitForSelector("video")]),t.log("找到 video 元素");const p=await l.$eval('video source[src^="https://www.tiktok.com/aweme/v1/play/"]',d=>d.getAttribute("src"));return t.log(`取得 video url: ${p}`),await y.close(),t.log("關閉 puppeteer"),await P(p,o,{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",Referer:"https://www.tiktok.com/"}),t.log(`下載完成 ${p}`),[null,!0]}catch(t){return[t,null]}},H=({type:e})=>{switch(e){case"youtube":case"yt-short":return A;case"facebook":case"fb-reel":return F;case"vimeo":return M;case"instagram":case"ig":case"ig-reel":return T;case"tiktok":case"tiktok-reel":return V;default:throw new Error(`Invalid video type: ${e}`)}};exports.useDownloader=H;exports.useFacebook=F;exports.useInstagram=T;exports.useTiktok=V;exports.useVimeo=M;exports.useYoutube=A;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=(t=!1)=>({log:(...o)=>{t&&console.log(...o)},error:(...o)=>{t&&console.error(...o)}}),u=t=>new Promise((o,s)=>{import(t).then(r=>o(r.default)).catch(s)}),S=async(t,o,s)=>{const r=await u("fs"),e=await u("axios");return console.log(`Downloading ${t} to ${o}`),new Promise((i,n)=>{e.get(t,{responseType:"stream",headers:s}).then(a=>{const g=a.data,l=r.createWriteStream(o);g.pipe(l),l.on("finish",function(){l.close(()=>{i()})})}).catch(n)})},v=async({debug:t=!1,ytdlpPath:o,videoUrl:s,dest:r,tempDir:e,ffmpegConfig:i})=>{const n=d(t);n.log(`Downloading video: ${s} to: ${r}`);const a=await u("fs"),g=await u("path"),{exec:l,execSync:f}=await u("child_process"),w=()=>new Promise((c,m)=>{const p=`${o} -f mergeall --audio-multistreams --video-multistreams ${s} --downloader ffmpeg -o "${e}/%(id)s.%(ext)s" --merge-output-format mp4`;n.log(`[yt-dlp] 執行命令: ${p}`),l(p,(h,$,y)=>{if(n.log(`[yt-dlp] stdout: ${$}`),h){m(h);return}c()})});return a.existsSync(g.dirname(r))||(a.mkdirSync(g.dirname(r),{recursive:!0},777),n.log(`建立 ${g.dirname(r)}`)),new Promise(async(c,m)=>{try{await w();let p=!1;const h=a.readdirSync(e);for(const $ of h){const y=g.join(e,$),M=`${i.ffmpegProbePath} -v error -show_entries stream=codec_type -of csv=p=0 "${y}"`,k=f(M).toString("utf-8"),A=k.includes("video"),D=k.includes("audio");if(A&&D){p=!0,a.copyFileSync(y,r);break}}if(!p)throw new Error("無法下載影音正常的影片");n.log(`下載完成 ${r}`),c([null,!0])}catch(p){n.error(`下載失敗: ${p.message}`),c([p,null])}})},b=async({debug:t=!1,ytdlpPath:o,videoId:s,dest:r,tempDir:e,ffmpegConfig:i})=>{d(t).log(`Downloading video: ${s} to: ${r}`);const a=`https://www.youtube.com/watch?v=${s}`;return v({debug:t,ytdlpPath:o,videoUrl:a,dest:r,tempDir:e,ffmpegConfig:i})},P=async({videoId:t,dest:o,debug:s=!1,headless:r=!0})=>{try{const e=d(s);e.log(`Downloading video: ${t} to: ${o}`);const i=`https://m.facebook.com/watch/?v=${t}`,n=await u("fs"),a=await u("path"),g=await u("puppeteer");n.existsSync(a.dirname(o))||(n.mkdirSync(a.dirname(o),{recursive:!0},777),e.log(`建立 ${a.dirname(o)}`));const l={};r||(l.headless=!1);const f=await g.launch(l);e.log("啟動 puppeteer");const w=await f.newPage();await w.setUserAgent("'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1'"),e.log("開新分頁"),e.log(`前往 ${i}`),await Promise.race([w.goto(i,{waitUntil:"networkidle0"}),w.waitForSelector("video")]),e.log("找到 video 元素");const c=await w.$eval("video",m=>m.getAttribute("src"));return e.log(`取得 video url: ${c}`),await f.close(),e.log("關閉 puppeteer"),await S(c,o),e.log(`下載完成 ${c}`),[null,!0]}catch(e){return[e,null]}},U=async({debug:t=!1,ytdlpPath:o,videoId:s,dest:r,tempDir:e,ffmpegConfig:i})=>{d(t).log(`Downloading video: ${s} to: ${r}`);const a=`https://vimeo.com/${s}`;return v({debug:t,ytdlpPath:o,videoUrl:a,dest:r,tempDir:e,ffmpegConfig:i})},x=async({debug:t=!1,ytdlpPath:o,videoId:s,dest:r,tempDir:e,ffmpegConfig:i})=>{d(t).log(`Downloading video: ${s} to: ${r}`);const a=`https://www.instagram.com/reel/${s}/`;return v({debug:t,ytdlpPath:o,videoUrl:a,dest:r,tempDir:e,ffmpegConfig:i})},F=async({videoLink:t,dest:o,debug:s=!1,headless:r=!0})=>{try{const e=d(s);e.log(`Downloading video: ${t} to: ${o}`);const i=t,n=await u("fs"),a=await u("path"),g=await u("puppeteer");n.existsSync(a.dirname(o))||(n.mkdirSync(a.dirname(o),{recursive:!0},777),e.log(`建立 ${a.dirname(o)}`));const l={};r||(l.headless=!1);const f=await g.launch(l);e.log("啟動 puppeteer");const w=await f.newPage();e.log("開新分頁"),e.log(`前往 ${i}`),await Promise.race([w.goto(i,{waitUntil:"networkidle0"}),w.waitForSelector("video")]),e.log("找到 video 元素");const c=await w.$eval('video source[src^="https://www.tiktok.com/aweme/v1/play/"]',m=>m.getAttribute("src"));return e.log(`取得 video url: ${c}`),await f.close(),e.log("關閉 puppeteer"),await S(c,o,{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",Referer:"https://www.tiktok.com/"}),e.log(`下載完成 ${c}`),[null,!0]}catch(e){return[e,null]}},T=({type:t})=>{switch(t){case"youtube":case"yt-short":return b;case"facebook":case"fb-reel":return P;case"vimeo":return U;case"instagram":case"ig":case"ig-reel":return x;case"tiktok":case"tiktok-reel":return F;default:throw new Error(`Invalid video type: ${t}`)}};exports.useDownloader=T;exports.useFacebook=P;exports.useInstagram=x;exports.useTiktok=F;exports.useVimeo=U;exports.useYoutube=b;
package/dist/video-dl.js CHANGED
@@ -1,239 +1,209 @@
1
- const h = (e = !1) => ({
1
+ const d = (t = !1) => ({
2
2
  log: (...o) => {
3
- e && console.log(...o);
3
+ t && console.log(...o);
4
4
  },
5
5
  error: (...o) => {
6
- e && console.error(...o);
6
+ t && console.error(...o);
7
7
  }
8
- });
9
- var c = [];
10
- for (var U = 0; U < 256; ++U)
11
- c.push((U + 256).toString(16).slice(1));
12
- function V(e, o = 0) {
13
- return (c[e[o + 0]] + c[e[o + 1]] + c[e[o + 2]] + c[e[o + 3]] + "-" + c[e[o + 4]] + c[e[o + 5]] + "-" + c[e[o + 6]] + c[e[o + 7]] + "-" + c[e[o + 8]] + c[e[o + 9]] + "-" + c[e[o + 10]] + c[e[o + 11]] + c[e[o + 12]] + c[e[o + 13]] + c[e[o + 14]] + c[e[o + 15]]).toLowerCase();
14
- }
15
- var v, T = new Uint8Array(16);
16
- function R() {
17
- if (!v && (v = typeof crypto < "u" && crypto.getRandomValues && crypto.getRandomValues.bind(crypto), !v))
18
- throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
19
- return v(T);
20
- }
21
- var W = typeof crypto < "u" && crypto.randomUUID && crypto.randomUUID.bind(crypto);
22
- const P = {
23
- randomUUID: W
24
- };
25
- function j(e, o, n) {
26
- if (P.randomUUID && !o && !e)
27
- return P.randomUUID();
28
- e = e || {};
29
- var r = e.random || (e.rng || R)();
30
- if (r[6] = r[6] & 15 | 64, r[8] = r[8] & 63 | 128, o) {
31
- n = n || 0;
32
- for (var t = 0; t < 16; ++t)
33
- o[n + t] = r[t];
34
- return o;
35
- }
36
- return V(r);
37
- }
38
- const w = (e) => new Promise((o, n) => {
39
- import(e).then((r) => o(r.default)).catch(n);
40
- }), b = async (e, o, n) => {
41
- const r = await w("fs"), t = await w("axios");
42
- return console.log(`Downloading ${e} to ${o}`), new Promise((s, i) => {
43
- t.get(e, {
8
+ }), u = (t) => new Promise((o, n) => {
9
+ import(t).then((r) => o(r.default)).catch(n);
10
+ }), S = async (t, o, n) => {
11
+ const r = await u("fs"), e = await u("axios");
12
+ return console.log(`Downloading ${t} to ${o}`), new Promise((i, s) => {
13
+ e.get(t, {
44
14
  responseType: "stream",
45
15
  headers: n
46
16
  }).then((a) => {
47
- const u = a.data, g = r.createWriteStream(o);
48
- u.pipe(g), g.on("finish", function() {
49
- g.close(() => {
50
- s();
17
+ const g = a.data, l = r.createWriteStream(o);
18
+ g.pipe(l), l.on("finish", function() {
19
+ l.close(() => {
20
+ i();
51
21
  });
52
22
  });
53
- }).catch(i);
23
+ }).catch(s);
54
24
  });
55
- }, S = async ({
56
- debug: e = !1,
25
+ }, v = async ({
26
+ debug: t = !1,
57
27
  ytdlpPath: o,
58
28
  videoUrl: n,
59
29
  dest: r,
60
- tempDir: t,
61
- ffmpegConfig: s
30
+ tempDir: e,
31
+ ffmpegConfig: i
62
32
  }) => {
63
- const i = h(e);
64
- i.log(`Downloading video: ${n} to: ${r}`);
65
- const a = await w("fs"), u = await w("path"), { exec: g, execSync: y } = await w("child_process"), l = u.join(t, j()), p = () => new Promise((d, x) => {
66
- const m = `${o} -f mergeall --audio-multistreams --video-multistreams ${n} --downloader ffmpeg -o "${l}/%(id)s.%(ext)s" --merge-output-format mp4`;
67
- i.log(`[yt-dlp] 執行命令: ${m}`), g(m, ($, f, k) => {
68
- if (i.log(`[yt-dlp] stdout: ${f}`), $) {
69
- x($);
33
+ const s = d(t);
34
+ s.log(`Downloading video: ${n} to: ${r}`);
35
+ const a = await u("fs"), g = await u("path"), { exec: l, execSync: f } = await u("child_process"), w = () => new Promise((c, m) => {
36
+ const p = `${o} -f mergeall --audio-multistreams --video-multistreams ${n} --downloader ffmpeg -o "${e}/%(id)s.%(ext)s" --merge-output-format mp4`;
37
+ s.log(`[yt-dlp] 執行命令: ${p}`), l(p, (h, $, y) => {
38
+ if (s.log(`[yt-dlp] stdout: ${$}`), h) {
39
+ m(h);
70
40
  return;
71
41
  }
72
- d();
42
+ c();
73
43
  });
74
44
  });
75
- return a.existsSync(u.dirname(r)) || (a.mkdirSync(u.dirname(r), { recursive: !0 }, 777), i.log(`建立 ${u.dirname(r)}`)), new Promise(async (d, x) => {
45
+ return a.existsSync(g.dirname(r)) || (a.mkdirSync(g.dirname(r), { recursive: !0 }, 777), s.log(`建立 ${g.dirname(r)}`)), new Promise(async (c, m) => {
76
46
  try {
77
- await p();
78
- let m = !1;
79
- const $ = a.readdirSync(l);
80
- for (const f of $) {
81
- const k = u.join(l, f), A = `${s.ffmpegProbePath} -v error -show_entries stream=codec_type -of csv=p=0 "${k}"`, D = y(A).toString("utf-8"), F = D.includes("video"), M = D.includes("audio");
82
- if (F && M) {
83
- m = !0, a.copyFileSync(k, r);
47
+ await w();
48
+ let p = !1;
49
+ const h = a.readdirSync(e);
50
+ for (const $ of h) {
51
+ const y = g.join(e, $), P = `${i.ffmpegProbePath} -v error -show_entries stream=codec_type -of csv=p=0 "${y}"`, k = f(P).toString("utf-8"), b = k.includes("video"), x = k.includes("audio");
52
+ if (b && x) {
53
+ p = !0, a.copyFileSync(y, r);
84
54
  break;
85
55
  }
86
56
  }
87
- if (!m)
57
+ if (!p)
88
58
  throw new Error("無法下載影音正常的影片");
89
- i.log(`下載完成 ${r}`), d([null, !0]);
90
- } catch (m) {
91
- i.error(`下載失敗: ${m.message}`), d([m, null]);
59
+ s.log(`下載完成 ${r}`), c([null, !0]);
60
+ } catch (p) {
61
+ s.error(`下載失敗: ${p.message}`), c([p, null]);
92
62
  }
93
63
  });
94
- }, E = async ({
95
- debug: e = !1,
64
+ }, U = async ({
65
+ debug: t = !1,
96
66
  ytdlpPath: o,
97
67
  videoId: n,
98
68
  dest: r,
99
- tempDir: t,
100
- ffmpegConfig: s
69
+ tempDir: e,
70
+ ffmpegConfig: i
101
71
  }) => {
102
- h(e).log(`Downloading video: ${n} to: ${r}`);
72
+ d(t).log(`Downloading video: ${n} to: ${r}`);
103
73
  const a = `https://www.youtube.com/watch?v=${n}`;
104
- return S({
105
- debug: e,
74
+ return v({
75
+ debug: t,
106
76
  ytdlpPath: o,
107
77
  videoUrl: a,
108
78
  dest: r,
109
- tempDir: t,
110
- ffmpegConfig: s
79
+ tempDir: e,
80
+ ffmpegConfig: i
111
81
  });
112
- }, K = async ({
113
- videoId: e,
82
+ }, A = async ({
83
+ videoId: t,
114
84
  dest: o,
115
85
  debug: n = !1,
116
86
  headless: r = !0
117
87
  }) => {
118
88
  try {
119
- const t = h(n);
120
- t.log(`Downloading video: ${e} to: ${o}`);
121
- const s = `https://m.facebook.com/watch/?v=${e}`, i = await w("fs"), a = await w("path"), u = await w("puppeteer");
122
- i.existsSync(a.dirname(o)) || (i.mkdirSync(a.dirname(o), { recursive: !0 }, 777), t.log(`建立 ${a.dirname(o)}`));
123
- const g = {};
124
- r || (g.headless = !1);
125
- const y = await u.launch(g);
126
- t.log("啟動 puppeteer");
127
- const l = await y.newPage();
128
- await l.setUserAgent(
89
+ const e = d(n);
90
+ e.log(`Downloading video: ${t} to: ${o}`);
91
+ const i = `https://m.facebook.com/watch/?v=${t}`, s = await u("fs"), a = await u("path"), g = await u("puppeteer");
92
+ s.existsSync(a.dirname(o)) || (s.mkdirSync(a.dirname(o), { recursive: !0 }, 777), e.log(`建立 ${a.dirname(o)}`));
93
+ const l = {};
94
+ r || (l.headless = !1);
95
+ const f = await g.launch(l);
96
+ e.log("啟動 puppeteer");
97
+ const w = await f.newPage();
98
+ await w.setUserAgent(
129
99
  "'Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1'"
130
- ), t.log("開新分頁"), t.log(`前往 ${s}`), await Promise.race([
131
- l.goto(s, {
100
+ ), e.log("開新分頁"), e.log(`前往 ${i}`), await Promise.race([
101
+ w.goto(i, {
132
102
  waitUntil: "networkidle0"
133
103
  }),
134
- l.waitForSelector("video")
135
- ]), t.log("找到 video 元素");
136
- const p = await l.$eval("video", (d) => d.getAttribute("src"));
137
- return t.log(`取得 video url: ${p}`), await y.close(), t.log("關閉 puppeteer"), await b(p, o), t.log(`下載完成 ${p}`), [null, !0];
138
- } catch (t) {
139
- return [t, null];
104
+ w.waitForSelector("video")
105
+ ]), e.log("找到 video 元素");
106
+ const c = await w.$eval("video", (m) => m.getAttribute("src"));
107
+ return e.log(`取得 video url: ${c}`), await f.close(), e.log("關閉 puppeteer"), await S(c, o), e.log(`下載完成 ${c}`), [null, !0];
108
+ } catch (e) {
109
+ return [e, null];
140
110
  }
141
- }, _ = async ({
142
- debug: e = !1,
111
+ }, F = async ({
112
+ debug: t = !1,
143
113
  ytdlpPath: o,
144
114
  videoId: n,
145
115
  dest: r,
146
- tempDir: t,
147
- ffmpegConfig: s
116
+ tempDir: e,
117
+ ffmpegConfig: i
148
118
  }) => {
149
- h(e).log(`Downloading video: ${n} to: ${r}`);
119
+ d(t).log(`Downloading video: ${n} to: ${r}`);
150
120
  const a = `https://vimeo.com/${n}`;
151
- return S({
152
- debug: e,
121
+ return v({
122
+ debug: t,
153
123
  ytdlpPath: o,
154
124
  videoUrl: a,
155
125
  dest: r,
156
- tempDir: t,
157
- ffmpegConfig: s
126
+ tempDir: e,
127
+ ffmpegConfig: i
158
128
  });
159
- }, C = async ({
160
- debug: e = !1,
129
+ }, M = async ({
130
+ debug: t = !1,
161
131
  ytdlpPath: o,
162
132
  videoId: n,
163
133
  dest: r,
164
- tempDir: t,
165
- ffmpegConfig: s
134
+ tempDir: e,
135
+ ffmpegConfig: i
166
136
  }) => {
167
- h(e).log(`Downloading video: ${n} to: ${r}`);
137
+ d(t).log(`Downloading video: ${n} to: ${r}`);
168
138
  const a = `https://www.instagram.com/reel/${n}/`;
169
- return S({
170
- debug: e,
139
+ return v({
140
+ debug: t,
171
141
  ytdlpPath: o,
172
142
  videoUrl: a,
173
143
  dest: r,
174
- tempDir: t,
175
- ffmpegConfig: s
144
+ tempDir: e,
145
+ ffmpegConfig: i
176
146
  });
177
- }, H = async ({
178
- videoLink: e,
147
+ }, D = async ({
148
+ videoLink: t,
179
149
  dest: o,
180
150
  debug: n = !1,
181
151
  headless: r = !0
182
152
  }) => {
183
153
  try {
184
- const t = h(n);
185
- t.log(`Downloading video: ${e} to: ${o}`);
186
- const s = e, i = await w("fs"), a = await w("path"), u = await w("puppeteer");
187
- i.existsSync(a.dirname(o)) || (i.mkdirSync(a.dirname(o), { recursive: !0 }, 777), t.log(`建立 ${a.dirname(o)}`));
188
- const g = {};
189
- r || (g.headless = !1);
190
- const y = await u.launch(g);
191
- t.log("啟動 puppeteer");
192
- const l = await y.newPage();
193
- t.log("開新分頁"), t.log(`前往 ${s}`), await Promise.race([
194
- l.goto(s, {
154
+ const e = d(n);
155
+ e.log(`Downloading video: ${t} to: ${o}`);
156
+ const i = t, s = await u("fs"), a = await u("path"), g = await u("puppeteer");
157
+ s.existsSync(a.dirname(o)) || (s.mkdirSync(a.dirname(o), { recursive: !0 }, 777), e.log(`建立 ${a.dirname(o)}`));
158
+ const l = {};
159
+ r || (l.headless = !1);
160
+ const f = await g.launch(l);
161
+ e.log("啟動 puppeteer");
162
+ const w = await f.newPage();
163
+ e.log("開新分頁"), e.log(`前往 ${i}`), await Promise.race([
164
+ w.goto(i, {
195
165
  waitUntil: "networkidle0"
196
166
  }),
197
- l.waitForSelector("video")
198
- ]), t.log("找到 video 元素");
199
- const p = await l.$eval(
167
+ w.waitForSelector("video")
168
+ ]), e.log("找到 video 元素");
169
+ const c = await w.$eval(
200
170
  'video source[src^="https://www.tiktok.com/aweme/v1/play/"]',
201
- (d) => d.getAttribute("src")
171
+ (m) => m.getAttribute("src")
202
172
  );
203
- return t.log(`取得 video url: ${p}`), await y.close(), t.log("關閉 puppeteer"), await b(p, o, {
173
+ return e.log(`取得 video url: ${c}`), await f.close(), e.log("關閉 puppeteer"), await S(c, o, {
204
174
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
205
175
  Referer: "https://www.tiktok.com/"
206
176
  // 設定 Referer
207
- }), t.log(`下載完成 ${p}`), [null, !0];
208
- } catch (t) {
209
- return [t, null];
177
+ }), e.log(`下載完成 ${c}`), [null, !0];
178
+ } catch (e) {
179
+ return [e, null];
210
180
  }
211
- }, I = ({ type: e }) => {
212
- switch (e) {
181
+ }, T = ({ type: t }) => {
182
+ switch (t) {
213
183
  case "youtube":
214
184
  case "yt-short":
215
- return E;
185
+ return U;
216
186
  case "facebook":
217
187
  case "fb-reel":
218
- return K;
188
+ return A;
219
189
  case "vimeo":
220
- return _;
190
+ return F;
221
191
  case "instagram":
222
192
  case "ig":
223
193
  case "ig-reel":
224
- return C;
194
+ return M;
225
195
  case "tiktok":
226
196
  case "tiktok-reel":
227
- return H;
197
+ return D;
228
198
  default:
229
- throw new Error(`Invalid video type: ${e}`);
199
+ throw new Error(`Invalid video type: ${t}`);
230
200
  }
231
201
  };
232
202
  export {
233
- I as useDownloader,
234
- K as useFacebook,
235
- C as useInstagram,
236
- H as useTiktok,
237
- _ as useVimeo,
238
- E as useYoutube
203
+ T as useDownloader,
204
+ A as useFacebook,
205
+ M as useInstagram,
206
+ D as useTiktok,
207
+ F as useVimeo,
208
+ U as useYoutube
239
209
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pieda/video-dl",
3
3
  "private": false,
4
- "version": "1.10.2",
4
+ "version": "1.10.3",
5
5
  "type": "module",
6
6
  "main": "dist/video-dl.cjs",
7
7
  "module": "dist/video-dl.js",