@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.
Files changed (156) hide show
  1. package/README.md +1 -1
  2. package/client/dist/assets/{AnimeCard-C3P9zWi9.js → AnimeCard-DKDJK8Mp.js} +1 -1
  3. package/client/dist/assets/{AnimeInfo-Et6687Tl.js → AnimeInfo-CTcvfjva.js} +1 -1
  4. package/client/dist/assets/{AnimeInfoPage-DX4eNnlH.js → AnimeInfoPage-B_UiacIN.js} +2 -2
  5. package/client/dist/assets/{Asmr-CCdEWrFi.js → Asmr-DMSN2vxl.js} +2 -2
  6. package/client/dist/assets/{AsmrResetProgressModal-DgEWBJOw.js → AsmrResetProgressModal-CRwfOatX.js} +1 -1
  7. package/client/dist/assets/{AvSyncCalibrator-CQ2fjf2E.js → AvSyncCalibrator-CRJsi-vz.js} +1 -1
  8. package/client/dist/assets/{Home-DUkUTTTy.js → Home-pwmK9_Eh.js} +1 -1
  9. package/client/dist/assets/{Insights-QCh4xW12.js → Insights-m7kFzg2A.js} +1 -1
  10. package/client/dist/assets/{LibraryListPage-BoTxRqHz.js → LibraryListPage-C1wpPvu6.js} +1 -1
  11. package/client/dist/assets/ListeningList-OzfEI1Ga.js +1 -0
  12. package/client/dist/assets/{Manga-HydR-L7o.js → Manga-ChRCExhK.js} +1 -1
  13. package/client/dist/assets/{MangaInfoPage-CBakEI9a.js → MangaInfoPage-DSHJPo2A.js} +1 -1
  14. package/client/dist/assets/{MangaReadPage-DwAR3iPy.js → MangaReadPage-CzOVY1wA.js} +1 -1
  15. package/client/dist/assets/{MangaResetProgressModal-DGzl8vsO.js → MangaResetProgressModal-CJfzdUBb.js} +1 -1
  16. package/client/dist/assets/{Mature-Pi0TxKuF.js → Mature-CifQMfhs.js} +1 -1
  17. package/client/dist/assets/{MediaCard--cuFxOCS.js → MediaCard-CM10yB9V.js} +1 -1
  18. package/client/dist/assets/{OptionListMenu-B3D39dGS.js → OptionListMenu-6Kovbsqw.js} +1 -1
  19. package/client/dist/assets/{Player-CsH4x_I_.js → Player-CK0hT-u4.js} +2 -2
  20. package/client/dist/assets/{PlayerSettings-DGxBsi3F.js → PlayerSettings-Bb66uqT9.js} +1 -1
  21. package/client/dist/assets/{QueueOptionsButton-Djq4Cpex.js → QueueOptionsButton-C_nTj8_q.js} +1 -1
  22. package/client/dist/assets/{QueueRail-DOrYgNVX.js → QueueRail-DUK7URAE.js} +1 -1
  23. package/client/dist/assets/{ReadingList-DwYoBrNk.js → ReadingList-Ck9LJThU.js} +1 -1
  24. package/client/dist/assets/{ResetProgressModal-CMF86mX6.js → ResetProgressModal-BUphIv0k.js} +1 -1
  25. package/client/dist/assets/{Search-DFkhuk-x.js → Search-zJyP15h6.js} +1 -1
  26. package/client/dist/assets/{Settings-DBB2r0VQ.js → Settings-BYdoSEUh.js} +1 -1
  27. package/client/dist/assets/{SkeletonGrid-DJelJgAv.js → SkeletonGrid-CqgbOhjX.js} +1 -1
  28. package/client/dist/assets/{Trackers-DGYXFhYZ.js → Trackers-BVjyv6CM.js} +1 -1
  29. package/client/dist/assets/{Tv-C5MDGD2Z.js → Tv-L13ylswR.js} +1 -1
  30. package/client/dist/assets/{TvInfo-DrKuK13u.js → TvInfo-Cvcm5U2D.js} +1 -1
  31. package/client/dist/assets/{TvPopup-DtHilRDT.js → TvPopup-DhxfKvYm.js} +1 -1
  32. package/client/dist/assets/{TvSearch-CzNxdu_w.js → TvSearch-P8bFE6_X.js} +1 -1
  33. package/client/dist/assets/{TvWatchlist-D7p4br6S.js → TvWatchlist-D5gVPjtb.js} +1 -1
  34. package/client/dist/assets/{Watchlist-DrOzswl2.js → Watchlist-Cjq8l3rU.js} +1 -1
  35. package/client/dist/assets/{hls-BGCX7mJy.js → hls-BkzuANAg.js} +1 -1
  36. package/client/dist/assets/{index-CnfZwsds.js → index-CLVgzKLk.js} +19 -19
  37. package/client/dist/assets/{useAnimeInfoData-DYXWBPF-.js → useAnimeInfoData-DZJZu-so.js} +1 -1
  38. package/client/dist/assets/{useAsmr-BbhQ59bk.js → useAsmr-CvrMGHuo.js} +1 -1
  39. package/client/dist/assets/useAsmrPopup-Bimy8Ouw.js +1 -0
  40. package/client/dist/assets/{useMangaLibrary-DuesWQaE.js → useMangaLibrary--MiN11uR.js} +1 -1
  41. package/client/dist/assets/{useMangaPopup-D57OVGUr.js → useMangaPopup-CR5XhKKS.js} +1 -1
  42. package/client/dist/assets/{useProviders-mpQb_dix.js → useProviders-DqdT4fA5.js} +1 -1
  43. package/client/dist/assets/{useTv-DGflCsSI.js → useTv-BL0HMDyP.js} +1 -1
  44. package/client/dist/assets/{useTvLibrary-BqeSmyc4.js → useTvLibrary-D4U4iqN8.js} +1 -1
  45. package/client/dist/index.html +1 -1
  46. package/package.json +3 -5
  47. package/server/dist/config.js +1 -174
  48. package/server/dist/server.js +1068 -289
  49. package/server/dist/shipped-defaults.js +1 -6
  50. package/server/package.json +4 -5
  51. package/client/dist/assets/Asmr.module-CdWlioTY.js +0 -1
  52. package/client/dist/assets/ListeningList-DguKjI_t.js +0 -1
  53. package/client/dist/assets/Music-BGH_0voi.css +0 -1
  54. package/client/dist/assets/Music-CQpyXTLH.js +0 -1
  55. package/client/dist/assets/Radio-CCHNFN7R.css +0 -1
  56. package/client/dist/assets/Radio-DF6g6odd.js +0 -1
  57. package/client/dist/assets/Radio.module-DGSZLpKM.js +0 -1
  58. package/client/dist/assets/useAsmrPopup-SymV1J-b.js +0 -1
  59. package/server/dist/app-auth.js +0 -157
  60. package/server/dist/app-hono.js +0 -598
  61. package/server/dist/db/drizzle.js +0 -16
  62. package/server/dist/db/schema-anime.js +0 -61
  63. package/server/dist/db/schema-asmr.js +0 -13
  64. package/server/dist/db/schema-manga.js +0 -31
  65. package/server/dist/db/schema-tv.js +0 -18
  66. package/server/dist/db.js +0 -217
  67. package/server/dist/discord-gateway.js +0 -385
  68. package/server/dist/discord-rpc.js +0 -413
  69. package/server/dist/github-sync.js +0 -508
  70. package/server/dist/google.js +0 -741
  71. package/server/dist/hono/asmr.js +0 -10
  72. package/server/dist/hono/auth.js +0 -49
  73. package/server/dist/hono/music.js +0 -209
  74. package/server/dist/hono/proxy.js +0 -827
  75. package/server/dist/hono/tv.js +0 -200
  76. package/server/dist/hono/watchlist.js +0 -341
  77. package/server/dist/lib/anilist.js +0 -1583
  78. package/server/dist/lib/anischedule.js +0 -191
  79. package/server/dist/lib/insights.js +0 -185
  80. package/server/dist/lib/ipc.js +0 -23
  81. package/server/dist/lib/kitsu.js +0 -517
  82. package/server/dist/lib/mal-import.js +0 -291
  83. package/server/dist/lib/mal.js +0 -957
  84. package/server/dist/lib/migration.js +0 -310
  85. package/server/dist/lib/offline-db.js +0 -395
  86. package/server/dist/lib/potoken.js +0 -135
  87. package/server/dist/lib/recommendations.service.js +0 -216
  88. package/server/dist/lib/temp-ids.js +0 -3
  89. package/server/dist/lib/tmdb.js +0 -72
  90. package/server/dist/lib/tracker/anilist-tracker.js +0 -308
  91. package/server/dist/lib/tracker/manga-sync.service.js +0 -773
  92. package/server/dist/lib/tracker/sync-state.js +0 -21
  93. package/server/dist/lib/tracker/sync.service.js +0 -476
  94. package/server/dist/lib/translate.js +0 -79
  95. package/server/dist/lib/ump.js +0 -106
  96. package/server/dist/lib/ytmusic.js +0 -162
  97. package/server/dist/logger.js +0 -16
  98. package/server/dist/providers/manga/manga.types.js +0 -1
  99. package/server/dist/providers/provider.interface.js +0 -1
  100. package/server/dist/providers/remote-loader.js +0 -614
  101. package/server/dist/providers/remote-types.js +0 -159
  102. package/server/dist/providers/title-matching.js +0 -226
  103. package/server/dist/providers/tv.types.js +0 -1
  104. package/server/dist/rclone.js +0 -120
  105. package/server/dist/repositories/asmr.repository.js +0 -77
  106. package/server/dist/repositories/insights.repository.js +0 -106
  107. package/server/dist/repositories/library.repository.js +0 -94
  108. package/server/dist/repositories/mal-cache.repository.js +0 -52
  109. package/server/dist/repositories/manga.repository.js +0 -95
  110. package/server/dist/repositories/notifications.repository.js +0 -60
  111. package/server/dist/repositories/queue.repository.js +0 -72
  112. package/server/dist/repositories/settings.repository.js +0 -30
  113. package/server/dist/repositories/shows-meta.repository.js +0 -58
  114. package/server/dist/repositories/temp-show-ids.repository.js +0 -63
  115. package/server/dist/repositories/tv.repository.js +0 -93
  116. package/server/dist/repositories/watched-episodes.repository.js +0 -82
  117. package/server/dist/repositories/watchlist.repository.js +0 -60
  118. package/server/dist/scripts/backfill-episode-duration.js +0 -42
  119. package/server/dist/sync-payload.js +0 -91
  120. package/server/dist/sync.js +0 -657
  121. package/server/dist/trpc/context.js +0 -7
  122. package/server/dist/trpc/errors.js +0 -15
  123. package/server/dist/trpc/index.js +0 -18
  124. package/server/dist/trpc/router.js +0 -49
  125. package/server/dist/trpc/routers/asmr-library.js +0 -112
  126. package/server/dist/trpc/routers/asmr-progress.js +0 -121
  127. package/server/dist/trpc/routers/asmr.js +0 -87
  128. package/server/dist/trpc/routers/auth.js +0 -194
  129. package/server/dist/trpc/routers/continue-watching.js +0 -81
  130. package/server/dist/trpc/routers/data.js +0 -1026
  131. package/server/dist/trpc/routers/discord.js +0 -285
  132. package/server/dist/trpc/routers/discovery.js +0 -11
  133. package/server/dist/trpc/routers/insights.js +0 -14
  134. package/server/dist/trpc/routers/manga-library.js +0 -263
  135. package/server/dist/trpc/routers/manga-progress.js +0 -169
  136. package/server/dist/trpc/routers/manga.js +0 -201
  137. package/server/dist/trpc/routers/music.js +0 -655
  138. package/server/dist/trpc/routers/notifications.js +0 -80
  139. package/server/dist/trpc/routers/progress.js +0 -109
  140. package/server/dist/trpc/routers/queue.js +0 -93
  141. package/server/dist/trpc/routers/radio.js +0 -145
  142. package/server/dist/trpc/routers/settings.js +0 -96
  143. package/server/dist/trpc/routers/tracker.js +0 -213
  144. package/server/dist/trpc/routers/tv-library.js +0 -135
  145. package/server/dist/trpc/routers/tv-progress.js +0 -159
  146. package/server/dist/trpc/routers/tv.js +0 -551
  147. package/server/dist/trpc/routers/watchlist.js +0 -550
  148. package/server/dist/trpc/validation.js +0 -258
  149. package/server/dist/utils/cache.utils.js +0 -25
  150. package/server/dist/utils/cookie.utils.js +0 -13
  151. package/server/dist/utils/db-utils.js +0 -17
  152. package/server/dist/utils/env.utils.js +0 -77
  153. package/server/dist/utils/http.utils.js +0 -82
  154. package/server/dist/utils/request-context.js +0 -2
  155. package/server/dist/utils/security.utils.js +0 -76
  156. /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
- }
@@ -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 {};