@serifpersia/dango 3.7.7 → 3.7.9

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 (86) hide show
  1. package/README.md +3 -1
  2. package/client/dist/assets/{AnimeCard-aZA4-g8o.js → AnimeCard-DWnU-rCc.js} +1 -1
  3. package/client/dist/assets/{AnimeInfo-CFGRb1OW.js → AnimeInfo-Ck-fMvdY.js} +1 -1
  4. package/client/dist/assets/{AnimeInfoPage-CozJH4AM.js → AnimeInfoPage-_iM5y3E4.js} +2 -2
  5. package/client/dist/assets/Asmr-CzqLNY2c.js +2 -0
  6. package/client/dist/assets/{AsmrResetProgressModal-NKywttOY.js → AsmrResetProgressModal-73jUOcAL.js} +1 -1
  7. package/client/dist/assets/Home--RCZI3_q.js +1 -0
  8. package/client/dist/assets/Insights-B5oANHfN.js +1 -0
  9. package/client/dist/assets/{LibraryListPage-CJxNJYC3.js → LibraryListPage-CV2FpbUe.js} +1 -1
  10. package/client/dist/assets/{ListeningList-VZTVSt_i.js → ListeningList-Bb7qLeQy.js} +1 -1
  11. package/client/dist/assets/Manga-RzxC02lH.js +1 -0
  12. package/client/dist/assets/{MangaInfoPage-DzaSKarW.js → MangaInfoPage-DLANpxOs.js} +1 -1
  13. package/client/dist/assets/MangaReadPage-DuMOiKID.js +1 -0
  14. package/client/dist/assets/{MangaResetProgressModal-DrqN7OF0.js → MangaResetProgressModal-Y2PuLQHz.js} +1 -1
  15. package/client/dist/assets/Mature-DfO3sop8.js +1 -0
  16. package/client/dist/assets/{MatureConsentModal-DLVOORqW.js → MatureConsentModal-DiWSp3Of.js} +1 -1
  17. package/client/dist/assets/{MediaCard-DJNRuWDJ.js → MediaCard-ChUKs5Sb.js} +1 -1
  18. package/client/dist/assets/OptionListMenu-Cwb6MHoZ.js +1 -0
  19. package/client/dist/assets/Player-JA7rXoBD.js +56 -0
  20. package/client/dist/assets/PlayerProvider--aaVRFly.js +1 -0
  21. package/client/dist/assets/PlayerSettings-CxlbcdU4.js +1 -0
  22. package/client/dist/assets/{QueueOptionsButton-ByAwxtJ-.js → QueueOptionsButton-C6ArqpM5.js} +1 -1
  23. package/client/dist/assets/{QueueRail-BLf4fWOA.js → QueueRail-Derl5yzz.js} +1 -1
  24. package/client/dist/assets/{ReadingList-Cm5omw5j.js → ReadingList-BYbV0CvS.js} +1 -1
  25. package/client/dist/assets/{ResetProgressModal-Dq-B23o_.js → ResetProgressModal-DtUE-wCy.js} +1 -1
  26. package/client/dist/assets/Search-CzTO0VVY.js +1 -0
  27. package/client/dist/assets/Settings-D37LNfis.css +1 -0
  28. package/client/dist/assets/Settings-DKGEpLWL.js +21 -0
  29. package/client/dist/assets/{SkeletonGrid-sA6_IQY1.js → SkeletonGrid-BO0am1za.js} +1 -1
  30. package/client/dist/assets/Trackers-uUzceJl6.js +2 -0
  31. package/client/dist/assets/Tv-CuM6Jhjn.js +4 -0
  32. package/client/dist/assets/TvInfo-4DOit0hL.js +1 -0
  33. package/client/dist/assets/TvPopup-DYYtMp7D.js +1 -0
  34. package/client/dist/assets/TvSearch-C-IYU0V4.js +1 -0
  35. package/client/dist/assets/{TvWatchlist-SjHmyo2P.js → TvWatchlist--kFfdVIF.js} +1 -1
  36. package/client/dist/assets/VirtualKeyboard-BYc_6hb4.js +1 -0
  37. package/client/dist/assets/WatchAlong-zZPGaH2D.js +1 -0
  38. package/client/dist/assets/WatchAlongPanel-DbJuLqxU.css +1 -0
  39. package/client/dist/assets/WatchAlongPanel-DxC7pX1I.js +1 -0
  40. package/client/dist/assets/{Watchlist-BnmsAcx0.js → Watchlist-CX9qGh-b.js} +1 -1
  41. package/client/dist/assets/index-DP9TtvZX.css +1 -0
  42. package/client/dist/assets/index-DbRDs7tF.js +178 -0
  43. package/client/dist/assets/{libraryInvalidation-2sAPXNhJ.js → libraryInvalidation-cJ1WjrJq.js} +1 -1
  44. package/client/dist/assets/playbackCompletion-CnxK6_Vz.js +1 -0
  45. package/client/dist/assets/{useAnimeInfoData-Ai39I_f0.js → useAnimeInfoData-YbePqj-M.js} +1 -1
  46. package/client/dist/assets/{useAsmr-XBCV7iDw.js → useAsmr-DO5DUI_t.js} +1 -1
  47. package/client/dist/assets/{useAsmrPopup-DViHcQnO.js → useAsmrPopup-S_XfgKDh.js} +1 -1
  48. package/client/dist/assets/{useMangaLibrary-DrPp5K_1.js → useMangaLibrary-B4ZJLZXD.js} +1 -1
  49. package/client/dist/assets/{useMangaPopup-VGTfdKEu.js → useMangaPopup-B4ntcNg0.js} +1 -1
  50. package/client/dist/assets/{useProviders-Bt-p5Jxv.js → useProviders-Bnw0sBAP.js} +1 -1
  51. package/client/dist/assets/useTv-gF7SJCl9.js +1 -0
  52. package/client/dist/assets/useTvLibrary-DTWM3iOC.js +1 -0
  53. package/client/dist/assets/useWatchAlongPlayer-Do0c9QsI.js +10 -0
  54. package/client/dist/index.html +2 -2
  55. package/package.json +2 -2
  56. package/server/dist/config.js +1 -1
  57. package/server/dist/profile-scope.js +1 -0
  58. package/server/dist/server.js +257 -249
  59. package/server/dist/shipped-defaults.js +1 -1
  60. package/server/package.json +2 -2
  61. package/client/dist/assets/Asmr-AxjnBdsh.js +0 -2
  62. package/client/dist/assets/Home-CkdWZK2L.js +0 -1
  63. package/client/dist/assets/Insights-DgnlUFjW.js +0 -1
  64. package/client/dist/assets/Manga-dDQAtejO.js +0 -1
  65. package/client/dist/assets/MangaReadPage-CT6THZho.js +0 -1
  66. package/client/dist/assets/Mature-BGitA9fy.js +0 -1
  67. package/client/dist/assets/OptionListMenu-CRaHF9k4.js +0 -1
  68. package/client/dist/assets/Player-CdSjfMoO.js +0 -56
  69. package/client/dist/assets/PlayerProvider-D02-hqdz.js +0 -1
  70. package/client/dist/assets/PlayerSettings-CXmAyRJh.js +0 -1
  71. package/client/dist/assets/Search-C8rfGyYH.js +0 -1
  72. package/client/dist/assets/Settings-DYjRBgpE.css +0 -1
  73. package/client/dist/assets/Settings-Do5F5e2c.js +0 -21
  74. package/client/dist/assets/Trackers-DeJr1sbR.js +0 -2
  75. package/client/dist/assets/Tv-BkApELpu.js +0 -4
  76. package/client/dist/assets/TvInfo-C5cVdHka.js +0 -1
  77. package/client/dist/assets/TvPopup-DyFUi32m.js +0 -1
  78. package/client/dist/assets/TvSearch-BBYYrww5.js +0 -1
  79. package/client/dist/assets/VirtualKeyboard-DeP7fb3P.js +0 -1
  80. package/client/dist/assets/index-5x1mF1nD.css +0 -1
  81. package/client/dist/assets/index-vb4WPdcb.js +0 -178
  82. package/client/dist/assets/playbackCompletion-IPHm9fp5.js +0 -1
  83. package/client/dist/assets/usePlaybackEnd-C5EyqR1L.js +0 -10
  84. package/client/dist/assets/useTv-BpVapcT5.js +0 -1
  85. package/client/dist/assets/useTvLibrary-BFRidauf.js +0 -1
  86. /package/client/dist/assets/{usePlaybackEnd-BMf_H2dw.css → useWatchAlongPlayer-BMf_H2dw.css} +0 -0
