@serifpersia/dango 3.6.7 → 3.6.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.
- package/README.md +1 -1
- package/client/dist/assets/{AnimeCard-C3P9zWi9.js → AnimeCard-DKDJK8Mp.js} +1 -1
- package/client/dist/assets/{AnimeInfo-Et6687Tl.js → AnimeInfo-CTcvfjva.js} +1 -1
- package/client/dist/assets/{AnimeInfoPage-DX4eNnlH.js → AnimeInfoPage-B_UiacIN.js} +2 -2
- package/client/dist/assets/{Asmr-CCdEWrFi.js → Asmr-DMSN2vxl.js} +2 -2
- package/client/dist/assets/{AsmrResetProgressModal-DgEWBJOw.js → AsmrResetProgressModal-CRwfOatX.js} +1 -1
- package/client/dist/assets/{AvSyncCalibrator-CQ2fjf2E.js → AvSyncCalibrator-CRJsi-vz.js} +1 -1
- package/client/dist/assets/{Home-DUkUTTTy.js → Home-pwmK9_Eh.js} +1 -1
- package/client/dist/assets/{Insights-QCh4xW12.js → Insights-m7kFzg2A.js} +1 -1
- package/client/dist/assets/{LibraryListPage-BoTxRqHz.js → LibraryListPage-C1wpPvu6.js} +1 -1
- package/client/dist/assets/ListeningList-OzfEI1Ga.js +1 -0
- package/client/dist/assets/{Manga-HydR-L7o.js → Manga-ChRCExhK.js} +1 -1
- package/client/dist/assets/{MangaInfoPage-CBakEI9a.js → MangaInfoPage-DSHJPo2A.js} +1 -1
- package/client/dist/assets/{MangaReadPage-DwAR3iPy.js → MangaReadPage-CzOVY1wA.js} +1 -1
- package/client/dist/assets/{MangaResetProgressModal-DGzl8vsO.js → MangaResetProgressModal-CJfzdUBb.js} +1 -1
- package/client/dist/assets/{Mature-Pi0TxKuF.js → Mature-CifQMfhs.js} +1 -1
- package/client/dist/assets/{MediaCard--cuFxOCS.js → MediaCard-CM10yB9V.js} +1 -1
- package/client/dist/assets/{OptionListMenu-B3D39dGS.js → OptionListMenu-6Kovbsqw.js} +1 -1
- package/client/dist/assets/{Player-CsH4x_I_.js → Player-CK0hT-u4.js} +2 -2
- package/client/dist/assets/{PlayerSettings-DGxBsi3F.js → PlayerSettings-Bb66uqT9.js} +1 -1
- package/client/dist/assets/{QueueOptionsButton-Djq4Cpex.js → QueueOptionsButton-C_nTj8_q.js} +1 -1
- package/client/dist/assets/{QueueRail-DOrYgNVX.js → QueueRail-DUK7URAE.js} +1 -1
- package/client/dist/assets/{ReadingList-DwYoBrNk.js → ReadingList-Ck9LJThU.js} +1 -1
- package/client/dist/assets/{ResetProgressModal-CMF86mX6.js → ResetProgressModal-BUphIv0k.js} +1 -1
- package/client/dist/assets/{Search-DFkhuk-x.js → Search-zJyP15h6.js} +1 -1
- package/client/dist/assets/{Settings-DBB2r0VQ.js → Settings-BYdoSEUh.js} +1 -1
- package/client/dist/assets/{SkeletonGrid-DJelJgAv.js → SkeletonGrid-CqgbOhjX.js} +1 -1
- package/client/dist/assets/{Trackers-DGYXFhYZ.js → Trackers-BVjyv6CM.js} +1 -1
- package/client/dist/assets/{Tv-C5MDGD2Z.js → Tv-L13ylswR.js} +1 -1
- package/client/dist/assets/{TvInfo-DrKuK13u.js → TvInfo-Cvcm5U2D.js} +1 -1
- package/client/dist/assets/{TvPopup-DtHilRDT.js → TvPopup-DhxfKvYm.js} +1 -1
- package/client/dist/assets/{TvSearch-CzNxdu_w.js → TvSearch-P8bFE6_X.js} +1 -1
- package/client/dist/assets/{TvWatchlist-D7p4br6S.js → TvWatchlist-D5gVPjtb.js} +1 -1
- package/client/dist/assets/{Watchlist-DrOzswl2.js → Watchlist-Cjq8l3rU.js} +1 -1
- package/client/dist/assets/{hls-BGCX7mJy.js → hls-BkzuANAg.js} +1 -1
- package/client/dist/assets/{index-CnfZwsds.js → index-CLVgzKLk.js} +19 -19
- package/client/dist/assets/{useAnimeInfoData-DYXWBPF-.js → useAnimeInfoData-DZJZu-so.js} +1 -1
- package/client/dist/assets/{useAsmr-BbhQ59bk.js → useAsmr-CvrMGHuo.js} +1 -1
- package/client/dist/assets/useAsmrPopup-Bimy8Ouw.js +1 -0
- package/client/dist/assets/{useMangaLibrary-DuesWQaE.js → useMangaLibrary--MiN11uR.js} +1 -1
- package/client/dist/assets/{useMangaPopup-D57OVGUr.js → useMangaPopup-CR5XhKKS.js} +1 -1
- package/client/dist/assets/{useProviders-mpQb_dix.js → useProviders-DqdT4fA5.js} +1 -1
- package/client/dist/assets/{useTv-DGflCsSI.js → useTv-BL0HMDyP.js} +1 -1
- package/client/dist/assets/{useTvLibrary-BqeSmyc4.js → useTvLibrary-D4U4iqN8.js} +1 -1
- package/client/dist/index.html +1 -1
- package/package.json +3 -5
- package/server/dist/config.js +1 -174
- package/server/dist/server.js +1068 -289
- package/server/dist/shipped-defaults.js +1 -6
- package/server/package.json +4 -5
- package/client/dist/assets/Asmr.module-CdWlioTY.js +0 -1
- package/client/dist/assets/ListeningList-DguKjI_t.js +0 -1
- package/client/dist/assets/Music-BGH_0voi.css +0 -1
- package/client/dist/assets/Music-CQpyXTLH.js +0 -1
- package/client/dist/assets/Radio-CCHNFN7R.css +0 -1
- package/client/dist/assets/Radio-DF6g6odd.js +0 -1
- package/client/dist/assets/Radio.module-DGSZLpKM.js +0 -1
- package/client/dist/assets/useAsmrPopup-SymV1J-b.js +0 -1
- package/server/dist/app-auth.js +0 -157
- package/server/dist/app-hono.js +0 -598
- package/server/dist/db/drizzle.js +0 -16
- package/server/dist/db/schema-anime.js +0 -61
- package/server/dist/db/schema-asmr.js +0 -13
- package/server/dist/db/schema-manga.js +0 -31
- package/server/dist/db/schema-tv.js +0 -18
- package/server/dist/db.js +0 -217
- package/server/dist/discord-gateway.js +0 -385
- package/server/dist/discord-rpc.js +0 -413
- package/server/dist/github-sync.js +0 -508
- package/server/dist/google.js +0 -741
- package/server/dist/hono/asmr.js +0 -10
- package/server/dist/hono/auth.js +0 -49
- package/server/dist/hono/music.js +0 -209
- package/server/dist/hono/proxy.js +0 -827
- package/server/dist/hono/tv.js +0 -200
- package/server/dist/hono/watchlist.js +0 -341
- package/server/dist/lib/anilist.js +0 -1583
- package/server/dist/lib/anischedule.js +0 -191
- package/server/dist/lib/insights.js +0 -185
- package/server/dist/lib/ipc.js +0 -23
- package/server/dist/lib/kitsu.js +0 -517
- package/server/dist/lib/mal-import.js +0 -291
- package/server/dist/lib/mal.js +0 -957
- package/server/dist/lib/migration.js +0 -310
- package/server/dist/lib/offline-db.js +0 -395
- package/server/dist/lib/potoken.js +0 -135
- package/server/dist/lib/recommendations.service.js +0 -216
- package/server/dist/lib/temp-ids.js +0 -3
- package/server/dist/lib/tmdb.js +0 -72
- package/server/dist/lib/tracker/anilist-tracker.js +0 -308
- package/server/dist/lib/tracker/manga-sync.service.js +0 -773
- package/server/dist/lib/tracker/sync-state.js +0 -21
- package/server/dist/lib/tracker/sync.service.js +0 -476
- package/server/dist/lib/translate.js +0 -79
- package/server/dist/lib/ump.js +0 -106
- package/server/dist/lib/ytmusic.js +0 -162
- package/server/dist/logger.js +0 -16
- package/server/dist/providers/manga/manga.types.js +0 -1
- package/server/dist/providers/provider.interface.js +0 -1
- package/server/dist/providers/remote-loader.js +0 -614
- package/server/dist/providers/remote-types.js +0 -159
- package/server/dist/providers/title-matching.js +0 -226
- package/server/dist/providers/tv.types.js +0 -1
- package/server/dist/rclone.js +0 -120
- package/server/dist/repositories/asmr.repository.js +0 -77
- package/server/dist/repositories/insights.repository.js +0 -106
- package/server/dist/repositories/library.repository.js +0 -94
- package/server/dist/repositories/mal-cache.repository.js +0 -52
- package/server/dist/repositories/manga.repository.js +0 -95
- package/server/dist/repositories/notifications.repository.js +0 -60
- package/server/dist/repositories/queue.repository.js +0 -72
- package/server/dist/repositories/settings.repository.js +0 -30
- package/server/dist/repositories/shows-meta.repository.js +0 -58
- package/server/dist/repositories/temp-show-ids.repository.js +0 -63
- package/server/dist/repositories/tv.repository.js +0 -93
- package/server/dist/repositories/watched-episodes.repository.js +0 -82
- package/server/dist/repositories/watchlist.repository.js +0 -60
- package/server/dist/scripts/backfill-episode-duration.js +0 -42
- package/server/dist/sync-payload.js +0 -91
- package/server/dist/sync.js +0 -657
- package/server/dist/trpc/context.js +0 -7
- package/server/dist/trpc/errors.js +0 -15
- package/server/dist/trpc/index.js +0 -18
- package/server/dist/trpc/router.js +0 -49
- package/server/dist/trpc/routers/asmr-library.js +0 -112
- package/server/dist/trpc/routers/asmr-progress.js +0 -121
- package/server/dist/trpc/routers/asmr.js +0 -87
- package/server/dist/trpc/routers/auth.js +0 -194
- package/server/dist/trpc/routers/continue-watching.js +0 -81
- package/server/dist/trpc/routers/data.js +0 -1026
- package/server/dist/trpc/routers/discord.js +0 -285
- package/server/dist/trpc/routers/discovery.js +0 -11
- package/server/dist/trpc/routers/insights.js +0 -14
- package/server/dist/trpc/routers/manga-library.js +0 -263
- package/server/dist/trpc/routers/manga-progress.js +0 -169
- package/server/dist/trpc/routers/manga.js +0 -201
- package/server/dist/trpc/routers/music.js +0 -655
- package/server/dist/trpc/routers/notifications.js +0 -80
- package/server/dist/trpc/routers/progress.js +0 -109
- package/server/dist/trpc/routers/queue.js +0 -93
- package/server/dist/trpc/routers/radio.js +0 -145
- package/server/dist/trpc/routers/settings.js +0 -96
- package/server/dist/trpc/routers/tracker.js +0 -213
- package/server/dist/trpc/routers/tv-library.js +0 -135
- package/server/dist/trpc/routers/tv-progress.js +0 -159
- package/server/dist/trpc/routers/tv.js +0 -551
- package/server/dist/trpc/routers/watchlist.js +0 -550
- package/server/dist/trpc/validation.js +0 -258
- package/server/dist/utils/cache.utils.js +0 -25
- package/server/dist/utils/cookie.utils.js +0 -13
- package/server/dist/utils/db-utils.js +0 -17
- package/server/dist/utils/env.utils.js +0 -77
- package/server/dist/utils/http.utils.js +0 -82
- package/server/dist/utils/request-context.js +0 -2
- package/server/dist/utils/security.utils.js +0 -76
- /package/client/dist/assets/{Asmr-D1KuQwQy.css → useAsmrPopup-D1KuQwQy.css} +0 -0
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import { CONFIG } from '../config.js';
|
|
4
|
-
import logger from '../logger.js';
|
|
5
|
-
const COOKIE_PATH = path.join(CONFIG.ROOT, 'ytmusic_cookie.txt');
|
|
6
|
-
let publicTube = null;
|
|
7
|
-
let publicPromise = null;
|
|
8
|
-
let publicFailedAt = 0;
|
|
9
|
-
const PUBLIC_FAIL_COOLDOWN_MS = 60 * 1000;
|
|
10
|
-
let authedTube = null;
|
|
11
|
-
let ytModule = null;
|
|
12
|
-
let shimReady = false;
|
|
13
|
-
async function loadYoutube() {
|
|
14
|
-
if (!ytModule)
|
|
15
|
-
ytModule = await import('youtubei.js');
|
|
16
|
-
return ytModule;
|
|
17
|
-
}
|
|
18
|
-
async function ensureShim() {
|
|
19
|
-
if (shimReady)
|
|
20
|
-
return;
|
|
21
|
-
const { Platform, Log } = await loadYoutube();
|
|
22
|
-
Platform.shim.eval = (async (data) => new Function(data.output)());
|
|
23
|
-
Log.setLevel(Log.Level.ERROR);
|
|
24
|
-
shimReady = true;
|
|
25
|
-
}
|
|
26
|
-
function readCookie() {
|
|
27
|
-
try {
|
|
28
|
-
if (!fs.existsSync(COOKIE_PATH))
|
|
29
|
-
return null;
|
|
30
|
-
const raw = fs.readFileSync(COOKIE_PATH, 'utf-8').trim();
|
|
31
|
-
return raw || null;
|
|
32
|
-
}
|
|
33
|
-
catch {
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
export function getMusicCookie() {
|
|
38
|
-
return readCookie();
|
|
39
|
-
}
|
|
40
|
-
export function isParserVariantError(err) {
|
|
41
|
-
if (!err || typeof err !== 'object')
|
|
42
|
-
return false;
|
|
43
|
-
const name = err.constructor?.name;
|
|
44
|
-
if (name === 'ParsingError')
|
|
45
|
-
return true;
|
|
46
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
47
|
-
return /Expected node of any type|Cannot cast \S+ to one of|got ItemSection|is not valid JSON|Incorrect JSPB formatting/i.test(msg);
|
|
48
|
-
}
|
|
49
|
-
export function getInnertube() {
|
|
50
|
-
if (publicTube)
|
|
51
|
-
return Promise.resolve(publicTube);
|
|
52
|
-
if (Date.now() - publicFailedAt < PUBLIC_FAIL_COOLDOWN_MS) {
|
|
53
|
-
return Promise.reject(new Error('YouTube session unavailable (cooling down)'));
|
|
54
|
-
}
|
|
55
|
-
if (!publicPromise) {
|
|
56
|
-
publicPromise = (async () => {
|
|
57
|
-
const { Innertube } = await loadYoutube();
|
|
58
|
-
await ensureShim();
|
|
59
|
-
try {
|
|
60
|
-
const yt = await Innertube.create({ generate_session_locally: false });
|
|
61
|
-
publicTube = yt;
|
|
62
|
-
return yt;
|
|
63
|
-
}
|
|
64
|
-
catch (err) {
|
|
65
|
-
publicPromise = null;
|
|
66
|
-
publicFailedAt = Date.now();
|
|
67
|
-
throw err;
|
|
68
|
-
}
|
|
69
|
-
})();
|
|
70
|
-
}
|
|
71
|
-
return publicPromise;
|
|
72
|
-
}
|
|
73
|
-
export async function getAuthedInnertube(forceRefresh = false) {
|
|
74
|
-
const cookie = readCookie();
|
|
75
|
-
if (!cookie) {
|
|
76
|
-
authedTube = null;
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
79
|
-
if (authedTube && !forceRefresh)
|
|
80
|
-
return authedTube;
|
|
81
|
-
await ensureShim();
|
|
82
|
-
const { Innertube } = await loadYoutube();
|
|
83
|
-
authedTube = await Innertube.create({ cookie });
|
|
84
|
-
return authedTube;
|
|
85
|
-
}
|
|
86
|
-
export function invalidateAuthedSession() {
|
|
87
|
-
authedTube = null;
|
|
88
|
-
}
|
|
89
|
-
export async function refreshAuthedInnertube() {
|
|
90
|
-
invalidateAuthedSession();
|
|
91
|
-
try {
|
|
92
|
-
return await getAuthedInnertube();
|
|
93
|
-
}
|
|
94
|
-
catch (err) {
|
|
95
|
-
logger.warn({ err }, '[ytmusic] saved-cookie session refresh failed');
|
|
96
|
-
return null;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
const AUTH_TTL_MS = 5 * 60 * 1000;
|
|
100
|
-
let authProbeAt = 0;
|
|
101
|
-
let authProbeOk = false;
|
|
102
|
-
export async function verifyMusicSession() {
|
|
103
|
-
if (!readCookie())
|
|
104
|
-
return false;
|
|
105
|
-
const now = Date.now();
|
|
106
|
-
if (now - authProbeAt < AUTH_TTL_MS)
|
|
107
|
-
return authProbeOk;
|
|
108
|
-
authProbeAt = now;
|
|
109
|
-
try {
|
|
110
|
-
const yt = await getAuthedInnertube();
|
|
111
|
-
if (!yt)
|
|
112
|
-
return false;
|
|
113
|
-
await yt.account.getInfo();
|
|
114
|
-
authProbeOk = true;
|
|
115
|
-
}
|
|
116
|
-
catch {
|
|
117
|
-
authProbeOk = false;
|
|
118
|
-
}
|
|
119
|
-
return authProbeOk;
|
|
120
|
-
}
|
|
121
|
-
export async function getMusicAuthStatus() {
|
|
122
|
-
return { authenticated: await verifyMusicSession() };
|
|
123
|
-
}
|
|
124
|
-
export async function saveMusicCookie(cookie) {
|
|
125
|
-
const clean = cookie.trim();
|
|
126
|
-
if (!clean)
|
|
127
|
-
throw new Error('Cookie is empty');
|
|
128
|
-
await ensureShim();
|
|
129
|
-
const { Innertube } = await loadYoutube();
|
|
130
|
-
const trial = await Innertube.create({ cookie: clean });
|
|
131
|
-
try {
|
|
132
|
-
await trial.music.getLibrary();
|
|
133
|
-
}
|
|
134
|
-
catch (err) {
|
|
135
|
-
if (!isParserVariantError(err))
|
|
136
|
-
throw err;
|
|
137
|
-
logger.warn('[ytmusic] sign-in validation hit a layout variant, accepting cookie anyway');
|
|
138
|
-
}
|
|
139
|
-
try {
|
|
140
|
-
fs.mkdirSync(CONFIG.ROOT, { recursive: true });
|
|
141
|
-
}
|
|
142
|
-
catch {
|
|
143
|
-
// ignore
|
|
144
|
-
}
|
|
145
|
-
fs.writeFileSync(COOKIE_PATH, clean, 'utf-8');
|
|
146
|
-
authedTube = trial;
|
|
147
|
-
authProbeAt = Date.now();
|
|
148
|
-
authProbeOk = true;
|
|
149
|
-
logger.info('[ytmusic] cookie sign-in validated and saved');
|
|
150
|
-
}
|
|
151
|
-
export async function signOutMusic() {
|
|
152
|
-
try {
|
|
153
|
-
if (fs.existsSync(COOKIE_PATH))
|
|
154
|
-
fs.unlinkSync(COOKIE_PATH);
|
|
155
|
-
}
|
|
156
|
-
catch {
|
|
157
|
-
// ignore
|
|
158
|
-
}
|
|
159
|
-
authedTube = null;
|
|
160
|
-
authProbeAt = 0;
|
|
161
|
-
authProbeOk = false;
|
|
162
|
-
}
|
package/server/dist/logger.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import pino from 'pino';
|
|
2
|
-
const isDevelopment = process.argv.includes('--dev') || process.env.NODE_ENV === 'development';
|
|
3
|
-
const logger = isDevelopment
|
|
4
|
-
? pino({
|
|
5
|
-
level: 'debug',
|
|
6
|
-
transport: {
|
|
7
|
-
target: 'pino-pretty',
|
|
8
|
-
options: {
|
|
9
|
-
colorize: true,
|
|
10
|
-
translateTime: 'SYS:standard',
|
|
11
|
-
ignore: 'pid,hostname',
|
|
12
|
-
},
|
|
13
|
-
},
|
|
14
|
-
})
|
|
15
|
-
: pino({ level: process.env.LOG_LEVEL || 'info' });
|
|
16
|
-
export default logger;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|