@serifpersia/dango 3.7.1 → 3.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/client/dist/assets/ActiveFilterChips-QjkplDN2.css +1 -0
- package/client/dist/assets/ActiveFilterChips-olGfwxle.js +1 -0
- package/client/dist/assets/AnimeCard-CoPx634q.js +1 -0
- package/client/dist/assets/AnimeInfo-COVCRujg.js +1 -0
- package/client/dist/assets/AnimeInfoPage-BwlKpRXY.js +2 -0
- package/client/dist/assets/{AnimeMetaDetails-BogOi_bM.js → AnimeMetaDetails-D8WIiO4b.js} +1 -1
- package/client/dist/assets/Asmr-Dl1EZqaI.css +1 -0
- package/client/dist/assets/Asmr-nOUcDsWe.js +2 -0
- package/client/dist/assets/AsmrResetProgressModal-Mj1PYE2c.js +1 -0
- package/client/dist/assets/AvSyncCalibrator-BtUHM1mW.css +1 -0
- package/client/dist/assets/AvSyncCalibrator-C5GxpyPE.js +10 -0
- package/client/dist/assets/Home-C5eTe3jP.css +1 -0
- package/client/dist/assets/Home-wi0a_BDQ.js +1 -0
- package/client/dist/assets/Insights-D0qrep0K.css +1 -0
- package/client/dist/assets/Insights-MLCDyTnY.js +1 -0
- package/client/dist/assets/LibraryListPage-CRqv737t.js +1 -0
- package/client/dist/assets/LibraryListPage-DmdjNa2U.css +1 -0
- package/client/dist/assets/LibraryListPage.module-r6k9nyT9.js +1 -0
- package/client/dist/assets/ListeningList-8dzhiDeb.js +1 -0
- package/client/dist/assets/Manga-dkD-uWJk.js +1 -0
- package/client/dist/assets/MangaInfoPage-nCeWZNcO.js +1 -0
- package/client/dist/assets/MangaReadPage-NdDNCyLg.js +1 -0
- package/client/dist/assets/MangaResetProgressModal-C28AiLJl.js +1 -0
- package/client/dist/assets/Mature-D5WSkhIJ.js +1 -0
- package/client/dist/assets/MatureConsentModal-BsdpNeXA.js +1 -0
- package/client/dist/assets/MatureConsentModal-CqewXc0q.css +1 -0
- package/client/dist/assets/MediaCard-B0PJStxp.css +1 -0
- package/client/dist/assets/MediaCard-C1jNesfK.js +1 -0
- package/client/dist/assets/OptionListMenu-CIvW5WmO.js +1 -0
- package/client/dist/assets/Player-D-sQfjcx.css +1 -0
- package/client/dist/assets/Player-PGj8YYO8.js +56 -0
- package/client/dist/assets/{PlayerSettings-CqgKYfAN.js → PlayerSettings-CAYfF0sA.js} +1 -1
- package/client/dist/assets/QueueOptionsButton-DNzKPzPw.js +1 -0
- package/client/dist/assets/QueueRail-BWcDVSHd.js +1 -0
- package/client/dist/assets/{QueueRail-BUYEjdaq.css → QueueRail-Bkh4VZls.css} +1 -1
- package/client/dist/assets/ReadingList-zkFp3wpF.js +1 -0
- package/client/dist/assets/ResetProgressModal-BYNYqwwl.js +1 -0
- package/client/dist/assets/Search-DCKK3seW.css +1 -0
- package/client/dist/assets/Search-yDP_wGJ1.js +1 -0
- package/client/dist/assets/Search.module-C_qwCdHS.js +1 -0
- package/client/dist/assets/Settings-BEHII_8K.css +1 -0
- package/client/dist/assets/Settings-BpKwWesn.js +21 -0
- package/client/dist/assets/SkeletonGrid-BisPI38I.css +1 -0
- package/client/dist/assets/SkeletonGrid-CYJeh04P.js +1 -0
- package/client/dist/assets/Trackers-D2KUt71k.js +2 -0
- package/client/dist/assets/Tv-D3vXCsSC.css +1 -0
- package/client/dist/assets/Tv-Ul3jFq-x.js +4 -0
- package/client/dist/assets/TvInfo-D_4QdgV4.js +1 -0
- package/client/dist/assets/TvPopup-DHXB5ZSF.js +1 -0
- package/client/dist/assets/TvSearch-COwVoGru.js +1 -0
- package/client/dist/assets/TvWatchlist-CU3r-NO5.js +1 -0
- package/client/dist/assets/VirtualKeyboard-BaUll8Yv.css +1 -0
- package/client/dist/assets/VirtualKeyboard-DeP7fb3P.js +1 -0
- package/client/dist/assets/Watchlist-DHyuTLJG.js +1 -0
- package/client/dist/assets/Watchlist-DW7kUORr.css +1 -0
- package/client/dist/assets/{hls-CdJTQ6Lc.js → hls-DOAVt6Ry.js} +1 -1
- package/client/dist/assets/index-B7katXv0.css +1 -0
- package/client/dist/assets/index-BLh_CXtu.js +178 -0
- package/client/dist/assets/libraryInvalidation-AzFLnbjH.js +1 -0
- package/client/dist/assets/playbackCompletion-DuUs8u-8.js +1 -0
- package/client/dist/assets/useAnimeInfoData-MPNJXLaM.js +1 -0
- package/client/dist/assets/useAsmr-2dFEmQD_.js +1 -0
- package/client/dist/assets/useAsmrPopup-N2vUf3Pw.js +1 -0
- package/client/dist/assets/useMangaLibrary-B3Ni34a7.js +1 -0
- package/client/dist/assets/useMangaPopup-h8NHEPUk.js +1 -0
- package/client/dist/assets/useProviders-z8L8GKy0.js +1 -0
- package/client/dist/assets/useTv-D4zQ1BsQ.js +1 -0
- package/client/dist/assets/useTvLibrary-B4vcRzQc.js +1 -0
- package/client/dist/index.html +2 -2
- package/orchestrator.js +1 -1
- package/package.json +6 -4
- package/server/dist/server.js +344 -372
- package/server/package.json +2 -1
- package/client/dist/assets/AnimeCard-DSC8cos-.js +0 -1
- package/client/dist/assets/AnimeInfo-BHj_zyLA.js +0 -1
- package/client/dist/assets/AnimeInfoPage-QCfx0BSB.js +0 -2
- package/client/dist/assets/Asmr-DzdvD9rp.js +0 -2
- package/client/dist/assets/AsmrResetProgressModal-BMi8sNRK.js +0 -1
- package/client/dist/assets/AvSyncCalibrator-BI6-WMwv.js +0 -10
- package/client/dist/assets/AvSyncCalibrator-ZSpMgUid.css +0 -1
- package/client/dist/assets/Home-BTuHZIu5.js +0 -1
- package/client/dist/assets/Home-DeY8zvfI.css +0 -1
- package/client/dist/assets/Insights-Dc8xLmsr.css +0 -1
- package/client/dist/assets/Insights-DcENcCT3.js +0 -1
- package/client/dist/assets/LibraryListPage-CHJTM02k.js +0 -1
- package/client/dist/assets/ListeningList-BMCy3Xma.js +0 -1
- package/client/dist/assets/Manga-Bh8UBkW8.js +0 -1
- package/client/dist/assets/MangaInfoPage-Xf1v-kOS.js +0 -1
- package/client/dist/assets/MangaReadPage-BktwU4Z6.js +0 -1
- package/client/dist/assets/MangaResetProgressModal-D4AFduYZ.js +0 -1
- package/client/dist/assets/Mature-0t7mUuKs.js +0 -1
- package/client/dist/assets/MediaCard-Ck-VFldj.js +0 -1
- package/client/dist/assets/MediaCard-DB6Yjgky.css +0 -1
- package/client/dist/assets/OptionListMenu-6grp_X7Q.js +0 -1
- package/client/dist/assets/Player-BMsolf38.js +0 -56
- package/client/dist/assets/Player-DCB994_8.css +0 -1
- package/client/dist/assets/QueueOptionsButton-1BIDVRnc.js +0 -1
- package/client/dist/assets/QueueRail-Dtqs6-Cj.js +0 -1
- package/client/dist/assets/ReadingList-CFu3SJg6.js +0 -1
- package/client/dist/assets/ResetProgressModal-DDLhwvu_.js +0 -1
- package/client/dist/assets/Search-Cs45oAwI.css +0 -1
- package/client/dist/assets/Search-DH17j8Mu.js +0 -1
- package/client/dist/assets/Search.module-CMEai-B-.js +0 -1
- package/client/dist/assets/Settings-CS2RnS22.js +0 -21
- package/client/dist/assets/Settings-CwIWLSfY.css +0 -1
- package/client/dist/assets/SkeletonGrid-Bge3aRl2.css +0 -1
- package/client/dist/assets/SkeletonGrid-j41CQ_eq.js +0 -1
- package/client/dist/assets/Trackers-DiwSfbK5.js +0 -2
- package/client/dist/assets/Tv-Bdruknna.css +0 -1
- package/client/dist/assets/Tv-Ko75Tjxy.js +0 -4
- package/client/dist/assets/TvInfo-B5OSSyav.js +0 -1
- package/client/dist/assets/TvPopup-Lnu1Dmx3.js +0 -1
- package/client/dist/assets/TvSearch-BYknb0BD.js +0 -1
- package/client/dist/assets/TvWatchlist-Bb9EnbIC.js +0 -1
- package/client/dist/assets/VirtualKeyboard-BmqZPZXR.js +0 -1
- package/client/dist/assets/VirtualKeyboard-KIPc5ZGH.css +0 -1
- package/client/dist/assets/Watchlist-BiDEU0iV.css +0 -1
- package/client/dist/assets/Watchlist-BuRda78R.js +0 -1
- package/client/dist/assets/Watchlist.module-XGtVQr1d.js +0 -1
- package/client/dist/assets/index-C9FfV5Fg.js +0 -178
- package/client/dist/assets/index-D0Haw_Zl.css +0 -1
- package/client/dist/assets/useAnimeInfoData-8nSxobwT.js +0 -1
- package/client/dist/assets/useAsmr-Cwcgsq-Y.js +0 -1
- package/client/dist/assets/useAsmrPopup-D1KuQwQy.css +0 -1
- package/client/dist/assets/useAsmrPopup-pj0IVP6Q.js +0 -1
- package/client/dist/assets/useMangaLibrary-C8eMKmfr.js +0 -1
- package/client/dist/assets/useMangaPopup-BIQGwv4w.js +0 -1
- package/client/dist/assets/useProviders-DvEWO7KK.js +0 -1
- package/client/dist/assets/useTv-DZzw1cpP.js +0 -1
- package/client/dist/assets/useTvLibrary-DnAI4fMY.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as k}from"./vendor-core-DfaOB3Rn.js";import{k as T,r as d}from"./useMangaLibrary-B3Ni34a7.js";import{d as y}from"./index-BLh_CXtu.js";import{a as h}from"./MediaCard-C1jNesfK.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};
|
|
@@ -0,0 +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,J as n}from"./index-BLh_CXtu.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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{N as l,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-C1jNesfK.js";import{T as g}from"./TvPopup-DHXB5ZSF.js";import{c as m,i as f}from"./useTvLibrary-B4vcRzQc.js";import{b as i}from"./vendor-query-BBT5_sHx.js";import{i as p}from"./index-BLh_CXtu.js";const _=l(({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})})}),u=1e3*60*5,b=e=>{const a=p(),{query:s,type:n,genre:t,year:r,sort_by:y,page:c}=e;return i({...a.tv.search.queryOptions({q:s?.trim()||"",type:n||"multi",genre:t||"",year:r&&r!=="ALL"?r:"",sortBy:y||"popularity.desc",page:c||1}),staleTime:u,retry:1})},A=(e="all",a="week",s=1,n=!0)=>{const t=p(),r=i({...t.tv.trending.queryOptions({mediaType:e,timeWindow:a,page:s}),enabled:n,staleTime:u,retry:1});return{...r,data:r.data}};export{_ as T,b as a,A as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{T as p}from"./vendor-core-DfaOB3Rn.js";import{b as v,u as i,a as n}from"./vendor-query-BBT5_sHx.js";import{i as a,A as o,q as y,t as g}from"./index-BLh_CXtu.js";import{i as u}from"./libraryInvalidation-AzFLnbjH.js";const l=t=>String(t).toLowerCase()==="movie"?"movie":"tv",h=(t,e)=>`${l(t)}:${e}`,Q=(t,e)=>{const r=l(t);return`/tv/${e}?type=${r}`},$=(t,e,r,s)=>{const c=new URLSearchParams;return c.set("type",l(t)),r!==void 0&&c.set("s",String(r)),s!==void 0&&c.set("e",String(s)),`/tv/${e}/watch?${c.toString()}`},O=t=>t.adult===!0||t.adult===1,R={10759:"Action & Adventure",16:"Animation",35:"Comedy",80:"Crime",99:"Documentary",18:"Drama",10751:"Family",10762:"Kids",9648:"Mystery",10765:"Sci-Fi & Fantasy",37:"Western"},f={28:"Action",12:"Adventure",16:"Animation",35:"Comedy",80:"Crime",99:"Documentary",18:"Drama",10751:"Family",14:"Fantasy",36:"History",27:"Horror",9648:"Mystery",10749:"Romance",878:"Sci-Fi",53:"Thriller",10752:"War",37:"Western"},A=["Watching","Completed","On-Hold","Dropped","Planned"],T=(t,e)=>h(t,e),E=(t="All",e=1,r=24)=>{const s=a();return v(s.tvLibrary.list.queryOptions({status:t,page:e,limit:r}))},b=()=>{const t=a();return v({...t.tvLibrary.ids.queryOptions(),staleTime:1e3*60})},k=t=>{const e=a();return v({...e.tvLibrary.check.queryOptions({id:t||""}),enabled:!!t,staleTime:1e3*60})},M=(t=24)=>{const e=a();return v(e.tvProgress.continueWatching.queryOptions({limit:t}))},B=t=>{const e=a();return v({...e.tvProgress.getByMedia.queryOptions({mediaId:t||""}),enabled:!!t})},I=(t,e,r)=>{const s=a();return v({...s.tvProgress.latest.queryOptions({mediaId:t||"",season:e,episode:r}),enabled:!!t,staleTime:0})},F=()=>{const t=a(),e=i();return n({mutationFn:async r=>{const{silent:s,...c}=r;return g.tvLibrary.add.mutate(c)},onSuccess:(r,s)=>{s.silent||o.success("Added to TV watchlist"),e.invalidateQueries({queryKey:[y.tvLibrary]}),e.invalidateQueries(t.tvLibrary.pathFilter())},onError:r=>{o.error(`Failed to add: ${r.message}`)}})},S=()=>{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}`)}}))},w=()=>{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}`)}}))},D=()=>{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())}}))},W=()=>{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}`)}}))},V=()=>{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}`)}}))},_=()=>{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}`)}}))},U=()=>{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}`)}}))},H=()=>{const t=F(),e=S(),{data:r}=b(),s=p(()=>new Set(r?.ids||[]),[r]);return{toggle:d=>{const m=T(d.mediaType,d.tmdbId);s.has(m)?e.mutate(m):t.mutate({...d,poster:d.poster||""})},bookmarkedIds:s,pending:t.isPending||e.isPending}};export{f as M,R as T,S as a,W as b,Q as c,h as d,k as e,H as f,D as g,w as h,O as i,I as j,B as k,E as l,V as m,l as n,_ as o,U as p,A as q,$ as t,M as u};
|
package/client/dist/index.html
CHANGED
|
@@ -33,11 +33,11 @@
|
|
|
33
33
|
background-color: #0c0d12;
|
|
34
34
|
}
|
|
35
35
|
</style>
|
|
36
|
-
<script type="module" crossorigin src="/assets/index-
|
|
36
|
+
<script type="module" crossorigin src="/assets/index-BLh_CXtu.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-
|
|
40
|
+
<link rel="stylesheet" crossorigin href="/assets/index-B7katXv0.css">
|
|
41
41
|
</head>
|
|
42
42
|
|
|
43
43
|
<body>
|
package/orchestrator.js
CHANGED
|
@@ -288,7 +288,7 @@ const flushProviderSummary = (color, prefix) => {
|
|
|
288
288
|
pendingProviderSummary = false
|
|
289
289
|
console.log(
|
|
290
290
|
`${color}[${prefix}]${colors.reset} ${colors.system}Providers ready${colors.reset} ` +
|
|
291
|
-
`${colors.client}${providerFields.count} anime, ${providerFields.mangaCount} manga, ${providerFields.tvCount} tv${colors.reset}`
|
|
291
|
+
`${colors.client}${providerFields.count} anime, ${providerFields.mangaCount} manga, ${providerFields.tvCount} tv, ${providerFields.asmrCount} asmr${colors.reset}`
|
|
292
292
|
)
|
|
293
293
|
}
|
|
294
294
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@serifpersia/dango",
|
|
3
|
-
"version": "3.7.
|
|
3
|
+
"version": "3.7.2",
|
|
4
4
|
"description": "A web application for watching anime.",
|
|
5
5
|
"main": "orchestrator.js",
|
|
6
6
|
"repository": {
|
|
@@ -23,9 +23,11 @@
|
|
|
23
23
|
"client": "pnpm --filter dango-client run start",
|
|
24
24
|
"server": "pnpm --filter dango-server run start",
|
|
25
25
|
"preview": "node orchestrator.js prod",
|
|
26
|
-
"test": "pnpm --
|
|
27
|
-
"lint": "pnpm -r --if-present run lint",
|
|
26
|
+
"test": "pnpm -r --if-present run test",
|
|
27
|
+
"lint": "pnpm run format:check && pnpm -r --if-present run lint && pnpm run typecheck",
|
|
28
28
|
"format": "prettier --write .",
|
|
29
|
+
"format:check": "prettier --check .",
|
|
30
|
+
"typecheck": "pnpm --filter dango-server exec tsc --noEmit && pnpm --filter dango-client exec tsc -b",
|
|
29
31
|
"prepublishOnly": "node sync-deps.js && pnpm run build",
|
|
30
32
|
"update-version": "node update-version.js"
|
|
31
33
|
},
|
|
@@ -67,5 +69,5 @@
|
|
|
67
69
|
"allowScripts": {
|
|
68
70
|
"esbuild@0.28.2": true
|
|
69
71
|
},
|
|
70
|
-
"versionDate": "2026-10-
|
|
72
|
+
"versionDate": "2026-10-21T17:36:06.207Z"
|
|
71
73
|
}
|