@serifpersia/dango 3.6.5 → 3.6.8

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 (151) hide show
  1. package/README.md +1 -1
  2. package/client/dist/assets/{AnimeCard-JkXG40Es.js → AnimeCard-DraA_TF9.js} +1 -1
  3. package/client/dist/assets/{AnimeInfo-2L0UJkbB.js → AnimeInfo-BJ7pzs-P.js} +1 -1
  4. package/client/dist/assets/{AnimeInfoPage-BDs03vKk.js → AnimeInfoPage-B_esUr5C.js} +2 -2
  5. package/client/dist/assets/{Asmr-D2mVKEl9.js → Asmr-Ckuh2xfW.js} +1 -1
  6. package/client/dist/assets/{AsmrResetProgressModal-MQA_bNQM.js → AsmrResetProgressModal-BS6UFJN4.js} +1 -1
  7. package/client/dist/assets/AvSyncCalibrator-DwHCd9yB.js +10 -0
  8. package/client/dist/assets/{Home-DxMBHFmc.js → Home-DuM1EuvN.js} +1 -1
  9. package/client/dist/assets/{Insights-hmLWsSXY.js → Insights-D3Pd9c9V.js} +1 -1
  10. package/client/dist/assets/{LibraryListPage-CWI7hgUh.js → LibraryListPage-Dm2yVn0-.js} +1 -1
  11. package/client/dist/assets/{ListeningList-NOc28KAV.js → ListeningList-D-zt6EXZ.js} +1 -1
  12. package/client/dist/assets/{Manga-B5qNhI7v.js → Manga-JwprMKBk.js} +1 -1
  13. package/client/dist/assets/{MangaInfoPage-D4wIyb-V.js → MangaInfoPage-DaeyJl2p.js} +1 -1
  14. package/client/dist/assets/{MangaReadPage-Ce1VX7-0.js → MangaReadPage-COg0fHI9.js} +1 -1
  15. package/client/dist/assets/{MangaResetProgressModal-P3oY4_14.js → MangaResetProgressModal-kguXv0_M.js} +1 -1
  16. package/client/dist/assets/{Mature-D8EwGYQq.js → Mature-IHDaasrs.js} +1 -1
  17. package/client/dist/assets/{MediaCard-Dp8DjyXB.js → MediaCard-CpwsrXo5.js} +1 -1
  18. package/client/dist/assets/{Music-DULtVsAM.js → Music-Dks4tPeK.js} +1 -1
  19. package/client/dist/assets/{OptionListMenu-fIHdE-nq.js → OptionListMenu-11CcAsy8.js} +1 -1
  20. package/client/dist/assets/{Player-B8XeOmso.js → Player-DQoEQkHL.js} +6 -6
  21. package/client/dist/assets/{PlayerSettings-BycNCiCs.js → PlayerSettings-D4Ud4kv4.js} +1 -1
  22. package/client/dist/assets/{QueueOptionsButton-T1J37IZT.js → QueueOptionsButton-B8PlPKjC.js} +1 -1
  23. package/client/dist/assets/{QueueRail-BAwI-apz.js → QueueRail-B4Dok7U3.js} +1 -1
  24. package/client/dist/assets/{Radio-Bv9DyKtZ.js → Radio-BHK6LSk4.js} +1 -1
  25. package/client/dist/assets/{ReadingList-Cl0CcVp3.js → ReadingList-BCsxIz57.js} +1 -1
  26. package/client/dist/assets/{ResetProgressModal--N60WWCB.js → ResetProgressModal-BXHxSfy-.js} +1 -1
  27. package/client/dist/assets/{Search-DvgVDlUR.js → Search-PK1ds07O.js} +1 -1
  28. package/client/dist/assets/{Settings-dCz_-bJn.js → Settings-Bxk_x55l.js} +1 -1
  29. package/client/dist/assets/{SkeletonGrid-BZHKk1I6.js → SkeletonGrid-CpJCZSRN.js} +1 -1
  30. package/client/dist/assets/{Trackers-C1T5VcPu.js → Trackers-RieCh_84.js} +1 -1
  31. package/client/dist/assets/{Tv-Dhv_cg4y.js → Tv-DLytPJUj.js} +4 -4
  32. package/client/dist/assets/{TvInfo-DgaLK2H6.js → TvInfo-C8djKebR.js} +1 -1
  33. package/client/dist/assets/{TvPopup-DyX7f8kC.js → TvPopup-40JGGJDk.js} +1 -1
  34. package/client/dist/assets/{TvSearch-Bp0H6kue.js → TvSearch-A3hbospf.js} +1 -1
  35. package/client/dist/assets/{TvWatchlist-ohMtMeKa.js → TvWatchlist-DuXjqmZM.js} +1 -1
  36. package/client/dist/assets/{Watchlist-BbQtzsER.js → Watchlist-B9wGBh0u.js} +1 -1
  37. package/client/dist/assets/{hls-Bi1cjpLZ.js → hls-CZ5X3Ya-.js} +1 -1
  38. package/client/dist/assets/{index-BTnhzofk.js → index-dRhc9-ol.js} +2 -2
  39. package/client/dist/assets/{useAnimeInfoData-Cvmso3IK.js → useAnimeInfoData-ZzDtLfvD.js} +1 -1
  40. package/client/dist/assets/{useAsmr-CbzGCzmv.js → useAsmr-CKOdHgol.js} +1 -1
  41. package/client/dist/assets/{useAsmrPopup-DaREZ9Ie.js → useAsmrPopup-SFHPhpcl.js} +1 -1
  42. package/client/dist/assets/{useMangaLibrary-BVQRhsFh.js → useMangaLibrary-CKATe31P.js} +1 -1
  43. package/client/dist/assets/{useMangaPopup-CzsCbndG.js → useMangaPopup-C75QuYgY.js} +1 -1
  44. package/client/dist/assets/{useProviders-UuUPzft-.js → useProviders-CMtvZbEi.js} +1 -1
  45. package/client/dist/assets/{useTv-CSsbWKH9.js → useTv-DUX4zYMr.js} +1 -1
  46. package/client/dist/assets/{useTvLibrary-a_Y0c2FS.js → useTvLibrary-By4Gt-R_.js} +1 -1
  47. package/client/dist/index.html +1 -1
  48. package/package.json +2 -2
  49. package/server/dist/app-auth.js +1 -157
  50. package/server/dist/app-hono.js +7 -557
  51. package/server/dist/config.js +1 -174
  52. package/server/dist/db/drizzle.js +1 -16
  53. package/server/dist/db/schema-anime.js +1 -61
  54. package/server/dist/db/schema-asmr.js +1 -13
  55. package/server/dist/db/schema-manga.js +1 -31
  56. package/server/dist/db/schema-tv.js +1 -18
  57. package/server/dist/db.js +1 -217
  58. package/server/dist/discord-gateway.js +1 -385
  59. package/server/dist/discord-rpc.js +1 -413
  60. package/server/dist/github-sync.js +1 -508
  61. package/server/dist/google.js +1 -741
  62. package/server/dist/hono/asmr.js +1 -10
  63. package/server/dist/hono/auth.js +3 -26
  64. package/server/dist/hono/music.js +1 -209
  65. package/server/dist/hono/proxy.js +36 -905
  66. package/server/dist/hono/tv.js +5 -169
  67. package/server/dist/hono/watchlist.js +2 -338
  68. package/server/dist/lib/anilist.js +26 -1458
  69. package/server/dist/lib/anischedule.js +1 -191
  70. package/server/dist/lib/insights.js +1 -185
  71. package/server/dist/lib/ipc.js +1 -23
  72. package/server/dist/lib/kitsu.js +1 -517
  73. package/server/dist/lib/mal-import.js +1 -291
  74. package/server/dist/lib/mal.js +1 -957
  75. package/server/dist/lib/migration.js +1 -310
  76. package/server/dist/lib/offline-db.js +4 -384
  77. package/server/dist/lib/potoken.js +1 -135
  78. package/server/dist/lib/recommendations.service.js +1 -216
  79. package/server/dist/lib/temp-ids.js +1 -3
  80. package/server/dist/lib/tmdb.js +1 -72
  81. package/server/dist/lib/tracker/anilist-tracker.js +8 -245
  82. package/server/dist/lib/tracker/manga-sync.service.js +1 -773
  83. package/server/dist/lib/tracker/sync-state.js +1 -21
  84. package/server/dist/lib/tracker/sync.service.js +1 -476
  85. package/server/dist/lib/translate.js +3 -79
  86. package/server/dist/lib/ump.js +1 -106
  87. package/server/dist/lib/ytmusic.js +1 -162
  88. package/server/dist/logger.js +1 -16
  89. package/server/dist/providers/manga/manga.types.js +0 -1
  90. package/server/dist/providers/provider.interface.js +0 -1
  91. package/server/dist/providers/remote-loader.js +2 -605
  92. package/server/dist/providers/remote-types.js +1 -124
  93. package/server/dist/providers/title-matching.js +1 -226
  94. package/server/dist/providers/tv.types.js +0 -1
  95. package/server/dist/rclone.js +2 -120
  96. package/server/dist/repositories/asmr.repository.js +11 -46
  97. package/server/dist/repositories/insights.repository.js +11 -25
  98. package/server/dist/repositories/library.repository.js +3 -94
  99. package/server/dist/repositories/mal-cache.repository.js +1 -52
  100. package/server/dist/repositories/manga.repository.js +14 -58
  101. package/server/dist/repositories/notifications.repository.js +6 -52
  102. package/server/dist/repositories/queue.repository.js +5 -58
  103. package/server/dist/repositories/settings.repository.js +2 -29
  104. package/server/dist/repositories/shows-meta.repository.js +3 -56
  105. package/server/dist/repositories/temp-show-ids.repository.js +3 -63
  106. package/server/dist/repositories/tv.repository.js +11 -54
  107. package/server/dist/repositories/watched-episodes.repository.js +6 -55
  108. package/server/dist/repositories/watchlist.repository.js +3 -54
  109. package/server/dist/scripts/backfill-episode-duration.js +1 -42
  110. package/server/dist/server.js +1 -307
  111. package/server/dist/shipped-defaults.js +1 -6
  112. package/server/dist/sync-payload.js +1 -91
  113. package/server/dist/sync.js +3 -647
  114. package/server/dist/trpc/context.js +1 -7
  115. package/server/dist/trpc/errors.js +1 -15
  116. package/server/dist/trpc/index.js +1 -18
  117. package/server/dist/trpc/router.js +1 -49
  118. package/server/dist/trpc/routers/asmr-library.js +1 -112
  119. package/server/dist/trpc/routers/asmr-progress.js +1 -121
  120. package/server/dist/trpc/routers/asmr.js +1 -87
  121. package/server/dist/trpc/routers/auth.js +1 -194
  122. package/server/dist/trpc/routers/continue-watching.js +2 -58
  123. package/server/dist/trpc/routers/data.js +1 -1026
  124. package/server/dist/trpc/routers/discord.js +1 -285
  125. package/server/dist/trpc/routers/discovery.js +1 -11
  126. package/server/dist/trpc/routers/insights.js +1 -14
  127. package/server/dist/trpc/routers/manga-library.js +1 -263
  128. package/server/dist/trpc/routers/manga-progress.js +1 -169
  129. package/server/dist/trpc/routers/manga.js +1 -201
  130. package/server/dist/trpc/routers/music.js +1 -655
  131. package/server/dist/trpc/routers/notifications.js +1 -80
  132. package/server/dist/trpc/routers/progress.js +1 -109
  133. package/server/dist/trpc/routers/queue.js +1 -93
  134. package/server/dist/trpc/routers/radio.js +1 -145
  135. package/server/dist/trpc/routers/settings.js +1 -96
  136. package/server/dist/trpc/routers/tracker.js +1 -213
  137. package/server/dist/trpc/routers/tv-library.js +1 -135
  138. package/server/dist/trpc/routers/tv-progress.js +1 -159
  139. package/server/dist/trpc/routers/tv.js +1 -551
  140. package/server/dist/trpc/routers/watchlist.js +2 -549
  141. package/server/dist/trpc/validation.js +1 -258
  142. package/server/dist/utils/cache.utils.js +1 -25
  143. package/server/dist/utils/cookie.utils.js +1 -13
  144. package/server/dist/utils/db-utils.js +5 -17
  145. package/server/dist/utils/env.utils.js +5 -77
  146. package/server/dist/utils/http.utils.js +1 -82
  147. package/server/dist/utils/request-context.js +1 -2
  148. package/server/dist/utils/security.utils.js +1 -76
  149. package/server/package.json +3 -2
  150. package/client/dist/assets/AvSyncCalibrator-DmoH5eRA.js +0 -10
  151. package/server/dist/utils/megaplay.utils.js +0 -40