@@ -0,0 +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};
@@ -0,0 +1,10 @@
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`
2
+ video::cue {
3
+ font-size: ${e.fontSize}rem !important;
4
+ color: ${e.textColor} !important;
5
+ background-color: ${We(e.bgColor,e.bgOpacity)} !important;
6
+ font-weight: ${e.bold?"bold":"normal"} !important;
7
+ text-shadow: ${ze(e.edge,e.bgOpacity)} !important;
8
+ }
9
+ `}function Xn(e){return[`font-size: ${e.fontSize}rem`,`color: ${e.textColor}`,`background-color: ${We(e.bgColor,e.bgOpacity)}`,`font-weight: ${e.bold?"700":"400"}`,`text-shadow: ${ze(e.edge,e.bgOpacity)}`,"padding: 0.2em 0.5em","border-radius: 0.25em","text-align: center","position: absolute","left: 50%","transform: translateX(-50%)","max-width: 92%","white-space: pre-wrap","overflow-wrap: break-word","line-height: 1.4"].join(`;
10
+ `)+";"}const Nr=new Set(["b","i","u","strong","em"]);function Jn(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/&lt;(\/?)([a-zA-Z]+)&gt;/g,(s,o,r)=>Nr.has(r.toLowerCase())?`<${o}${r.toLowerCase()}>`:s)}function Zn(e){return e.replace(/<[^>]*>/g,"")}const es=["#ffffff","#ffff00","#7CFC00","#00e5ff","#ff9ff3","#ffa502"],ts=["#000000","#1e272e","#2f3542","#3d0c02","#0c3d2e","#ffffff"];function rs(e,n){const s=Number.isFinite(e)?e*16:U.fontSize*16;return!Number.isFinite(n)||n<=0?s/16:Math.min(s,Math.max(13,n*.07))/16}function ns(e){const n=Math.abs(e/1e3).toFixed(1);return e>0?`+${n}s`:e<0?`-${n}s`:"0.0s"}function ss(e,n){const s=e.clientWidth||0,o=e.clientHeight||0,r=e.videoWidth>0&&e.videoHeight>0?e.videoWidth/e.videoHeight:0;let i=o;r>0&&s>0&&o>0&&(i=s/o>r?o:s/r);const c=Math.max(0,(o-i)/2),p=Math.max(0,Math.min(100,Number(n)||0))/100*i;return c+p}const as=({isOpen:e,onClose:n,title:s,heading:o,message:r,children:i})=>t(qe,{isOpen:e,onClose:n,title:s,width:"sm",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t(Y,{name:"check-circle",size:48,style:{color:"var(--accent-lighter)",marginBottom:"0.5rem"}}),t("p",{style:{fontSize:"1.1rem",fontWeight:600},children:o}),t("p",{style:{color:"var(--text-secondary)"},children:r}),i&&t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center",flexWrap:"wrap"},children:i})]})}),os=({isOpen:e,onClose:n,title:s,message:o,resumeLabel:r="Resume",restartLabel:i="Start Over",onResume:c,onRestart:p})=>t(qe,{isOpen:e,onClose:n,title:s,width:"sm",children:t("div",{style:{padding:"1rem",textAlign:"center"},children:[t("p",{children:o}),t("div",{style:{marginTop:"1rem",display:"flex",gap:"10px",justifyContent:"center"},children:[t(G,{variant:"secondary",onClick:p,children:i}),t(G,{onClick:c,children:r})]})]})}),Pr="_centerControls_bxt8c_1",Br="_centerSkipBtn_bxt8c_15",Er="_centerPlayPause_bxt8c_37",ae={centerControls:Pr,centerSkipBtn:Br,centerPlayPause:Er},is=()=>t("div",{className:ae.centerControls,onClick:e=>e.stopPropagation(),children:[t(Fe,{seconds:-10,className:ae.centerSkipBtn}),t(ht,{className:ae.centerPlayPause,"data-speed-boost-ignore":"true"}),t(Fe,{seconds:10,className:ae.centerSkipBtn})]}),cs=({visible:e,title:n,episode:s,onBack:o,classes:r})=>t("div",{className:`${r.overlay} ${e?"":r.hidden} `,"data-speed-boost-ignore":"true",style:{pointerEvents:"none",background:"none"},children:t("div",{className:r.top,onClick:i=>i.stopPropagation(),children:[t("button",{className:r.backBtn,onClick:i=>{i.stopPropagation(),o()},title:"Back","aria-label":"Back",children:t(Y,{name:"chevron-left"})}),t("div",{className:r.titleInfo,children:[t("span",{className:r.title,children:n}),s&&t("span",{className:r.episode,children:s})]})]})});function Ar(e){return e instanceof Element&&!!e.closest('button, input, select, textarea, a, [role="button"], [role="slider"], [data-player-ui="true"]')}function ls({engine:e,topBar:n,centerControls:s,bottomBar:o,settingsPanel:r,overlays:i,isInteracting:c=!1,nativeControls:p=!1,chromeDisabled:a=!1,className:u,onStageClick:_,children:x}){const g=He(e),A=yt(),l=w(void 0),d=w(void 0),C=w(0),f=w(c);f.current=c;const h=E(()=>{clearTimeout(l.current),l.current=void 0},[]),y=E(()=>{h();const N=e.getState();!N.isPlaying||N.isScrubbing||f.current||p||(l.current=setTimeout(()=>{const b=e.getState();f.current||b.isScrubbing||!b.isPlaying||e.setShowControls(!1)},A?5e3:3e3))},[e,A,p,h]),B=E(()=>{e.setShowControls(!0),y()},[e,y]);bt(e,B,!p&&!a),j(()=>(c||g.isScrubbing||!g.isPlaying?(e.setShowControls(!0),h()):y(),h),[e,c,g.isPlaying,g.isScrubbing,g.showControls,h,y]),j(()=>()=>{clearTimeout(d.current)},[]);const m=N=>{if(Ar(N.target)||p||a)return;_?.();const b=Date.now();if(b-C.current<280){clearTimeout(d.current),d.current=void 0,C.current=0,e.toggleFullscreen();return}C.current=b,clearTimeout(d.current),d.current=setTimeout(()=>{d.current=void 0,e.setShowControls(!e.getState().showControls),y()},280)},T=g.showControls||g.isScrubbing||c||!g.isPlaying;return t(gt,{engine:e,children:t("div",{ref:e.containerRef,"data-player-root":"true",className:`${ee.shell} ${g.isFullscreen?ee.shellFullscreen:""} ${u??""}`,style:{cursor:!T&&g.isFullscreen?"none":"default"},onContextMenu:N=>N.preventDefault(),onPointerMove:N=>{N.pointerType==="mouse"&&B()},onFocusIn:B,onMouseLeave:()=>{window.matchMedia?.("(hover: hover) and (pointer: fine)").matches&&e.getState().isPlaying&&!f.current&&e.setShowControls(!1)},children:[t("div",{className:ee.stage,onClick:m,children:x}),i,(g.error||g.playBlocked)&&t("div",{className:ee.engineStatus,"data-player-ui":"true",children:t(_t,{})}),!a&&!p&&t("div",{className:ee.uiLayer,children:[t("div",{"data-player-ui":"true",children:n}),T&&s&&t("div",{"data-player-ui":"true",children:s}),t("div",{"data-player-ui":"true",children:o}),r&&t("div",{"data-player-ui":"true",children:r})]})]})})}const Ir=e=>(e.language??e.lang??"").toLowerCase(),$r=e=>(e.label??"").toLowerCase(),Mr=e=>`${e.language??e.lang??""}|||${e.label??""}`,Rr=e=>Ir(e).startsWith("en")||$r(e).includes("english");function ds(e,n){if(e.length===0||n?.enabled===!1)return-1;const s=n?.lastKey??null;if(s){const r=e.findIndex(i=>Mr(i)===s);if(r>=0)return r}const o=e.findIndex(Rr);return o>=0?o:0}const jr="_statusArea_1xccu_1",Fr="_toggleBtn_1xccu_20",Dr="_shortcuts_1xccu_46",Or="_shortcutGroup_1xccu_56",qr="_shortcut_1xccu_46",Hr="_key_1xccu_70",Wr="_label_1xccu_91",k={statusArea:jr,toggleBtn:Fr,shortcuts:Dr,shortcutGroup:Or,shortcut:qr,key:Hr,label:Wr},us=({showTheater:e=!0})=>{const[n,s]=P(!1);return t("div",{className:k.statusArea,children:[t("button",{type:"button",className:k.toggleBtn,onClick:()=>s(o=>!o),"aria-expanded":n,"aria-controls":"player-shortcuts",children:[t(Y,{name:"keyboard",size:14}),t("span",{children:"Keyboard Shortcuts"}),n?t(Y,{name:"chevron-up",size:12}):t(Y,{name:"chevron-down",size:12})]}),n&&t("div",{id:"player-shortcuts",className:k.shortcuts,children:[t("div",{className:k.shortcutGroup,children:[t("div",{className:k.shortcut,children:[t("span",{className:k.key,children:"↑"}),t("span",{className:k.key,children:"↓"}),t("span",{className:k.label,children:"Volume"})]}),t("div",{className:k.shortcut,children:[t("span",{className:k.key,children:"←"}),t("span",{className:k.key,children:"→"}),t("span",{className:k.label,children:"Seek"})]})]}),t("div",{className:k.shortcutGroup,children:[t("div",{className:k.shortcut,children:[t("span",{className:k.key,children:"Space"}),t("span",{className:k.label,children:"Play/Pause"})]}),t("div",{className:k.shortcut,children:[t("span",{className:k.key,children:"F"}),t("span",{className:k.label,children:"Fullscreen"})]}),t("div",{className:k.shortcut,children:[t("span",{className:k.key,children:"M"}),t("span",{className:k.label,children:"Mute"})]}),e&&t("div",{className:k.shortcut,children:[t("span",{className:k.key,children:"T"}),t("span",{className:k.label,children:"Theater"})]}),t("div",{className:k.shortcut,children:[t("span",{className:k.key,children:"N"}),t("span",{className:k.label,children:"Next"})]})]})]})]})},zr="_episodeListContainer_9tyin_1",Vr="_drawerContainer_9tyin_9",Kr="_episodeListHeader_9tyin_14",Ur="_drawerHeader_9tyin_20",Qr="_episodeListTitle_9tyin_29",Gr="_rangeSelector_9tyin_41",Yr="_rangeButton_9tyin_47",Xr="_active_9tyin_70",Jr="_episodeList_9tyin_1",Zr="_drawerList_9tyin_89",en="_episodeItem_9tyin_118",tn="_watched_9tyin_145",rn="_episodeThumb_9tyin_167",nn="_episodeText_9tyin_176",sn="_episodeLabel_9tyin_184",an="_episodeSub_9tyin_189",L={episodeListContainer:zr,drawerContainer:Vr,episodeListHeader:Kr,drawerHeader:Ur,episodeListTitle:Qr,rangeSelector:Gr,rangeButton:Yr,active:Xr,episodeList:Jr,drawerList:Zr,episodeItem:en,watched:tn,episodeThumb:rn,episodeText:nn,episodeLabel:sn,episodeSub:an},on=({episodes:e,currentEpisode:n,watchedEpisodes:s=[],onEpisodeClick:o,variant:r="sidebar",title:i="Episodes",header:c})=>{const[p,a]=P(0),u=w(null),_=te(()=>e.map(l=>typeof l=="string"?{id:l,label:`Episode ${l}`}:l),[e]),x=te(()=>new Set(s),[s]);j(()=>{const l=u.current;if(!l)return;let d=l.parentElement;for(;d;){const h=window.getComputedStyle(d);if((h.overflowY==="auto"||h.overflowY==="scroll")&&d.scrollHeight>d.clientHeight)break;d=d.parentElement}if(!d)return;const C=d.getBoundingClientRect(),f=l.getBoundingClientRect();d.scrollTop+=f.top+f.height/2-(C.top+d.clientHeight/2)},[n,p]);const g=te(()=>{if(_.length<=100)return[];const l=[];for(let d=0;d<_.length;d+=100){const C=d+1,f=Math.min(d+100,_.length);l.push(`${C}-${f}`)}return l},[_]),A=te(()=>{if(g.length===0)return _;const l=g[p];if(!l)return _;const[d,C]=l.split("-"),f=parseInt(d,10),h=parseInt(C,10);return _.slice(f-1,h)},[_,g,p]);return t("div",{className:`${L.episodeListContainer} ${r==="drawer"?L.drawerContainer:""}`,children:[t("div",{className:`${L.episodeListHeader} ${r==="drawer"?L.drawerHeader:""}`,children:[c,t("h3",{className:L.episodeListTitle,children:i}),g.length>0&&t("div",{className:L.rangeSelector,children:g.map((l,d)=>t("button",{className:`${L.rangeButton} ${p===d?L.active:""}`,onClick:()=>a(d),children:l},l))})]}),t("div",{className:`${L.episodeList} ${r==="drawer"?L.drawerList:""}`,children:A.map(l=>{const d=l.id===n,C=x.has(l.id)||l.watched===!0;return t("div",{ref:d?u:void 0,className:`${L.episodeItem} ${C?L.watched:""} ${d?L.active:""}`,onClick:()=>o(l.id),children:[l.thumbnail&&t("img",{src:l.thumbnail,alt:"",loading:"lazy",decoding:"async",className:L.episodeThumb}),t("span",{className:L.episodeText,children:[t("span",{className:L.episodeLabel,children:l.label??`Episode ${l.id}`}),l.sublabel&&t("span",{className:L.episodeSub,children:l.sublabel})]})]},l.id)})})]})},ps=({variant:e="sidebar",count:n=12})=>t("div",{className:`${L.episodeListContainer} ${e==="drawer"?L.drawerContainer:""}`,children:[t("div",{className:`${L.episodeListHeader} ${e==="drawer"?L.drawerHeader:""}`,children:[t("h3",{className:L.episodeListTitle,children:"Episodes"}),t("div",{className:L.rangeSelector,children:[t(se,{width:"60px",height:"28px",variant:"rectangular"}),t(se,{width:"60px",height:"28px",variant:"rectangular"}),t(se,{width:"60px",height:"28px",variant:"rectangular"})]})]}),t("div",{className:`${L.episodeList} ${e==="drawer"?L.drawerList:""}`,children:Array.from({length:n}).map((s,o)=>t("div",{className:L.episodeItem,style:{border:"none",background:"transparent"},children:t(se,{width:"120px",height:"1.2rem",variant:"text"})},o))})]}),cn="_shell_cys6s_1",ln="_overlay_cys6s_10",dn="_drawer_cys6s_21",un="_handle_cys6s_56",pn="_header_cys6s_64",fn="_headerCopy_cys6s_73",mn="_kicker_cys6s_79",hn="_title_cys6s_87",yn="_closeBtn_cys6s_94",bn="_body_cys6s_116",z={shell:cn,overlay:ln,drawer:dn,handle:un,header:pn,headerCopy:fn,kicker:mn,title:hn,closeBtn:yn,body:bn};function fs({isOpen:e,onClose:n,episodes:s,currentEpisode:o,watchedEpisodes:r=[],onEpisodeClick:i,title:c,header:p}){return j(()=>{if(!e)return;const a=_=>{_.key==="Escape"&&n()},u=document.body.style.overflow;return document.body.style.overflow="hidden",document.addEventListener("keydown",a),()=>{document.body.style.overflow=u,document.removeEventListener("keydown",a)}},[e,n]),e?ct(t("div",{className:z.shell,role:"dialog","aria-modal":"true","aria-label":"Episode picker",children:[t("button",{className:z.overlay,type:"button",onClick:n,"aria-label":"Close episodes"}),t("aside",{className:z.drawer,children:[t("div",{className:z.handle}),t("div",{className:z.header,children:[t("div",{className:z.headerCopy,children:[t("span",{className:z.kicker,children:"Episode picker"}),t("h3",{className:z.title,children:"Choose an episode"})]}),t("button",{className:z.closeBtn,type:"button",onClick:n,"aria-label":"Close",children:t(Y,{name:"times"})})]}),t("div",{className:z.body,children:t(on,{episodes:s,currentEpisode:o,watchedEpisodes:r,onEpisodeClick:i,variant:"drawer",title:c,header:p})})]})]}),document.body):null}const gn="_sourceSelectionContainer_1am19_1",_n="_providerSelectContainer_1am19_14",vn="_providerSelect_1am19_14",Sn="_sourceSelect_1am19_1",wn="_sourceButtons_1am19_70",Cn="_sourceButton_1am19_70",kn="_active_1am19_95",ms={sourceSelectionContainer:gn,providerSelectContainer:_n,providerSelect:vn,sourceSelect:Sn,sourceButtons:wn,sourceButton:Cn,active:kn},hs=({skipIntervals:e,showId:n,episodeNumber:s,episodeCount:o,sourceType:r,showMeta:i})=>{const c=St(),p=lt(),{engine:a,mediaRef:u}=vt({volumeKey:"playerVolume",mutedKey:"playerMuted"}),{isPlaying:_,isMuted:x,volume:g,duration:A,isScrubbing:l,isBuffering:d,isFullscreen:C,isSpeedBoostActive:f,showControls:h,playbackLocked:y}=He(a),B=a.containerRef,m=w(null),T=w(0),N=w(Math.random().toString(36).substring(2)),b=a.setShowControls,[$,O]=P(M.getItem("autoSkipEnabled")==="true"),[V,I]=P(null),[H]=P(Lr),[Ve,ye]=P(H.fontSize),[Ke,be]=P(H.position),[Ue,ge]=P(H.bgOpacity),[Qe,_e]=P(H.bgColor),[Ge,ve]=P(H.textColor),[Ye,Se]=P(H.edge),[Xe,we]=P(H.bold),Ce=E((v,R)=>{if({fontSize:S=>typeof S!="number"?!1:(ye(S),!0),position:S=>typeof S!="number"?!1:(be(S),!0),bgOpacity:S=>typeof S!="number"?!1:(ge(S),!0),bgColor:S=>typeof S!="string"?!1:(_e(S),!0),textColor:S=>typeof S!="string"?!1:(ve(S),!0),edge:S=>S!=="shadow"&&S!=="outline"&&S!=="none"?!1:(Se(S),!0),bold:S=>typeof S!="boolean"?!1:(we(S),!0)}[v](R))try{M.setItem(Tr[v],String(R))}catch{}},[]),[Je,Ze]=P([]),[et,tt]=P(null),[rt,nt]=P(!1),[st,at]=P(!1),[ot,ke]=P(()=>{try{return M.getItem("playerUseNativeControls")==="true"}catch{return!1}}),X=w(!1),re=w(-1),ne=E(()=>{const v=u.current;return!n||!s||!i?.name?null:{showId:n,episodeNumber:s,episodeCount:o,currentTime:a.getTimeline().currentTime,duration:a.getState().duration,showName:i.name,showThumbnail:i.thumbnail,nativeName:i.names?.native,englishName:i.names?.english,genres:Array.isArray(i.genres)?i.genres.map(R=>typeof R=="string"?R:R?.name).filter(Boolean):void 0,popularityScore:i.score,type:i.type,isPlaying:v?!v.paused:r==="iframe",sessionId:N.current,isAdult:i.isAdult}},[a,u,n,s,o,i,r]),F=E((v=!1,R=!1)=>{if(X.current)return!1;const q=ne();if(!q)return!1;const S=u.current;if(!S&&!v&&r!=="iframe"||r!=="iframe"&&q.duration<=0)return!1;const W=a.getTimeline().currentTime;if(!R){if(W===0)return!1;const Z=S?Math.abs(W-re.current):0;if(!v&&S&&W!==S.duration&&Z<5)return!1}return q.currentTime=W,re.current=W,v?(async()=>{try{await Re("progress.updateProgress",q),c.invalidateQueries({queryKey:[K.playerData,n]}),c.invalidateQueries({queryKey:[K.videoSources,n,s]}),c.invalidateQueries({queryKey:[K.continueWatching]}),c.invalidateQueries({queryKey:[K.thisWeekSchedule]}),c.invalidateQueries(p.continueWatching.pathFilter())}catch(Z){console.error("Failed to update progress:",Z)}})():Re("progress.updateProgress",q).then(()=>{ce(q.currentTime,q.duration)&&c.invalidateQueries({queryKey:[K.playerData,n]})}).catch(Z=>console.error("Failed to update progress:",Z)),!0},[a,ne,r,c,n,s,p.continueWatching,u]);j(()=>{const v=()=>{X.current||F(!0)};window.addEventListener("beforeunload",v),window.addEventListener("pagehide",v);const R=()=>{document.visibilityState==="hidden"&&v()};document.addEventListener("visibilitychange",R);const q=m;return()=>{window.removeEventListener("beforeunload",v),window.removeEventListener("pagehide",v),document.removeEventListener("visibilitychange",R),X.current||F(!0),q.current&&clearTimeout(q.current)}},[F]);const xe=E(()=>a.setShowControls(!0),[a]),Te=a.toggleFullscreen,Le=E(()=>{a.togglePlay(),b(!0)},[a,b]),Ne=E(()=>{a.toggleMute(),b(!0)},[a,b]),Pe=E(v=>{a.seekRelative(v),m.current&&clearTimeout(m.current),m.current=setTimeout(()=>F(!1,!0),1500),b(!0)},[a,F,b]),Be=E(()=>{X.current=!1,F(!1,!0)},[F]),Ee=E(()=>{b(!0),F(!1,!0)},[F,b]);j(()=>{X.current=!1,re.current=-1,T.current=0,N.current=Math.random().toString(36).substring(2),a.reset()},[a,n,s]);const Ae=a.reset;j(()=>{const v=N.current;return()=>{dt(v)}},[a,n,s]),j(()=>{if(r!=="iframe")return;F(!1,!0);const v=setInterval(()=>{F(!1,!0)},6e4);return()=>clearInterval(v)},[r,F]);const Ie=E(()=>{const v=u.current;if(!v)return;const R=v.currentTime||0,q=Date.now(),S=ce(R,v.duration)&&!ce(re.current,v.duration);(S||q-T.current>6e4)&&F(!1,S)&&(T.current=q);const W=e.find(J=>R>=J.start_time&&R<J.end_time)||null;I(J=>J?.skip_id!==W?.skip_id?W:J),$&&W&&!v.paused&&!a.getState().playbackLocked&&(a.seek(W.end_time),I(null))},[u,e,$,F,a]),$e=E(()=>{const v=ne();v&&(v.currentTime=v.duration,ut.progress.updateProgress.mutate(v).then(()=>{c.invalidateQueries({queryKey:[K.playerData,n]}),c.invalidateQueries({queryKey:[K.videoSources,n,s]}),c.invalidateQueries({queryKey:[K.continueWatching]})}).catch(R=>console.error("Failed to send final progress:",R)))},[ne,c,n,s]),Me=E(()=>{X.current=!0,$e()},[$e]),it=te(()=>({togglePlay:Le,seek:Pe,toggleMute:Ne,toggleFullscreen:Te,onPlay:Be,onPause:Ee,formatTime:pt,onTimeUpdate:Ie,onEnded:Me,setShowControls:b,setIsAutoSkipEnabled:O,setCurrentSkipInterval:I,setSubtitleFontSize:ye,setSubtitlePosition:be,setSubtitleBgOpacity:ge,setSubtitleBgColor:_e,setSubtitleTextColor:ve,setSubtitleEdge:Se,setSubtitleBold:we,setSubtitleStyle:Ce,setAvailableSubtitles:Ze,setActiveSubtitleTrack:tt,setShowSettings:nt,setShowVolumeSlider:at,flashControls:xe,sendProgressUpdate:F,setUseNativeControls:ke,resetMediaState:Ae}),[Le,Pe,Ne,Te,Be,Ee,Ie,Me,F,ke,Ae,xe,Ce,b]);return{engine:a,refs:{videoRef:u,playerContainerRef:B},state:{playbackLocked:y,isPlaying:_,isMuted:x,volume:g,isFullscreen:C,duration:A,showControls:h,isScrubbing:l,isAutoSkipEnabled:$,currentSkipInterval:V,subtitleFontSize:Ve,subtitlePosition:Ke,subtitleBgOpacity:Ue,subtitleBgColor:Qe,subtitleTextColor:Ge,subtitleEdge:Ye,subtitleBold:Xe,availableSubtitles:Je,activeSubtitleTrack:et,showSettings:rt,showVolumeSlider:st,isBuffering:d,isSpeedBoostActive:f,useNativeControls:ot},actions:it}};function xn(){try{return typeof navigator<"u"&&/android/i.test(navigator.userAgent)}catch{return!1}}function ys(e,n){const{refs:s,actions:o}=e,r=w(n);r.current=n;const i=w(!1),c=w(!1),p=a=>{try{if(a)return a.matches}catch{}try{return window.innerWidth>window.innerHeight}catch{return!1}};j(()=>{if(!xn())return;let a=null;const u=()=>{const _=s.playerContainerRef.current;if(p(a)){if(!r.current||!_||ie(s.videoRef.current)||c.current)return;i.current=!0,o.toggleFullscreen()}else c.current=!1,i.current&&(i.current=!1,ie(s.videoRef.current)&&o.toggleFullscreen())};try{a=window.matchMedia("(orientation: landscape)"),a.addEventListener?a.addEventListener("change",u):a.addListener(u)}catch{}return u(),()=>{try{a&&(a.removeEventListener?a.removeEventListener("change",u):a.removeListener(u))}catch{}}},[o,s.playerContainerRef,s.videoRef,n]),j(()=>{const a=()=>{if(!ie(s.videoRef.current)){i.current=!1;try{window.matchMedia("(orientation: landscape)").matches&&(c.current=!0)}catch{c.current=!0}}};return document.addEventListener("fullscreenchange",a),document.addEventListener("webkitfullscreenchange",a),()=>{document.removeEventListener("fullscreenchange",a),document.removeEventListener("webkitfullscreenchange",a)}},[s.videoRef])}const Tn=e=>Math.max(8,Math.min(40,Math.ceil(e/16.7)+4));function bs({videoRef:e,canvasRef:n,delayMs:s,enabled:o}){const r=w(s);r.current=s;const i=w([]),c=w(-1),p=w(-1),a=w(!1),u=w(0),_=w(null);j(()=>{const x=f=>{if(f)try{f.close()}catch{}},g=()=>{for(const f of i.current)x(f.bitmap);i.current=[]};if(!o){g(),c.current=-1,p.current=-1,a.current=!1,u.current=0;return}let A=!1;const l=()=>{_.current!==null&&(cancelAnimationFrame(_.current),_.current=null)},d=()=>{A||(l(),_.current=requestAnimationFrame(()=>{C()}))};async function C(){if(A)return;const f=e.current,h=n.current;if(!f||!h||f.videoWidth===0){d();return}if(f.paused||f.ended||document.hidden||f.readyState<HTMLMediaElement.HAVE_CURRENT_DATA){d();return}const y=f.getVideoPlaybackQuality().totalVideoFrames;if(y===c.current){d();return}(f.seeking||p.current>=0&&Math.abs(f.currentTime-p.current)>.5)&&(g(),a.current=!1,u.current=0,c.current=-1),p.current=f.currentTime,(h.width!==f.videoWidth||h.height!==f.videoHeight)&&(h.width=f.videoWidth,h.height=f.videoHeight);const B=Math.max(0,r.current||0);B>u.current&&(a.current=!1);try{const m=await createImageBitmap(f);if(A){x(m);return}c.current=y;const T=performance.now(),N=h.getContext("2d"),b=I=>{N&&N.drawImage(I,0,0,h.width,h.height)};if(B<=0){g(),a.current=!1,u.current=0,b(m),x(m),d();return}const $=i.current;$.push({bitmap:m,capture:T});const O=Tn(B);for(;$.length>O;)x($.shift()?.bitmap);let V=-1;for(let I=$.length-1;I>=0;I--)if(T-$[I].capture>=B){V=I;break}if(V!==-1){for(let H=0;H<V;H++)x($.shift()?.bitmap);const I=$.shift();I?(b(I.bitmap),x(I.bitmap),a.current=!0,u.current=B):b(m)}else if(!a.current)b(m);else{const I=$.shift();I?(b(I.bitmap),x(I.bitmap)):b(m)}}catch{}d()}return d(),()=>{A=!0,l();for(const f of i.current)try{f.bitmap.close()}catch{}i.current=[]}},[o,e,n])}const De=(e,n)=>{try{M.setItem("playerVideoDelayMs",String(e)),M.setItem("playerVideoDelayEnabled",String(n))}catch{}},Oe=e=>{try{M.setItem("playerVideoDelayEnabled",String(e))}catch{}};function gs(e,n){const[s,o]=P(()=>{try{const y=Number(M.getItem("playerVideoDelayMs"));if(Number.isFinite(y)&&y>=0&&y<=500)return Math.round(y)}catch{}return 180}),[r,i]=P(()=>{try{return M.getItem("playerVideoDelayEnabled")==="true"}catch{return!1}}),[c,p]=P(!1),[a,u]=P(!1),_=w(null),x=w(null),g=y=>{const B=Math.max(0,Math.min(500,Math.round(y)));o(B);try{M.setItem("playerVideoDelayMs",String(B))}catch{}},A=y=>{i(y),Oe(y)},l=E(()=>{u(!1),p(!1)},[]);return{videoDelayMs:s,videoDelayEnabled:r,setDelayEnabled:A,handleVideoDelayChange:g,isCalibrating:c,testClipActive:a,stopCalibration:l,openAvSyncCalibrator:()=>{_.current={enabled:r,ms:s},i(!0),Oe(!0),n?.(),p(!0)},cancelAvSyncCalibrator:()=>{const y=_.current;_.current=null,y&&(o(y.ms),i(y.enabled),De(y.ms,y.enabled)),u(!1),p(!1)},applyAvSyncCalibrator:()=>{_.current=null,i(!0),De(s,!0),u(!1),p(!1)},toggleTestClip:()=>{if(a){u(!1);return}const y=e.current;y&&!isNaN(y.currentTime)&&(x.current=y.currentTime),u(!0)},calibReturnRef:x,effectiveVideoDelayMs:r?s:0}}function _s(){const[e,n]=P(()=>{try{return M.getItem("playerTheaterMode")==="true"}catch{return!1}});j(()=>{try{e?document.body.classList.add("theater-mode"):document.body.classList.remove("theater-mode")}catch(r){console.error(r)}return()=>{try{document.body.classList.remove("theater-mode")}catch(r){console.error(r)}}},[e]);const s=E(()=>{n(r=>{const i=!r;try{M.setItem("playerTheaterMode",i.toString())}catch{}return i})},[]),o=E(r=>{if(e&&r.target===r.currentTarget){n(!1);try{M.setItem("playerTheaterMode","false")}catch{}}},[e]);return{isTheaterMode:e,toggleTheaterMode:s,handleLayoutClick:o}}const Q={enabled:!0,blur:60,saturation:150,brightness:70,opacity:60};function Ln(){try{const e=M.getItem("playerAmbientLight");if(!e)return Q;const n=JSON.parse(e),s=(o,r,i,c)=>{const p=Number(o);return Number.isFinite(p)?Math.max(i,Math.min(c,p)):r};return{enabled:n.enabled??Q.enabled,blur:s(n.blur,Q.blur,0,120),saturation:s(n.saturation,Q.saturation,0,200),brightness:s(n.brightness,Q.brightness,20,120),opacity:s(n.opacity,Q.opacity,10,100)}}catch{return Q}}function vs(){const[e,n]=P(Ln),s=E(o=>{n(r=>{const i={...r,...o};try{M.setItem("playerAmbientLight",JSON.stringify(i))}catch{}return i})},[]);return{settings:e,update:s}}const Nn="_theaterAmbient_x9t0o_1",Pn={theaterAmbient:Nn},de=160,ue=90,Bn=120,Ss=({videoRef:e,active:n,settings:s,className:o})=>{const r=w(null);return j(()=>{if(!n)return;const i=r.current,c=e.current;if(!i||!c)return;const p=i.getContext("2d",{alpha:!1});if(!p)return;let a=0,u=0,_=!1;const x=()=>{if(!(c.readyState<2||!c.videoWidth))try{const d=c.videoWidth,C=c.videoHeight,f=de/ue,h=d/C;let y=d,B=C,m=0,T=0;h>f?(y=C*f,m=(d-y)/2):(B=d/f,T=(C-B)/2),p.drawImage(c,m,T,y,B,0,0,de,ue)}catch{}},g=d=>{_||c.paused||(a=requestAnimationFrame(g),!(d-u<Bn)&&(u=d,x()))},A=()=>{_||(cancelAnimationFrame(a),u=0,a=requestAnimationFrame(g))},l=()=>cancelAnimationFrame(a);return c.addEventListener("play",A),c.addEventListener("pause",l),c.addEventListener("seeked",x),c.addEventListener("loadeddata",x),a=requestAnimationFrame(g),()=>{_=!0,cancelAnimationFrame(a),c.removeEventListener("play",A),c.removeEventListener("pause",l),c.removeEventListener("seeked",x),c.removeEventListener("loadeddata",x)}},[n,e]),n?t("canvas",{ref:r,width:de,height:ue,"aria-hidden":"true",className:o??Pn.theaterAmbient,style:{filter:`blur(${s.blur}px) saturate(${s.saturation}%) brightness(${s.brightness}%)`,opacity:s.opacity/100}}):null},En="_row_1fq55_1",An="_rowHeader_1fq55_9",In="_rowLabel_1fq55_17",$n="_rowValue_1fq55_28",Mn="_slider_1fq55_36",Rn="_swatches_1fq55_99",jn="_swatch_1fq55_99",Fn="_swatchPicked_1fq55_114",Dn="_colorInput_1fq55_120",On="_segmented_1fq55_131",D={row:En,rowHeader:An,rowLabel:In,rowValue:$n,slider:Mn,swatches:Rn,swatch:jn,swatchPicked:Fn,colorInput:Dn,segmented:On},qn=({label:e,display:n,min:s,max:o,step:r,value:i,percent:c,onChange:p,onCommit:a})=>t("div",{className:D.row,children:[t("div",{className:D.rowHeader,children:[t("span",{className:D.rowLabel,children:e}),t("span",{className:D.rowValue,children:n})]}),t("input",{type:"range",className:D.slider,min:s,max:o,step:r,value:i,"aria-label":e,"data-speed-boost-ignore":"true",onInput:u=>p(Number(u.target.value)),onMouseDown:u=>u.stopPropagation(),onPointerDown:u=>u.stopPropagation(),onTouchStart:u=>u.stopPropagation(),onPointerUp:a,onPointerCancel:a,onTouchEnd:a,onKeyUp:a,onBlur:a,style:{"--slider-percent":`${c}%`}})]}),ws=({label:e,colors:n,value:s,onChange:o})=>t("div",{className:D.row,children:[t("div",{className:D.rowHeader,children:t("span",{className:D.rowLabel,children:e})}),t("div",{className:D.swatches,children:[n.map(r=>t("button",{type:"button","aria-label":`${e} ${r}`,"aria-pressed":s.toLowerCase()===r.toLowerCase(),onClick:()=>o(r),className:`${D.swatch} ${s.toLowerCase()===r.toLowerCase()?D.swatchPicked:""}`,style:{backgroundColor:r}},r)),t("input",{type:"color","aria-label":`Custom ${e.toLowerCase()}`,className:D.colorInput,value:s,"data-speed-boost-ignore":"true",onInput:r=>o(r.target.value),onMouseDown:r=>r.stopPropagation(),onPointerDown:r=>r.stopPropagation(),onTouchStart:r=>r.stopPropagation()})]})]});function Cs({label:e,options:n,value:s,onChange:o}){return t("div",{className:D.row,children:[t("div",{className:D.rowHeader,children:t("span",{className:D.rowLabel,children:e})}),t("div",{className:D.segmented,role:"group","aria-label":e,children:n.map(r=>t("button",{type:"button","aria-pressed":s===r,onClick:()=>o(r),children:[t("span",{children:r}),s===r&&t(Y,{name:"check",size:10})]},r))})]})}const oe=10,he=500,pe=e=>Math.max(0,Math.min(he,Math.round(e))),ks=({isOpen:e,ms:n,onChange:s,onApply:o,onClose:r,testClipActive:i,onTestClip:c})=>e?t("div",{role:"dialog","aria-label":"Calibrate audio video sync","data-speed-boost-ignore":"true",onClick:p=>p.stopPropagation(),style:{position:"absolute",right:8,bottom:112,width:"min(260px, calc(100% - 16px))",maxHeight:"calc(100% - 124px)",overflowY:"auto",overflowX:"hidden",zIndex:60,display:"flex",flexDirection:"column",alignItems:"center",gap:8,padding:12,borderRadius:"var(--radius-lg)",border:"1px solid var(--glass-border)",background:"rgba(18, 18, 22, 0.95)",boxShadow:"var(--glass-shadow)",backdropFilter:"blur(14px)",WebkitBackdropFilter:"blur(14px)",boxSizing:"border-box"},children:[t("div",{style:{fontSize:"0.8rem",fontWeight:800,color:"var(--text-primary)"},children:"A/V sync"}),t("div",{children:t(G,{size:"sm",variant:"secondary",onClick:c,children:i?"Back to video":"Preview test clip"})}),t("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",gap:6,flexWrap:"wrap"},children:[t(G,{size:"sm",onClick:()=>s(pe(n-oe)),"aria-label":"Decrease delay by 10 milliseconds",children:["− ",oe,"ms"]}),t("div",{style:{fontSize:"1.1rem",fontWeight:800,minWidth:64,textAlign:"center"},children:[n,"ms"]}),t(G,{size:"sm",onClick:()=>s(pe(n+oe)),"aria-label":"Increase delay by 10 milliseconds",children:["+ ",oe,"ms"]})]}),t(qn,{label:"Video delay",display:`${n}ms`,min:0,max:he,step:5,value:n,percent:n/he*100,onChange:p=>s(pe(p))}),t("div",{style:{display:"flex",gap:8,justifyContent:"center",flexWrap:"wrap"},children:[t(G,{size:"sm",variant:"secondary",onClick:r,children:"Cancel"}),t(G,{size:"sm",onClick:o,children:["Apply ",n,"ms"]})]})]}):null;function xs({videoRef:e,sourceType:n,resetKey:s,onEnd:o}){const r=w(!1),i=w(o);i.current=o,j(()=>{r.current=!1},[s]);const c=E(()=>{const a=e.current?.duration;!a||!Number.isFinite(a)||console.info(`[playback] duration ${a.toFixed(2)}s`)},[e]);return{checkEnd:E((a=!1)=>{const u=e.current;!u||n==="iframe"||r.current||!a&&!wt(u.currentTime,u.duration)||(r.current=!0,console.info(`[playback] end reached at ${u.currentTime.toFixed(2)}s / ${u.duration.toFixed(2)}s`),i.current())},[n,e]),logDuration:c}}function Ts(e,n,s){const o=ft(),r=w({watch:o,selection:n,loading:s});r.current={watch:o,selection:n,loading:s};const[i,c]=P(!1),p=w(""),a=w(""),u=w(""),_=w(!1),x=!!o.session&&!o.session.host;j(()=>(!o.session&&_.current&&e.applyRemotePlayback(void 0,!1,1),_.current=!!o.session,e.setPlaybackLocked(!!o.session&&(x||!o.connected)),o.session&&!o.connected&&e.applyRemotePlayback(void 0,!1,1),()=>e.setPlaybackLocked(!1)),[e,x,o.connected,o.session]);const g=E((A=!1)=>{const{watch:l,selection:d,loading:C}=r.current,f=e.mediaRef.current;if(!l.session||!l.room||!f)return;if(l.session.host){l.connected&&l.selfId!==u.current&&!C&&d&&f.readyState>=1&&(u.current=l.selfId,je(d,l.room.selection)&&e.applyRemotePlayback(l.room.position,!1,l.room.rate));return}const h=l.room,y=d&&je(d,h.selection);if(!l.connected||C||!y||f.readyState<1){e.applyRemotePlayback(void 0,!1,h.rate);return}const B=Date.now()+l.clock.offset-h.updatedAt<15e3;if(h.playing&&!B){e.applyRemotePlayback(void 0,!1,h.rate);return}const m=h.playing&&h.hostOnline&&B,T=Math.min(f.duration||1/0,mt({...h,playing:m},Date.now()+l.clock.offset)),N=T-f.currentTime,b=Math.abs(N)>(m?1.25:.15),$=m&&!b&&Math.abs(N)>.15?Math.min(4,Math.max(.25,h.rate*(N>0?1.03:.97))):h.rate,O=e.getState().playBlocked;e.applyRemotePlayback(b?T:void 0,m&&(!O||A),$),c(O&&m)},[e]);return j(()=>{if(!o.session)return;const A=()=>{const{watch:m,selection:T,loading:N}=r.current,b=e.mediaRef.current;if(!m.connected||!m.session?.host||!m.room)return;if(!T||N||!b||b.readyState<1){m.room.playing&&m.send({type:"update",...m.room,playing:!1});return}g();const $=e.getState(),O=!b.paused&&!b.ended&&!$.isBuffering,V={type:"update",selection:T,position:b.currentTime+(O?m.clock.latency/1e3*b.playbackRate:0),playing:O,rate:b.playbackRate},I=JSON.stringify(V);!O&&a.current===I||(a.current=I,m.send(V))},l=()=>{const{watch:m,selection:T,loading:N}=r.current,b=e.getState(),$=e.mediaRef.current,O=b.error||!N&&!T?"error":b.playBlocked?"blocked":N||!$||$.readyState<1?"loading":b.isBuffering?"buffering":"ready";m.connected&&`${m.selfId}:${O}`!==p.current&&(p.current=`${m.selfId}:${O}`,m.send({type:"status",status:O})),g()};let d=null;const C=["play","pause","seeked","ratechange","playing","waiting","canplay","ended"];let f;const h=()=>{clearTimeout(f),f=setTimeout(A,100)},y=setInterval(()=>{const m=e.mediaRef.current;d!==m&&(C.forEach(T=>d?.removeEventListener(T,h)),d=m,C.forEach(T=>d?.addEventListener(T,h))),l()},500),B=setInterval(A,3e3);return()=>{clearInterval(y),clearInterval(B),clearTimeout(f),C.forEach(T=>d?.removeEventListener(T,h));const{watch:m}=r.current;m.session?.host&&m.room&&m.connected&&m.send({type:"update",...m.room,playing:!1,position:e.mediaRef.current?.currentTime??m.room.position})}},[e,o.session,g]),j(()=>{g()},[o.room,o.connected,n,s,g]),{needsPlayback:i,enablePlayback:()=>g(!0)}}export{Ss as A,ts as B,is as C,Cs as D,ps as E,U as F,Q as G,qn as M,ls as P,os as R,ws as S,es as T,cs as a,ms as b,Yn as c,Xn as d,ss as e,rs as f,Zn as g,Ts as h,gs as i,bs as j,_s as k,xs as l,ys as m,vs as n,Gn as o,ds as p,as as q,Jn as r,Mr as s,on as t,hs as u,Qn as v,ks as w,us as x,fs as y,ns as z};
@@ -33,11 +33,11 @@
33
33
  background-color: #0c0d12;
34
34
  }
35
35
  </style>
36
- <script type="module" crossorigin src="/assets/index-vb4WPdcb.js"></script>
36
+ <script type="module" crossorigin src="/assets/index-DbRDs7tF.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">
40
- <link rel="stylesheet" crossorigin href="/assets/index-5x1mF1nD.css">
40
+ <link rel="stylesheet" crossorigin href="/assets/index-DP9TtvZX.css">
41
41
  </head>
42
42
 
43
43
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serifpersia/dango",
3
- "version": "3.7.7",
3
+ "version": "3.7.9",
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-24T00:10:33.684Z"
72
+ "versionDate": "2026-10-24T12:12:41.752Z"
73
73
  }
