PageSourceSearch

https://vodloader.com/_next/static/chunks/4154-b0ff1c716000a405.js

js vodloader.com collected 2026-10-02 01:48:30 UTC 33,998 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4154],{14650:(e,t,a)=>{a.d(t,{K:()=>l});var r=a(22825);let o="changelog_seen_at",l={async list(){let{page:e=1,limit:t=20}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};try{var a,o;let l=await r.A.get("/api/changelog?page=".concat(e,"&limit=").concat(t));return{success:!0,entries:null!=(o=l.entries)?o:[],hasMore:!!(null==(a=l.pagination)?void 0:a.hasMore)}}catch(e){return{success:!1,entries:[],hasMore:!1,error:e.message}}},async getLatestAt(){try{var e;return null!=(e=(await r.A.get("/api/changelog/latest")).latestAt)?e:null}catch(e){return null}},getSeenAt(){try{return localStorage.getItem(o)}catch(e){return null}},markSeen(e){try{e&&localStorage.setItem(o,new Date(e).toISOString())}catch(e){}},hasUnseen(e){if(!e)return!1;let t=this.getSeenAt();return!t||new Date(e)>new Date(t)}}},19871:(e,t,a)=>{a.d(t,{l:()=>o});var r=a(22825);let o={async initiate(e){let{sessionId:t,quality:a,audioM3u8Url:o,cropStartTime:l,cropEndTime:n}=e;try{let e=await r.A.post("/api/download/full",{sessionId:t,quality:a,...o?{audioM3u8Url:o}:{},...null!=l?{cropStartTime:l}:{},...null!=n?{cropEndTime:n}:{}});return{success:!0,data:e}}catch(e){return{success:!1,status:e.status,message:e.message,data:e.data}}},async getStatus(e){try{let t=await r.A.get("/api/download/status/".concat(e));return{success:!0,data:t}}catch(e){return{success:!1,status:e.status,message:e.message}}},async getActiveJobs(){try{let e=await r.A.get("/api/download/active");return{success:!0,data:e}}catch(e){return{success:!1,status:e.status,message:e.message}}},async getHistory(){try{let e=await r.A.get("/api/download/history");return{success:!0,data:e}}catch(e){return{success:!1,status:e.status,message:e.message}}},async getCloudFiles(){let{page:e=1,limit:t=24}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};try{let a=await r.A.get("/api/download/cloud-files?page=".concat(e,"&limit=").concat(t));return{success:!0,data:a}}catch(e){return{success:!1,status:e.status,message:e.message}}},async deleteCloudFile(e){try{let t=await r.A.delete("/api/download/cloud-files/".concat(e));return{success:!0,data:t}}catch(e){return{success:!1,status:e.status,message:e.message}}},async initiateRemux(e){try{let t=await r.A.post("/api/download/remux/".concat(e),{});return{success:!0,data:t}}catch(e){return{success:!1,status:e.status,message:e.message}}},async getRemuxStatus(e){try{let t=await r.A.get("/api/download/remux-status/".concat(e));return{success:!0,data:t}}catch(e){return{success:!1,status:e.status,message:e.message}}}}},54154:(e,t,a)=>{a.r(t),a.d(t,{apiClient:()=>r.A,audioService:()=>g,authService:()=>o,bilibiliService:()=>S,bulkClipService:()=>f.W,changelogService:()=>T.K,chzzkChannelService:()=>D,cimeService:()=>p,contactService:()=>n,creditService:()=>k,gameNaverService:()=>h,giveawayService:()=>I,kakaotvService:()=>c,kickService:()=>m,naverBlogService:()=>v,navertvService:()=>u,notificationService:()=>b,paymentService:()=>s.M,serverDownloadService:()=>y.l,soopService:()=>i,twitchService:()=>d,userService:()=>w,videoService:()=>l});var r=a(22825);let o={async requestLoginLink(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"en";try{let a=await r.A.post("/api/auth/login",{email:e,locale:t});if(null==a?void 0:a.error)return{success:!1,error:a.error,status:200};return{success:!0,data:a}}catch(e){return{success:!1,error:e.message,status:e.status}}},async verifyLoginLink(e){try{let t=await r.A.post("/api/auth/verify-login-link",{token:e});return{success:!0,data:t}}catch(e){return{success:!1,error:e.message,status:e.status}}},async checkAuthStatus(){try{let e=await r.A.get("/api/auth/status");return{success:!0,data:e}}catch(e){return{success:!1,error:e.message,status:e.status}}},async logout(){try{let e=await r.A.post("/api/auth/logout");return{success:!0,data:e}}catch(e){return{success:!1,error:e.message}}},async createMagicLink(){try{let e=await r.A.get("/api/auth/create-magic-link");return{success:!0,data:e}}catch(e){return{success:!1,error:e.message}}},async signup(e,t){try{let a=await r.A.post("/api/auth/signup",{email:e,password:t});return{success:!0,data:a}}catch(e){return{success:!1,error:e.message,status:e.status}}},async verifyEmail(e){try{let t=await r.A.post("/api/auth/verify-email",{token:e});return{success:!0,data:t}}catch(e){return{success:!1,error:e.message,status:e.status}}},async loginPassword(e,t){try{let a=await r.A.post("/api/auth/login/password",{email:e,password:t});return{success:!0,data:a}}catch(e){return{success:!1,error:e.message,status:e.status}}},async requestFreeLoginLink(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"en";try{let a=await r.A.post("/api/auth/login/email-link",{email:e,locale:t});return{success:!0,data:a}}catch(e){return{success:!1,error:e.message,status:e.status}}},async setPassword(e){try{let t=await r.A.post("/api/auth/set-password",{password:e});return{success:!0,data:t}}catch(e){return{success:!1,error:e.message,status:e.status}}},async changePassword(e,t){try{let a=await r.A.post("/api/auth/change-password",{currentPassword:e,newPassword:t});return{success:!0,data:a}}catch(e){return{success:!1,error:e.message,status:e.status}}},async requestPasswordReset(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"ko";try{let a=await r.A.post("/api/auth/forgot-password",{email:e,locale:t});return{success:!0,data:a}}catch(e){return{success:!1,error:e.message,status:e.status}}},async resetPassword(e,t){try{let a=await r.A.post("/api/auth/reset-password",{token:e,newPassword:t});return{success:!0,data:a}}catch(e){return{success:!1,error:e.message,status:e.status}}}},l={validateChzzkUrl(e){try{let t=new URL(e);return["http:","https:"].includes(t.protocol)&&t.hostname}catch(e){return!1}},async downloadVideo(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};
1try{let{isPaidUser:a=!1,nidaut:o="",nidses:l="",turnstileToken:n="",downloadToken:s=null,paymentData:i=null,visitorId:u=null}=t,c=await r.A.post("/api/download",{url:e,paidUser:a,nidaut:o,nidses:l,turnstileToken:n,downloadToken:s,paymentData:i,visitorId:u});return{success:!0,data:c}}catch(e){return{success:!1,error:e.message,status:e.status,data:e.data}}},async getDownloadHistory(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:20;try{let l=await r.A.get("/video/history?page=".concat(a,"&limit=").concat(o),{headers:{"X-Nidses":e,"X-Nidaut":t}});return{success:!0,data:l}}catch(e){return{success:!1,error:e.message}}},getDownloadToken(){let e=localStorage.getItem("downloadToken");if(e)try{let t=e.split(".");if(3!==t.length)console.log("Invalid token format, will generate new one"),e=null,localStorage.removeItem("downloadToken");else{let a=JSON.parse(atob(t[1])),r=Math.floor(Date.now()/1e3);a.exp&&a.exp<r&&(console.log("Token expired, will generate new one"),e=null,localStorage.removeItem("downloadToken"))}}catch(t){console.log("Error validating token, will generate new one:",t),e=null,localStorage.removeItem("downloadToken")}return e},saveDownloadToken(e){e&&localStorage.setItem("downloadToken",e)},incrementDownloadCount(){{let e=localStorage.getItem("downloadCount")||"0";localStorage.setItem("downloadCount",String(parseInt(e)+1))}},async fetchVideoById(e){try{let t=await r.A.get("/api/video/".concat(e));return{success:!0,data:t}}catch(e){return{success:!1,error:e.message,status:e.status}}}},n={async submitContactForm(e){try{let t=await r.A.post("/api/contact/submit",e);return{success:!0,data:t}}catch(e){return{success:!1,error:e.message}}},async createTicket(e){let{subject:t,message:a,downloadHistory:o}=e;try{let e=await r.A.post("/api/contact/my-tickets",{subject:t,message:a,...(null==o?void 0:o.length)>0&&{downloadHistory:o}});return{success:!0,ticket:e.ticket}}catch(e){return{success:!1,error:e.message}}},async getMyTickets(){try{var e;let t=await r.A.get("/api/contact/my-tickets");return{success:!0,tickets:null!=(e=t.tickets)?e:[]}}catch(e){return{success:!1,tickets:[],error:e.message}}},async getTicket(e){try{let t=await r.A.get("/api/contact/my-tickets/".concat(e));return{success:!0,ticket:t.ticket}}catch(e){return{success:!1,ticket:null,error:e.message}}},async sendReply(e,t){try{let a=await r.A.post("/api/contact/my-tickets/".concat(e,"/reply"),{text:t});return{success:!0,message:a.message}}catch(e){return{success:!1,rateLimited:429===e.status,error:e.message}}},async getUnreadCount(){try{var e;return null!=(e=(await r.A.get("/api/contact/unread-count")).count)?e:0}catch(e){return 0}}};var s=a(8290);let i={validateSoopUrl(e){try{return new URL(e),!0}catch(e){return!1}},async downloadVideo(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};try{let{isPaidUser:a=!1,turnstileToken:o="",downloadToken:l=null,visitorId:n=null}=t,s=await r.A.post("/api/soop-download",{url:e,paidUser:a,turnstileToken:o,downloadToken:l,visitorId:n});return{success:!0,data:s}}catch(e){return{success:!1,error:e.message,status:e.status,data:e.data}}},getDownloadToken(){let e=localStorage.getItem("soopDownloadToken");if(e)try{let t=e.split(".");if(3!==t.length)console.log("Invalid token format, will generate new one"),e=null,localStorage.removeItem("soopDownloadToken");else{let a=JSON.parse(atob(t[1])),r=Math.floor(Date.now()/1e3);a.exp&&a.exp<r&&(console.log("Token expired, will generate new one"),e=null,localStorage.removeItem("soopDownloadToken"))}}catch(t){console.log("Error validating token, will generate new one:",t),e=null,localStorage.removeItem("soopDownloadToken")}return e},saveDownloadToken(e){e&&localStorage.setItem("soopDownloadToken",e)},incrementDownloadCount(){{let e=localStorage.getItem("soopDownloadCount")||"0";localStorage.setItem("soopDownloadCount",String(parseInt(e)+1))}},prepareHLSData(e){var t,a,r;let{data:o}=e;if(!o||!o.hls)return null;let l=(null==(t=[...o.qualities||[]].sort((e,t)=>t.quality-e.quality)[0])?void 0:t.url)||(null==(r=o.qualities)||null==(a=r[0])?void 0:a.url)||"",n=o.audioTracks&&o.audioTracks.length>0?o.audioTracks[0].url:null,s=o.videoParts&&o.videoParts.length>1,i=o.qualities.map(e=>{let t=s?o.videoParts.map(t=>
1t.qualityUrls[e.quality]).filter(Boolean):null,a=s&&o.videoParts.some(e=>e.audioUrl)?o.videoParts.map(e=>e.audioUrl).filter(Boolean):null;return{label:"".concat(e.quality,"p"),bandwidth:1e3*e.quality,resolution:e.resolution,url:e.url,frameRate:null,streamInfo:"SOOP-".concat(e.quality,"p"),audioUrl:n,parts:t,audioParts:a}}).sort((e,t)=>t.bandwidth-e.bandwidth);return{url:l,thumbnail:o.thumbnail||null,downloadId:o.id,type:"soop",title:o.title,channel:o.channel,sessionId:o.sessionId||null,preloadedQualities:i,audioUrl:n}}},u={validateNaverTvUrl(e){if(!e||"string"!=typeof e)return!1;let t=e.trim();try{let e=new URL(t);if("tv.naver.com"!==e.hostname||!/^\/(v|h)\/\d+/.test(e.pathname))return!1;return!0}catch(e){return!1}},async downloadVideo(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};try{let{isPaidUser:a=!1,turnstileToken:o="",downloadToken:l=null,visitorId:n=null}=t,s=await r.A.post("/api/navertv-download",{url:e,paidUser:a,turnstileToken:o,downloadToken:l,visitorId:n});return{success:!0,data:s}}catch(e){return{success:!1,error:e.message,status:e.status,data:e.data}}},getDownloadToken(){let e=localStorage.getItem("navertvDownloadToken");if(e)try{let t=e.split(".");if(3!==t.length)console.log("Invalid token format, will generate new one"),e=null,localStorage.removeItem("navertvDownloadToken");else{let a=JSON.parse(atob(t[1])),r=Math.floor(Date.now()/1e3);a.exp&&a.exp<r&&(console.log("Token expired, will generate new one"),e=null,localStorage.removeItem("navertvDownloadToken"))}}catch(t){console.log("Error validating token, will generate new one:",t),e=null,localStorage.removeItem("navertvDownloadToken")}return e},saveDownloadToken(e){e&&localStorage.setItem("navertvDownloadToken",e)},incrementDownloadCount(){{let e=localStorage.getItem("navertvDownloadCount")||"0";localStorage.setItem("navertvDownloadCount",String(parseInt(e)+1))}},prepareMP4Data(e){var t,a;let r=(null==(t=e.data)?void 0:t.data)||e.data||e;if(!r||!r.qualities)return null;let o=r.qualities.map(e=>({quality:e.qualityLabel,url:e.url,size:e.size,bitrate:e.bitrate,resolution:e.resolution}));return{downloadId:r.id||r.videoId,videoUrl:(null==(a=o[0])?void 0:a.url)||"",qualities:o,thumbnail:r.thumbnail,title:r.title,channel:r.channel,type:"video",duration:r.duration,captions:r.captions||[]}},prepareHLSData(e){var t;let a=(null==(t=e.data)?void 0:t.data)||e.data||e;return a&&a.hls?{url:a.hls,thumbnail:a.thumbnail,downloadId:a.id||a.videoId,type:"video",title:a.title,channel:a.channel,duration:a.duration,captions:a.captions||[],preloadedQualities:null}:null},detectVideoFormats(e){var t;let a=(null==(t=e.data)?void 0:t.data)||e.data||e,r=a.qualities&&a.qualities.length>0,o=!!a.hls;return{hasMp4:r,hasHls:o,hasBoth:r&&o,isClip:!1}}},c={validateKakaotvUrl(e){try{let t=new URL(e);return t.hostname.includes("tv.kakao.com")||t.hostname.includes("kakao")}catch(e){return!1}},async downloadVideo(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};try{let{isPaidUser:a=!1,turnstileToken:o="",downloadToken:l=null,visitorId:n=null}=t,s=await r.A.post("/api/kakaotv-download",{url:e,paidUser:a,turnstileToken:o,downloadToken:l,visitorId:n});return{success:!0,data:s}}catch(e){return{success:!1,error:e.message,status:e.status,data:e.data}}},getDownloadToken(){let e=localStorage.getItem("kakaotvDownloadToken");if(e)try{let t=e.split(".");if(3!==t.length)console.log("Invalid token format, will generate new one"),e=null,localStorage.removeItem("kakaotvDownloadToken");else{let a=JSON.parse(atob(t[1])),r=Math.floor(Date.now()/1e3);a.exp&&a.exp<r&&(console.log("Token expired, will generate new one"),e=null,localStorage.removeItem("kakaotvDownloadToken"))}}catch(t){console.log("Error validating token, will generate new one:",t),e=null,localStorage.removeItem("kakaotvDownloadToken")}return e},saveDownloadToken(e){e&&localStorage.setItem("kakaotvDownloadToken",e)},incrementDownloadCount(){{let e=localStorage.getItem("kakaotvDownloadCount")||"0";localStorage.setItem("kakaotvDownloadCount",String(parseInt(e)+1))}},prepareMP4Data(e){var t;let{data:a}=e;if(!a)return null;let r=(a.qualities||[]).filter(e=>"mp4"===e.format&&e.isDirect).map(e=>({quality:e.quality,resolution:e.resolution,url:e.url,format:"mp4"}));return{downloadId:a.id,videoUrl:(null==(t=r[0])?void 0:t.url)||"",qualities:r,thumbnail:a.thumbnail,title:a.title,channel:a.channel,type:"kakaotv"}},prepareHLSData(e){var t;let{data:a}=e;if(!a||!a.hls)return null;let r=(a.qualities||[]).filter(e=>"m3u8"===e.format),o=(null==(t=r[0])?void 0:t.url)||"",l=r.map(e=>({label:"auto"===e.quality?"Auto":"".concat(e.quality,"p"),bandwidth:"auto"===e.quality?999999:1e3*parseInt(e.quality),resolution:e.resolution,url:e.url,frameRate:null,streamInfo:"KakaoTV-".concat(e.quality)})).sort((e,t)=>
1t.bandwidth-e.bandwidth);return{url:o,thumbnail:a.thumbnail||null,downloadId:a.id,type:"kakaotv",title:a.title,channel:a.channel,preloadedQualities:l}},detectFormats(e){let{data:t}=e;if(!t||!t.qualities)return{hasMp4:!1,hasHls:!1,hasBoth:!1};let a=t.qualities.some(e=>"mp4"===e.format&&e.isDirect),r=t.qualities.some(e=>"m3u8"===e.format)||!0===t.hls;return{hasMp4:a,hasHls:r,hasBoth:a&&r}}},d={validateTwitchUrl(e){try{return new URL(e).hostname.includes("twitch.tv")}catch(e){return!1}},async downloadVideo(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};try{let{isPaidUser:a=!1,turnstileToken:o="",downloadToken:l=null,visitorId:n=null}=t,s=await r.A.post("/api/twitch-download",{url:e,paidUser:a,turnstileToken:o,downloadToken:l,visitorId:n});return{success:!0,data:s}}catch(e){return{success:!1,error:e.message,status:e.status,data:e.data}}},getDownloadToken(){let e=localStorage.getItem("twitchDownloadToken");if(e)try{let t=e.split(".");if(3!==t.length)console.log("Invalid token format, will generate new one"),e=null,localStorage.removeItem("twitchDownloadToken");else{let a=JSON.parse(atob(t[1])),r=Math.floor(Date.now()/1e3);a.exp&&a.exp<r&&(console.log("Token expired, will generate new one"),e=null,localStorage.removeItem("twitchDownloadToken"))}}catch(t){console.log("Error validating token, will generate new one:",t),e=null,localStorage.removeItem("twitchDownloadToken")}return e},saveDownloadToken(e){e&&localStorage.setItem("twitchDownloadToken",e)},incrementDownloadCount(){{let e=localStorage.getItem("twitchDownloadCount")||"0";localStorage.setItem("twitchDownloadCount",String(parseInt(e)+1))}},prepareMP4Data(e){var t;let{data:a}=e;if(!a)return null;let r=(a.qualities||[]).filter(e=>"mp4"===e.format&&e.isDirect).map(e=>({quality:e.quality,resolution:e.resolution,url:e.url,format:"mp4"}));return{downloadId:a.id,videoUrl:(null==(t=r[0])?void 0:t.url)||"",qualities:r,thumbnail:a.thumbnail,title:a.title,channel:a.channel,type:"twitch"}},prepareHLSData(e){var t;let{data:a}=e;if(!a||!a.hls)return null;let r=(a.qualities||[]).filter(e=>"m3u8"===e.format),o=(null==(t=r[0])?void 0:t.url)||"",l=r.map(e=>({label:e.name||"".concat(e.quality,"p"),bandwidth:1e3*parseInt(e.quality),resolution:e.resolution,url:e.url,frameRate:e.fps,streamInfo:e.name||"Twitch-".concat(e.quality,"p")})).sort((e,t)=>t.bandwidth-e.bandwidth);return{url:o,thumbnail:a.thumbnail||null,downloadId:a.id,type:"twitch",title:a.title,channel:a.channel,preloadedQualities:l}},detectFormats(e){var t;let{data:a}=e;if(!a||!a.qualities)return{hasMp4:!1,hasHls:!1,hasBoth:!1,isClip:!1};let r=a.qualities.some(e=>"mp4"===e.format&&e.isDirect),o=a.qualities.some(e=>"m3u8"===e.format)||!0===a.hls,l=(null==(t=a.metadata)?void 0:t.type)==="clip"||!a.hls&&r;return{hasMp4:r,hasHls:o,hasBoth:r&&o,isClip:l}}},m={validateKickUrl(e){try{return new URL(e).hostname.includes("kick.com")}catch(e){return!1}},extractVideoUuid(e){try{let t=new URL(e),a=t.pathname,r=a.match(/\/video\/([a-f0-9-]{36})/i);if(r)return r[1];let o=a.match(/\/[^/]+\/videos\/([a-f0-9-]{36})/i);if(o)return o[1];let l=new URLSearchParams(t.search).get("video");if(l&&/^[a-f0-9-]{36}$/i.test(l))return l;return null}catch(e){return null}},async fetchVideoData(e){try{let t=await fetch("https://kick.com/api/v1/video/".concat(e),{method:"GET",headers:{accept:"*/*","accept-language":"en-US,en;q=0.9"}});if(!t.ok)throw Error("Failed to fetch video: ".concat(t.status));let a=await t.json();return{success:!0,data:a}}catch(e){return{success:!1,error:e.message,status:e.status||500}}},async createSession(e){let{url:t,source:a,title:r,channel:o,thumbnail:l,duration:n,uuid:s}=e;try{let e=await fetch("".concat("https://api.vodloader.com","/api/kick-session"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({url:t,source:a,title:r,channel:o,thumbnail:l,duration:n,uuid:s})}),i=await e.json();if(!e.ok)return{success:!1,status:e.status,data:i,error:null==i?void 0:i.message};return{success:!0,data:i}}catch(e){return{success:!1,status:500,error:e.message}}},getDownloadToken:()=>localStorage.getItem("kickDownloadToken"),saveDownloadToken(e){e&&localStorage.setItem("kickDownloadToken",e)},incrementDownloadCount(){{let e=localStorage.getItem("kickDownloadCount")||"0";localStorage.setItem("kickDownloadCount",String(parseInt(e)+1))}},prepareHLSData(e){let t=e.data||e;if(!t||!t.source)return null;let a=t.livestream||{},r=a.channel||{},o=r.user||{};return{url:t.source,thumbnail:t.thumb||a.thumbnail||null,downloadId:t.uuid||t.id,type:"kick",title:a.session_title||"Kick VOD ".concat(t.uuid),channel:o.username||r.slug||"Unknown",duration:a.duration?Math.floor(a.duration/1e3):null,views:t.views||0,metadata:{isLive:a.is_live||!1,isMature:a.is_mature||!1,language:a.language||"English",tags:a.tags||[],startTime:a.start_time||t.created_at}}},detectFormats(e){let t=e.data||e;return t&&t.source?{hasMp4:!1,hasHls:t.source&&t.source.includes(".m3u8"),hasBoth:!1,isClip:!1}:{hasMp4:!1,hasHls:!1,hasBoth:!1,isClip:!1}},formatDuration(e){if(!e)return"Unknown";
1let t=Math.floor(e/1e3),a=Math.floor(t/3600),r=Math.floor(t%3600/60),o=t%60;return a>0?"".concat(a,":").concat(r.toString().padStart(2,"0"),":").concat(o.toString().padStart(2,"0")):"".concat(r,":").concat(o.toString().padStart(2,"0"))}},g={validateAudioClipUrl(e){try{let t=new URL(e);return"audioclip.naver.com"===t.hostname&&t.pathname.includes("/channels/")&&t.pathname.includes("/clips/")}catch(e){return!1}},async downloadAudio(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};try{let{turnstileToken:a="",downloadToken:o=null,quality:l="MIDDLE",visitorId:n=null}=t,s=await r.A.post("/api/audio-download",{url:e,turnstileToken:a,downloadToken:o,quality:l,visitorId:n});return{success:!0,data:s}}catch(e){return{success:!1,error:e.message,status:e.status,data:e.data}}},async getAudioMetadata(e){try{let t=await r.A.get("/api/audio-metadata?url=".concat(encodeURIComponent(e)));return{success:!0,data:t}}catch(e){return{success:!1,error:e.message,status:e.status,data:e.data}}},getDownloadToken(){let e=localStorage.getItem("downloadToken");if(e)try{let t=e.split(".");if(3!==t.length)console.log("Invalid token format, will generate new one"),e=null,localStorage.removeItem("downloadToken");else{let a=JSON.parse(atob(t[1])),r=Math.floor(Date.now()/1e3);a.exp&&a.exp<r&&(console.log("Token expired, will generate new one"),e=null,localStorage.removeItem("downloadToken"))}}catch(t){console.log("Error validating token, will generate new one:",t),e=null,localStorage.removeItem("downloadToken")}return e},saveDownloadToken(e){e&&localStorage.setItem("downloadToken",e)},incrementDownloadCount(){{let e=localStorage.getItem("downloadCount")||"0";localStorage.setItem("downloadCount",String(parseInt(e)+1))}},getQualityLabel:e=>({LOW:"Low (64 kbps)",MIDDLE:"Medium (128 kbps)",HIGH:"High (320 kbps)"})[e]||e,formatFileSize:e=>e?"".concat((e/1048576).toFixed(2)," MB"):"Unknown",formatDuration(e){if(!e)return"Unknown";let t=Math.floor(e/3600),a=Math.floor(e%3600/60),r=e%60;return t>0?"".concat(t,":").concat(a.toString().padStart(2,"0"),":").concat(r.toString().padStart(2,"0")):"".concat(a,":").concat(r.toString().padStart(2,"0"))}},h={validateGameNaverUrl(e){if(!e||"string"!=typeof e)return!1;let t=e.trim();try{let e=new URL(t);if("game.naver.com"!==e.hostname||!/^\/esports\/[^/]+\/videos\/\d+/.test(e.pathname))return!1;return!0}catch(e){return!1}},async downloadVideo(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};try{let{isPaidUser:a=!1,turnstileToken:o="",downloadToken:l=null,visitorId:n=null}=t,s=await r.A.post("/api/gamenaver-download",{url:e,paidUser:a,turnstileToken:o,downloadToken:l,visitorId:n});return{success:!0,data:s}}catch(e){return{success:!1,error:e.message,status:e.status,data:e.data}}},getDownloadToken(){let e=localStorage.getItem("gameNaverDownloadToken");if(e)try{let t=e.split(".");if(3!==t.length)console.log("Invalid token format, will generate new one"),e=null,localStorage.removeItem("gameNaverDownloadToken");else{let a=JSON.parse(atob(t[1])),r=Math.floor(Date.now()/1e3);a.exp&&a.exp<r&&(console.log("Token expired, will generate new one"),e=null,localStorage.removeItem("gameNaverDownloadToken"))}}catch(t){console.log("Error validating token, will generate new one:",t),e=null,localStorage.removeItem("gameNaverDownloadToken")}return e},saveDownloadToken(e){e&&localStorage.setItem("gameNaverDownloadToken",e)},incrementDownloadCount(){{let e=localStorage.getItem("gameNaverDownloadCount")||"0";localStorage.setItem("gameNaverDownloadCount",String(parseInt(e)+1))}},prepareMP4Data(e){var t,a;let r=(null==(t=e.data)?void 0:t.data)||e.data||e;if(!r||!r.qualities)return null;let o=r.qualities.filter(e=>"mp4"===e.format||!0===e.isDirect).map(e=>({quality:e.qualityLabel,url:e.url,size:e.size,bitrate:e.bitrate,resolution:e.resolution}));return{downloadId:r.id||r.videoId,videoUrl:(null==(a=o[0])?void 0:a.url)||"",qualities:o,thumbnail:r.thumbnail,title:r.title,channel:r.channel,type:"video",duration:r.duration,captions:r.captions||[]}},prepareHLSData(e){var t,a;let r=(null==(t=e.data)?void 0:t.data)||e.data||e;if(!r||!r.hls)return null;let o=[...r.qualities.filter(e=>"m3u8"===e.format||!1===e.isDirect)].sort((e,t)=>
1t.quality-e.quality),l=(null==(a=o[0])?void 0:a.url)||"",n=o.map(e=>({label:e.qualityLabel,bandwidth:1e3*e.quality,resolution:e.resolution,url:e.url,frameRate:null,streamInfo:"GameNaver-".concat(e.qualityLabel)}));return{url:l,thumbnail:r.thumbnail,downloadId:r.id||r.videoId,type:"video",title:r.title,channel:r.channel,duration:r.duration,captions:r.captions||[],preloadedQualities:n}},detectVideoFormats(e){var t;let a=(null==(t=e.data)?void 0:t.data)||e.data||e,r=a.qualities&&a.qualities.some(e=>"mp4"===e.format||!0===e.isDirect),o=!!a.hls||a.qualities&&a.qualities.some(e=>"m3u8"===e.format||!1===e.isDirect);return{hasMp4:r,hasHls:o,hasBoth:r&&o,isClip:!1}}},p={validateCimeUrl(e){let t=e.trim();if(!t)return!1;if(/^\d+$/.test(t))return!0;try{return new URL(t),!0}catch(e){return!1}},async downloadVideo(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};try{let{turnstileToken:a="",downloadToken:o=null,visitorId:l=null}=t,n={url:e,turnstileToken:a,...o&&{downloadToken:o},visitorId:l},s=await r.A.post("/api/cime-download",n);return{success:!0,data:s}}catch(e){return{success:!1,error:e.message,status:e.status,data:e.data}}},getDownloadToken(){let e=localStorage.getItem("cimeDownloadToken");if(e)try{let t=e.split(".");if(3!==t.length)e=null,localStorage.removeItem("cimeDownloadToken");else{let a=JSON.parse(atob(t[1])),r=Math.floor(Date.now()/1e3);a.exp&&a.exp<r&&(e=null,localStorage.removeItem("cimeDownloadToken"))}}catch(t){e=null,localStorage.removeItem("cimeDownloadToken")}return e},saveDownloadToken(e){e&&localStorage.setItem("cimeDownloadToken",e)},incrementDownloadCount(){{let e=localStorage.getItem("cimeDownloadCount")||"0";localStorage.setItem("cimeDownloadCount",String(parseInt(e)+1))}},detectFormats(e){var t;let a=(null==e||null==(t=e.data)?void 0:t.data)||(null==e?void 0:e.data)||{},r=a.qualities||[],o=r.filter(e=>!0===e.isDirect&&"mp4"===e.format),l=r.filter(e=>!1===e.isDirect&&"m3u8"===e.format),n=o.length>0,s=l.length>0||!0===a.hls;return{hasMp4:n,hasHls:s,hasBoth:n&&s,isClip:!0===a.isClip}},prepareHLSData(e){var t;let{data:a}=e;if(!a)return null;let r=a.data||a;if(!r.hls)return null;let o=r.qualities||[],l=o.map(e=>({label:e.quality,bandwidth:e.bandwidth,resolution:e.resolution,url:e.url,frameRate:e.fps||null,streamInfo:"CIME-".concat(e.quality),audioUrl:null}));return{url:(null==(t=o[0])?void 0:t.url)||"",thumbnail:r.thumbnail||null,downloadId:r.id,type:"cime",title:r.title,channel:r.channel,preloadedQualities:l,sessionId:r.sessionId||null}}},w={async getProfile(){try{let e=await r.A.get("/api/user/profile");return{success:!0,data:e}}catch(e){return{success:!1,error:e.message,status:e.status}}},async getSubscription(){try{let e=await r.A.get("/api/user/subscription");return{success:!0,data:e}}catch(e){return{success:!1,error:e.message,status:e.status}}},async getDownloadStats(){try{let e=await r.A.get("/api/user/downloads/stats");return{success:!0,data:e}}catch(e){return{success:!1,error:e.message,status:e.status}}},async updateProfile(e){try{let t=await r.A.put("/api/user/profile",e);return{success:!0,data:t}}catch(e){return{success:!1,error:e.message,status:e.status}}},async cancelSubscription(){try{let e=await r.A.post("/api/creem/subscription/cancel");return{success:!0,data:e}}catch(e){return{success:!1,error:e.message,status:e.status}}},async deleteAccount(){try{let e=await r.A.delete("/api/user/account");return{success:!0,data:e}}catch(e){return{success:!1,error:e.message,status:e.status}}}},v={validateNaverBlogUrl(e){if(!e||"string"!=typeof e)return!1;try{let t=new URL(e.trim()),a=t.hostname;if("blog.naver.com"!==a&&"m.blog.naver.com"!==a)return!1;return t.pathname.includes("/clip/")||t.searchParams.has("clip")}catch(e){return!1}},async downloadVideo(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};try{let{isPaidUser:a=!1,turnstileToken:o="",downloadToken:l=null,visitorId:n=null}=t,s=await r.A.post("/api/naver-blog-clip",{url:e,paidUser:a,turnstileToken:o,downloadToken:l,visitorId:n});return{success:!0,data:s}}catch(e){return{success:!1,error:e.message,status:e.status,data:e.data}}},getDownloadToken(){let e=localStorage.getItem("naverBlogDownloadToken");if(!e)return null;try{let t=e.split(".");if(3!==t.length)return localStorage.removeItem("naverBlogDownloadToken"),null;let a=JSON.parse(atob(t[1]));if(a.exp&&a.exp<Math.floor(Date.now()/1e3))return localStorage.removeItem("naverBlogDownloadToken"),null}catch(e){return localStorage.removeItem("naverBlogDownloadToken"),null}return e},saveDownloadToken(e){e&&localStorage.setItem("naverBlogDownloadToken",e)},incrementDownloadCount(){{let e=parseInt(localStorage.getItem("naverBlogDownloadCount")||"0",10);localStorage.setItem("naverBlogDownloadCount",String(e+1))}},detectVideoFormats(e){var t;let a=(null==e||null==(t=e.data)?void 0:t.data)||(null==e?void 0:e.data)||e,r=(null==a?void 0:a.qualities)||[],o=r.filter(e=>!0===e.isDirect&&"mp4"===e.format),l=r.filter(e=>!1===e.isDirect||"m3u8"===e.format);return{hasMp4:o.length>0,hasHls:l.length>0||(null==a?void 0:a.hls)===!0,hasBoth:o.length>0&&(l.length>0||(null==a?void 0:a.hls)===!0),isClip:(null==a?void 0:a.isClip)===!0}},prepareMP4Data(e){var t,a;let r=(null==e||null==(t=e.data)?void 0:t.data)||(null==e?void 0:e.data)||e,o=((null==r?void 0:r.qualities)||[]).filter(e=>!0===e.isDirect&&"mp4"===e.format);return{id:r.id,title:r.title,thumbnail:r.thumbnail,channel:(null==(a=r.blog)?void 0:a.nickname)||r.channel||r.blogId,url:r.url,qualities:o,isClip:!0===r.isClip,downloadToken:r.downloadToken}},prepareHLSData(e){var t,a,r;let o=(null==e||null==(t=e.data)?void 0:t.data)||(null==e?void 0:e.data)||e,l=((null==o?void 0:o.qualities)||[]).filter(e=>!1===e.isDirect||"m3u8"===e.format),n=null;return l.length>1&&(n=l.map(e=>({label:e.quality||"auto",url:e.url,quality:e.quality}))),{url:o.masterM3u8||(null==(a=l[0])?void 0:a.url),thumbnail:o.thumbnail,title:o.title,channel:(null==(r=o.blog)?void 0:r.nickname)||o.channel||o.blogId,downloadId:o.id,downloadToken:o.downloadToken,type:"naver-blog",preloadedQualities:n}}};var y=a(19871);let k={async createCheckout(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"ko";try{let a=await r.A.post("/api/paypal/credits/checkout",{bundle:e,locale:t});return{success:!0,data:a}}catch(e){return{success:!1,status:e.status,error:e.message}}}};var f=a(54340);let S={async downloadVideo(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};try{let{turnstileToken:a="",downloadToken:o=null,visitorId:l=null}=t,n={url:e,turnstileToken:a,...o&&{downloadToken:o},visitorId:l},s=await r.A.post("/api/bilibili-download",n);return{success:!0,data:s}}catch(e){return{success:!1,error:e.message,status:e.status,data:e.data}}},getDownloadToken(){let e=localStorage.getItem("bilibiliDownloadToken");if(e)try{let t=e.split(".");if(3!==t.length)throw Error("bad format");let a=JSON.parse(atob(t[1]));if(a.exp&&a.exp<Math.floor(Date.now()/1e3))throw Error("expired")}catch(t){e=null,localStorage.removeItem("bilibiliDownloadToken")}return e},saveDownloadToken(e){e&&localStorage.setItem("bilibiliDownloadToken",e)},incrementDownloadCount(){{let e=parseInt(localStorage.getItem("bilibiliDownloadCount")||"0",10);localStorage.setItem("bilibiliDownloadCount",String(e+1))}},detectFormats(e){var t;return{hasMp4:(((null==e||null==(t=e.data)?void 0:t.data)||(null==e?void 0:e.data)||{}).qualities||[]).length>0,hasHls:!1,hasBoth:!1,isClip:!1}},prepareMP4Data(e){var t,a;let r=(null==e||null==(t=e.data)?void 0:t.data)||(null==e?void 0:e.data)||{},o=(r.qualities||[]).map(e=>{var t;return{quality:e.quality,format:"mp4",isDirect:!0,url:!(t=e.url)||t.includes("bilivideo.com")?t:"/api/proxy-bilibili?url=".concat(encodeURIComponent(t))}});return{id:r.id,title:r.title,thumbnail:r.thumbnail,channel:r.channel,duration:r.duration,isClip:!1,qual
1ities:o,url:(null==(a=o[0])?void 0:a.url)||"",sessionId:r.sessionId||null}}},D={async getClips(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";try{let o=new URLSearchParams({cursor:t,readCount:a}),l=await r.A.get("/api/chzzk/channel/".concat(e,"/clips?").concat(o));return{success:!0,data:l}}catch(e){return{success:!1,status:e.status,message:e.message}}}},I={async submitEntry(e){let{name:t,email:a,link:o}=e;try{let e=await r.A.post("/api/giveaway/submit",{name:t,email:a,link:o});return{success:!0,data:e}}catch(e){return{success:!1,error:e.message}}}},b={async list(){let{limit:e=20,before:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};try{var a,o;let l=new URLSearchParams({limit:String(e)});t&&l.set("before",t);let n=await r.A.get("/api/notifications?".concat(l));return{success:!0,notifications:null!=(a=n.notifications)?a:[],unreadCount:null!=(o=n.unreadCount)?o:0,hasMore:!!n.hasMore}}catch(e){return{success:!1,notifications:[],unreadCount:0,hasMore:!1,error:e.message}}},async getUnreadCount(){try{var e;return null!=(e=(await r.A.get("/api/notifications/unread-count")).count)?e:0}catch(e){return 0}},async markRead(e){try{return await r.A.post("/api/notifications/".concat(e,"/read"),{}),!0}catch(e){return!1}},async markAllRead(){try{return await r.A.post("/api/notifications/read-all",{}),!0}catch(e){return!1}},async clearAll(){try{return await r.A.delete("/api/notifications"),!0}catch(e){return!1}}};var T=a(14650)},54340:(e,t,a)=>{a.d(t,{W:()=>o});var r=a(22825);let o={async initiate(e){try{let t=await r.A.post("/api/bulk-clip/initiate",{clipUrls:e});return{success:!0,data:t}}catch(e){return{success:!1,status:e.status,message:e.message,data:e.data}}},async getJobs(){try{let e=await r.A.get("/api/bulk-clip/jobs");return{success:!0,data:e}}catch(e){return{success:!1,status:e.status,message:e.message}}}}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.