Fix URL cleaning: youtube IDs are not valid URLs

This commit is contained in:
Luis Ávila 2021-09-14 19:07:43 +01:00
parent 1212ffc102
commit e59db76694
No known key found for this signature in database
GPG key ID: 88BC24179A6B16E0
2 changed files with 20 additions and 10 deletions

View file

@ -9,6 +9,7 @@ import pLimit from 'p-limit';
import shuffle from 'array-shuffle';
import {QueuedSong, QueuedPlaylist} from '../services/player';
import {TYPES} from '../types';
import {cleanUrl} from '../utils/url';
@injectable()
export default class {
@ -34,16 +35,7 @@ export default class {
async youtubeVideo(url: string): Promise<QueuedSong|null> {
try {
// Clean URL
const u = new URL(url);
for (const [name] of u.searchParams) {
if (name !== 'v') {
u.searchParams.delete(name);
}
}
const videoDetails = await this.youtube.videos.get(u.toString());
const videoDetails = await this.youtube.videos.get(cleanUrl(url));
return {
title: videoDetails.snippet.title,

18
src/utils/url.ts Normal file
View file

@ -0,0 +1,18 @@
import {URL} from 'url';
export const cleanUrl = (url: string) => {
try {
// Clean URL
const u = new URL(url);
for (const [name] of u.searchParams) {
if (name !== 'v') {
u.searchParams.delete(name);
}
}
return u.toString();
}
catch (_: unknown) {
return url;
}
}