@serifpersia/dango 3.7.9 → 3.8.0

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.
Files changed (55) hide show
  1. package/README.md +1 -1
  2. package/client/dist/assets/{AnimeCard-DWnU-rCc.js → AnimeCard-BURLDiUV.js} +1 -1
  3. package/client/dist/assets/{AnimeInfo-Ck-fMvdY.js → AnimeInfo-D2coN_ZJ.js} +1 -1
  4. package/client/dist/assets/{AnimeInfoPage-_iM5y3E4.js → AnimeInfoPage-BfPP9trp.js} +2 -2
  5. package/client/dist/assets/{Asmr-CzqLNY2c.js → Asmr-CiuBtMGl.js} +1 -1
  6. package/client/dist/assets/{AsmrResetProgressModal-73jUOcAL.js → AsmrResetProgressModal-BDFeO6fQ.js} +1 -1
  7. package/client/dist/assets/{Home--RCZI3_q.js → Home-GShTLEbZ.js} +1 -1
  8. package/client/dist/assets/{Insights-B5oANHfN.js → Insights-CKk02Whw.js} +1 -1
  9. package/client/dist/assets/{LibraryListPage-CV2FpbUe.js → LibraryListPage-AGyVc7pR.js} +1 -1
  10. package/client/dist/assets/{ListeningList-Bb7qLeQy.js → ListeningList-DeAdvRjS.js} +1 -1
  11. package/client/dist/assets/{Manga-RzxC02lH.js → Manga-CiPWc8Ly.js} +1 -1
  12. package/client/dist/assets/{MangaInfoPage-DLANpxOs.js → MangaInfoPage-3jObt7zd.js} +1 -1
  13. package/client/dist/assets/{MangaReadPage-DuMOiKID.js → MangaReadPage-V5M2BLWG.js} +1 -1
  14. package/client/dist/assets/{MangaResetProgressModal-Y2PuLQHz.js → MangaResetProgressModal-CXRvdwD9.js} +1 -1
  15. package/client/dist/assets/{Mature-DfO3sop8.js → Mature-B9IEX0IP.js} +1 -1
  16. package/client/dist/assets/{MatureConsentModal-DiWSp3Of.js → MatureConsentModal-LTZSG_Kx.js} +1 -1
  17. package/client/dist/assets/{MediaCard-ChUKs5Sb.js → MediaCard-l2gAJctz.js} +1 -1
  18. package/client/dist/assets/{OptionListMenu-Cwb6MHoZ.js → OptionListMenu-CHJb3qot.js} +1 -1
  19. package/client/dist/assets/{Player-JA7rXoBD.js → Player-BTimy0Mp.js} +2 -2
  20. package/client/dist/assets/{PlayerProvider--aaVRFly.js → PlayerProvider-BXBzQc8G.js} +1 -1
  21. package/client/dist/assets/{PlayerSettings-CxlbcdU4.js → PlayerSettings-B-_QOjfP.js} +1 -1
  22. package/client/dist/assets/{QueueOptionsButton-C6ArqpM5.js → QueueOptionsButton-BCxERY1G.js} +1 -1
  23. package/client/dist/assets/{QueueRail-Derl5yzz.js → QueueRail-BX4CwNHY.js} +1 -1
  24. package/client/dist/assets/{ReadingList-BYbV0CvS.js → ReadingList-BLUM-leI.js} +1 -1
  25. package/client/dist/assets/{ResetProgressModal-DtUE-wCy.js → ResetProgressModal-DLs9yqI-.js} +1 -1
  26. package/client/dist/assets/{Search-CzTO0VVY.js → Search-tnIvsV_a.js} +1 -1
  27. package/client/dist/assets/{Settings-DKGEpLWL.js → Settings-CibKc1Rt.js} +1 -1
  28. package/client/dist/assets/{SkeletonGrid-BO0am1za.js → SkeletonGrid-nW7P1jQU.js} +1 -1
  29. package/client/dist/assets/{Trackers-uUzceJl6.js → Trackers-Cynvnhc3.js} +1 -1
  30. package/client/dist/assets/{Tv-CuM6Jhjn.js → Tv-BePMuQoo.js} +1 -1
  31. package/client/dist/assets/{TvInfo-4DOit0hL.js → TvInfo-DGIpvh-v.js} +1 -1
  32. package/client/dist/assets/{TvPopup-DYYtMp7D.js → TvPopup-BS4iiQMd.js} +1 -1
  33. package/client/dist/assets/{TvSearch-C-IYU0V4.js → TvSearch-p0kCDTee.js} +1 -1
  34. package/client/dist/assets/{TvWatchlist--kFfdVIF.js → TvWatchlist-CmXQkDQp.js} +1 -1
  35. package/client/dist/assets/{VirtualKeyboard-BYc_6hb4.js → VirtualKeyboard-CroH8QGP.js} +1 -1
  36. package/client/dist/assets/{WatchAlong-zZPGaH2D.js → WatchAlong-iCJlxiZA.js} +1 -1
  37. package/client/dist/assets/{WatchAlongPanel-DxC7pX1I.js → WatchAlongPanel-R7Nd5MXr.js} +1 -1
  38. package/client/dist/assets/{Watchlist-CX9qGh-b.js → Watchlist-D2sHodVo.js} +1 -1
  39. package/client/dist/assets/{index-DbRDs7tF.js → index-DYanm9eZ.js} +2 -2
  40. package/client/dist/assets/{libraryInvalidation-cJ1WjrJq.js → libraryInvalidation-DlwONLN-.js} +1 -1
  41. package/client/dist/assets/{playbackCompletion-CnxK6_Vz.js → playbackCompletion-CxGa4g7a.js} +1 -1
  42. package/client/dist/assets/{useAnimeInfoData-YbePqj-M.js → useAnimeInfoData-DMeGA3wY.js} +1 -1
  43. package/client/dist/assets/{useAsmr-DO5DUI_t.js → useAsmr-B88X71vs.js} +1 -1
  44. package/client/dist/assets/{useAsmrPopup-S_XfgKDh.js → useAsmrPopup-DEhKwHLC.js} +1 -1
  45. package/client/dist/assets/{useMangaLibrary-B4ZJLZXD.js → useMangaLibrary-CX_0zLJK.js} +1 -1
  46. package/client/dist/assets/{useMangaPopup-B4ntcNg0.js → useMangaPopup-Dkq2Yw-e.js} +1 -1
  47. package/client/dist/assets/{useProviders-Bnw0sBAP.js → useProviders-D9QoFCnY.js} +1 -1
  48. package/client/dist/assets/{useTv-gF7SJCl9.js → useTv-BGXZmuV8.js} +1 -1
  49. package/client/dist/assets/{useTvLibrary-DTWM3iOC.js → useTvLibrary-TnVQ2e21.js} +1 -1
  50. package/client/dist/assets/{useWatchAlongPlayer-Do0c9QsI.js → useWatchAlongPlayer-3HXJvQR2.js} +1 -1
  51. package/client/dist/index.html +1 -1
  52. package/package.json +2 -2
  53. package/server/dist/server.js +1 -1
  54. package/server/dist/shipped-defaults.js +1 -1
  55. package/server/package.json +1 -1
