@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,91 +1 @@
1
- import path from 'path';
2
- import logger from './logger.js';
3
- import { CONFIG } from './config.js';
4
- import { dbAll, dbGet } from './utils/db-utils.js';
5
- import { isTempSyncRow } from './lib/temp-ids.js';
6
- const log = logger.child({ module: 'SyncPayload' });
7
- export const ANIME_SYNC_TABLES = [
8
- 'watchlist',
9
- 'watched_episodes',
10
- 'queue',
11
- 'settings',
12
- 'shows_meta',
13
- 'sync_metadata',
14
- 'dismissed_notifications',
15
- 'discovered_notifications',
16
- ];
17
- export const MANGA_SYNC_TABLES = ['manga_library', 'manga_progress', 'sync_metadata'];
18
- export const TV_SYNC_TABLES = ['tv_library', 'tv_progress', 'sync_metadata'];
19
- export const ASMR_SYNC_TABLES = ['asmr_library', 'asmr_progress', 'sync_metadata'];
20
- export function readPayloadVersion(payload) {
21
- const meta = payload.tables['sync_metadata'];
22
- const row = meta?.find((r) => r.key === 'db_version');
23
- const v = row?.value;
24
- return typeof v === 'number' ? v : Number(v || payload.version || 0);
25
- }
26
- export function normalizePayload(input, tables, label) {
27
- if (!input || typeof input !== 'object' || !('tables' in input)) {
28
- throw new Error(`Invalid ${label} sync payload.`);
29
- }
30
- const payload = input;
31
- for (const table of tables) {
32
- if (!Array.isArray(payload.tables?.[table])) {
33
- throw new Error(`Invalid ${label} sync payload: missing ${String(table)}.`);
34
- }
35
- }
36
- return payload;
37
- }
38
- export function exportTables(db, tables) {
39
- const out = {};
40
- for (const table of tables) {
41
- const rows = dbAll(db, `SELECT * FROM "${String(table).replace(/"/g, '""')}"`);
42
- out[table] = rows.filter((row) => !isTempSyncRow(row));
43
- }
44
- return {
45
- version: readPayloadVersion({ version: 0, exportedAt: '', tables: out }),
46
- exportedAt: new Date().toISOString(),
47
- tables: out,
48
- };
49
- }
50
- export function importTables(db, tables, payload, opts) {
51
- const asRec = payload.tables;
52
- const remoteLibraryRows = opts.libraryTables.reduce((n, t) => n + (asRec[t]?.length ?? 0), 0);
53
- const localLibraryRows = opts.libraryTables.length === 0
54
- ? 1
55
- : (dbGet(db, `SELECT ${opts.libraryTables
56
- .map((t) => `(SELECT COUNT(*) FROM "${String(t).replace(/"/g, '""')}")`)
57
- .join(' + ')} AS n`)?.n ?? 0);
58
- if (remoteLibraryRows === 0 && localLibraryRows > 0) {
59
- throw new Error('Sync down refused: remote library is empty while local library has data');
60
- }
61
- try {
62
- db.backup(path.join(CONFIG.ROOT, opts.backupName));
63
- }
64
- catch (err) {
65
- log.warn({ err }, 'Pre-sync backup failed, continuing without backup');
66
- }
67
- const localColumns = new Map();
68
- for (const table of tables) {
69
- const cols = db.all(`PRAGMA table_info("${String(table)}")`);
70
- localColumns.set(String(table), new Set(cols.map((c) => c.name)));
71
- }
72
- db.serialize(() => {
73
- for (const table of tables) {
74
- db.run(`DELETE FROM "${String(table).replace(/"/g, '""')}"`);
75
- }
76
- for (const table of tables) {
77
- const known = localColumns.get(String(table));
78
- for (const row of asRec[String(table)] || []) {
79
- if (isTempSyncRow(row))
80
- continue;
81
- const columns = Object.keys(row).filter((c) => known?.has(c));
82
- if (columns.length === 0)
83
- continue;
84
- const columnSql = columns.map((c) => `"${c.replace(/"/g, '""')}"`).join(', ');
85
- const placeholders = columns.map(() => '?').join(', ');
86
- const values = columns.map((c) => row[c]);
87
- db.run(`INSERT INTO "${String(table).replace(/"/g, '""')}" (${columnSql}) VALUES (${placeholders})`, values);
88
- }
89
- }
90
- });
91
- }
1
+ import S from"path";import f from"./logger.js";import{CONFIG as u}from"./config.js";import{dbAll as w,dbGet as _}from"./utils/db-utils.js";import{isTempSyncRow as d}from"./lib/temp-ids.js";const R=f.child({module:"SyncPayload"}),$=["watchlist","watched_episodes","queue","settings","shows_meta","sync_metadata","dismissed_notifications","discovered_notifications"],L=["manga_library","manga_progress","sync_metadata"],P=["tv_library","tv_progress","sync_metadata"],k=["asmr_library","asmr_progress","sync_metadata"];function x(e){const n=e.tables.sync_metadata?.find(t=>t.key==="db_version")?.value;return typeof n=="number"?n:Number(n||e.version||0)}function C(e,o,a){if(!e||typeof e!="object"||!("tables"in e))throw new Error(`Invalid ${a} sync payload.`);const n=e;for(const t of o)if(!Array.isArray(n.tables?.[t]))throw new Error(`Invalid ${a} sync payload: missing ${String(t)}.`);return n}function O(e,o){const a={};for(const n of o){const t=w(e,`SELECT * FROM "${String(n).replace(/"/g,'""')}"`);a[n]=t.filter(y=>!d(y))}return{version:x({version:0,exportedAt:"",tables:a}),exportedAt:new Date().toISOString(),tables:a}}function M(e,o,a,n){const t=a.tables,y=n.libraryTables.reduce((r,s)=>r+(t[s]?.length??0),0),p=n.libraryTables.length===0?1:_(e,`SELECT ${n.libraryTables.map(r=>`(SELECT COUNT(*) FROM "${String(r).replace(/"/g,'""')}")`).join(" + ")} AS n`)?.n??0;if(y===0&&p>0)throw new Error("Sync down refused: remote library is empty while local library has data");try{e.backup(S.join(u.ROOT,n.backupName))}catch(r){R.warn({err:r},"Pre-sync backup failed, continuing without backup")}const b=new Map;for(const r of o){const s=e.all(`PRAGMA table_info("${String(r)}")`);b.set(String(r),new Set(s.map(i=>i.name)))}e.serialize(()=>{for(const r of o)e.run(`DELETE FROM "${String(r).replace(/"/g,'""')}"`);for(const r of o){const s=b.get(String(r));for(const i of t[String(r)]||[]){if(d(i))continue;const c=Object.keys(i).filter(l=>s?.has(l));if(c.length===0)continue;const T=c.map(l=>`"${l.replace(/"/g,'""')}"`).join(", "),m=c.map(()=>"?").join(", "),g=c.map(l=>i[l]);e.run(`INSERT INTO "${String(r).replace(/"/g,'""')}" (${T}) VALUES (${m})`,g)}}})}export{$ as ANIME_SYNC_TABLES,k as ASMR_SYNC_TABLES,L as MANGA_SYNC_TABLES,P as TV_SYNC_TABLES,O as exportTables,M as importTables,C as normalizePayload,x as readPayloadVersion};