spotdl/filesdotgay.js

51 lines
1.3 KiB
JavaScript

import fetch from 'node-fetch'
import { FormData, File } from 'formdata-node'
export default class Filesdotgay {
async login(username, password) {
if (!username || !password) {
console.error('Not logged into files.gay. Uploading anonymously.')
return
}
const loginResp = await fetch('https://files.gay/login', {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: `username=${encodeURIComponent(
username
)}&password=${encodeURIComponent(password)}`,
method: 'POST',
redirect: 'manual'
})
let responseCookies = Object.fromEntries(
loginResp.headers
.raw()
['set-cookie'].join('; ')
.split(';')
.map(e => e.trim().split('='))
)
this.session = responseCookies.session
}
async upload(buffer, filename) {
const form = new FormData()
const file = new File([buffer], filename)
form.set('file', file)
let headers = {}
if (this.session) headers.cookie = `session=${this.session}`
const uploadResp = await fetch('https://files.gay/upload?json=1', {
headers: headers,
method: 'POST',
body: form
})
let respJson = await uploadResp.json()
if (!respJson.success) {
throw new Error(`Upload failed: ${respJson.err}`)
}
return `https://files.gay/f/${respJson.data.id}/dl`
}
}