51 lines
1.3 KiB
JavaScript
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`
|
|
}
|
|
}
|