q-fi-core 2.3.1

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 (79) hide show
  1. package/CHANGELOG.md +109 -0
  2. package/LICENSE +1 -0
  3. package/README.md +186 -0
  4. package/dist/api/api.d.ts +78 -0
  5. package/dist/api/api.js +182 -0
  6. package/dist/api/cache.d.ts +3 -0
  7. package/dist/api/cache.js +12 -0
  8. package/dist/api/index.d.ts +2 -0
  9. package/dist/api/index.js +18 -0
  10. package/dist/api/request.d.ts +23 -0
  11. package/dist/api/request.js +88 -0
  12. package/dist/converter/deezer.d.ts +3 -0
  13. package/dist/converter/deezer.js +45 -0
  14. package/dist/converter/index.d.ts +5 -0
  15. package/dist/converter/index.js +34 -0
  16. package/dist/converter/parse.d.ts +18 -0
  17. package/dist/converter/parse.js +176 -0
  18. package/dist/converter/spotify.d.ts +40 -0
  19. package/dist/converter/spotify.js +154 -0
  20. package/dist/converter/tidal.d.ts +146 -0
  21. package/dist/converter/tidal.js +199 -0
  22. package/dist/converter/youtube.d.ts +6 -0
  23. package/dist/converter/youtube.js +102 -0
  24. package/dist/index.d.ts +6 -0
  25. package/dist/index.js +24 -0
  26. package/dist/lib/decrypt.d.ts +9 -0
  27. package/dist/lib/decrypt.js +63 -0
  28. package/dist/lib/fast-lru.d.ts +63 -0
  29. package/dist/lib/fast-lru.js +121 -0
  30. package/dist/lib/get-url.d.ts +16 -0
  31. package/dist/lib/get-url.js +154 -0
  32. package/dist/lib/http.d.ts +66 -0
  33. package/dist/lib/http.js +235 -0
  34. package/dist/lib/metaflac-js.d.ts +124 -0
  35. package/dist/lib/metaflac-js.js +343 -0
  36. package/dist/lib/request.d.ts +18 -0
  37. package/dist/lib/request.js +86 -0
  38. package/dist/metadata-writer/abumCover.d.ts +10 -0
  39. package/dist/metadata-writer/abumCover.js +37 -0
  40. package/dist/metadata-writer/flacmetata.d.ts +3 -0
  41. package/dist/metadata-writer/flacmetata.js +80 -0
  42. package/dist/metadata-writer/getTrackLyrics.d.ts +2 -0
  43. package/dist/metadata-writer/getTrackLyrics.js +26 -0
  44. package/dist/metadata-writer/id3.d.ts +3 -0
  45. package/dist/metadata-writer/id3.js +119 -0
  46. package/dist/metadata-writer/index.d.ts +9 -0
  47. package/dist/metadata-writer/index.js +44 -0
  48. package/dist/metadata-writer/musixmatchLyrics.d.ts +1 -0
  49. package/dist/metadata-writer/musixmatchLyrics.js +39 -0
  50. package/dist/metadata-writer/useragents.d.ts +1 -0
  51. package/dist/metadata-writer/useragents.js +86 -0
  52. package/dist/types/album.d.ts +123 -0
  53. package/dist/types/album.js +2 -0
  54. package/dist/types/artist.d.ts +36 -0
  55. package/dist/types/artist.js +2 -0
  56. package/dist/types/channel.d.ts +33 -0
  57. package/dist/types/channel.js +2 -0
  58. package/dist/types/index.d.ts +10 -0
  59. package/dist/types/index.js +26 -0
  60. package/dist/types/playlist-channel.d.ts +81 -0
  61. package/dist/types/playlist-channel.js +2 -0
  62. package/dist/types/playlist.d.ts +49 -0
  63. package/dist/types/playlist.js +2 -0
  64. package/dist/types/profile.d.ts +29 -0
  65. package/dist/types/profile.js +2 -0
  66. package/dist/types/radio.d.ts +7 -0
  67. package/dist/types/radio.js +2 -0
  68. package/dist/types/search.d.ts +79 -0
  69. package/dist/types/search.js +2 -0
  70. package/dist/types/show.d.ts +61 -0
  71. package/dist/types/show.js +2 -0
  72. package/dist/types/tracks.d.ts +144 -0
  73. package/dist/types/tracks.js +2 -0
  74. package/dist/types/user.d.ts +16 -0
  75. package/dist/types/user.js +2 -0
  76. package/package.json +69 -0
  77. package/types/index.d.ts +1 -0
  78. package/types/index.js +3 -0
  79. package/types/package.json +4 -0
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.writeMetadataFlac = void 0;
7
+ const metaflac_js_1 = __importDefault(require("../lib/metaflac-js"));
8
+ const writeMetadataFlac = (buffer, track, album, dimension, cover) => {
9
+ const flac = new metaflac_js_1.default(buffer);
10
+ const RELEASE_YEAR = album ? album.release_date.split('-')[0] : null;
11
+ flac.setTag('TITLE=' + track.SNG_TITLE);
12
+ flac.setTag('ALBUM=' + track.ALB_TITLE);
13
+ flac.setTag('ARTIST=' + track.ARTISTS.map((a) => a.ART_NAME).join(', '));
14
+ flac.setTag('TRACKNUMBER=' + track.TRACK_NUMBER.toLocaleString('en-US', { minimumIntegerDigits: 2 }));
15
+ if (album) {
16
+ const TOTALTRACKS = album.nb_tracks.toLocaleString('en-US', { minimumIntegerDigits: 2 });
17
+ if (album.genres.data.length > 0) {
18
+ for (const genre of album.genres.data) {
19
+ flac.setTag('GENRE=' + genre.name);
20
+ }
21
+ }
22
+ flac.setTag('TRACKTOTAL=' + TOTALTRACKS);
23
+ flac.setTag('TOTALTRACKS=' + TOTALTRACKS);
24
+ flac.setTag('RELEASETYPE=' + album.record_type);
25
+ flac.setTag('ALBUMARTIST=' + album.artist.name);
26
+ flac.setTag('BARCODE=' + album.upc);
27
+ flac.setTag('LABEL=' + album.label);
28
+ flac.setTag('DATE=' + album.release_date);
29
+ flac.setTag('YEAR=' + RELEASE_YEAR);
30
+ flac.setTag(`COMPILATION=${album.artist.name.match(/various/i) ? '1' : '0'}`);
31
+ }
32
+ if (track.DISK_NUMBER) {
33
+ flac.setTag('DISCNUMBER=' + track.DISK_NUMBER);
34
+ }
35
+ flac.setTag('ISRC=' + track.ISRC);
36
+ flac.setTag('LENGTH=' + track.DURATION);
37
+ flac.setTag('MEDIA=Digital Media');
38
+ if (track.LYRICS) {
39
+ flac.setTag('LYRICS=' + track.LYRICS.LYRICS_TEXT);
40
+ }
41
+ if (track.EXPLICIT_LYRICS) {
42
+ flac.setTag('EXPLICIT=' + track.EXPLICIT_LYRICS);
43
+ }
44
+ if (track.SNG_CONTRIBUTORS && !Array.isArray(track.SNG_CONTRIBUTORS)) {
45
+ if (track.SNG_CONTRIBUTORS.main_artist) {
46
+ flac.setTag(`COPYRIGHT=${RELEASE_YEAR ? RELEASE_YEAR + ' ' : ''}${track.SNG_CONTRIBUTORS.main_artist[0]}`);
47
+ }
48
+ if (track.SNG_CONTRIBUTORS.publisher) {
49
+ flac.setTag('ORGANIZATION=' + track.SNG_CONTRIBUTORS.publisher.join(', '));
50
+ }
51
+ if (track.SNG_CONTRIBUTORS.composer) {
52
+ flac.setTag('COMPOSER=' + track.SNG_CONTRIBUTORS.composer.join(', '));
53
+ }
54
+ if (track.SNG_CONTRIBUTORS.publisher) {
55
+ flac.setTag('ORGANIZATION=' + track.SNG_CONTRIBUTORS.publisher.join(', '));
56
+ }
57
+ if (track.SNG_CONTRIBUTORS.producer) {
58
+ flac.setTag('PRODUCER=' + track.SNG_CONTRIBUTORS.producer.join(', '));
59
+ }
60
+ if (track.SNG_CONTRIBUTORS.engineer) {
61
+ flac.setTag('ENGINEER=' + track.SNG_CONTRIBUTORS.engineer.join(', '));
62
+ }
63
+ if (track.SNG_CONTRIBUTORS.writer) {
64
+ flac.setTag('WRITER=' + track.SNG_CONTRIBUTORS.writer.join(', '));
65
+ }
66
+ if (track.SNG_CONTRIBUTORS.author) {
67
+ flac.setTag('AUTHOR=' + track.SNG_CONTRIBUTORS.author.join(', '));
68
+ }
69
+ if (track.SNG_CONTRIBUTORS.mixer) {
70
+ flac.setTag('MIXER=' + track.SNG_CONTRIBUTORS.mixer.join(', '));
71
+ }
72
+ }
73
+ if (cover) {
74
+ flac.importPicture(cover, dimension, 'image/jpeg');
75
+ }
76
+ flac.setTag('SOURCE=Deezer');
77
+ flac.setTag('SOURCEID=' + track.SNG_ID);
78
+ return flac.getBuffer();
79
+ };
80
+ exports.writeMetadataFlac = writeMetadataFlac;
@@ -0,0 +1,2 @@
1
+ import type { lyricsType, trackType } from '../types';
2
+ export declare const getTrackLyrics: (track: trackType) => Promise<lyricsType | null>;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTrackLyrics = void 0;
4
+ const musixmatchLyrics_1 = require("./musixmatchLyrics");
5
+ const api_1 = require("../api");
6
+ const getTrackLyricsWeb = async (track) => {
7
+ try {
8
+ const LYRICS_TEXT = await (0, musixmatchLyrics_1.getLyricsMusixmatch)(`${track.ART_NAME} - ${track.SNG_TITLE}`);
9
+ return { LYRICS_TEXT };
10
+ }
11
+ catch (err) {
12
+ return null;
13
+ }
14
+ };
15
+ const getTrackLyrics = async (track) => {
16
+ if (track.LYRICS_ID > 0) {
17
+ try {
18
+ return await (0, api_1.getLyrics)(track.SNG_ID);
19
+ }
20
+ catch (err) {
21
+ return await getTrackLyricsWeb(track);
22
+ }
23
+ }
24
+ return await getTrackLyricsWeb(track);
25
+ };
26
+ exports.getTrackLyrics = getTrackLyrics;
@@ -0,0 +1,3 @@
1
+ /// <reference types="node" />
2
+ import type { albumTypePublicApi, trackType } from '../types';
3
+ export declare const writeMetadataMp3: (buffer: Buffer, track: trackType, album: albumTypePublicApi | null, cover?: Buffer | null) => Buffer;
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.writeMetadataMp3 = void 0;
7
+ // @ts-ignore
8
+ const browser_id3_writer_1 = __importDefault(require("browser-id3-writer"));
9
+ const writeMetadataMp3 = (buffer, track, album, cover) => {
10
+ const writer = new browser_id3_writer_1.default(buffer);
11
+ const RELEASE_DATES = album && album.release_date.split('-');
12
+ writer
13
+ .setFrame('TIT2', track.SNG_TITLE)
14
+ .setFrame('TALB', track.ALB_TITLE)
15
+ .setFrame('TPE1', track.ARTISTS.map((a) => a.ART_NAME))
16
+ .setFrame('TLEN', Number(track.DURATION) * 1000)
17
+ .setFrame('TSRC', track.ISRC);
18
+ if (album) {
19
+ if (album.genres.data.length > 0) {
20
+ writer.setFrame('TCON', album.genres.data.map((g) => g.name));
21
+ }
22
+ if (RELEASE_DATES) {
23
+ writer.setFrame('TYER', RELEASE_DATES[0]).setFrame('TDAT', RELEASE_DATES[2] + RELEASE_DATES[1]);
24
+ }
25
+ writer
26
+ .setFrame('TPE2', album.artist.name)
27
+ .setFrame('TXXX', {
28
+ description: 'RELEASETYPE',
29
+ value: album.record_type,
30
+ })
31
+ .setFrame('TXXX', {
32
+ description: 'BARCODE',
33
+ value: album.upc,
34
+ })
35
+ .setFrame('TXXX', {
36
+ description: 'LABEL',
37
+ value: album.label,
38
+ })
39
+ .setFrame('TXXX', {
40
+ description: 'COMPILATION',
41
+ value: album.artist.name.match(/various/i) ? '1' : '0',
42
+ });
43
+ }
44
+ writer
45
+ .setFrame('TMED', 'Digital Media')
46
+ .setFrame('TXXX', {
47
+ description: 'SOURCE',
48
+ value: 'Deezer',
49
+ })
50
+ .setFrame('TXXX', {
51
+ description: 'SOURCEID',
52
+ value: track.SNG_ID,
53
+ });
54
+ if (track.DISK_NUMBER) {
55
+ const TRACK_NUMBER = track.TRACK_NUMBER.toLocaleString('en-US', { minimumIntegerDigits: 2 });
56
+ writer.setFrame('TPOS', track.DISK_NUMBER).setFrame('TRCK', album
57
+ ? `${TRACK_NUMBER}/${album.nb_tracks.toLocaleString('en-US', {
58
+ minimumIntegerDigits: 2,
59
+ })}`
60
+ : TRACK_NUMBER);
61
+ }
62
+ if (track.SNG_CONTRIBUTORS && !Array.isArray(track.SNG_CONTRIBUTORS)) {
63
+ if (track.SNG_CONTRIBUTORS.main_artist) {
64
+ writer.setFrame('TCOP', `${RELEASE_DATES ? RELEASE_DATES[0] + ' ' : ''}${track.SNG_CONTRIBUTORS.main_artist[0]}`);
65
+ }
66
+ if (track.SNG_CONTRIBUTORS.publisher) {
67
+ writer.setFrame('TPUB', track.SNG_CONTRIBUTORS.publisher.join(', '));
68
+ }
69
+ if (track.SNG_CONTRIBUTORS.composer) {
70
+ writer.setFrame('TCOM', track.SNG_CONTRIBUTORS.composer);
71
+ }
72
+ if (track.SNG_CONTRIBUTORS.writer) {
73
+ writer.setFrame('TXXX', {
74
+ description: 'LYRICIST',
75
+ value: track.SNG_CONTRIBUTORS.writer.join(', '),
76
+ });
77
+ }
78
+ if (track.SNG_CONTRIBUTORS.author) {
79
+ writer.setFrame('TXXX', {
80
+ description: 'AUTHOR',
81
+ value: track.SNG_CONTRIBUTORS.author.join(', '),
82
+ });
83
+ }
84
+ if (track.SNG_CONTRIBUTORS.mixer) {
85
+ writer.setFrame('TXXX', {
86
+ description: 'MIXARTIST',
87
+ value: track.SNG_CONTRIBUTORS.mixer.join(', '),
88
+ });
89
+ }
90
+ if (track.SNG_CONTRIBUTORS.producer && track.SNG_CONTRIBUTORS.engineer) {
91
+ writer.setFrame('TXXX', {
92
+ description: 'INVOLVEDPEOPLE',
93
+ value: track.SNG_CONTRIBUTORS.producer.concat(track.SNG_CONTRIBUTORS.engineer).join(', '),
94
+ });
95
+ }
96
+ }
97
+ if (track.LYRICS) {
98
+ writer.setFrame('USLT', {
99
+ description: '',
100
+ lyrics: track.LYRICS.LYRICS_TEXT,
101
+ });
102
+ }
103
+ if (track.EXPLICIT_LYRICS) {
104
+ writer.setFrame('TXXX', {
105
+ description: 'EXPLICIT',
106
+ value: track.EXPLICIT_LYRICS,
107
+ });
108
+ }
109
+ if (cover) {
110
+ writer.setFrame('APIC', {
111
+ type: 3,
112
+ data: cover,
113
+ description: '',
114
+ });
115
+ }
116
+ writer.addTag();
117
+ return Buffer.isBuffer(writer.arrayBuffer) ? writer.arrayBuffer : Buffer.from(writer.arrayBuffer);
118
+ };
119
+ exports.writeMetadataMp3 = writeMetadataMp3;
@@ -0,0 +1,9 @@
1
+ /// <reference types="node" />
2
+ import type { trackType } from '../types';
3
+ /**
4
+ * Add metdata to the mp3
5
+ * @param {Buffer} trackBuffer decrypted track buffer
6
+ * @param {Object} track json containing track infos
7
+ * @param {Number} albumCoverSize album cover size in pixel
8
+ */
9
+ export declare const addTrackTags: (trackBuffer: Buffer, track: trackType, albumCoverSize?: number) => Promise<Buffer>;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addTrackTags = void 0;
4
+ const abumCover_1 = require("./abumCover");
5
+ const getTrackLyrics_1 = require("./getTrackLyrics");
6
+ const id3_1 = require("./id3");
7
+ const flacmetata_1 = require("./flacmetata");
8
+ const api_1 = require("../api");
9
+ const albumInfo = async (track) => {
10
+ try {
11
+ return await (0, api_1.getAlbumInfoPublicApi)(track.ALB_ID);
12
+ }
13
+ catch (err) {
14
+ return null;
15
+ }
16
+ };
17
+ /**
18
+ * Add metdata to the mp3
19
+ * @param {Buffer} trackBuffer decrypted track buffer
20
+ * @param {Object} track json containing track infos
21
+ * @param {Number} albumCoverSize album cover size in pixel
22
+ */
23
+ const addTrackTags = async (trackBuffer, track, albumCoverSize = 1000) => {
24
+ const [cover, lyrics, album] = await Promise.all([
25
+ (0, abumCover_1.downloadAlbumCover)(track, albumCoverSize),
26
+ (0, getTrackLyrics_1.getTrackLyrics)(track),
27
+ albumInfo(track),
28
+ ]);
29
+ if (lyrics) {
30
+ track.LYRICS = lyrics;
31
+ }
32
+ if (track.ART_NAME.toLowerCase() === 'various') {
33
+ track.ART_NAME = 'Various Artists';
34
+ }
35
+ if (album && album.record_type) {
36
+ album.record_type =
37
+ album.record_type === 'ep' ? 'EP' : album.record_type.charAt(0).toUpperCase() + album.record_type.slice(1);
38
+ }
39
+ const isFlac = trackBuffer.slice(0, 4).toString('ascii') === 'fLaC';
40
+ return isFlac
41
+ ? (0, flacmetata_1.writeMetadataFlac)(trackBuffer, track, album, albumCoverSize, cover)
42
+ : (0, id3_1.writeMetadataMp3)(trackBuffer, track, album, cover);
43
+ };
44
+ exports.addTrackTags = addTrackTags;
@@ -0,0 +1 @@
1
+ export declare const getLyricsMusixmatch: (query: string) => Promise<string>;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getLyricsMusixmatch = void 0;
4
+ const node_html_parser_1 = require("node-html-parser");
5
+ const http_1 = require("../lib/http");
6
+ const useragents_1 = require("./useragents");
7
+ const baseUrl = 'https://musixmatch.com';
8
+ const getUrlMusixmatch = async (query) => {
9
+ var _a;
10
+ const data = await (0, http_1.getText)(`${baseUrl}/search/${encodeURI(query)}/tracks`, {
11
+ headers: {
12
+ 'User-Agent': (0, useragents_1.randomUseragent)(),
13
+ referer: 'https://l.facebook.com/',
14
+ },
15
+ });
16
+ const childNode = (_a = (0, node_html_parser_1.parse)(data).querySelector('h2')) === null || _a === void 0 ? void 0 : _a.childNodes.at(0);
17
+ const url = childNode === null || childNode === void 0 ? void 0 : childNode.attributes.href.replace('/add', '');
18
+ if (url && url.includes('/lyrics/')) {
19
+ return url.startsWith('/lyrics/') ? baseUrl + url : url;
20
+ }
21
+ throw new Error('No song found!');
22
+ };
23
+ const getLyricsMusixmatch = async (query) => {
24
+ const url = await getUrlMusixmatch(query);
25
+ const data = await (0, http_1.getText)(url, {
26
+ headers: {
27
+ 'User-Agent': (0, useragents_1.randomUseragent)(),
28
+ referer: baseUrl + '/',
29
+ },
30
+ });
31
+ const lyricsMatch = data.match(/("body":".*","language")/);
32
+ if (!lyricsMatch) {
33
+ throw new Error('No lyrics found!');
34
+ }
35
+ let lyrics = lyricsMatch[0];
36
+ lyrics = lyrics.replace('"body":"', '').replace('","language"', '');
37
+ return lyrics.split('\\n').join('\n');
38
+ };
39
+ exports.getLyricsMusixmatch = getLyricsMusixmatch;
@@ -0,0 +1 @@
1
+ export declare const randomUseragent: () => string;
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.randomUseragent = void 0;
4
+ const useragents = [
5
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
6
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0',
7
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36',
8
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.2 Safari/605.1.15',
9
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0',
10
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
11
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',
12
+ 'Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0',
13
+ 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0',
14
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
15
+ 'Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0',
16
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75',
17
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36',
18
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36',
19
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
20
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:84.0) Gecko/20100101 Firefox/84.0',
21
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.2 Safari/605.1.15',
22
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36',
23
+ 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
24
+ 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36',
25
+ 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
26
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
27
+ 'Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0',
28
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0',
29
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15',
30
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36',
31
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.56',
32
+ 'Mozilla/5.0 (X11; Linux x86_64; rv:85.0) Gecko/20100101 Firefox/85.0',
33
+ 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
34
+ 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:85.0) Gecko/20100101 Firefox/85.0',
35
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.50',
36
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36',
37
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
38
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
39
+ 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0',
40
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15',
41
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 OPR/73.0.3856.344',
42
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:85.0) Gecko/20100101 Firefox/85.0',
43
+ 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36',
44
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.1 Safari/605.1.15',
45
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0',
46
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:85.0) Gecko/20100101 Firefox/85.0',
47
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.63',
48
+ 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0',
49
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
50
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',
51
+ 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36',
52
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.2 Safari/605.1.15',
53
+ 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
54
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36',
55
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
56
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.60 YaBrowser/20.12.0.963 Yowser/2.5 Safari/537.36',
57
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
58
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
59
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36',
60
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.1 Safari/605.1.15',
61
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0',
62
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.2 Safari/605.1.15',
63
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
64
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 OPR/73.0.3856.329',
65
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:84.0) Gecko/20100101 Firefox/84.0',
66
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
67
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36',
68
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 OPR/73.0.3856.344 (Edition Yx 05)',
69
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0',
70
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36',
71
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',
72
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.53',
73
+ 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0',
74
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36',
75
+ 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.7113.93 Safari/537.36',
76
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.66',
77
+ 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
78
+ 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36',
79
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15',
80
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.3 Safari/605.1.15',
81
+ 'Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0',
82
+ 'Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0',
83
+ 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0',
84
+ ];
85
+ const randomUseragent = () => useragents[Math.floor(Math.random() * useragents.length)];
86
+ exports.randomUseragent = randomUseragent;
@@ -0,0 +1,123 @@
1
+ import type { artistType } from './artist';
2
+ import type { trackType, contributorsPublicApi } from './tracks';
3
+ export interface albumTypeMinimal {
4
+ ALB_ID: string;
5
+ ALB_TITLE: string;
6
+ ALB_PICTURE: string;
7
+ ARTISTS: artistType[];
8
+ AVAILABLE: boolean;
9
+ VERSION: string;
10
+ ART_ID: string;
11
+ ART_NAME: string;
12
+ EXPLICIT_ALBUM_CONTENT: {
13
+ EXPLICIT_LYRICS_STATUS: number;
14
+ EXPLICIT_COVER_STATUS: number;
15
+ };
16
+ PHYSICAL_RELEASE_DATE: string;
17
+ TYPE: string;
18
+ ARTIST_IS_DUMMY: boolean;
19
+ NUMBER_TRACK: number;
20
+ __TYPE__: 'album';
21
+ }
22
+ export interface albumType {
23
+ ALB_CONTRIBUTORS: {
24
+ main_artist: string[];
25
+ };
26
+ ALB_ID: string;
27
+ ALB_PICTURE: string;
28
+ EXPLICIT_ALBUM_CONTENT: {
29
+ EXPLICIT_LYRICS_STATUS: number;
30
+ EXPLICIT_COVER_STATUS: number;
31
+ };
32
+ ALB_TITLE: string;
33
+ ARTISTS: artistType[];
34
+ ART_ID: string;
35
+ ART_NAME: string;
36
+ ARTIST_IS_DUMMY: boolean;
37
+ DIGITAL_RELEASE_DATE: string;
38
+ EXPLICIT_LYRICS?: string;
39
+ NB_FAN: number;
40
+ NUMBER_DISK: string;
41
+ NUMBER_TRACK: string;
42
+ PHYSICAL_RELEASE_DATE?: string;
43
+ PRODUCER_LINE: string;
44
+ PROVIDER_ID: string;
45
+ RANK: string;
46
+ RANK_ART: string;
47
+ STATUS: string;
48
+ TYPE: string;
49
+ UPC: string;
50
+ __TYPE__: 'album';
51
+ }
52
+ export interface albumTracksType {
53
+ data: trackType[];
54
+ count: number;
55
+ total: number;
56
+ filtered_count: number;
57
+ filtered_items?: number[];
58
+ next?: number;
59
+ }
60
+ interface trackDataPublicApi {
61
+ id: number;
62
+ readable: boolean;
63
+ title: string;
64
+ title_short: string;
65
+ title_version?: string;
66
+ link: 'https://www.deezer.com/track/3135556';
67
+ duration: number;
68
+ rank: number;
69
+ explicit_lyrics: boolean;
70
+ explicit_content_lyrics: number;
71
+ explicit_content_cover: number;
72
+ preview: string;
73
+ md5_image: string;
74
+ artist: {
75
+ id: number;
76
+ name: number;
77
+ tracklist: string;
78
+ type: 'artist';
79
+ };
80
+ type: 'track';
81
+ }
82
+ interface genreTypePublicApi {
83
+ id: number;
84
+ name: string;
85
+ picture: string;
86
+ type: 'genre';
87
+ }
88
+ export interface albumTypePublicApi {
89
+ id: number;
90
+ title: 'Discovery';
91
+ upc: string;
92
+ link: string;
93
+ share: string;
94
+ cover: string;
95
+ cover_small: string;
96
+ cover_medium: string;
97
+ cover_big: string;
98
+ cover_xl: string;
99
+ md5_image: string;
100
+ genre_id: number;
101
+ genres: {
102
+ data: genreTypePublicApi[];
103
+ };
104
+ label: string;
105
+ nb_tracks: number;
106
+ duration: number;
107
+ fans: number;
108
+ rating: number;
109
+ release_date: string;
110
+ record_type: string;
111
+ available: boolean;
112
+ tracklist: string;
113
+ explicit_lyrics: boolean;
114
+ explicit_content_lyrics: number;
115
+ explicit_content_cover: number;
116
+ contributors: contributorsPublicApi[];
117
+ artist: contributorsPublicApi;
118
+ type: 'album';
119
+ tracks: {
120
+ data: trackDataPublicApi[];
121
+ };
122
+ }
123
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,36 @@
1
+ interface localesType {
2
+ [key: string]: {
3
+ name: string;
4
+ };
5
+ }
6
+ export interface artistType {
7
+ ART_ID: string;
8
+ ROLE_ID: string;
9
+ ARTISTS_SONGS_ORDER: string;
10
+ ART_NAME: string;
11
+ ARTIST_IS_DUMMY: boolean;
12
+ ART_PICTURE: string;
13
+ RANK: string;
14
+ LOCALES?: localesType;
15
+ __TYPE__: 'artist';
16
+ }
17
+ export interface artistInfoTypeMinimal {
18
+ ART_ID: string;
19
+ ART_NAME: string;
20
+ ART_PICTURE: string;
21
+ NB_FAN: number;
22
+ LOCALES: [];
23
+ ARTIST_IS_DUMMY: boolean;
24
+ __TYPE__: 'artist';
25
+ }
26
+ export interface artistInfoType {
27
+ ART_ID: string;
28
+ ART_NAME: string;
29
+ ARTIST_IS_DUMMY: boolean;
30
+ ART_PICTURE: string;
31
+ FACEBOOK?: string;
32
+ NB_FAN: number;
33
+ TWITTER?: string;
34
+ __TYPE__: 'artist';
35
+ }
36
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,33 @@
1
+ interface picturesType {
2
+ md5: string;
3
+ type: string;
4
+ }
5
+ interface dataType {
6
+ type: string;
7
+ id: string;
8
+ name: string;
9
+ title: string;
10
+ logo: null | string;
11
+ description: null | string;
12
+ slug: string;
13
+ background_color: string;
14
+ pictures: picturesType[];
15
+ __TYPE__: 'channel';
16
+ }
17
+ interface channelDataType {
18
+ item_id: string;
19
+ id: string;
20
+ type: string;
21
+ data: dataType[];
22
+ target: string;
23
+ title: string;
24
+ pictures: picturesType[];
25
+ weight: number;
26
+ background_color: string;
27
+ }
28
+ export interface channelSearchType {
29
+ data: channelDataType[];
30
+ count: number;
31
+ total: number;
32
+ }
33
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,10 @@
1
+ export * from './album';
2
+ export * from './artist';
3
+ export * from './show';
4
+ export * from './playlist';
5
+ export * from './playlist-channel';
6
+ export * from './channel';
7
+ export * from './profile';
8
+ export * from './search';
9
+ export * from './tracks';
10
+ export * from './user';