@@ -1 +1 @@
1
- import i from"fs";import r from"os";import n from"path";import d from"dotenv";import{SHIPPED_DEFAULTS as c}from"./shipped-defaults.js";const E=n.resolve(import.meta.dirname,".."),A=n.resolve(E,"..");function R(){return process.platform==="win32"&&process.env.APPDATA?n.join(process.env.APPDATA,"dango"):process.platform==="darwin"?n.join(r.homedir(),"Library","Application Support","dango"):process.env.XDG_DATA_HOME?n.join(process.env.XDG_DATA_HOME,"dango"):n.join(r.homedir(),".local","share","dango")}function m(e,o){if(!(!i.existsSync(e)||i.existsSync(o)))try{i.renameSync(e,o)}catch{i.copyFileSync(e,o),i.unlinkSync(e)}}function D(e,o){const t=[".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"];i.mkdirSync(o,{recursive:!0});for(const a of t)m(n.join(e,a),n.join(o,a));for(const a 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"])m(n.join(e,a),n.join(o,a))}function p(){return process.platform==="win32"&&process.env.APPDATA?n.join(process.env.APPDATA,"ani-web"):process.platform==="darwin"?n.join(r.homedir(),"Library","Application Support","ani-web"):process.env.XDG_DATA_HOME?n.join(process.env.XDG_DATA_HOME,"ani-web"):n.join(r.homedir(),".local","share","ani-web")}function f(e){const o=p();if(o===e||!i.existsSync(o))return;const t=[".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"];i.mkdirSync(e,{recursive:!0});for(const a of t)m(n.join(o,a),n.join(e,a))}const _=R(),O=n.join(_,".env");D(E,_),f(_),d.config({path:n.join(E,".env")}),d.config({path:O,override:!0});const s=process.argv.includes("--dev"),v=Number(process.env.PORT)||3e3,j=Number(process.env.DEV_PORT)||5173,L=process.env.HOST||"0.0.0.0",N=s?`http://localhost:${j}/api/auth/google/callback`:`http://localhost:${v}/api/auth/google/callback`,S={ROOT:_,SERVER_ROOT:E,PACKAGE_ROOT:A,ENV_PATH:O,TOKEN_PATH:n.join(_,"google_tokens.json"),LOCAL_MANIFEST_PATH:n.join(_,s?"sync_manifest.dev.json":"sync_manifest.json"),MANGA_LOCAL_MANIFEST_PATH:n.join(_,s?"manga.sync_manifest.dev.json":"manga.sync_manifest.json"),TV_LOCAL_MANIFEST_PATH:n.join(_,s?"tv.sync_manifest.dev.json":"tv.sync_manifest.json"),ASMR_LOCAL_MANIFEST_PATH:n.join(_,s?"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:s?"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:s?"sync.dev.json":"sync.json",MANGA_GOOGLE_SYNC_FILENAME:s?"manga.sync.dev.json":"manga.sync.json",TV_GOOGLE_SYNC_FILENAME:s?"tv.sync.dev.json":"tv.sync.json",ASMR_GOOGLE_SYNC_FILENAME:s?"asmr.sync.dev.json":"asmr.sync.json",RCLONE_SYNC_FILENAME:s?"sync.dev.json":"sync.json",MANGA_RCLONE_SYNC_FILENAME:s?"manga.sync.dev.json":"manga.sync.json",TV_RCLONE_SYNC_FILENAME:s?"tv.sync.dev.json":"tv.sync.json",ASMR_RCLONE_SYNC_FILENAME:s?"asmr.sync.dev.json":"asmr.sync.json",IS_DEV:s,PORT:v,HOST:L,GOOGLE_CLIENT_ID:process.env.GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET:process.env.GOOGLE_CLIENT_SECRET,GOOGLE_REDIRECT_URI:N,GOOGLE_AUTH_WORKER_URL:process.env.GOOGLE_AUTH_WORKER_URL||c.GOOGLE_AUTH_WORKER_URL||"",RCLONE_REMOTE:process.env.RCLONE_REMOTE,SYNC_PROVIDER:process.env.SYNC_PROVIDER,DISCORD_CLIENT_ID:process.env.DISCORD_CLIENT_ID||c.DISCORD_CLIENT_ID||void 0,APP_PASSWORD_HASH:process.env.APP_PASSWORD_HASH||"",PROVIDER_REPO_URL:process.env.PROVIDER_REPO_URL||c.PROVIDER_REPO_URL||"",PROVIDER_ENABLED:process.env.PROVIDER_ENABLED||"",PROVIDER_REPO_REFRESH_MS:parseInt(process.env.PROVIDER_REPO_REFRESH_MS||"",10)||216e5};export{S as CONFIG,E as SERVER_ROOT};
1
+ import E from"fs";import i from"os";import s from"path";import m from"dotenv";import{SHIPPED_DEFAULTS as t}from"./shipped-defaults.js";import{profileScope as A}from"./profile-scope.js";const O=s.resolve(import.meta.dirname,".."),T=s.resolve(O,"..");function N(){return process.platform==="win32"&&process.env.APPDATA?s.join(process.env.APPDATA,"dango"):process.platform==="darwin"?s.join(i.homedir(),"Library","Application Support","dango"):process.env.XDG_DATA_HOME?s.join(process.env.XDG_DATA_HOME,"dango"):s.join(i.homedir(),".local","share","dango")}function c(e,n){if(!(!E.existsSync(e)||E.existsSync(n)))try{E.renameSync(e,n)}catch{E.copyFileSync(e,n),E.unlinkSync(e)}}function f(e,n){const _=[".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"];E.mkdirSync(n,{recursive:!0});for(const r of _)c(s.join(e,r),s.join(n,r));for(const r 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"])c(s.join(e,r),s.join(n,r))}function p(){return process.platform==="win32"&&process.env.APPDATA?s.join(process.env.APPDATA,"ani-web"):process.platform==="darwin"?s.join(i.homedir(),"Library","Application Support","ani-web"):process.env.XDG_DATA_HOME?s.join(process.env.XDG_DATA_HOME,"ani-web"):s.join(i.homedir(),".local","share","ani-web")}function D(e){const n=p();if(n===e||!E.existsSync(n))return;const _=[".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"];E.mkdirSync(e,{recursive:!0});for(const r of _)c(s.join(n,r),s.join(e,r))}const a=N(),R=s.join(a,".env");f(O,a),D(a),m.config({path:s.join(O,".env")}),m.config({path:R,override:!0});const o=process.argv.includes("--dev"),d=Number(process.env.PORT)||3e3,v=Number(process.env.DEV_PORT)||5173,S=process.env.HOST||"0.0.0.0",j=o?`http://localhost:${v}/api/auth/google/callback`:`http://localhost:${d}/api/auth/google/callback`,I={ROOT:a,SERVER_ROOT:O,PACKAGE_ROOT:T,ENV_PATH:R,TOKEN_PATH:s.join(a,"google_tokens.json"),LOCAL_MANIFEST_PATH:s.join(a,o?"sync_manifest.dev.json":"sync_manifest.json"),MANGA_LOCAL_MANIFEST_PATH:s.join(a,o?"manga.sync_manifest.dev.json":"manga.sync_manifest.json"),TV_LOCAL_MANIFEST_PATH:s.join(a,o?"tv.sync_manifest.dev.json":"tv.sync_manifest.json"),ASMR_LOCAL_MANIFEST_PATH:s.join(a,o?"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:o?"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:o?"sync.dev.json":"sync.json",MANGA_GOOGLE_SYNC_FILENAME:o?"manga.sync.dev.json":"manga.sync.json",TV_GOOGLE_SYNC_FILENAME:o?"tv.sync.dev.json":"tv.sync.json",ASMR_GOOGLE_SYNC_FILENAME:o?"asmr.sync.dev.json":"asmr.sync.json",RCLONE_SYNC_FILENAME:o?"sync.dev.json":"sync.json",MANGA_RCLONE_SYNC_FILENAME:o?"manga.sync.dev.json":"manga.sync.json",TV_RCLONE_SYNC_FILENAME:o?"tv.sync.dev.json":"tv.sync.json",ASMR_RCLONE_SYNC_FILENAME:o?"asmr.sync.dev.json":"asmr.sync.json",IS_DEV:o,PORT:d,DEV_PORT:v,HOST:S,GOOGLE_CLIENT_ID:process.env.GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET:process.env.GOOGLE_CLIENT_SECRET,GOOGLE_REDIRECT_URI:j,GOOGLE_AUTH_WORKER_URL:process.env.GOOGLE_AUTH_WORKER_URL||t.GOOGLE_AUTH_WORKER_URL||"",RCLONE_REMOTE:process.env.RCLONE_REMOTE,SYNC_PROVIDER:process.env.SYNC_PROVIDER,DISCORD_CLIENT_ID:process.env.DISCORD_CLIENT_ID||t.DISCORD_CLIENT_ID||void 0,APP_PASSWORD_HASH:process.env.APP_PASSWORD_HASH||"",WATCH_ALONG_WORKER_URL:process.env.WATCH_ALONG_WORKER_URL||t.WATCH_ALONG_WORKER_URL||"",PROVIDER_REPO_URL:process.env.PROVIDER_REPO_URL||t.PROVIDER_REPO_URL||"",PROVIDER_ENABLED:process.env.PROVIDER_ENABLED||"",PROVIDER_REPO_REFRESH_MS:parseInt(process.env.PROVIDER_REPO_REFRESH_MS||"",10)||216e5},l=new Set(["ENV_PATH","TOKEN_PATH","LOCAL_MANIFEST_PATH","MANGA_LOCAL_MANIFEST_PATH","TV_LOCAL_MANIFEST_PATH","ASMR_LOCAL_MANIFEST_PATH"]),L=new Set(["GOOGLE_CLIENT_ID","GOOGLE_CLIENT_SECRET","GOOGLE_AUTH_WORKER_URL","RCLONE_REMOTE","SYNC_PROVIDER"]),y=new Proxy(I,{get(e,n){const _=A.getStore();return _?n==="ROOT"?_.root:l.has(n)?s.join(_.root,s.basename(String(e[n]))):L.has(n)?_.env[n]||(n==="GOOGLE_AUTH_WORKER_URL"?e.GOOGLE_AUTH_WORKER_URL:n.startsWith("GOOGLE_")?e[n]:void 0):e[n]:e[n]},set(e,n,_){const r=A.getStore();return r&&L.has(n)?r.env[n]=_:Reflect.set(e,n,_),!0}});export{y as CONFIG,I as INSTALL_CONFIG,O as SERVER_ROOT};
@@ -0,0 +1 @@
1
+ import{AsyncLocalStorage as o}from"node:async_hooks";const n=new o;function a(r){const e=new Map;return()=>{const t=n.getStore()?.id??"default";return e.has(t)||e.set(t,r()),e.get(t)}}function s(r){const e=n.getStore();if(!e?.deleted)return e?e.env[r]??(r==="GITHUB_CLIENT_ID"?process.env[r]:void 0):process.env[r]}export{s as profileEnv,n as profileScope,a as profileService};