@@ -1,106 +1 @@
1
- const MEDIA_HEADER = 20;
2
- const MEDIA = 21;
3
- const STREAM_PROTECTION_STATUS = 58;
4
- function readVarint(buf, pos) {
5
- if (pos >= buf.length)
6
- return null;
7
- const prefix = buf[pos];
8
- let size = 0;
9
- for (let shift = 1; shift <= 5; shift++) {
10
- if ((prefix & (128 >> (shift - 1))) === 0) {
11
- size = shift;
12
- break;
13
- }
14
- }
15
- if (size < 1 || pos + size > buf.length)
16
- return null;
17
- if (size === 1)
18
- return [prefix, pos + 1];
19
- if (size === 5) {
20
- const value = buf[pos + 1] + buf[pos + 2] * 256 + buf[pos + 3] * 65536 + buf[pos + 4] * 16777216;
21
- return [value >>> 0, pos + 5];
22
- }
23
- const lowBits = 8 - size;
24
- let value = prefix & ((1 << lowBits) - 1);
25
- for (let i = 1; i < size; i++) {
26
- value += buf[pos + i] * 2 ** (lowBits + 8 * (i - 1));
27
- }
28
- return [value, pos + size];
29
- }
30
- function readStatusField(payload) {
31
- let pos = 0;
32
- while (pos < payload.length) {
33
- const key = payload[pos++];
34
- const field = key >> 3;
35
- const wire = key & 7;
36
- if (wire !== 0)
37
- break;
38
- const decoded = readVarint(payload, pos);
39
- if (!decoded)
40
- break;
41
- if (field === 1)
42
- return decoded[0];
43
- pos = decoded[1];
44
- }
45
- return 1;
46
- }
47
- export function parseUmpResponse(buf, carry) {
48
- const mediaChunks = [];
49
- let status = 1;
50
- let nextCarry = carry;
51
- let pos = 0;
52
- if (nextCarry) {
53
- const t = readVarint(buf, pos);
54
- const s = t && readVarint(buf, t[1]);
55
- if (t && s && t[0] === MEDIA_HEADER) {
56
- pos = s[1] + s[0];
57
- }
58
- const ct = readVarint(buf, pos);
59
- const cs = ct && readVarint(buf, ct[1]);
60
- if (ct && cs && ct[0] === nextCarry.pendingType) {
61
- pos = cs[1];
62
- const take = Math.min(cs[0], buf.length - pos);
63
- nextCarry.chunks.push(buf.subarray(pos, pos + take));
64
- nextCarry.remaining = cs[0] - take;
65
- pos += take;
66
- if (nextCarry.remaining <= 0) {
67
- const full = Buffer.concat(nextCarry.chunks);
68
- nextCarry = null;
69
- if (ct[0] === MEDIA && full.length > 1)
70
- mediaChunks.push(full.subarray(1));
71
- }
72
- }
73
- else {
74
- nextCarry = null;
75
- }
76
- }
77
- while (pos < buf.length) {
78
- const t = readVarint(buf, pos);
79
- if (!t)
80
- break;
81
- const s = readVarint(buf, t[1]);
82
- if (!s)
83
- break;
84
- const [type, size] = [t[0], s[0]];
85
- pos = s[1];
86
- const available = buf.length - pos;
87
- if (size > available) {
88
- nextCarry = {
89
- pendingType: type,
90
- remaining: size - available,
91
- chunks: [buf.subarray(pos)],
92
- };
93
- break;
94
- }
95
- const payload = buf.subarray(pos, pos + size);
96
- pos += size;
97
- if (type === MEDIA) {
98
- if (payload.length > 1)
99
- mediaChunks.push(payload.subarray(1));
100
- }
101
- else if (type === STREAM_PROTECTION_STATUS) {
102
- status = readStatusField(payload);
103
- }
104
- }
105
- return { media: Buffer.concat(mediaChunks), status, carry: nextCarry };
106
- }
1
+ const y=20,g=21,p=58;function f(e,t){if(t>=e.length)return null;const l=e[t];let a=0;for(let r=1;r<=5;r++)if((l&128>>r-1)===0){a=r;break}if(a<1||t+a>e.length)return null;if(a===1)return[l,t+1];if(a===5)return[e[t+1]+e[t+2]*256+e[t+3]*65536+e[t+4]*16777216>>>0,t+5];const i=8-a;let n=l&(1<<i)-1;for(let r=1;r<a;r++)n+=e[t+r]*2**(i+8*(r-1));return[n,t+a]}function h(e){let t=0;for(;t<e.length;){const l=e[t++],a=l>>3;if((l&7)!==0)break;const n=f(e,t);if(!n)break;if(a===1)return n[0];t=n[1]}return 1}function k(e,t){const l=[];let a=1,i=t,n=0;if(i){const r=f(e,n),u=r&&f(e,r[1]);r&&u&&r[0]===20&&(n=u[1]+u[0]);const s=f(e,n),c=s&&f(e,s[1]);if(s&&c&&s[0]===i.pendingType){n=c[1];const o=Math.min(c[0],e.length-n);if(i.chunks.push(e.subarray(n,n+o)),i.remaining=c[0]-o,n+=o,i.remaining<=0){const m=Buffer.concat(i.chunks);i=null,s[0]===21&&m.length>1&&l.push(m.subarray(1))}}else i=null}for(;n<e.length;){const r=f(e,n);if(!r)break;const u=f(e,r[1]);if(!u)break;const[s,c]=[r[0],u[0]];n=u[1];const o=e.length-n;if(c>o){i={pendingType:s,remaining:c-o,chunks:[e.subarray(n)]};break}const m=e.subarray(n,n+c);n+=c,s===21?m.length>1&&l.push(m.subarray(1)):s===58&&(a=h(m))}return{media:Buffer.concat(l),status:a,carry:i}}export{k as parseUmpResponse};
@@ -1,162 +1 @@
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
+ import o from"fs";import v from"path";import{CONFIG as d}from"../config.js";import l from"../logger.js";const a=v.join(d.ROOT,"ytmusic_cookie.txt");let f=null,u=null,h=0;const S=60*1e3;let n=null,m=null,g=!1;async function s(){return m||(m=await import("youtubei.js")),m}async function y(){if(g)return;const{Platform:t,Log:e}=await s();t.shim.eval=(async r=>new Function(r.output)()),e.setLevel(e.Level.ERROR),g=!0}function p(){try{return o.existsSync(a)&&o.readFileSync(a,"utf-8").trim()||null}catch{return null}}function T(){return p()}function I(t){if(!t||typeof t!="object")return!1;if(t.constructor?.name==="ParsingError")return!0;const r=t instanceof Error?t.message:String(t);return/Expected node of any type|Cannot cast \S+ to one of|got ItemSection|is not valid JSON|Incorrect JSPB formatting/i.test(r)}function C(){return f?Promise.resolve(f):Date.now()-h<S?Promise.reject(new Error("YouTube session unavailable (cooling down)")):(u||(u=(async()=>{const{Innertube:t}=await s();await y();try{const e=await t.create({generate_session_locally:!1});return f=e,e}catch(e){throw u=null,h=Date.now(),e}})()),u)}async function P(t=!1){const e=p();if(!e)return n=null,null;if(n&&!t)return n;await y();const{Innertube:r}=await s();return n=await r.create({cookie:e}),n}function k(){n=null}async function E(){k();try{return await P()}catch(t){return l.warn({err:t},"[ytmusic] saved-cookie session refresh failed"),null}}const x=300*1e3;let c=0,i=!1;async function _(){if(!p())return!1;const t=Date.now();if(t-c<x)return i;c=t;try{const e=await P();if(!e)return!1;await e.account.getInfo(),i=!0}catch{i=!1}return i}async function L(){return{authenticated:await _()}}async function D(t){const e=t.trim();if(!e)throw new Error("Cookie is empty");await y();const{Innertube:r}=await s(),b=await r.create({cookie:e});try{await b.music.getLibrary()}catch(w){if(!I(w))throw w;l.warn("[ytmusic] sign-in validation hit a layout variant, accepting cookie anyway")}try{o.mkdirSync(d.ROOT,{recursive:!0})}catch{}o.writeFileSync(a,e,"utf-8"),n=b,c=Date.now(),i=!0,l.info("[ytmusic] cookie sign-in validated and saved")}async function F(){try{o.existsSync(a)&&o.unlinkSync(a)}catch{}n=null,c=0,i=!1}export{P as getAuthedInnertube,C as getInnertube,L as getMusicAuthStatus,T as getMusicCookie,k as invalidateAuthedSession,I as isParserVariantError,E as refreshAuthedInnertube,D as saveMusicCookie,F as signOutMusic,_ as verifyMusicSession};
@@ -1,16 +1 @@
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
+ import e from"pino";const o=process.argv.includes("--dev")||process.env.NODE_ENV==="development",t=o?e({level:"debug",transport:{target:"pino-pretty",options:{colorize:!0,translateTime:"SYS:standard",ignore:"pid,hostname"}}}):e({level:process.env.LOG_LEVEL||"info"});var n=t;export{n as default};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};