Update index.js
Browse files
index.js
CHANGED
|
@@ -274,37 +274,26 @@ async function ytmp4(url, quality = 'highestvideo') {
|
|
| 274 |
return null;
|
| 275 |
}
|
| 276 |
}
|
| 277 |
-
async function
|
| 278 |
-
const
|
| 279 |
-
|
| 280 |
-
|
| 281 |
-
let headers = {
|
| 282 |
-
'User-Agent': generateRandomUserAgent(),
|
| 283 |
-
'X-Forwarded-For': generateRandomIP()
|
| 284 |
}
|
| 285 |
-
|
| 286 |
-
|
| 287 |
-
|
| 288 |
-
|
| 289 |
-
|
| 290 |
-
|
| 291 |
-
|
| 292 |
-
|
| 293 |
-
|
| 294 |
-
|
| 295 |
-
|
| 296 |
-
|
| 297 |
-
|
| 298 |
-
}
|
| 299 |
-
})).data;
|
| 300 |
-
resolve(json);
|
| 301 |
-
} catch (e) {
|
| 302 |
-
resolve({
|
| 303 |
-
status: false,
|
| 304 |
-
msg: e.message
|
| 305 |
-
});
|
| 306 |
-
}
|
| 307 |
});
|
|
|
|
| 308 |
}
|
| 309 |
async function ytmp3(url, bitrate = 'lowestaudio') {
|
| 310 |
try {
|
|
@@ -312,7 +301,7 @@ async function ytmp3(url, bitrate = 'lowestaudio') {
|
|
| 312 |
data = await ytdl.getInfo('https://www.youtube.com/watch?v=' + ID)
|
| 313 |
let format = ytdl.chooseFormat(data.formats, { filter: 'audioonly', quality: bitrate });
|
| 314 |
let buffer = await (await fetch(format.url)).arrayBuffer();
|
| 315 |
-
let upload = await
|
| 316 |
|
| 317 |
if (format) {
|
| 318 |
return {
|
|
|
|
| 274 |
return null;
|
| 275 |
}
|
| 276 |
}
|
| 277 |
+
async function neko(buffer) {
|
| 278 |
+
const maxSizeBytes = 1024 * 1024 * 1024;
|
| 279 |
+
if (buffer.length > maxSizeBytes) {
|
| 280 |
+
throw new Error('Ukuran file melebihi batas maksimal (1GB)');
|
|
|
|
|
|
|
|
|
|
| 281 |
}
|
| 282 |
+
const tipe = await import('file-type');
|
| 283 |
+
const { ext, mime } = await tipe.fileTypeFromBuffer(buffer);
|
| 284 |
+
const disallowedExtensions = ['html', 'css', 'php', 'js']
|
| 285 |
+
if (disallowedExtensions.includes(ext)) {
|
| 286 |
+
throw new Error('Ekstensi file tidak diizinkan');
|
| 287 |
+
}
|
| 288 |
+
const blob = new Blob([buffer], { type: mime });
|
| 289 |
+
const formData = new FormData();
|
| 290 |
+
formData.append('file', blob, {filename: 'file' + ext});
|
| 291 |
+
const response = await axios.post('https://cdn.nekohime.xyz/upload', formData, {
|
| 292 |
+
headers: {
|
| 293 |
+
'Content-Type': `multipart/form-data; boundary=${formData._boundary}`,
|
| 294 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 295 |
});
|
| 296 |
+
return response.data
|
| 297 |
}
|
| 298 |
async function ytmp3(url, bitrate = 'lowestaudio') {
|
| 299 |
try {
|
|
|
|
| 301 |
data = await ytdl.getInfo('https://www.youtube.com/watch?v=' + ID)
|
| 302 |
let format = ytdl.chooseFormat(data.formats, { filter: 'audioonly', quality: bitrate });
|
| 303 |
let buffer = await (await fetch(format.url)).arrayBuffer();
|
| 304 |
+
let upload = await neko(buffer)
|
| 305 |
|
| 306 |
if (format) {
|
| 307 |
return {
|