@@ -1 +1 @@
1
- import{q as r}from"./index-DbRDs7tF.js";const s={tv:{library:r.tvLibrary,continue:r.tvContinueWatching,progress:r.tvProgress},manga:{library:r.mangaLibrary,continue:r.mangaContinueReading,progress:r.mangaProgress},asmr:{library:r.asmrLibrary,continue:r.asmrContinueListening,progress:r.asmrProgress}};function t(a,e,n=!1){const i=s[e];n&&a.invalidateQueries({queryKey:[i.progress]}),a.invalidateQueries({queryKey:[i.library]}),a.invalidateQueries({queryKey:[i.continue]})}export{t as i};
1
+ import{q as r}from"./index-DYanm9eZ.js";const s={tv:{library:r.tvLibrary,continue:r.tvContinueWatching,progress:r.tvProgress},manga:{library:r.mangaLibrary,continue:r.mangaContinueReading,progress:r.mangaProgress},asmr:{library:r.asmrLibrary,continue:r.asmrContinueListening,progress:r.asmrProgress}};function t(a,e,n=!1){const i=s[e];n&&a.invalidateQueries({queryKey:[i.progress]}),a.invalidateQueries({queryKey:[i.library]}),a.invalidateQueries({queryKey:[i.continue]})}export{t as i};
@@ -1 +1 @@
1
- import{p as e}from"./index-DbRDs7tF.js";const o=.8,r=5,a="autoplayEnabled",E=(s,t)=>t>0&&s>=t*o,c=.25,l=(s,t)=>t>0&&Number.isFinite(t)&&s>=t-c,p=s=>s>r,m=()=>{try{return e.getItem(a)==="true"}catch{return!1}},b=s=>{try{e.setItem(a,String(s))}catch{}};export{o as C,l as a,p as h,E as i,m as l,b as s};
1
+ import{p as e}from"./index-DYanm9eZ.js";const o=.8,r=5,a="autoplayEnabled",E=(s,t)=>t>0&&s>=t*o,c=.25,l=(s,t)=>t>0&&Number.isFinite(t)&&s>=t-c,p=s=>s>r,m=()=>{try{return e.getItem(a)==="true"}catch{return!1}},b=s=>{try{e.setItem(a,String(s))}catch{}};export{o as C,l as a,p as h,E as i,m as l,b as s};
@@ -1 +1 @@
1
- import{q as g}from"./vendor-core-DfaOB3Rn.js";import{u as p,b as q,a as M}from"./vendor-query-BBT5_sHx.js";import{l as v,F as h,q as Q,t as y}from"./index-DbRDs7tF.js";import{u as A}from"./QueueOptionsButton-C6ArqpM5.js";function k(t){const s=p(),c=v(),{data:i,isLoading:w,error:u}=A(t),n=c.watchlist.check.queryOptions({showId:t??""}).queryKey,{data:d}=q({...c.watchlist.check.queryOptions({showId:t??""}),enabled:!!t}),r=d?.inWatchlist??!1,{mutateAsync:l}=M({mutationFn:async({wasIn:e,meta:a})=>{if(!t)throw new Error("Missing showId");if(e)await y.watchlist.remove.mutate({id:t});else{const o=a?.names,m=a?.name||o?.romaji;if(!m)throw new Error("Missing show name");await y.watchlist.add.mutate({id:t,name:m,thumbnail:a?.thumbnail,nativeName:o?.native,englishName:o?.english,type:a?.type,isAdult:a?.isAdult})}return!e},onMutate:async({wasIn:e})=>{await s.cancelQueries({queryKey:n}),s.setQueryData(n,a=>({...a,inWatchlist:!e,status:a?.status??""}))},onError:e=>{s.invalidateQueries({queryKey:n}),h.error(e instanceof Error?e.message:"Failed to update watchlist")},onSuccess:e=>{h.success(e?"Added to watchlist":"Removed from watchlist"),s.invalidateQueries({queryKey:[Q.watchlist]})}}),f=g(async()=>{!t||!i||await l({wasIn:r,meta:i})},[t,i,r,l]);return{showMeta:i,inWatchlist:r,loadingMeta:w,error:u?u.message:null,toggleWatchlist:f}}export{k as u};
1
+ import{q as g}from"./vendor-core-DfaOB3Rn.js";import{u as p,b as q,a as M}from"./vendor-query-BBT5_sHx.js";import{l as v,F as h,q as Q,t as y}from"./index-DYanm9eZ.js";import{u as A}from"./QueueOptionsButton-BCxERY1G.js";function k(t){const s=p(),c=v(),{data:i,isLoading:w,error:u}=A(t),n=c.watchlist.check.queryOptions({showId:t??""}).queryKey,{data:d}=q({...c.watchlist.check.queryOptions({showId:t??""}),enabled:!!t}),r=d?.inWatchlist??!1,{mutateAsync:l}=M({mutationFn:async({wasIn:e,meta:a})=>{if(!t)throw new Error("Missing showId");if(e)await y.watchlist.remove.mutate({id:t});else{const o=a?.names,m=a?.name||o?.romaji;if(!m)throw new Error("Missing show name");await y.watchlist.add.mutate({id:t,name:m,thumbnail:a?.thumbnail,nativeName:o?.native,englishName:o?.english,type:a?.type,isAdult:a?.isAdult})}return!e},onMutate:async({wasIn:e})=>{await s.cancelQueries({queryKey:n}),s.setQueryData(n,a=>({...a,inWatchlist:!e,status:a?.status??""}))},onError:e=>{s.invalidateQueries({queryKey:n}),h.error(e instanceof Error?e.message:"Failed to update watchlist")},onSuccess:e=>{h.success(e?"Added to watchlist":"Removed from watchlist"),s.invalidateQueries({queryKey:[Q.watchlist]})}}),f=g(async()=>{!t||!i||await l({wasIn:r,meta:i})},[t,i,r,l]);return{showMeta:i,inWatchlist:r,loadingMeta:w,error:u?u.message:null,toggleWatchlist:f}}export{k as u};
@@ -1 +1 @@
1
- import{T as C}from"./vendor-core-DfaOB3Rn.js";import{b as p,u as d,a as l,e as Q}from"./vendor-query-BBT5_sHx.js";import{l as n,F as a,q as v,t as b}from"./index-DbRDs7tF.js";import{i as g}from"./libraryInvalidation-cJ1WjrJq.js";function k(s){return String(s||"").trim().toUpperCase()}function H(s){return k(s.id||s._id||"")}function K(s){return!!s.isAdult}const U=["Listening","Completed","On-Hold","Dropped","Planned"],T=s=>k(s),x=(s="All",r=1,e=24)=>{const t=n();return p(t.asmrLibrary.list.queryOptions({status:s,page:r,limit:e}))},_=()=>{const s=n();return p({...s.asmrLibrary.ids.queryOptions(),staleTime:1e3*60})},W=s=>{const r=n();return p({...r.asmrLibrary.check.queryOptions({id:s||""}),enabled:!!s,staleTime:1e3*60})},j=(s=24)=>{const r=n();return p(r.asmrProgress.continueListening.queryOptions({limit:s}))},z=s=>{const r=n();return p({...r.asmrProgress.getByWork.queryOptions({workId:s||""}),enabled:!!s})},B=()=>{const s=n(),r=d();return l({mutationFn:async e=>{const{silent:t,...m}=e;return b.asmrLibrary.add.mutate(m)},onSuccess:(e,t)=>{t.silent||a.success("Added to listening list"),r.invalidateQueries({queryKey:[v.asmrLibrary]}),r.invalidateQueries(s.asmrLibrary.pathFilter())},onError:e=>{a.error(`Failed to add: ${e.message}`)}})},R=()=>{const s=n(),r=d();return l(s.asmrLibrary.remove.mutationOptions({onSuccess:()=>{a.success("Removed from listening list"),g(r,"asmr"),r.invalidateQueries(s.asmrLibrary.pathFilter()),r.invalidateQueries(s.asmrProgress.pathFilter())},onError:e=>{a.error(`Failed to remove: ${e.message}`)}}))},Y=()=>{const s=n(),r=d();return l(s.asmrLibrary.setStatus.mutationOptions({onSuccess:()=>{a.success("Status updated"),g(r,"asmr"),r.invalidateQueries(s.asmrLibrary.pathFilter()),r.invalidateQueries(s.asmrProgress.pathFilter())},onError:e=>{a.error(`Failed to update status: ${e.message}`)}}))},J=()=>{const s=n(),r=d();return l(s.asmrProgress.save.mutationOptions({onSuccess:()=>{g(r,"asmr",!0),r.invalidateQueries(s.asmrLibrary.pathFilter()),r.invalidateQueries(s.asmrProgress.pathFilter())}}))},V=()=>{const s=n(),r=d();return l(s.asmrProgress.remove.mutationOptions({onSuccess:()=>{a.success("Progress reset"),g(r,"asmr",!0),r.invalidateQueries(s.asmrLibrary.pathFilter()),r.invalidateQueries(s.asmrProgress.pathFilter())},onError:e=>{a.error(`Failed to reset progress: ${e.message}`)}}))},X=()=>{const s=n(),r=d();return l(s.asmrLibrary.batchStatus.mutationOptions({onSuccess:e=>{a.success(`Status updated for ${e.updated??0} items`),g(r,"asmr"),r.invalidateQueries(s.asmrLibrary.pathFilter()),r.invalidateQueries(s.asmrProgress.pathFilter())},onError:e=>{a.error(`Failed to update statuses: ${e.message}`)}}))},Z=()=>{const s=n(),r=d();return l(s.asmrLibrary.removeMany.mutationOptions({onSuccess:e=>{const t=e.removed??0;a.success(`Removed ${t} ${t===1?"item":"items"} from listening list`),g(r,"asmr"),r.invalidateQueries(s.asmrLibrary.pathFilter()),r.invalidateQueries(s.asmrProgress.pathFilter())},onError:e=>{a.error(`Failed to remove: ${e.message}`)}}))},ss=()=>{const s=n(),r=d();return l(s.asmrProgress.removeMany.mutationOptions({onSuccess:e=>{const t=e.removed??0;a.success(`Reset progress for ${t} ${t===1?"item":"items"}`),g(r,"asmr",!0),r.invalidateQueries(s.asmrLibrary.pathFilter()),r.invalidateQueries(s.asmrProgress.pathFilter())},onError:e=>{a.error(`Failed to reset progress: ${e.message}`)}}))},rs=()=>{const s=B(),r=R(),{data:e}=_(),t=C(()=>new Set(e?.ids||[]),[e]);return{toggle:o=>{const i=T(o.rjCode);t.has(i)?r.mutate({id:i}):s.mutate({...o,thumbnail:o.thumbnail||""})},bookmarkedIds:t,pending:s.isPending||r.isPending}},f=300*1e3,F=15,es=(s,r,e,t)=>{const m=r+1,o=Q({queries:Array.from({length:m},(u,E)=>{const P=E+1;return{queryKey:[v.asmrBrowse,s,P,e,t],queryFn:()=>{const O=s.trim();return b.asmr.browse.query({q:O||void 0,page:P,sort:e&&e!=="latest"?e:void 0,rating:t||void 0})},staleTime:f}})}),i=o.flatMap(u=>u.data?.shows??[]),L=i.slice((r-1)*F,r*F),y=o[o.length-1]?.data,A=!!(y&&(y.hasNext||i.length>r*F)),S=o.some(u=>u.isLoading),c=o.some(u=>u.isFetching),q=o.some(u=>u.isError);return{data:{shows:L,hasNext:A},isLoading:S,isError:q,isFetching:c}},ts=s=>{const r=n(),e=p({...r.asmr.work.queryOptions({rj:s}),enabled:!!s,staleTime:f,refetchOnMount:"always"});return{...e,data:e.data}},$=15,h=6;function I(s){if(s.isAdult||!s.thumbnail)return!1;const r=(s.rating||"").toLowerCase();return r===""||r==="sfw"}function w(s,r){const e=new Set,t=[];for(const m of s)for(const o of m){if(t.length>=r)return t;const i=o.id||o._id;!i||e.has(i)||(e.add(i),I(o)&&t.push(o))}return t}const os=(s=!0)=>{const r=Q({queries:Array.from({length:$},(c,q)=>{const u=q+1;return{queryKey:[v.asmrBrowse,"",u,"popular_month",""],queryFn:()=>b.asmr.browse.query({page:u,sort:"popular_month"}),staleTime:f,enabled:s,retry:1}})}),e=r.map(c=>c.data?.shows??[]),t=w(e,h),m=r.every(c=>c.isFetched),o=s&&m&&t.length<h,i=p({queryKey:[v.asmrBrowse,"",1,"popular","sfw"],queryFn:()=>b.asmr.browse.query({page:1,sort:"popular",rating:"sfw"}),staleTime:f,enabled:o,retry:1}),L=i.data?.shows??[],y=t.length>=h?t.slice(0,h):w([t,L],h),A=s&&(r.some(c=>c.isLoading)||o&&i.isLoading),S=s&&m&&y.length===0&&r.some(c=>c.isError);return{data:y,isLoading:A,isError:S}};export{U as A,H as a,os as b,ts as c,W as d,rs as e,z as f,k as g,J as h,B as i,es as j,T as k,K as l,x as m,R as n,Y as o,X as p,Z as q,ss as r,V as s,j as u};
1
+ import{T as C}from"./vendor-core-DfaOB3Rn.js";import{b as p,u as d,a as l,e as Q}from"./vendor-query-BBT5_sHx.js";import{l as n,F as a,q as v,t as b}from"./index-DYanm9eZ.js";import{i as g}from"./libraryInvalidation-DlwONLN-.js";function k(s){return String(s||"").trim().toUpperCase()}function H(s){return k(s.id||s._id||"")}function K(s){return!!s.isAdult}const U=["Listening","Completed","On-Hold","Dropped","Planned"],T=s=>k(s),x=(s="All",r=1,e=24)=>{const t=n();return p(t.asmrLibrary.list.queryOptions({status:s,page:r,limit:e}))},_=()=>{const s=n();return p({...s.asmrLibrary.ids.queryOptions(),staleTime:1e3*60})},W=s=>{const r=n();return p({...r.asmrLibrary.check.queryOptions({id:s||""}),enabled:!!s,staleTime:1e3*60})},j=(s=24)=>{const r=n();return p(r.asmrProgress.continueListening.queryOptions({limit:s}))},z=s=>{const r=n();return p({...r.asmrProgress.getByWork.queryOptions({workId:s||""}),enabled:!!s})},B=()=>{const s=n(),r=d();return l({mutationFn:async e=>{const{silent:t,...m}=e;return b.asmrLibrary.add.mutate(m)},onSuccess:(e,t)=>{t.silent||a.success("Added to listening list"),r.invalidateQueries({queryKey:[v.asmrLibrary]}),r.invalidateQueries(s.asmrLibrary.pathFilter())},onError:e=>{a.error(`Failed to add: ${e.message}`)}})},R=()=>{const s=n(),r=d();return l(s.asmrLibrary.remove.mutationOptions({onSuccess:()=>{a.success("Removed from listening list"),g(r,"asmr"),r.invalidateQueries(s.asmrLibrary.pathFilter()),r.invalidateQueries(s.asmrProgress.pathFilter())},onError:e=>{a.error(`Failed to remove: ${e.message}`)}}))},Y=()=>{const s=n(),r=d();return l(s.asmrLibrary.setStatus.mutationOptions({onSuccess:()=>{a.success("Status updated"),g(r,"asmr"),r.invalidateQueries(s.asmrLibrary.pathFilter()),r.invalidateQueries(s.asmrProgress.pathFilter())},onError:e=>{a.error(`Failed to update status: ${e.message}`)}}))},J=()=>{const s=n(),r=d();return l(s.asmrProgress.save.mutationOptions({onSuccess:()=>{g(r,"asmr",!0),r.invalidateQueries(s.asmrLibrary.pathFilter()),r.invalidateQueries(s.asmrProgress.pathFilter())}}))},V=()=>{const s=n(),r=d();return l(s.asmrProgress.remove.mutationOptions({onSuccess:()=>{a.success("Progress reset"),g(r,"asmr",!0),r.invalidateQueries(s.asmrLibrary.pathFilter()),r.invalidateQueries(s.asmrProgress.pathFilter())},onError:e=>{a.error(`Failed to reset progress: ${e.message}`)}}))},X=()=>{const s=n(),r=d();return l(s.asmrLibrary.batchStatus.mutationOptions({onSuccess:e=>{a.success(`Status updated for ${e.updated??0} items`),g(r,"asmr"),r.invalidateQueries(s.asmrLibrary.pathFilter()),r.invalidateQueries(s.asmrProgress.pathFilter())},onError:e=>{a.error(`Failed to update statuses: ${e.message}`)}}))},Z=()=>{const s=n(),r=d();return l(s.asmrLibrary.removeMany.mutationOptions({onSuccess:e=>{const t=e.removed??0;a.success(`Removed ${t} ${t===1?"item":"items"} from listening list`),g(r,"asmr"),r.invalidateQueries(s.asmrLibrary.pathFilter()),r.invalidateQueries(s.asmrProgress.pathFilter())},onError:e=>{a.error(`Failed to remove: ${e.message}`)}}))},ss=()=>{const s=n(),r=d();return l(s.asmrProgress.removeMany.mutationOptions({onSuccess:e=>{const t=e.removed??0;a.success(`Reset progress for ${t} ${t===1?"item":"items"}`),g(r,"asmr",!0),r.invalidateQueries(s.asmrLibrary.pathFilter()),r.invalidateQueries(s.asmrProgress.pathFilter())},onError:e=>{a.error(`Failed to reset progress: ${e.message}`)}}))},rs=()=>{const s=B(),r=R(),{data:e}=_(),t=C(()=>new Set(e?.ids||[]),[e]);return{toggle:o=>{const i=T(o.rjCode);t.has(i)?r.mutate({id:i}):s.mutate({...o,thumbnail:o.thumbnail||""})},bookmarkedIds:t,pending:s.isPending||r.isPending}},f=300*1e3,F=15,es=(s,r,e,t)=>{const m=r+1,o=Q({queries:Array.from({length:m},(u,E)=>{const P=E+1;return{queryKey:[v.asmrBrowse,s,P,e,t],queryFn:()=>{const O=s.trim();return b.asmr.browse.query({q:O||void 0,page:P,sort:e&&e!=="latest"?e:void 0,rating:t||void 0})},staleTime:f}})}),i=o.flatMap(u=>u.data?.shows??[]),L=i.slice((r-1)*F,r*F),y=o[o.length-1]?.data,A=!!(y&&(y.hasNext||i.length>r*F)),S=o.some(u=>u.isLoading),c=o.some(u=>u.isFetching),q=o.some(u=>u.isError);return{data:{shows:L,hasNext:A},isLoading:S,isError:q,isFetching:c}},ts=s=>{const r=n(),e=p({...r.asmr.work.queryOptions({rj:s}),enabled:!!s,staleTime:f,refetchOnMount:"always"});return{...e,data:e.data}},$=15,h=6;function I(s){if(s.isAdult||!s.thumbnail)return!1;const r=(s.rating||"").toLowerCase();return r===""||r==="sfw"}function w(s,r){const e=new Set,t=[];for(const m of s)for(const o of m){if(t.length>=r)return t;const i=o.id||o._id;!i||e.has(i)||(e.add(i),I(o)&&t.push(o))}return t}const os=(s=!0)=>{const r=Q({queries:Array.from({length:$},(c,q)=>{const u=q+1;return{queryKey:[v.asmrBrowse,"",u,"popular_month",""],queryFn:()=>b.asmr.browse.query({page:u,sort:"popular_month"}),staleTime:f,enabled:s,retry:1}})}),e=r.map(c=>c.data?.shows??[]),t=w(e,h),m=r.every(c=>c.isFetched),o=s&&m&&t.length<h,i=p({queryKey:[v.asmrBrowse,"",1,"popular","sfw"],queryFn:()=>b.asmr.browse.query({page:1,sort:"popular",rating:"sfw"}),staleTime:f,enabled:o,retry:1}),L=i.data?.shows??[],y=t.length>=h?t.slice(0,h):w([t,L],h),A=s&&(r.some(c=>c.isLoading)||o&&i.isLoading),S=s&&m&&y.length===0&&r.some(c=>c.isError);return{data:y,isLoading:A,isError:S}};export{U as A,H as a,os as b,ts as c,W as d,rs as e,z as f,k as g,J as h,B as i,es as j,T as k,K as l,x as m,R as n,Y as o,X as p,Z as q,ss as r,V as s,j as u};
@@ -1 +1 @@
1
- import{u as b}from"./vendor-core-DfaOB3Rn.js";import{c as k}from"./useAsmr-DO5DUI_t.js";import{a as g}from"./MediaCard-ChUKs5Sb.js";import{u as d}from"./usePopup-DS9jMzp6.js";const y=({data:o,anchorRect:n,bookmarked:a,onToggleBookmark:l,onMouseEnter:p,onMouseLeave:c,onRequestClose:u})=>{const{data:r,isLoading:m}=k(o.rjCode||null),e=r?.tracks.length??0,i=e>0,t=!m,s=[{icon:"headphones",label:t?i?`${e} track${e===1?"":"s"}`:"No tracks":"Loading tracks…"}];return o.rating&&s.push({label:o.rating.toUpperCase()}),o.isAdult&&s.push({label:"18+"}),o.progressLabel&&s.push({icon:"bookmark",label:o.progressLabel}),b(g,{anchorRect:n,title:o.title,subtitle:o.rjCode,cover:o.thumbnail,meta:s,synopsis:!t&&!r?.description?"Loading description…":r?.description??"No description available.",primaryAction:{to:o.listenTarget,label:i?"Listen now":t?"No tracks":"Loading…",icon:"play",disabled:!i},secondaryAction:{to:o.listenTarget,label:"Details"},bookmarked:a,bookmarkLabel:"Bookmark",onToggleBookmark:l,onMouseEnter:p,onMouseLeave:c,onRequestClose:u})},C=()=>d();export{y as A,C as u};
1
+ import{u as b}from"./vendor-core-DfaOB3Rn.js";import{c as k}from"./useAsmr-B88X71vs.js";import{a as g}from"./MediaCard-l2gAJctz.js";import{u as d}from"./usePopup-DS9jMzp6.js";const y=({data:o,anchorRect:n,bookmarked:a,onToggleBookmark:l,onMouseEnter:p,onMouseLeave:c,onRequestClose:u})=>{const{data:r,isLoading:m}=k(o.rjCode||null),e=r?.tracks.length??0,i=e>0,t=!m,s=[{icon:"headphones",label:t?i?`${e} track${e===1?"":"s"}`:"No tracks":"Loading tracks…"}];return o.rating&&s.push({label:o.rating.toUpperCase()}),o.isAdult&&s.push({label:"18+"}),o.progressLabel&&s.push({icon:"bookmark",label:o.progressLabel}),b(g,{anchorRect:n,title:o.title,subtitle:o.rjCode,cover:o.thumbnail,meta:s,synopsis:!t&&!r?.description?"Loading description…":r?.description??"No description available.",primaryAction:{to:o.listenTarget,label:i?"Listen now":t?"No tracks":"Loading…",icon:"play",disabled:!i},secondaryAction:{to:o.listenTarget,label:"Details"},bookmarked:a,bookmarkLabel:"Bookmark",onToggleBookmark:l,onMouseEnter:p,onMouseLeave:c,onRequestClose:u})},C=()=>d();export{y as A,C as u};
@@ -1 +1 @@
1
- import{b as u,c as f,u as c,a as g}from"./vendor-query-BBT5_sHx.js";import{q as v,t as b,l as o,F as s}from"./index-DbRDs7tF.js";import{T as L}from"./vendor-core-DfaOB3Rn.js";import{i as l}from"./libraryInvalidation-cJ1WjrJq.js";const q=300*1e3,h={mangadex:"https://mangadex.org/",mangapill:"https://www.mangapill.com/"},F=(e,a)=>`/api/proxy?url=${encodeURIComponent(a)}&referer=${encodeURIComponent(h[e])}`,B=(e,a)=>a&&(e==="mangapill"||e==="mangadex"?F(e,a):a),N=(e,a=!0)=>{const{provider:t,query:r,page:i,sort:n,status:m,type:p,rating:y,mature:d}=e;return u({queryKey:[v.mangaBrowse,t,r,i,n,m,p,y,d],queryFn:()=>b.manga.search.query({provider:t,q:r.trim()||void 0,page:i,sort:n||void 0,status:m||void 0,type:p||void 0,rating:y||void 0,mature:d?"1":void 0}),staleTime:q,enabled:a})},I=(e,a=14)=>{const{provider:t,query:r,sort:i,status:n,type:m,rating:p,mature:y}=e;return f({queryKey:[v.mangaBrowseInfinite,t,r,i,n,m,p,y,a],queryFn:({pageParam:d=1})=>b.manga.search.query({provider:t,q:r.trim()||void 0,page:d,limit:a,sort:i||void 0,status:n||void 0,type:m||void 0,rating:p||void 0,mature:y?"1":void 0}),initialPageParam:1,getNextPageParam:(d,M)=>d.hasNext?M.length+1:void 0,staleTime:q,enabled:!0})},Q=(e,a,t="safe",r=!1)=>u({queryKey:[v.mangaDetail,e,a,t,r],queryFn:()=>b.manga.info.query({provider:e||"",id:a||"",rating:t,mature:r?"1":void 0}),enabled:!!e&&!!a,staleTime:q}),A=(e,a,t)=>u({queryKey:[v.mangaPages,e,a],queryFn:()=>b.manga.pages.query({provider:e||"",id:a||""}),enabled:!!e&&!!a,staleTime:1800*1e3}),w=()=>{const e=o(),a=u({...e.manga.trending.queryOptions(),staleTime:600*1e3,retry:1});return{...a,data:a.data}},x=e=>e.contentRating==="erotica"||e.contentRating==="pornographic"||e.type==="doujinshi";function _(e,a){const t=e.titles??{};return a==="englishName"?t.en||e.title:a==="nativeName"&&(t.native||t.romaji||e.altTitle)||e.title}function D(e){return{englishName:e.titles?.en??e.title,nativeName:e.titles?.native??e.titles?.romaji??e.altTitle??void 0}}const P=/^anilist:ch:(\d+)$/;function K(e){if(!e)return null;const a=P.exec(e.trim());if(!a)return null;const t=Number.parseInt(a[1],10);return Number.isFinite(t)?t:null}function U(e,a){const t=String(a),r=e.find(i=>(i.number??"").trim()===t);return r||(e.find(i=>{const n=Number.parseFloat((i.number??"").trim());return Number.isFinite(n)&&n===a})??null)}const j=["Reading","Completed","On-Hold","Dropped","Planned"],S=(e,a)=>`${e.toLowerCase()}:${a}`,H=(e="All",a=1,t=24)=>{const r=o();return u(r.mangaLibrary.list.queryOptions({status:e,page:a,limit:t}))},R=()=>{const e=o();return u({...e.mangaLibrary.ids.queryOptions(),staleTime:1e3*60})},V=e=>{const a=o();return u({...a.mangaLibrary.check.queryOptions({id:e??""}),enabled:!!e,staleTime:1e3*60})},Y=e=>{const a=o();return u({...a.mangaLibrary.entry.queryOptions({id:e??""}),enabled:!!e,staleTime:1e3*60})},z=()=>{const e=o(),a=c();return g(e.mangaLibrary.link.mutationOptions({onSuccess:t=>{s.success(t?.progressMigrated?"Linked - chapter progress carried over":"Linked to AniList entry"),a.invalidateQueries(e.mangaLibrary.pathFilter()),l(a,"manga")},onError:t=>{s.error(`Failed to link: ${t.message}`)}}))},G=(e=24)=>{const a=o();return u(a.mangaProgress.continueReading.queryOptions({limit:e}))},J=e=>{const a=o();return u({...a.mangaProgress.byManga.queryOptions({mangaId:e??""}),enabled:!!e})},k=()=>{const e=o(),a=c();return g(e.mangaLibrary.add.mutationOptions({onSuccess:(t,r)=>{r.silent||s.success("Bookmarked"),a.invalidateQueries(e.mangaLibrary.pathFilter()),a.invalidateQueries({queryKey:[v.mangaLibrary]})},onError:t=>{s.error(`Failed to bookmark: ${t.message}`)}}))},C=()=>{const e=o(),a=c();return g(e.mangaLibrary.remove.mutationOptions({onSuccess:()=>{s.success("Bookmark removed"),a.invalidateQueries(e.mangaLibrary.pathFilter()),l(a,"manga")},onError:t=>{s.error(`Failed to remove: ${t.message}`)}}))},W=()=>{const e=o(),a=c();return g(e.mangaLibrary.setStatus.mutationOptions({onSuccess:()=>{s.success("Status updated"),a.invalidateQueries(e.mangaLibrary.pathFilter()),l(a,"manga")},onError:t=>{s.error(`Failed to update status: ${t.message}`)}}))},X=()=>{const e=o(),a=c();return g(e.mangaProgress.save.mutationOptions({onSuccess:()=>{l(a,"manga",!0),a.invalidateQueries(e.mangaProgress.pathFilter())}}))},Z=()=>{const e=o(),a=c();return g(e.mangaProgress.remove.mutationOptions({onSuccess:()=>{s.success("Progress reset"),l(a,"manga",!0),a.invalidateQueries(e.mangaProgress.pathFilter())},onError:t=>{s.error(`Failed to reset progress: ${t.message}`)}}))},ee=()=>{const e=o(),a=c();return g(e.mangaLibrary.batchStatus.mutationOptions({onSuccess:t=>{s.success(`Status updated for ${t.updated??0} items`),a.invalidateQueries(e.mangaLibrary.pathFilter()),l(a,"manga")},onError:t=>{s.error(`Failed to update statuses: ${t.message}`)}}))},ae=()=>{const e=o(),a=c();return g(e.mangaLibrary.removeMany.mutationOptions({onSuccess:t=>{const r=t.removed??0;s.success(`Removed ${r} ${r===1?"item":"items"} from reading list`),a.invalidateQueries(e.mangaLibrary.pathFilter()),l(a,"manga")},onError:t=>{s.error(`Failed to remove: ${t.message}`)}}))},te=()=>{const e=o(),a=c();return g(e.mangaProgress.removeMany.mutationOptions({onSuccess:t=>{const r=t.removed??0;s.success(`Reset progress for ${r} ${r===1?"item":"items"}`),l(a,"manga",!0),a.invalidateQueries(e.mangaProgress.pathFilter())},onError:t=>{s.error(`Failed to reset progress: ${t.message}`)}}))},re=()=>{const e=k(),a=C(),{data:t}=R(),r=L(()=>new Set(t?.ids||[]),[t]);return{toggle:n=>{const m=S(n.provider,n.id);r.has(m)?a.mutate(m):e.mutate({provider:n.provider,mangaId:n.id,title:n.title,cover:n.cover,altTitle:n.altTitle,contentRating:n.contentRating})},bookmarkedIds:r,pending:e.isPending||a.isPending}};export{te as A,Z as B,j as M,I as a,B as b,D as c,G as d,w as e,N as f,Y as g,k as h,x as i,z as j,Q as k,V as l,S as m,J as n,C as o,W as p,K as q,_ as r,U as s,A as t,re as u,F as v,X as w,H as x,ee as y,ae as z};
1
+ import{b as u,c as f,u as c,a as g}from"./vendor-query-BBT5_sHx.js";import{q as v,t as b,l as o,F as s}from"./index-DYanm9eZ.js";import{T as L}from"./vendor-core-DfaOB3Rn.js";import{i as l}from"./libraryInvalidation-DlwONLN-.js";const q=300*1e3,h={mangadex:"https://mangadex.org/",mangapill:"https://www.mangapill.com/"},F=(e,a)=>`/api/proxy?url=${encodeURIComponent(a)}&referer=${encodeURIComponent(h[e])}`,B=(e,a)=>a&&(e==="mangapill"||e==="mangadex"?F(e,a):a),N=(e,a=!0)=>{const{provider:t,query:r,page:i,sort:n,status:m,type:p,rating:y,mature:d}=e;return u({queryKey:[v.mangaBrowse,t,r,i,n,m,p,y,d],queryFn:()=>b.manga.search.query({provider:t,q:r.trim()||void 0,page:i,sort:n||void 0,status:m||void 0,type:p||void 0,rating:y||void 0,mature:d?"1":void 0}),staleTime:q,enabled:a})},I=(e,a=14)=>{const{provider:t,query:r,sort:i,status:n,type:m,rating:p,mature:y}=e;return f({queryKey:[v.mangaBrowseInfinite,t,r,i,n,m,p,y,a],queryFn:({pageParam:d=1})=>b.manga.search.query({provider:t,q:r.trim()||void 0,page:d,limit:a,sort:i||void 0,status:n||void 0,type:m||void 0,rating:p||void 0,mature:y?"1":void 0}),initialPageParam:1,getNextPageParam:(d,M)=>d.hasNext?M.length+1:void 0,staleTime:q,enabled:!0})},Q=(e,a,t="safe",r=!1)=>u({queryKey:[v.mangaDetail,e,a,t,r],queryFn:()=>b.manga.info.query({provider:e||"",id:a||"",rating:t,mature:r?"1":void 0}),enabled:!!e&&!!a,staleTime:q}),A=(e,a,t)=>u({queryKey:[v.mangaPages,e,a],queryFn:()=>b.manga.pages.query({provider:e||"",id:a||""}),enabled:!!e&&!!a,staleTime:1800*1e3}),w=()=>{const e=o(),a=u({...e.manga.trending.queryOptions(),staleTime:600*1e3,retry:1});return{...a,data:a.data}},x=e=>e.contentRating==="erotica"||e.contentRating==="pornographic"||e.type==="doujinshi";function _(e,a){const t=e.titles??{};return a==="englishName"?t.en||e.title:a==="nativeName"&&(t.native||t.romaji||e.altTitle)||e.title}function D(e){return{englishName:e.titles?.en??e.title,nativeName:e.titles?.native??e.titles?.romaji??e.altTitle??void 0}}const P=/^anilist:ch:(\d+)$/;function K(e){if(!e)return null;const a=P.exec(e.trim());if(!a)return null;const t=Number.parseInt(a[1],10);return Number.isFinite(t)?t:null}function U(e,a){const t=String(a),r=e.find(i=>(i.number??"").trim()===t);return r||(e.find(i=>{const n=Number.parseFloat((i.number??"").trim());return Number.isFinite(n)&&n===a})??null)}const j=["Reading","Completed","On-Hold","Dropped","Planned"],S=(e,a)=>`${e.toLowerCase()}:${a}`,H=(e="All",a=1,t=24)=>{const r=o();return u(r.mangaLibrary.list.queryOptions({status:e,page:a,limit:t}))},R=()=>{const e=o();return u({...e.mangaLibrary.ids.queryOptions(),staleTime:1e3*60})},V=e=>{const a=o();return u({...a.mangaLibrary.check.queryOptions({id:e??""}),enabled:!!e,staleTime:1e3*60})},Y=e=>{const a=o();return u({...a.mangaLibrary.entry.queryOptions({id:e??""}),enabled:!!e,staleTime:1e3*60})},z=()=>{const e=o(),a=c();return g(e.mangaLibrary.link.mutationOptions({onSuccess:t=>{s.success(t?.progressMigrated?"Linked - chapter progress carried over":"Linked to AniList entry"),a.invalidateQueries(e.mangaLibrary.pathFilter()),l(a,"manga")},onError:t=>{s.error(`Failed to link: ${t.message}`)}}))},G=(e=24)=>{const a=o();return u(a.mangaProgress.continueReading.queryOptions({limit:e}))},J=e=>{const a=o();return u({...a.mangaProgress.byManga.queryOptions({mangaId:e??""}),enabled:!!e})},k=()=>{const e=o(),a=c();return g(e.mangaLibrary.add.mutationOptions({onSuccess:(t,r)=>{r.silent||s.success("Bookmarked"),a.invalidateQueries(e.mangaLibrary.pathFilter()),a.invalidateQueries({queryKey:[v.mangaLibrary]})},onError:t=>{s.error(`Failed to bookmark: ${t.message}`)}}))},C=()=>{const e=o(),a=c();return g(e.mangaLibrary.remove.mutationOptions({onSuccess:()=>{s.success("Bookmark removed"),a.invalidateQueries(e.mangaLibrary.pathFilter()),l(a,"manga")},onError:t=>{s.error(`Failed to remove: ${t.message}`)}}))},W=()=>{const e=o(),a=c();return g(e.mangaLibrary.setStatus.mutationOptions({onSuccess:()=>{s.success("Status updated"),a.invalidateQueries(e.mangaLibrary.pathFilter()),l(a,"manga")},onError:t=>{s.error(`Failed to update status: ${t.message}`)}}))},X=()=>{const e=o(),a=c();return g(e.mangaProgress.save.mutationOptions({onSuccess:()=>{l(a,"manga",!0),a.invalidateQueries(e.mangaProgress.pathFilter())}}))},Z=()=>{const e=o(),a=c();return g(e.mangaProgress.remove.mutationOptions({onSuccess:()=>{s.success("Progress reset"),l(a,"manga",!0),a.invalidateQueries(e.mangaProgress.pathFilter())},onError:t=>{s.error(`Failed to reset progress: ${t.message}`)}}))},ee=()=>{const e=o(),a=c();return g(e.mangaLibrary.batchStatus.mutationOptions({onSuccess:t=>{s.success(`Status updated for ${t.updated??0} items`),a.invalidateQueries(e.mangaLibrary.pathFilter()),l(a,"manga")},onError:t=>{s.error(`Failed to update statuses: ${t.message}`)}}))},ae=()=>{const e=o(),a=c();return g(e.mangaLibrary.removeMany.mutationOptions({onSuccess:t=>{const r=t.removed??0;s.success(`Removed ${r} ${r===1?"item":"items"} from reading list`),a.invalidateQueries(e.mangaLibrary.pathFilter()),l(a,"manga")},onError:t=>{s.error(`Failed to remove: ${t.message}`)}}))},te=()=>{const e=o(),a=c();return g(e.mangaProgress.removeMany.mutationOptions({onSuccess:t=>{const r=t.removed??0;s.success(`Reset progress for ${r} ${r===1?"item":"items"}`),l(a,"manga",!0),a.invalidateQueries(e.mangaProgress.pathFilter())},onError:t=>{s.error(`Failed to reset progress: ${t.message}`)}}))},re=()=>{const e=k(),a=C(),{data:t}=R(),r=L(()=>new Set(t?.ids||[]),[t]);return{toggle:n=>{const m=S(n.provider,n.id);r.has(m)?a.mutate(m):e.mutate({provider:n.provider,mangaId:n.id,title:n.title,cover:n.cover,altTitle:n.altTitle,contentRating:n.contentRating})},bookmarkedIds:r,pending:e.isPending||a.isPending}};export{te as A,Z as B,j as M,I as a,B as b,D as c,G as d,w as e,N as f,Y as g,k as h,x as i,z as j,Q as k,V as l,S as m,J as n,C as o,W as p,K as q,_ as r,U as s,A as t,re as u,F as v,X as w,H as x,ee as y,ae as z};
@@ -1 +1 @@
1
- import{u as k}from"./vendor-core-DfaOB3Rn.js";import{k as T,r as d}from"./useMangaLibrary-B4ZJLZXD.js";import{d as y}from"./index-DbRDs7tF.js";import{a as h}from"./MediaCard-ChUKs5Sb.js";import{u as M}from"./usePopup-DS9jMzp6.js";const B=({data:e,anchorRect:i,bookmarked:l,onToggleBookmark:n,onMouseEnter:p,onMouseLeave:c,onRequestClose:m})=>{const{data:o,isLoading:u}=T(e.provider,e.mangaId,e.rating||"safe",e.mature||!1),{titlePreference:g}=y(),s=o?.chapters.length??0,a=d({title:e.title,altTitle:o?.altTitle??e.altTitle},g),t=[],r=[o?.status,o?.type].filter(Boolean).join(" · ");r&&t.push({icon:"book",label:r}),s>0&&t.push({label:`${s} chapter${s===1?"":"s"}`}),e.progressLabel&&t.push({icon:"bookmark",label:e.progressLabel});const b=Array.isArray(o?.genres)?o.genres.filter(Boolean).slice(0,4).map(f=>f):[];return k(h,{anchorRect:i,title:a,subtitle:o?.altTitle&&o.altTitle!==a?`Also known as: ${o.altTitle}`:void 0,loading:u,meta:t,genres:b,synopsis:o?.description?o.description:"No synopsis available.",primaryAction:{to:e.readTarget,label:"Read now",icon:"book"},secondaryAction:{to:`/manga/${e.provider}/${encodeURIComponent(e.mangaId)}`,label:"Read more"},bookmarked:l,bookmarkLabel:"Bookmark",onToggleBookmark:n,onMouseEnter:p,onMouseLeave:c,onRequestClose:m})},I=()=>M();export{B as M,I as u};
1
+ import{u as k}from"./vendor-core-DfaOB3Rn.js";import{k as T,r as d}from"./useMangaLibrary-CX_0zLJK.js";import{d as y}from"./index-DYanm9eZ.js";import{a as h}from"./MediaCard-l2gAJctz.js";import{u as M}from"./usePopup-DS9jMzp6.js";const B=({data:e,anchorRect:i,bookmarked:l,onToggleBookmark:n,onMouseEnter:p,onMouseLeave:c,onRequestClose:m})=>{const{data:o,isLoading:u}=T(e.provider,e.mangaId,e.rating||"safe",e.mature||!1),{titlePreference:g}=y(),s=o?.chapters.length??0,a=d({title:e.title,altTitle:o?.altTitle??e.altTitle},g),t=[],r=[o?.status,o?.type].filter(Boolean).join(" · ");r&&t.push({icon:"book",label:r}),s>0&&t.push({label:`${s} chapter${s===1?"":"s"}`}),e.progressLabel&&t.push({icon:"bookmark",label:e.progressLabel});const b=Array.isArray(o?.genres)?o.genres.filter(Boolean).slice(0,4).map(f=>f):[];return k(h,{anchorRect:i,title:a,subtitle:o?.altTitle&&o.altTitle!==a?`Also known as: ${o.altTitle}`:void 0,loading:u,meta:t,genres:b,synopsis:o?.description?o.description:"No synopsis available.",primaryAction:{to:e.readTarget,label:"Read now",icon:"book"},secondaryAction:{to:`/manga/${e.provider}/${encodeURIComponent(e.mangaId)}`,label:"Read more"},bookmarked:l,bookmarkLabel:"Bookmark",onToggleBookmark:n,onMouseEnter:p,onMouseLeave:c,onRequestClose:m})},I=()=>M();export{B as M,I as u};
@@ -1 +1 @@
1
- import{T as o}from"./vendor-core-DfaOB3Rn.js";import{b as a}from"./vendor-query-BBT5_sHx.js";import{q as i,O as n}from"./index-DbRDs7tF.js";const l=300*1e3,c=()=>{const e=a({queryKey:[i.providers],queryFn:()=>n("/api/providers"),staleTime:l,retry:1}),r=Array.isArray(e.data)?e.data:null,s=o(()=>r&&r.length>0?r.filter(t=>t.loaded):[],[r]);return{...e,options:s,isFallback:!r||r.length===0}};export{c as u};
1
+ import{T as o}from"./vendor-core-DfaOB3Rn.js";import{b as a}from"./vendor-query-BBT5_sHx.js";import{q as i,O as n}from"./index-DYanm9eZ.js";const l=300*1e3,c=()=>{const e=a({queryKey:[i.providers],queryFn:()=>n("/api/providers"),staleTime:l,retry:1}),r=Array.isArray(e.data)?e.data:null,s=o(()=>r&&r.length>0?r.filter(t=>t.loaded):[],[r]);return{...e,options:s,isFallback:!r||r.length===0}};export{c as u};
@@ -1 +1 @@
1
- import{N as c,u as o,S as d}from"./vendor-core-DfaOB3Rn.js";import{I as v}from"./vendor-icons-DrybRNxP.js";import{M as T}from"./MediaCard-ChUKs5Sb.js";import{T as g}from"./TvPopup-DYYtMp7D.js";import{j as m,i as f,l as i}from"./index-DbRDs7tF.js";import{b as u}from"./vendor-query-BBT5_sHx.js";const P=c(({item:e})=>{const a=e.type==="tv"||e.type==="tvSeries"||e.type==="tvMiniSeries",s=m(e.type,e.id);return o(T,{item:{id:String(e.id),title:e.title,thumbnail:e.image,typeBadge:a?"TV":"Movie",isAdult:f(e)},linkTo:s,hoverIcon:"info",showInfoButton:!0,metaRow:o(d,{children:[e.year&&o("span",{style:{opacity:.75},children:e.year}),e.vote_average!=null&&o("span",{style:{display:"inline-flex",alignItems:"center",gap:3},children:[o(v,{name:"star",size:10}),Number(e.vote_average).toFixed(1)]})]}),renderPopup:(n,t)=>o(g,{item:e,anchorRect:n,onMouseEnter:t.onMouseEnter,onMouseLeave:t.onMouseLeave,onRequestClose:t.close})})}),p=1e3*60*5,_=e=>{const a=i(),{query:s,type:n,genre:t,year:r,sort_by:l,page:y}=e;return u({...a.tv.search.queryOptions({q:s?.trim()||"",type:n||"multi",genre:t||"",year:r&&r!=="ALL"?r:"",sortBy:l||"popularity.desc",page:y||1}),staleTime:p,retry:1})},b=(e="all",a="week",s=1,n=!0)=>{const t=i(),r=u({...t.tv.trending.queryOptions({mediaType:e,timeWindow:a,page:s}),enabled:n,staleTime:p,retry:1});return{...r,data:r.data}};export{P as T,_ as a,b as u};
1
+ import{N as c,u as o,S as d}from"./vendor-core-DfaOB3Rn.js";import{I as v}from"./vendor-icons-DrybRNxP.js";import{M as T}from"./MediaCard-l2gAJctz.js";import{T as g}from"./TvPopup-BS4iiQMd.js";import{j as m,i as f,l as i}from"./index-DYanm9eZ.js";import{b as u}from"./vendor-query-BBT5_sHx.js";const P=c(({item:e})=>{const a=e.type==="tv"||e.type==="tvSeries"||e.type==="tvMiniSeries",s=m(e.type,e.id);return o(T,{item:{id:String(e.id),title:e.title,thumbnail:e.image,typeBadge:a?"TV":"Movie",isAdult:f(e)},linkTo:s,hoverIcon:"info",showInfoButton:!0,metaRow:o(d,{children:[e.year&&o("span",{style:{opacity:.75},children:e.year}),e.vote_average!=null&&o("span",{style:{display:"inline-flex",alignItems:"center",gap:3},children:[o(v,{name:"star",size:10}),Number(e.vote_average).toFixed(1)]})]}),renderPopup:(n,t)=>o(g,{item:e,anchorRect:n,onMouseEnter:t.onMouseEnter,onMouseLeave:t.onMouseLeave,onRequestClose:t.close})})}),p=1e3*60*5,_=e=>{const a=i(),{query:s,type:n,genre:t,year:r,sort_by:l,page:y}=e;return u({...a.tv.search.queryOptions({q:s?.trim()||"",type:n||"multi",genre:t||"",year:r&&r!=="ALL"?r:"",sortBy:l||"popularity.desc",page:y||1}),staleTime:p,retry:1})},b=(e="all",a="week",s=1,n=!0)=>{const t=i(),r=u({...t.tv.trending.queryOptions({mediaType:e,timeWindow:a,page:s}),enabled:n,staleTime:p,retry:1});return{...r,data:r.data}};export{P as T,_ as a,b as u};
@@ -1 +1 @@
1
- import{T as p}from"./vendor-core-DfaOB3Rn.js";import{b as c,u as i,a as n}from"./vendor-query-BBT5_sHx.js";import{l as a,F as o,q as m,t as y,a9 as g}from"./index-DbRDs7tF.js";import{i as u}from"./libraryInvalidation-cJ1WjrJq.js";const q=["Watching","Completed","On-Hold","Dropped","Planned"],b=(t,e)=>g(t,e),C=(t="All",e=1,r=24)=>{const s=a();return c(s.tvLibrary.list.queryOptions({status:t,page:e,limit:r}))},T=()=>{const t=a();return c({...t.tvLibrary.ids.queryOptions(),staleTime:1e3*60})},O=t=>{const e=a();return c({...e.tvLibrary.check.queryOptions({id:t||""}),enabled:!!t,staleTime:1e3*60})},k=(t=24)=>{const e=a();return c(e.tvProgress.continueWatching.queryOptions({limit:t}))},$=t=>{const e=a();return c({...e.tvProgress.getByMedia.queryOptions({mediaId:t||""}),enabled:!!t})},f=(t,e,r)=>{const s=a();return c({...s.tvProgress.latest.queryOptions({mediaId:t||"",season:e,episode:r}),enabled:!!t,staleTime:0})},h=()=>{const t=a(),e=i();return n({mutationFn:async r=>{const{silent:s,...d}=r;return y.tvLibrary.add.mutate(d)},onSuccess:(r,s)=>{s.silent||o.success("Added to TV watchlist"),e.invalidateQueries({queryKey:[m.tvLibrary]}),e.invalidateQueries(t.tvLibrary.pathFilter())},onError:r=>{o.error(`Failed to add: ${r.message}`)}})},F=()=>{const t=a(),e=i();return n(t.tvLibrary.remove.mutationOptions({onSuccess:()=>{o.success("Removed from TV watchlist"),u(e,"tv"),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to remove: ${r.message}`)}}))},R=()=>{const t=a(),e=i();return n(t.tvLibrary.setStatus.mutationOptions({onSuccess:()=>{o.success("Status updated"),u(e,"tv"),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to update status: ${r.message}`)}}))},B=()=>{const t=a(),e=i();return n(t.tvProgress.save.mutationOptions({onSuccess:()=>{u(e,"tv",!0),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())}}))},E=()=>{const t=a(),e=i();return n(t.tvProgress.remove.mutationOptions({onSuccess:()=>{o.success("Progress reset"),u(e,"tv",!0),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to reset progress: ${r.message}`)}}))},I=()=>{const t=a(),e=i();return n(t.tvLibrary.batchStatus.mutationOptions({onSuccess:r=>{o.success(`Status updated for ${r.updated??0} items`),u(e,"tv"),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to update statuses: ${r.message}`)}}))},A=()=>{const t=a(),e=i();return n(t.tvLibrary.removeMany.mutationOptions({onSuccess:r=>{const s=r.removed??0;o.success(`Removed ${s} ${s===1?"item":"items"} from TV watchlist`),u(e,"tv"),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to remove: ${r.message}`)}}))},w=()=>{const t=a(),e=i();return n(t.tvProgress.removeMany.mutationOptions({onSuccess:r=>{const s=r.removed??0;o.success(`Reset progress for ${s} ${s===1?"item":"items"}`),u(e,"tv",!0),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to reset progress: ${r.message}`)}}))},M=()=>{const t=h(),e=F(),{data:r}=T(),s=p(()=>new Set(r?.ids||[]),[r]);return{toggle:v=>{const l=b(v.mediaType,v.tmdbId);s.has(l)?e.mutate(l):t.mutate({...v,poster:v.poster||""})},bookmarkedIds:s,pending:t.isPending||e.isPending}};export{q as T,F as a,E as b,O as c,M as d,B as e,R as f,h as g,f as h,$ as i,C as j,I as k,A as l,w as m,k as u};
1
+ import{T as p}from"./vendor-core-DfaOB3Rn.js";import{b as c,u as i,a as n}from"./vendor-query-BBT5_sHx.js";import{l as a,F as o,q as m,t as y,a9 as g}from"./index-DYanm9eZ.js";import{i as u}from"./libraryInvalidation-DlwONLN-.js";const q=["Watching","Completed","On-Hold","Dropped","Planned"],b=(t,e)=>g(t,e),C=(t="All",e=1,r=24)=>{const s=a();return c(s.tvLibrary.list.queryOptions({status:t,page:e,limit:r}))},T=()=>{const t=a();return c({...t.tvLibrary.ids.queryOptions(),staleTime:1e3*60})},O=t=>{const e=a();return c({...e.tvLibrary.check.queryOptions({id:t||""}),enabled:!!t,staleTime:1e3*60})},k=(t=24)=>{const e=a();return c(e.tvProgress.continueWatching.queryOptions({limit:t}))},$=t=>{const e=a();return c({...e.tvProgress.getByMedia.queryOptions({mediaId:t||""}),enabled:!!t})},f=(t,e,r)=>{const s=a();return c({...s.tvProgress.latest.queryOptions({mediaId:t||"",season:e,episode:r}),enabled:!!t,staleTime:0})},h=()=>{const t=a(),e=i();return n({mutationFn:async r=>{const{silent:s,...d}=r;return y.tvLibrary.add.mutate(d)},onSuccess:(r,s)=>{s.silent||o.success("Added to TV watchlist"),e.invalidateQueries({queryKey:[m.tvLibrary]}),e.invalidateQueries(t.tvLibrary.pathFilter())},onError:r=>{o.error(`Failed to add: ${r.message}`)}})},F=()=>{const t=a(),e=i();return n(t.tvLibrary.remove.mutationOptions({onSuccess:()=>{o.success("Removed from TV watchlist"),u(e,"tv"),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to remove: ${r.message}`)}}))},R=()=>{const t=a(),e=i();return n(t.tvLibrary.setStatus.mutationOptions({onSuccess:()=>{o.success("Status updated"),u(e,"tv"),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to update status: ${r.message}`)}}))},B=()=>{const t=a(),e=i();return n(t.tvProgress.save.mutationOptions({onSuccess:()=>{u(e,"tv",!0),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())}}))},E=()=>{const t=a(),e=i();return n(t.tvProgress.remove.mutationOptions({onSuccess:()=>{o.success("Progress reset"),u(e,"tv",!0),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to reset progress: ${r.message}`)}}))},I=()=>{const t=a(),e=i();return n(t.tvLibrary.batchStatus.mutationOptions({onSuccess:r=>{o.success(`Status updated for ${r.updated??0} items`),u(e,"tv"),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to update statuses: ${r.message}`)}}))},A=()=>{const t=a(),e=i();return n(t.tvLibrary.removeMany.mutationOptions({onSuccess:r=>{const s=r.removed??0;o.success(`Removed ${s} ${s===1?"item":"items"} from TV watchlist`),u(e,"tv"),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to remove: ${r.message}`)}}))},w=()=>{const t=a(),e=i();return n(t.tvProgress.removeMany.mutationOptions({onSuccess:r=>{const s=r.removed??0;o.success(`Reset progress for ${s} ${s===1?"item":"items"}`),u(e,"tv",!0),e.invalidateQueries(t.tvLibrary.pathFilter()),e.invalidateQueries(t.tvProgress.pathFilter())},onError:r=>{o.error(`Failed to reset progress: ${r.message}`)}}))},M=()=>{const t=h(),e=F(),{data:r}=T(),s=p(()=>new Set(r?.ids||[]),[r]);return{toggle:v=>{const l=b(v.mediaType,v.tmdbId);s.has(l)?e.mutate(l):t.mutate({...v,poster:v.poster||""})},bookmarkedIds:s,pending:t.isPending||e.isPending}};export{q as T,F as a,E as b,O as c,M as d,B as e,R as f,h as g,f as h,$ as i,C as j,I as k,A as l,w as m,k as u};
@@ -1,4 +1,4 @@
1
- import{u as t,A as w,q as E,h as j,d as P,T as te,$ as ct}from"./vendor-core-DfaOB3Rn.js";import{p as M,L as qe,B as G,$ as se,l as lt,aa as Re,q as K,a6 as dt,t as ut,g as pt,a2 as ft,ab as je,ac as mt}from"./index-DbRDs7tF.js";import{I as Y}from"./vendor-icons-DrybRNxP.js";import{S as Fe,a as ht,f as He,m as yt,h as bt,d as gt,s as ee,k as _t,u as vt,n as ie}from"./PlayerProvider--aaVRFly.js";import{u as St}from"./vendor-query-BBT5_sHx.js";import{i as ce,a as wt}from"./playbackCompletion-CnxK6_Vz.js";const Ct="_controls_pcbjf_1",kt="_titleContainer_pcbjf_9",xt="_scheduleInfo_pcbjf_15",Tt="_status_pcbjf_23",Lt="_nextEpisode_pcbjf_35",Nt="_watchlistBtn_pcbjf_45",Pt="_inList_pcbjf_72",Bt="_queueBtn_pcbjf_83",Et="_queueActive_pcbjf_95",At="_modeToggleBtn_pcbjf_101",It="_modeToggleActive_pcbjf_108",$t="_markWatchedBtn_pcbjf_129",Mt="_markWatchedDone_pcbjf_143",Rt="_streamPanel_pcbjf_154",jt="_desktopEpisodeActions_pcbjf_168",Ft="_sourceLoader_pcbjf_174",Dt="_episodeActions_pcbjf_187",Ot="_mobileEpisodeActions_pcbjf_201",qt="_episodeNavBtn_pcbjf_205",Ht="_primary_pcbjf_235",Wt="_secondary_pcbjf_245",zt="_episodePickerBtn_pcbjf_249",Vt="_queueCountdown_pcbjf_253",Kt="_speedBoostBadge_pcbjf_268",Ut="_videoContainer_pcbjf_299",Qt="_loadingOverlay_pcbjf_312",Gt="_loadingDots_pcbjf_326",Yt="_dot_pcbjf_331",Xt="_bounce_pcbjf_1",Jt="_bufferingOverlay_pcbjf_348",Zt="_bufferingSpinner_pcbjf_357",er="_spin_pcbjf_444",tr="_videoIframe_pcbjf_366",rr="_videoElementHidden_pcbjf_389",nr="_upscalerCanvas_pcbjf_394",sr="_upscalerActive_pcbjf_407",ar="_upscalerStatusBadge_pcbjf_411",or="_subtitleOverlay_pcbjf_426",ir="_spinner_pcbjf_444",cr="_errorOverlay_pcbjf_505",lr="_retryButton_pcbjf_515",dr="_detailsToggleBtn_pcbjf_528",ur="_descriptionSection_pcbjf_551",pr="_synopsisFlat_pcbjf_559",fr="_fullscreenActive_pcbjf_593",mr="_errorSubtext_pcbjf_636",Qn={controls:Ct,titleContainer:kt,scheduleInfo:xt,status:Tt,nextEpisode:Lt,watchlistBtn:Nt,inList:Pt,queueBtn:Bt,queueActive:Et,modeToggleBtn:At,modeToggleActive:It,markWatchedBtn:$t,markWatchedDone:Mt,streamPanel:Rt,desktopEpisodeActions:jt,sourceLoader:Ft,episodeActions:Dt,mobileEpisodeActions:Ot,episodeNavBtn:qt,primary:Ht,secondary:Wt,episodePickerBtn:zt,queueCountdown:Vt,speedBoostBadge:Kt,videoContainer:Ut,loadingOverlay:Qt,loadingDots:Gt,dot:Yt,bounce:Xt,bufferingOverlay:Jt,bufferingSpinner:Zt,spin:er,videoIframe:tr,videoElementHidden:rr,upscalerCanvas:nr,upscalerActive:sr,upscalerStatusBadge:ar,subtitleOverlay:or,spinner:ir,errorOverlay:cr,retryButton:lr,detailsToggleBtn:dr,descriptionSection:ur,synopsisFlat:pr,fullscreenActive:fr,errorSubtext:mr},hr="_playerPageLayout_13s1u_1",yr="_noSidebar_13s1u_15",br="_episodeSidebar_13s1u_19",gr="_playerMain_13s1u_32",_r="_videoPlayerWrapper_13s1u_40",vr="_playerInfoHeader_13s1u_56",Sr="_playerAnimeCard_13s1u_62",wr="_playerInfoContainer_13s1u_74",Cr="_infoColumns_13s1u_86",kr="_videoTitleSection_13s1u_114",xr="_theaterMode_13s1u_288",Gn={playerPageLayout:hr,noSidebar:yr,episodeSidebar:br,playerMain:gr,videoPlayerWrapper:_r,playerInfoHeader:vr,playerAnimeCard:Sr,playerInfoContainer:wr,infoColumns:Cr,videoTitleSection:kr,theaterMode:xr},Tr={fontSize:"subtitleFontSize",position:"subtitlePosition",bgOpacity:"subtitleBgOpacity",bgColor:"subtitleBgColor",textColor:"subtitleTextColor",edge:"subtitleEdge",bold:"subtitleBold"},U={fontSize:1.8,position:0,bgOpacity:.5,bgColor:"#000000",textColor:"#ffffff",edge:"shadow",bold:!1},fe=(e,n,s)=>Math.max(n,Math.min(s,e)),me=e=>typeof e=="string"&&/^#[0-9a-fA-F]{6}$/.test(e),le=(e,n,s,o)=>{try{const r=M.getItem(e);if(r===null)return n;const i=parseFloat(r);return Number.isFinite(i)?fe(i,s,o):n}catch{return n}};function Lr(){let e=U.edge,n=U.bgColor,s=U.textColor,o=U.bold;try{const r=M.getItem("subtitleEdge");(r==="shadow"||r==="outline"||r==="none")&&(e=r);const i=M.getItem("subtitleBgColor");me(i)&&(n=i);const c=M.getItem("subtitleTextColor");me(c)&&(s=c);const p=M.getItem("subtitleBold");p!==null&&(o=p==="true")}catch{}return{fontSize:le("subtitleFontSize",U.fontSize,.5,10),position:le("subtitlePosition",U.position,0,100),bgOpacity:le("subtitleBgOpacity",U.bgOpacity,0,1),bgColor:n,textColor:s,edge:e,bold:o}}function We(e,n){const s=`rgba(0, 0, 0, ${fe(n,0,1)})`;if(!me(e))return s;const o=parseInt(e.slice(1,3),16),r=parseInt(e.slice(3,5),16),i=parseInt(e.slice(5,7),16);return`rgba(${o}, ${r}, ${i}, ${fe(n,0,1)})`}function ze(e,n){return e==="none"?n<=0?"0 1px 3px rgba(0, 0, 0, 0.9)":"none":e==="outline"?["-1px 0 0 black","1px 0 0 black","0 -1px 0 black","0 1px 0 black","-1px -1px 0 black","1px -1px 0 black","-1px 1px 0 black","1px 1px 0 black","0 0 6px rgba(0, 0, 0, 0.9)"].join(", "):"0 0 4px black, 0 1px 2px rgba(0, 0, 0, 0.8)"}function Yn(e){return`
1
+ import{u as t,A as w,q as E,h as j,d as P,T as te,$ as ct}from"./vendor-core-DfaOB3Rn.js";import{p as M,L as qe,B as G,$ as se,l as lt,aa as Re,q as K,a6 as dt,t as ut,g as pt,a2 as ft,ab as je,ac as mt}from"./index-DYanm9eZ.js";import{I as Y}from"./vendor-icons-DrybRNxP.js";import{S as Fe,a as ht,f as He,m as yt,h as bt,d as gt,s as ee,k as _t,u as vt,n as ie}from"./PlayerProvider-BXBzQc8G.js";import{u as St}from"./vendor-query-BBT5_sHx.js";import{i as ce,a as wt}from"./playbackCompletion-CxGa4g7a.js";const Ct="_controls_pcbjf_1",kt="_titleContainer_pcbjf_9",xt="_scheduleInfo_pcbjf_15",Tt="_status_pcbjf_23",Lt="_nextEpisode_pcbjf_35",Nt="_watchlistBtn_pcbjf_45",Pt="_inList_pcbjf_72",Bt="_queueBtn_pcbjf_83",Et="_queueActive_pcbjf_95",At="_modeToggleBtn_pcbjf_101",It="_modeToggleActive_pcbjf_108",$t="_markWatchedBtn_pcbjf_129",Mt="_markWatchedDone_pcbjf_143",Rt="_streamPanel_pcbjf_154",jt="_desktopEpisodeActions_pcbjf_168",Ft="_sourceLoader_pcbjf_174",Dt="_episodeActions_pcbjf_187",Ot="_mobileEpisodeActions_pcbjf_201",qt="_episodeNavBtn_pcbjf_205",Ht="_primary_pcbjf_235",Wt="_secondary_pcbjf_245",zt="_episodePickerBtn_pcbjf_249",Vt="_queueCountdown_pcbjf_253",Kt="_speedBoostBadge_pcbjf_268",Ut="_videoContainer_pcbjf_299",Qt="_loadingOverlay_pcbjf_312",Gt="_loadingDots_pcbjf_326",Yt="_dot_pcbjf_331",Xt="_bounce_pcbjf_1",Jt="_bufferingOverlay_pcbjf_348",Zt="_bufferingSpinner_pcbjf_357",er="_spin_pcbjf_444",tr="_videoIframe_pcbjf_366",rr="_videoElementHidden_pcbjf_389",nr="_upscalerCanvas_pcbjf_394",sr="_upscalerActive_pcbjf_407",ar="_upscalerStatusBadge_pcbjf_411",or="_subtitleOverlay_pcbjf_426",ir="_spinner_pcbjf_444",cr="_errorOverlay_pcbjf_505",lr="_retryButton_pcbjf_515",dr="_detailsToggleBtn_pcbjf_528",ur="_descriptionSection_pcbjf_551",pr="_synopsisFlat_pcbjf_559",fr="_fullscreenActive_pcbjf_593",mr="_errorSubtext_pcbjf_636",Qn={controls:Ct,titleContainer:kt,scheduleInfo:xt,status:Tt,nextEpisode:Lt,watchlistBtn:Nt,inList:Pt,queueBtn:Bt,queueActive:Et,modeToggleBtn:At,modeToggleActive:It,markWatchedBtn:$t,markWatchedDone:Mt,streamPanel:Rt,desktopEpisodeActions:jt,sourceLoader:Ft,episodeActions:Dt,mobileEpisodeActions:Ot,episodeNavBtn:qt,primary:Ht,secondary:Wt,episodePickerBtn:zt,queueCountdown:Vt,speedBoostBadge:Kt,videoContainer:Ut,loadingOverlay:Qt,loadingDots:Gt,dot:Yt,bounce:Xt,bufferingOverlay:Jt,bufferingSpinner:Zt,spin:er,videoIframe:tr,videoElementHidden:rr,upscalerCanvas:nr,upscalerActive:sr,upscalerStatusBadge:ar,subtitleOverlay:or,spinner:ir,errorOverlay:cr,retryButton:lr,detailsToggleBtn:dr,descriptionSection:ur,synopsisFlat:pr,fullscreenActive:fr,errorSubtext:mr},hr="_playerPageLayout_13s1u_1",yr="_noSidebar_13s1u_15",br="_episodeSidebar_13s1u_19",gr="_playerMain_13s1u_32",_r="_videoPlayerWrapper_13s1u_40",vr="_playerInfoHeader_13s1u_56",Sr="_playerAnimeCard_13s1u_62",wr="_playerInfoContainer_13s1u_74",Cr="_infoColumns_13s1u_86",kr="_videoTitleSection_13s1u_114",xr="_theaterMode_13s1u_288",Gn={playerPageLayout:hr,noSidebar:yr,episodeSidebar:br,playerMain:gr,videoPlayerWrapper:_r,playerInfoHeader:vr,playerAnimeCard:Sr,playerInfoContainer:wr,infoColumns:Cr,videoTitleSection:kr,theaterMode:xr},Tr={fontSize:"subtitleFontSize",position:"subtitlePosition",bgOpacity:"subtitleBgOpacity",bgColor:"subtitleBgColor",textColor:"subtitleTextColor",edge:"subtitleEdge",bold:"subtitleBold"},U={fontSize:1.8,position:0,bgOpacity:.5,bgColor:"#000000",textColor:"#ffffff",edge:"shadow",bold:!1},fe=(e,n,s)=>Math.max(n,Math.min(s,e)),me=e=>typeof e=="string"&&/^#[0-9a-fA-F]{6}$/.test(e),le=(e,n,s,o)=>{try{const r=M.getItem(e);if(r===null)return n;const i=parseFloat(r);return Number.isFinite(i)?fe(i,s,o):n}catch{return n}};function Lr(){let e=U.edge,n=U.bgColor,s=U.textColor,o=U.bold;try{const r=M.getItem("subtitleEdge");(r==="shadow"||r==="outline"||r==="none")&&(e=r);const i=M.getItem("subtitleBgColor");me(i)&&(n=i);const c=M.getItem("subtitleTextColor");me(c)&&(s=c);const p=M.getItem("subtitleBold");p!==null&&(o=p==="true")}catch{}return{fontSize:le("subtitleFontSize",U.fontSize,.5,10),position:le("subtitlePosition",U.position,0,100),bgOpacity:le("subtitleBgOpacity",U.bgOpacity,0,1),bgColor:n,textColor:s,edge:e,bold:o}}function We(e,n){const s=`rgba(0, 0, 0, ${fe(n,0,1)})`;if(!me(e))return s;const o=parseInt(e.slice(1,3),16),r=parseInt(e.slice(3,5),16),i=parseInt(e.slice(5,7),16);return`rgba(${o}, ${r}, ${i}, ${fe(n,0,1)})`}function ze(e,n){return e==="none"?n<=0?"0 1px 3px rgba(0, 0, 0, 0.9)":"none":e==="outline"?["-1px 0 0 black","1px 0 0 black","0 -1px 0 black","0 1px 0 black","-1px -1px 0 black","1px -1px 0 black","-1px 1px 0 black","1px 1px 0 black","0 0 6px rgba(0, 0, 0, 0.9)"].join(", "):"0 0 4px black, 0 1px 2px rgba(0, 0, 0, 0.8)"}function Yn(e){return`
2
2
  video::cue {
3
3
  font-size: ${e.fontSize}rem !important;
4
4
  color: ${e.textColor} !important;
@@ -33,7 +33,7 @@
33
33
  background-color: #0c0d12;
34
34
  }
35
35
  </style>
36
- <script type="module" crossorigin src="/assets/index-DbRDs7tF.js"></script>
36
+ <script type="module" crossorigin src="/assets/index-DYanm9eZ.js"></script>
37
37
  <link rel="modulepreload" crossorigin href="/assets/vendor-core-DfaOB3Rn.js">
38
38
  <link rel="modulepreload" crossorigin href="/assets/vendor-query-BBT5_sHx.js">
39
39
  <link rel="modulepreload" crossorigin href="/assets/vendor-icons-DrybRNxP.js">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serifpersia/dango",
3
- "version": "3.7.9",
3
+ "version": "3.8.0",
4
4
  "description": "A web application for watching anime.",
5
5
  "main": "orchestrator.js",
6
6
  "repository": {
@@ -69,5 +69,5 @@
69
69
  "allowScripts": {
70
70
  "esbuild@0.28.2": true
71
71
  },
72
- "versionDate": "2026-10-24T12:12:41.752Z"
72
+ "versionDate": "2026-10-24T13:20:45.504Z"
73
73
  }
@@ -23,7 +23,7 @@ ${I}`),g.pop(),`{${S}}`}case"number":return isFinite(f)?String(f):t?t(f):"null";
23
23
  `:`
24
24
  `),Ae=Exe.bind(null,{[nq]:"",[iq]:o,[oq]:O,[sq]:AL,[uL]:y,[aq]:x}),fe="";l!==null&&(d===void 0?fe=Ae(l):fe=Ae(Object.assign({},l,{name:d})));let Be=a instanceof Function?a:a?hq:_xe,Ne=Be().indexOf(":")+1;if(I&&!f)throw Error("customLevels is required if useOnlyCustomLevels is set true");if(p&&typeof p!="function")throw Error(`Unknown mixin type "${typeof p}" - expected "function"`);if(T&&typeof T!="string")throw Error(`Unknown msgPrefix type "${typeof T}" - expected "string"`);lxe(h,f,I);let X=lq(f,I);typeof n.emit=="function"&&n.emit("message",{code:"PINO_CONFIG",config:{levels:X,messageKey:A,errorKey:u}}),fxe(g);let j=hxe(g);return Object.assign(t,{levels:X,[vxe]:j,[kxe]:I,[bxe]:n,[yxe]:Be,[Qxe]:Ne,[sq]:AL,[uL]:y,[oq]:O,[Sxe]:ee,[Txe]:W,[Dxe]:A,[Nxe]:u,[Rxe]:c,[Mxe]:c?`,${JSON.stringify(c)}:{`:"",[iq]:o,[xxe]:p,[Fxe]:m,[nq]:fe,[aq]:x,[Lxe]:B,silent:Ixe,onChild:N,[Uxe]:T}),Object.setPrototypeOf(t,uxe()),dxe(t),t[wxe](h),t}Jo.exports=cL;Jo.exports.destination=(e=process.stdout.fd)=>typeof e=="object"?(e.dest=rq(e.dest||process.stdout.fd),tq(e)):tq({dest:rq(e),minLength:0});Jo.exports.transport=Wk();Jo.exports.multistream=eq();Jo.exports.levels=lq();Jo.exports.stdSerializers=Vxe;Jo.exports.stdTimeFunctions=Object.assign({},uq);Jo.exports.symbols=cq;Jo.exports.version=Cxe;Jo.exports.default=cL;Jo.exports.pino=cL});var kb=D((SIt,Xu)=>{var hL=v("fs"),vb=v("path"),Jxe=v("os"),jxe=v("crypto"),pq=["\u25C8 encrypted .env [www.dotenvx.com]","\u25C8 secrets for agents [www.dotenvx.com]","\u2301 auth for agents [www.vestauth.com]","\u2318 custom filepath { path: '/custom/path/.env' }","\u2318 enable debugging { debug: true }","\u2318 override existing { override: true }","\u2318 suppress logs { quiet: true }","\u2318 multiple files { path: ['.env.local', '.env'] }"];function $xe(){return pq[Math.floor(Math.random()*pq.length)]}function r0(e){return typeof e=="string"?!["false","0","no","off",""].includes(e.toLowerCase()):!!e}function Kxe(){return process.stdout.isTTY}function Xxe(e){return Kxe()?`\x1B[2m${e}\x1B[0m`:e}var zxe=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function Zxe(e){let t={},r=e.toString();r=r.replace(/\r\n?/mg,`
25
25
  `);let n;for(;(n=zxe.exec(r))!=null;){let i=n[1],s=n[2]||"";s=s.trim();let o=s[0];s=s.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),o==='"'&&(s=s.replace(/\\n/g,`
26
- `),s=s.replace(/\\r/g,"\r")),t[i]=s}return t}function eve(e){e=e||{};let t=Cq(e);e.path=t;let r=Nn.configDotenv(e);if(!r.parsed){let o=new Error(`MISSING_DATA: Cannot parse ${t} for an unknown reason`);throw o.code="MISSING_DATA",o}let n=Iq(e).split(","),i=n.length,s;for(let o=0;o<i;o++)try{let a=n[o].trim(),A=rve(r,a);s=Nn.decrypt(A.ciphertext,A.key);break}catch(a){if(o+1>=i)throw a}return Nn.parse(s)}function tve(e){console.error(`\u26A0 ${e}`)}function AI(e){console.log(`\u2506 ${e}`)}function mq(e){console.log(`\u25C7 ${e}`)}function Iq(e){return e&&e.DOTENV_KEY&&e.DOTENV_KEY.length>0?e.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function rve(e,t){let r;try{r=new URL(t)}catch(a){if(a.code==="ERR_INVALID_URL"){let A=new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development");throw A.code="INVALID_DOTENV_KEY",A}throw a}let n=r.password;if(!n){let a=new Error("INVALID_DOTENV_KEY: Missing key part");throw a.code="INVALID_DOTENV_KEY",a}let i=r.searchParams.get("environment");if(!i){let a=new Error("INVALID_DOTENV_KEY: Missing environment part");throw a.code="INVALID_DOTENV_KEY",a}let s=`DOTENV_VAULT_${i.toUpperCase()}`,o=e.parsed[s];if(!o){let a=new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${s} in your .env.vault file.`);throw a.code="NOT_FOUND_DOTENV_ENVIRONMENT",a}return{ciphertext:o,key:n}}function Cq(e){let t=null;if(e&&e.path&&e.path.length>0)if(Array.isArray(e.path))for(let r of e.path)hL.existsSync(r)&&(t=r.endsWith(".vault")?r:`${r}.vault`);else t=e.path.endsWith(".vault")?e.path:`${e.path}.vault`;else t=vb.resolve(process.cwd(),".env.vault");return hL.existsSync(t)?t:null}function Eq(e){return e[0]==="~"?vb.join(Jxe.homedir(),e.slice(1)):e}function nve(e){let t=r0(process.env.DOTENV_CONFIG_DEBUG||e&&e.debug),r=r0(process.env.DOTENV_CONFIG_QUIET||e&&e.quiet);(t||!r)&&mq("loading env from encrypted .env.vault");let n=Nn._parseVault(e),i=process.env;return e&&e.processEnv!=null&&(i=e.processEnv),Nn.populate(i,n,e),{parsed:n}}function ive(e){let t=vb.resolve(process.cwd(),".env"),r="utf8",n=process.env;e&&e.processEnv!=null&&(n=e.processEnv);let i=r0(n.DOTENV_CONFIG_DEBUG||e&&e.debug),s=r0(n.DOTENV_CONFIG_QUIET||e&&e.quiet);e&&e.encoding?r=e.encoding:i&&AI("no encoding is specified (UTF-8 is used by default)");let o=[t];if(e&&e.path)if(!Array.isArray(e.path))o=[Eq(e.path)];else{o=[];for(let c of e.path)o.push(Eq(c))}let a,A={};for(let c of o)try{let l=Nn.parse(hL.readFileSync(c,{encoding:r}));Nn.populate(A,l,e)}catch(l){i&&AI(`failed to load ${c} ${l.message}`),a=l}let u=Nn.populate(n,A,e);if(i=r0(n.DOTENV_CONFIG_DEBUG||i),s=r0(n.DOTENV_CONFIG_QUIET||s),i||!s){let c=Object.keys(u).length,l=[];for(let d of o)try{let h=vb.relative(process.cwd(),d);l.push(h)}catch(h){i&&AI(`failed to load ${d} ${h.message}`),a=h}mq(`injected env (${c}) from ${l.join(",")} ${Xxe(`// tip: ${$xe()}`)}`)}return a?{parsed:A,error:a}:{parsed:A}}function sve(e){if(Iq(e).length===0)return Nn.configDotenv(e);let t=Cq(e);return t?Nn._configVault(e):(tve(`you set DOTENV_KEY but you are missing a .env.vault file at ${t}`),Nn.configDotenv(e))}function ove(e,t){let r=Buffer.from(t.slice(-64),"hex"),n=Buffer.from(e,"base64"),i=n.subarray(0,12),s=n.subarray(-16);n=n.subarray(12,-16);try{let o=jxe.createDecipheriv("aes-256-gcm",r,i);return o.setAuthTag(s),`${o.update(n)}${o.final()}`}catch(o){let a=o instanceof RangeError,A=o.message==="Invalid key length",u=o.message==="Unsupported state or unable to authenticate data";if(a||A){let c=new Error("INVALID_DOTENV_KEY: It must be 64 characters long (or more)");throw c.code="INVALID_DOTENV_KEY",c}else if(u){let c=new Error("DECRYPTION_FAILED: Please check your DOTENV_KEY");throw c.code="DECRYPTION_FAILED",c}else throw o}}function ave(e,t,r={}){let n=!!(r&&r.debug),i=!!(r&&r.override),s={};if(typeof t!="object"){let o=new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");throw o.code="OBJECT_REQUIRED",o}for(let o of Object.keys(t))Object.prototype.hasOwnProperty.call(e,o)?(i===!0&&(e[o]=t[o],s[o]=t[o]),n&&AI(i===!0?`"${o}" is already defined and WAS overwritten`:`"${o}" is already defined and was NOT overwritten`)):(e[o]=t[o],s[o]=t[o]);return s}var Nn={configDotenv:ive,_configVault:nve,_parseVault:eve,config:sve,decrypt:ove,parse:Zxe,populate:ave};Xu.exports.configDotenv=Nn.configDotenv;Xu.exports._configVault=Nn._configVault;Xu.exports._parseVault=Nn._parseVault;Xu.exports.config=Nn.config;Xu.exports.decrypt=Nn.decrypt;Xu.exports.parse=Nn.parse;Xu.exports.populate=Nn.populate;Xu.exports=Nn});var zu,Lb=zQ(()=>{"use strict";zu={GITHUB_CLIENT_ID:"Ov23liT1ZtPk7XtN9PZk",GOOGLE_AUTH_WORKER_URL:"https://google-auth-client.ramiserifpersia.workers.dev",DISCORD_CLIENT_ID:"1512253778022367426",MAL_AUTH_WORKER_URL:"https://dango-mal-auth.ramiserifpersia.workers.dev/",WATCH_ALONG_WORKER_URL:"",PROVIDER_REPO_URL:"https://raw.githubusercontent.com/serifpersia/dango-providers/main/registry.json"}});import{AsyncLocalStorage as Ave}from"node:async_hooks";function Cs(e){let t=new Map;return()=>{let r=Pe.getStore()?.id??"default";return t.has(r)||t.set(r,e()),t.get(r)}}function Rn(e){let t=Pe.getStore();if(!t?.deleted)return t?t.env[e]??(e==="GITHUB_CLIENT_ID"?process.env[e]:void 0):process.env[e]}var Pe,bi=zQ(()=>{"use strict";Pe=new Ave});import wl from"fs";import Mb from"os";import Sr from"path";function cve(){return process.platform==="win32"&&process.env.APPDATA?Sr.join(process.env.APPDATA,"dango"):process.platform==="darwin"?Sr.join(Mb.homedir(),"Library","Application Support","dango"):process.env.XDG_DATA_HOME?Sr.join(process.env.XDG_DATA_HOME,"dango"):Sr.join(Mb.homedir(),".local","share","dango")}function fL(e,t){if(!(!wl.existsSync(e)||wl.existsSync(t)))try{wl.renameSync(e,t)}catch{wl.copyFileSync(e,t),wl.unlinkSync(e)}}function lve(e,t){let r=[".env","google_tokens.json","sync_manifest.json","sync_manifest.dev.json","anime.db","anime.db-shm","anime.db-wal","anime.dev.db","anime.dev.db-shm","anime.dev.db-wal"];wl.mkdirSync(t,{recursive:!0});for(let n of r)fL(Sr.join(e,n),Sr.join(t,n));for(let n of["manga.db","manga.db-shm","manga.db-wal","manga.dev.db","manga.dev.db-shm","manga.dev.db-wal","manga.sync_manifest.json","manga.sync_manifest.dev.json","tv.db","tv.db-shm","tv.db-wal","tv.dev.db","tv.dev.db-shm","tv.dev.db-wal","tv.sync_manifest.json","tv.sync_manifest.dev.json","asmr.db","asmr.db-shm","asmr.db-wal","asmr.dev.db","asmr.dev.db-shm","asmr.dev.db-wal","asmr.sync_manifest.json","asmr.sync_manifest.dev.json"])fL(Sr.join(e,n),Sr.join(t,n))}function dve(){return process.platform==="win32"&&process.env.APPDATA?Sr.join(process.env.APPDATA,"ani-web"):process.platform==="darwin"?Sr.join(Mb.homedir(),"Library","Application Support","ani-web"):process.env.XDG_DATA_HOME?Sr.join(process.env.XDG_DATA_HOME,"ani-web"):Sr.join(Mb.homedir(),".local","share","ani-web")}function hve(e){let t=dve();if(t===e||!wl.existsSync(t))return;let r=[".env","google_tokens.json","sync_manifest.json","sync_manifest.dev.json","anime.db","anime.db-shm","anime.db-wal","anime.dev.db","anime.dev.db-shm","anime.dev.db-wal"];wl.mkdirSync(e,{recursive:!0});for(let n of r)fL(Sr.join(t,n),Sr.join(e,n))}var gL,Fb,uve,Zu,yq,ji,Qq,bq,fve,gve,io,pve,Bq,ae,mn=zQ(()=>{"use strict";gL=rr(kb(),1);Lb();bi();Fb=Sr.resolve(import.meta.dirname,".."),uve=Sr.resolve(Fb,"..");Zu=cve(),yq=Sr.join(Zu,".env");lve(Fb,Zu);hve(Zu);gL.default.config({path:Sr.join(Fb,".env")});gL.default.config({path:yq,override:!0});ji=process.argv.includes("--dev"),Qq=Number(process.env.PORT)||3e3,bq=Number(process.env.DEV_PORT)||5173,fve=process.env.HOST||"0.0.0.0",gve=ji?`http://localhost:${bq}/api/auth/google/callback`:`http://localhost:${Qq}/api/auth/google/callback`,io={ROOT:Zu,SERVER_ROOT:Fb,PACKAGE_ROOT:uve,ENV_PATH:yq,TOKEN_PATH:Sr.join(Zu,"google_tokens.json"),LOCAL_MANIFEST_PATH:Sr.join(Zu,ji?"sync_manifest.dev.json":"sync_manifest.json"),MANGA_LOCAL_MANIFEST_PATH:Sr.join(Zu,ji?"manga.sync_manifest.dev.json":"manga.sync_manifest.json"),TV_LOCAL_MANIFEST_PATH:Sr.join(Zu,ji?"tv.sync_manifest.dev.json":"tv.sync_manifest.json"),ASMR_LOCAL_MANIFEST_PATH:Sr.join(Zu,ji?"asmr.sync_manifest.dev.json":"asmr.sync_manifest.json"),DB_NAME_PROD:"anime.db",DB_NAME_DEV:"anime.dev.db",MANGA_DB_NAME_PROD:"manga.db",MANGA_DB_NAME_DEV:"manga.dev.db",TV_DB_NAME_PROD:"tv.db",TV_DB_NAME_DEV:"tv.dev.db",ASMR_DB_NAME_PROD:"asmr.db",ASMR_DB_NAME_DEV:"asmr.dev.db",REMOTE_FOLDER_PROD:"dango_db",REMOTE_FOLDER_DEV:"dango_dev_db",MANIFEST_FILENAME:ji?"sync_manifest.dev.json":"sync_manifest.json",GOOGLE_SCOPES:["https://www.googleapis.com/auth/drive.appdata","https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/userinfo.email"],GOOGLE_SYNC_FILENAME:ji?"sync.dev.json":"sync.json",MANGA_GOOGLE_SYNC_FILENAME:ji?"manga.sync.dev.json":"manga.sync.json",TV_GOOGLE_SYNC_FILENAME:ji?"tv.sync.dev.json":"tv.sync.json",ASMR_GOOGLE_SYNC_FILENAME:ji?"asmr.sync.dev.json":"asmr.sync.json",RCLONE_SYNC_FILENAME:ji?"sync.dev.json":"sync.json",MANGA_RCLONE_SYNC_FILENAME:ji?"manga.sync.dev.json":"manga.sync.json",TV_RCLONE_SYNC_FILENAME:ji?"tv.sync.dev.json":"tv.sync.json",ASMR_RCLONE_SYNC_FILENAME:ji?"asmr.sync.dev.json":"asmr.sync.json",IS_DEV:ji,PORT:Qq,DEV_PORT:bq,HOST:fve,GOOGLE_CLIENT_ID:process.env.GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET:process.env.GOOGLE_CLIENT_SECRET,GOOGLE_REDIRECT_URI:gve,GOOGLE_AUTH_WORKER_URL:process.env.GOOGLE_AUTH_WORKER_URL||zu.GOOGLE_AUTH_WORKER_URL||"",RCLONE_REMOTE:process.env.RCLONE_REMOTE,SYNC_PROVIDER:process.env.SYNC_PROVIDER,DISCORD_CLIENT_ID:process.env.DISCORD_CLIENT_ID||zu.DISCORD_CLIENT_ID||void 0,APP_PASSWORD_HASH:process.env.APP_PASSWORD_HASH||"",WATCH_ALONG_WORKER_URL:process.env.WATCH_ALONG_WORKER_URL||zu.WATCH_ALONG_WORKER_URL||"",PROVIDER_REPO_URL:process.env.PROVIDER_REPO_URL||zu.PROVIDER_REPO_URL||"",PROVIDER_ENABLED:process.env.PROVIDER_ENABLED||"",PROVIDER_REPO_REFRESH_MS:parseInt(process.env.PROVIDER_REPO_REFRESH_MS||"",10)||216e5},pve=new Set(["ENV_PATH","TOKEN_PATH","LOCAL_MANIFEST_PATH","MANGA_LOCAL_MANIFEST_PATH","TV_LOCAL_MANIFEST_PATH","ASMR_LOCAL_MANIFEST_PATH"]),Bq=new Set(["GOOGLE_CLIENT_ID","GOOGLE_CLIENT_SECRET","GOOGLE_AUTH_WORKER_URL","RCLONE_REMOTE","SYNC_PROVIDER"]),ae=new Proxy(io,{get(e,t){let r=Pe.getStore();return r?t==="ROOT"?r.root:pve.has(t)?Sr.join(r.root,Sr.basename(String(e[t]))):Bq.has(t)?r.env[t]||(t==="GOOGLE_AUTH_WORKER_URL"?e.GOOGLE_AUTH_WORKER_URL:t.startsWith("GOOGLE_")?e[t]:void 0):e[t]:e[t]},set(e,t,r){let n=Pe.getStore();return n&&Bq.has(t)?n.env[t]=r:Reflect.set(e,t,r),!0}})});var BL={};Va(BL,{updateEnvFile:()=>_n});import s0 from"fs";async function Tve(e){let t,r=0;for(;!t;)try{t=await s0.promises.open(e,"wx")}catch{if(++r>=100)throw s0.promises.unlink(e).catch(()=>{}),new Error("Failed to acquire lock on .env file - another process may be holding it");await new Promise(n=>setTimeout(n,100))}return t}function Dve(e,t){e.close().catch(()=>{}),s0.promises.unlink(t).catch(()=>{})}async function _n(e){if(Pe.getStore()?.deleted)throw new Error("Profile has been deleted");let t=Object.keys(e).some(s=>["PORT","APP_PASSWORD_HASH","DISCORD_GATEWAY_TOKEN"].includes(s)),r=t?io.ENV_PATH:ae.ENV_PATH,n=`${r}.lock`,i=await Tve(n);try{if(Pe.getStore()?.deleted)throw new Error("Profile has been deleted");let s="";s0.existsSync(r)&&(s=s0.readFileSync(r,"utf8"));let a=[...s.split(`
26
+ `),s=s.replace(/\\r/g,"\r")),t[i]=s}return t}function eve(e){e=e||{};let t=Cq(e);e.path=t;let r=Nn.configDotenv(e);if(!r.parsed){let o=new Error(`MISSING_DATA: Cannot parse ${t} for an unknown reason`);throw o.code="MISSING_DATA",o}let n=Iq(e).split(","),i=n.length,s;for(let o=0;o<i;o++)try{let a=n[o].trim(),A=rve(r,a);s=Nn.decrypt(A.ciphertext,A.key);break}catch(a){if(o+1>=i)throw a}return Nn.parse(s)}function tve(e){console.error(`\u26A0 ${e}`)}function AI(e){console.log(`\u2506 ${e}`)}function mq(e){console.log(`\u25C7 ${e}`)}function Iq(e){return e&&e.DOTENV_KEY&&e.DOTENV_KEY.length>0?e.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function rve(e,t){let r;try{r=new URL(t)}catch(a){if(a.code==="ERR_INVALID_URL"){let A=new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development");throw A.code="INVALID_DOTENV_KEY",A}throw a}let n=r.password;if(!n){let a=new Error("INVALID_DOTENV_KEY: Missing key part");throw a.code="INVALID_DOTENV_KEY",a}let i=r.searchParams.get("environment");if(!i){let a=new Error("INVALID_DOTENV_KEY: Missing environment part");throw a.code="INVALID_DOTENV_KEY",a}let s=`DOTENV_VAULT_${i.toUpperCase()}`,o=e.parsed[s];if(!o){let a=new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${s} in your .env.vault file.`);throw a.code="NOT_FOUND_DOTENV_ENVIRONMENT",a}return{ciphertext:o,key:n}}function Cq(e){let t=null;if(e&&e.path&&e.path.length>0)if(Array.isArray(e.path))for(let r of e.path)hL.existsSync(r)&&(t=r.endsWith(".vault")?r:`${r}.vault`);else t=e.path.endsWith(".vault")?e.path:`${e.path}.vault`;else t=vb.resolve(process.cwd(),".env.vault");return hL.existsSync(t)?t:null}function Eq(e){return e[0]==="~"?vb.join(Jxe.homedir(),e.slice(1)):e}function nve(e){let t=r0(process.env.DOTENV_CONFIG_DEBUG||e&&e.debug),r=r0(process.env.DOTENV_CONFIG_QUIET||e&&e.quiet);(t||!r)&&mq("loading env from encrypted .env.vault");let n=Nn._parseVault(e),i=process.env;return e&&e.processEnv!=null&&(i=e.processEnv),Nn.populate(i,n,e),{parsed:n}}function ive(e){let t=vb.resolve(process.cwd(),".env"),r="utf8",n=process.env;e&&e.processEnv!=null&&(n=e.processEnv);let i=r0(n.DOTENV_CONFIG_DEBUG||e&&e.debug),s=r0(n.DOTENV_CONFIG_QUIET||e&&e.quiet);e&&e.encoding?r=e.encoding:i&&AI("no encoding is specified (UTF-8 is used by default)");let o=[t];if(e&&e.path)if(!Array.isArray(e.path))o=[Eq(e.path)];else{o=[];for(let c of e.path)o.push(Eq(c))}let a,A={};for(let c of o)try{let l=Nn.parse(hL.readFileSync(c,{encoding:r}));Nn.populate(A,l,e)}catch(l){i&&AI(`failed to load ${c} ${l.message}`),a=l}let u=Nn.populate(n,A,e);if(i=r0(n.DOTENV_CONFIG_DEBUG||i),s=r0(n.DOTENV_CONFIG_QUIET||s),i||!s){let c=Object.keys(u).length,l=[];for(let d of o)try{let h=vb.relative(process.cwd(),d);l.push(h)}catch(h){i&&AI(`failed to load ${d} ${h.message}`),a=h}mq(`injected env (${c}) from ${l.join(",")} ${Xxe(`// tip: ${$xe()}`)}`)}return a?{parsed:A,error:a}:{parsed:A}}function sve(e){if(Iq(e).length===0)return Nn.configDotenv(e);let t=Cq(e);return t?Nn._configVault(e):(tve(`you set DOTENV_KEY but you are missing a .env.vault file at ${t}`),Nn.configDotenv(e))}function ove(e,t){let r=Buffer.from(t.slice(-64),"hex"),n=Buffer.from(e,"base64"),i=n.subarray(0,12),s=n.subarray(-16);n=n.subarray(12,-16);try{let o=jxe.createDecipheriv("aes-256-gcm",r,i);return o.setAuthTag(s),`${o.update(n)}${o.final()}`}catch(o){let a=o instanceof RangeError,A=o.message==="Invalid key length",u=o.message==="Unsupported state or unable to authenticate data";if(a||A){let c=new Error("INVALID_DOTENV_KEY: It must be 64 characters long (or more)");throw c.code="INVALID_DOTENV_KEY",c}else if(u){let c=new Error("DECRYPTION_FAILED: Please check your DOTENV_KEY");throw c.code="DECRYPTION_FAILED",c}else throw o}}function ave(e,t,r={}){let n=!!(r&&r.debug),i=!!(r&&r.override),s={};if(typeof t!="object"){let o=new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");throw o.code="OBJECT_REQUIRED",o}for(let o of Object.keys(t))Object.prototype.hasOwnProperty.call(e,o)?(i===!0&&(e[o]=t[o],s[o]=t[o]),n&&AI(i===!0?`"${o}" is already defined and WAS overwritten`:`"${o}" is already defined and was NOT overwritten`)):(e[o]=t[o],s[o]=t[o]);return s}var Nn={configDotenv:ive,_configVault:nve,_parseVault:eve,config:sve,decrypt:ove,parse:Zxe,populate:ave};Xu.exports.configDotenv=Nn.configDotenv;Xu.exports._configVault=Nn._configVault;Xu.exports._parseVault=Nn._parseVault;Xu.exports.config=Nn.config;Xu.exports.decrypt=Nn.decrypt;Xu.exports.parse=Nn.parse;Xu.exports.populate=Nn.populate;Xu.exports=Nn});var zu,Lb=zQ(()=>{"use strict";zu={GITHUB_CLIENT_ID:"Ov23liT1ZtPk7XtN9PZk",GOOGLE_AUTH_WORKER_URL:"https://google-auth-client.ramiserifpersia.workers.dev",DISCORD_CLIENT_ID:"1512253778022367426",MAL_AUTH_WORKER_URL:"https://dango-mal-auth.ramiserifpersia.workers.dev/",WATCH_ALONG_WORKER_URL:"https://dango-watch-along.ramiserifpersia.workers.dev",PROVIDER_REPO_URL:"https://raw.githubusercontent.com/serifpersia/dango-providers/main/registry.json"}});import{AsyncLocalStorage as Ave}from"node:async_hooks";function Cs(e){let t=new Map;return()=>{let r=Pe.getStore()?.id??"default";return t.has(r)||t.set(r,e()),t.get(r)}}function Rn(e){let t=Pe.getStore();if(!t?.deleted)return t?t.env[e]??(e==="GITHUB_CLIENT_ID"?process.env[e]:void 0):process.env[e]}var Pe,bi=zQ(()=>{"use strict";Pe=new Ave});import wl from"fs";import Mb from"os";import Sr from"path";function cve(){return process.platform==="win32"&&process.env.APPDATA?Sr.join(process.env.APPDATA,"dango"):process.platform==="darwin"?Sr.join(Mb.homedir(),"Library","Application Support","dango"):process.env.XDG_DATA_HOME?Sr.join(process.env.XDG_DATA_HOME,"dango"):Sr.join(Mb.homedir(),".local","share","dango")}function fL(e,t){if(!(!wl.existsSync(e)||wl.existsSync(t)))try{wl.renameSync(e,t)}catch{wl.copyFileSync(e,t),wl.unlinkSync(e)}}function lve(e,t){let r=[".env","google_tokens.json","sync_manifest.json","sync_manifest.dev.json","anime.db","anime.db-shm","anime.db-wal","anime.dev.db","anime.dev.db-shm","anime.dev.db-wal"];wl.mkdirSync(t,{recursive:!0});for(let n of r)fL(Sr.join(e,n),Sr.join(t,n));for(let n of["manga.db","manga.db-shm","manga.db-wal","manga.dev.db","manga.dev.db-shm","manga.dev.db-wal","manga.sync_manifest.json","manga.sync_manifest.dev.json","tv.db","tv.db-shm","tv.db-wal","tv.dev.db","tv.dev.db-shm","tv.dev.db-wal","tv.sync_manifest.json","tv.sync_manifest.dev.json","asmr.db","asmr.db-shm","asmr.db-wal","asmr.dev.db","asmr.dev.db-shm","asmr.dev.db-wal","asmr.sync_manifest.json","asmr.sync_manifest.dev.json"])fL(Sr.join(e,n),Sr.join(t,n))}function dve(){return process.platform==="win32"&&process.env.APPDATA?Sr.join(process.env.APPDATA,"ani-web"):process.platform==="darwin"?Sr.join(Mb.homedir(),"Library","Application Support","ani-web"):process.env.XDG_DATA_HOME?Sr.join(process.env.XDG_DATA_HOME,"ani-web"):Sr.join(Mb.homedir(),".local","share","ani-web")}function hve(e){let t=dve();if(t===e||!wl.existsSync(t))return;let r=[".env","google_tokens.json","sync_manifest.json","sync_manifest.dev.json","anime.db","anime.db-shm","anime.db-wal","anime.dev.db","anime.dev.db-shm","anime.dev.db-wal"];wl.mkdirSync(e,{recursive:!0});for(let n of r)fL(Sr.join(t,n),Sr.join(e,n))}var gL,Fb,uve,Zu,yq,ji,Qq,bq,fve,gve,io,pve,Bq,ae,mn=zQ(()=>{"use strict";gL=rr(kb(),1);Lb();bi();Fb=Sr.resolve(import.meta.dirname,".."),uve=Sr.resolve(Fb,"..");Zu=cve(),yq=Sr.join(Zu,".env");lve(Fb,Zu);hve(Zu);gL.default.config({path:Sr.join(Fb,".env")});gL.default.config({path:yq,override:!0});ji=process.argv.includes("--dev"),Qq=Number(process.env.PORT)||3e3,bq=Number(process.env.DEV_PORT)||5173,fve=process.env.HOST||"0.0.0.0",gve=ji?`http://localhost:${bq}/api/auth/google/callback`:`http://localhost:${Qq}/api/auth/google/callback`,io={ROOT:Zu,SERVER_ROOT:Fb,PACKAGE_ROOT:uve,ENV_PATH:yq,TOKEN_PATH:Sr.join(Zu,"google_tokens.json"),LOCAL_MANIFEST_PATH:Sr.join(Zu,ji?"sync_manifest.dev.json":"sync_manifest.json"),MANGA_LOCAL_MANIFEST_PATH:Sr.join(Zu,ji?"manga.sync_manifest.dev.json":"manga.sync_manifest.json"),TV_LOCAL_MANIFEST_PATH:Sr.join(Zu,ji?"tv.sync_manifest.dev.json":"tv.sync_manifest.json"),ASMR_LOCAL_MANIFEST_PATH:Sr.join(Zu,ji?"asmr.sync_manifest.dev.json":"asmr.sync_manifest.json"),DB_NAME_PROD:"anime.db",DB_NAME_DEV:"anime.dev.db",MANGA_DB_NAME_PROD:"manga.db",MANGA_DB_NAME_DEV:"manga.dev.db",TV_DB_NAME_PROD:"tv.db",TV_DB_NAME_DEV:"tv.dev.db",ASMR_DB_NAME_PROD:"asmr.db",ASMR_DB_NAME_DEV:"asmr.dev.db",REMOTE_FOLDER_PROD:"dango_db",REMOTE_FOLDER_DEV:"dango_dev_db",MANIFEST_FILENAME:ji?"sync_manifest.dev.json":"sync_manifest.json",GOOGLE_SCOPES:["https://www.googleapis.com/auth/drive.appdata","https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/userinfo.email"],GOOGLE_SYNC_FILENAME:ji?"sync.dev.json":"sync.json",MANGA_GOOGLE_SYNC_FILENAME:ji?"manga.sync.dev.json":"manga.sync.json",TV_GOOGLE_SYNC_FILENAME:ji?"tv.sync.dev.json":"tv.sync.json",ASMR_GOOGLE_SYNC_FILENAME:ji?"asmr.sync.dev.json":"asmr.sync.json",RCLONE_SYNC_FILENAME:ji?"sync.dev.json":"sync.json",MANGA_RCLONE_SYNC_FILENAME:ji?"manga.sync.dev.json":"manga.sync.json",TV_RCLONE_SYNC_FILENAME:ji?"tv.sync.dev.json":"tv.sync.json",ASMR_RCLONE_SYNC_FILENAME:ji?"asmr.sync.dev.json":"asmr.sync.json",IS_DEV:ji,PORT:Qq,DEV_PORT:bq,HOST:fve,GOOGLE_CLIENT_ID:process.env.GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET:process.env.GOOGLE_CLIENT_SECRET,GOOGLE_REDIRECT_URI:gve,GOOGLE_AUTH_WORKER_URL:process.env.GOOGLE_AUTH_WORKER_URL||zu.GOOGLE_AUTH_WORKER_URL||"",RCLONE_REMOTE:process.env.RCLONE_REMOTE,SYNC_PROVIDER:process.env.SYNC_PROVIDER,DISCORD_CLIENT_ID:process.env.DISCORD_CLIENT_ID||zu.DISCORD_CLIENT_ID||void 0,APP_PASSWORD_HASH:process.env.APP_PASSWORD_HASH||"",WATCH_ALONG_WORKER_URL:process.env.WATCH_ALONG_WORKER_URL||zu.WATCH_ALONG_WORKER_URL||"",PROVIDER_REPO_URL:process.env.PROVIDER_REPO_URL||zu.PROVIDER_REPO_URL||"",PROVIDER_ENABLED:process.env.PROVIDER_ENABLED||"",PROVIDER_REPO_REFRESH_MS:parseInt(process.env.PROVIDER_REPO_REFRESH_MS||"",10)||216e5},pve=new Set(["ENV_PATH","TOKEN_PATH","LOCAL_MANIFEST_PATH","MANGA_LOCAL_MANIFEST_PATH","TV_LOCAL_MANIFEST_PATH","ASMR_LOCAL_MANIFEST_PATH"]),Bq=new Set(["GOOGLE_CLIENT_ID","GOOGLE_CLIENT_SECRET","GOOGLE_AUTH_WORKER_URL","RCLONE_REMOTE","SYNC_PROVIDER"]),ae=new Proxy(io,{get(e,t){let r=Pe.getStore();return r?t==="ROOT"?r.root:pve.has(t)?Sr.join(r.root,Sr.basename(String(e[t]))):Bq.has(t)?r.env[t]||(t==="GOOGLE_AUTH_WORKER_URL"?e.GOOGLE_AUTH_WORKER_URL:t.startsWith("GOOGLE_")?e[t]:void 0):e[t]:e[t]},set(e,t,r){let n=Pe.getStore();return n&&Bq.has(t)?n.env[t]=r:Reflect.set(e,t,r),!0}})});var BL={};Va(BL,{updateEnvFile:()=>_n});import s0 from"fs";async function Tve(e){let t,r=0;for(;!t;)try{t=await s0.promises.open(e,"wx")}catch{if(++r>=100)throw s0.promises.unlink(e).catch(()=>{}),new Error("Failed to acquire lock on .env file - another process may be holding it");await new Promise(n=>setTimeout(n,100))}return t}function Dve(e,t){e.close().catch(()=>{}),s0.promises.unlink(t).catch(()=>{})}async function _n(e){if(Pe.getStore()?.deleted)throw new Error("Profile has been deleted");let t=Object.keys(e).some(s=>["PORT","APP_PASSWORD_HASH","DISCORD_GATEWAY_TOKEN"].includes(s)),r=t?io.ENV_PATH:ae.ENV_PATH,n=`${r}.lock`,i=await Tve(n);try{if(Pe.getStore()?.deleted)throw new Error("Profile has been deleted");let s="";s0.existsSync(r)&&(s=s0.readFileSync(r,"utf8"));let a=[...s.split(`
27
27
  `)];Object.entries(e).forEach(([u,c])=>{let l=u.trim();if(!/^[A-Z0-9_]+$/i.test(l))throw new Error(`Invalid environment variable key: ${l}`);let d=String(c??"").replace(/[\r\n]/g,""),h=!1;for(let f=0;f<a.length;f++){let g=a[f];if(g&&g.startsWith(`${l}=`)){if(d===""){a.splice(f,1);continue}else a[f]=`${l}=${d}`;h=!0;break}}!h&&d!==""&&a.push(`${l}=${d}`)});let A=a.join(`
28
28
  `).replace(/\n{2,}/g,`
29
29
  `).trim()+`
@@ -1 +1 @@
1
- const r={GITHUB_CLIENT_ID:"Ov23liT1ZtPk7XtN9PZk",GOOGLE_AUTH_WORKER_URL:"https://google-auth-client.ramiserifpersia.workers.dev",DISCORD_CLIENT_ID:"1512253778022367426",MAL_AUTH_WORKER_URL:"https://dango-mal-auth.ramiserifpersia.workers.dev/",WATCH_ALONG_WORKER_URL:"",PROVIDER_REPO_URL:"https://raw.githubusercontent.com/serifpersia/dango-providers/main/registry.json"};export{r as SHIPPED_DEFAULTS};
1
+ const r={GITHUB_CLIENT_ID:"Ov23liT1ZtPk7XtN9PZk",GOOGLE_AUTH_WORKER_URL:"https://google-auth-client.ramiserifpersia.workers.dev",DISCORD_CLIENT_ID:"1512253778022367426",MAL_AUTH_WORKER_URL:"https://dango-mal-auth.ramiserifpersia.workers.dev/",WATCH_ALONG_WORKER_URL:"https://dango-watch-along.ramiserifpersia.workers.dev",PROVIDER_REPO_URL:"https://raw.githubusercontent.com/serifpersia/dango-providers/main/registry.json"};export{r as SHIPPED_DEFAULTS};
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dango-server",
3
3
  "private": true,
4
- "version": "3.7.9",
4
+ "version": "3.8.0",
5
5
  "type": "module",
6
6
  "engines": {
7
7
  "node": ">=22.12.0"