diff --git a/bun.lock b/bun.lock index fb24d71..8cc569a 100644 --- a/bun.lock +++ b/bun.lock @@ -8,7 +8,6 @@ "@types/pg": "^8.20.0", "kysely": "^0.28.16", "pg": "^8.20.0", - "youtubei.js": "^17.0.1", }, "devDependencies": { "@types/bun": "latest", @@ -19,8 +18,6 @@ }, }, "packages": { - "@bufbuild/protobuf": ["@bufbuild/protobuf@2.12.0", "", {}, "sha512-B/XlCaFIP8LOwzo+bz5uFzATYokcwCKQcghqnlfwSmM5eX/qTkvDBnDPs+gXtX/RyjxJ4DRikECcPJbyALA8FA=="], - "@types/bun": ["@types/bun@1.3.13", "", { "dependencies": { "bun-types": "1.3.13" } }, "sha512-9fqXWk5YIHGGnUau9TEi+qdlTYDAnOj+xLCmSTwXfAIqXr2x4tytJb43E9uCvt09zJURKXwAtkoH4nLQfzeTXw=="], "@types/node": ["@types/node@25.6.0", "", { "dependencies": { "undici-types": "~7.19.0" } }, "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ=="], @@ -31,8 +28,6 @@ "kysely": ["kysely@0.28.16", "", {}, "sha512-3i5pmOiZvMDj00qhrIVbH0AnioVTx22DMP7Vn5At4yJO46iy+FM8Y/g61ltenLVSo3fiO8h8Q3QOFgf/gQ72ww=="], - "meriyah": ["meriyah@6.1.4", "", {}, "sha512-Sz8FzjzI0kN13GK/6MVEsVzMZEPvOhnmmI1lU5+/1cGOiK3QUahntrNNtdVeihrO7t9JpoH75iMNXg6R6uWflQ=="], - "pg": ["pg@8.20.0", "", { "dependencies": { "pg-connection-string": "^2.12.0", "pg-pool": "^3.13.0", "pg-protocol": "^1.13.0", "pg-types": "2.2.0", "pgpass": "1.0.5" }, "optionalDependencies": { "pg-cloudflare": "^1.3.0" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA=="], "pg-cloudflare": ["pg-cloudflare@1.3.0", "", {}, "sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ=="], @@ -64,7 +59,5 @@ "undici-types": ["undici-types@7.19.2", "", {}, "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg=="], "xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="], - - "youtubei.js": ["youtubei.js@17.0.1", "", { "dependencies": { "@bufbuild/protobuf": "^2.0.0", "meriyah": "^6.1.4" } }, "sha512-1lO4b8UqMDzE0oh2qEGzbBOd4UYRdxn/4PdpRM7BGTHxM6ddsEsKZTu90jp8V9FHVgC2h1UirQyqoqLiKwl+Zg=="], } } diff --git a/package.json b/package.json index 65d2f46..8036007 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,6 @@ "dependencies": { "@types/pg": "^8.20.0", "kysely": "^0.28.16", - "pg": "^8.20.0", - "youtubei.js": "^17.0.1" + "pg": "^8.20.0" } } diff --git a/src/index.ts b/src/index.ts index c98dbd9..993476b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,7 @@ import { Innertube } from 'youtubei.js' import healthStatus from '@/utils/health'; import { db } from '@/utils/database' +import { getChannelVideos } from './utils/metadata'; let websocket = process.env.WEBSOCKET if (healthStatus[process.env.METADATA!] != 'healthy') { @@ -14,23 +15,22 @@ const channels = await db.selectFrom('autodownload') for (const c of channels) { console.log(c.channel) - const channel = await yt.getChannel(c.channel); - const json = await channel.getVideos(); + const videos = await getChannelVideos(c.channel) - for (const v of json.videos) { - console.log(v.video_id) + for (const v of videos) { + console.log(v.videoId) const already = await db.selectFrom('videos') .selectAll() - .where('id', '=', v.video_id) + .where('id', '=', v.videoId) .executeTakeFirst() if (already) continue await new Promise(async (resolve, reject) => { - const ws = new WebSocket(`${websocket}/save?url=http://www.youtube.com/watch?v=${v.video_id}&bKey=${process.env.bKey}`) + const ws = new WebSocket(`${websocket}/save?url=http://www.youtube.com/watch?v=${v.videoId}&bKey=${process.env.bKey}`) ws.onopen = () => { - console.log(`opened websocket for ${v.video_id}`) + console.log(`opened websocket for ${v.videoId}`) } ws.onmessage = (event) => { diff --git a/src/utils/metadata.ts b/src/utils/metadata.ts new file mode 100644 index 0000000..253460c --- /dev/null +++ b/src/utils/metadata.ts @@ -0,0 +1,16 @@ +// metadata either returns innertube or { error: string } +import { getMetadataBackend } from '@/utils/health'; + +async function getVideo(id: string) { + return await (await fetch(`${getMetadataBackend()}/video/${id}`)).json() +} + +async function getChannel(id: string) { + return await (await fetch(`${getMetadataBackend()}/channel/${id}`)).json() +} + +async function getChannelVideos(id: string) { + return await (await fetch(`${getMetadataBackend()}/videos/${id}`)).json() +} + +export { getVideo, getChannel, getChannelVideos } \ No newline at end of file