54 lines
1.4 KiB
JavaScript
54 lines
1.4 KiB
JavaScript
const axios = require('axios')
|
|
const FormData = require('form-data')
|
|
const { createReadStream } = require('fs')
|
|
|
|
async function toot(data, opts) {
|
|
const { instance, oauthToken } = opts
|
|
|
|
// contains 'toot', and maybe 'attach' / 'attachDescription'
|
|
const media_ids = []
|
|
if(data.attach) {
|
|
for await(file of data.attach) {
|
|
const id = await uploadMedia(file, data.attachDescription, instance, oauthToken)
|
|
media_ids.push(id)
|
|
}
|
|
}
|
|
|
|
// https://docs.joinmastodon.org/methods/statuses/
|
|
const result = await axios.post(`${instance}/api/v1/statuses`, {
|
|
status: data.toot,
|
|
media_ids: media_ids,
|
|
}, {
|
|
headers: {
|
|
"Authorization": `Bearer ${oauthToken}`
|
|
}
|
|
})
|
|
|
|
console.log(` toot: status result: ${result.status}`)
|
|
}
|
|
|
|
async function uploadMedia(fileName, description, instance, oauthToken) {
|
|
const formData = new FormData()
|
|
formData.append('file', createReadStream(fileName))
|
|
formData.append('description', description)
|
|
|
|
// https://docs.joinmastodon.org/methods/statuses/media/
|
|
const result = await axios.post(`${instance}/api/v1/media`, formData, {
|
|
headers: {
|
|
"Content-Type": `multipart/form-data; boundary=${formData.getBoundary()}`,
|
|
"Authorization": `Bearer ${oauthToken}`
|
|
}
|
|
});
|
|
|
|
if(result.status !== 200) {
|
|
throw "something went wrong with " + result.data
|
|
}
|
|
|
|
console.log(` toot: media result: ${result.status} - media id: ${result.data.id}`)
|
|
return result.data.id
|
|
}
|
|
|
|
module.exports = {
|
|
toot
|
|
}
|