const fetch = require('node-fetch') const FormData = require('form-data') const { fromBuffer } = require('file-type') /** * Upload epheremal file to file.io * `Expired in 1 day` * `100MB Max Filesize` * @param {Buffer} buffer File Buffer */ const fileIO = async buffer => { const { ext } = await fromBuffer(buffer) || {} let form = new FormData form.append('file', buffer, 'tmp.' + ext) let res = await fetch('https://file.io/?expires=1d', { // 1 Day Expiry Date method: 'POST', body: form }) let json = await res.json() if (!json.success) throw json return json.link } /** * Upload file to storage.restfulapi.my.id * @param {Buffer|ReadableStream|(Buffer|ReadableStream)[]} inp File Buffer/Stream or Array of them * @returns {string|null|(string|null)[]} */ const RESTfulAPI = async inp => { let form = new FormData let buffers = inp if (!Array.isArray(inp)) buffers = [inp] for (let buffer of buffers) { form.append('file', buffer) } let res = await fetch('https://storage.restfulapi.my.id/upload', { method: 'POST', body: form }) let json = await res.text() try { json = JSON.parse(json) if (!Array.isArray(inp)) return json.files[0].url return json.files.map(res => res.url) } catch (e) { throw json } } module.exports = async function (inp) { let err = false for (let upload of [RESTfulAPI, fileIO]) { try { return await upload(inp) } catch (e) { err = e } } if (err) throw err }