uppy
Version:
Extensible JavaScript file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Instagram, Dropbox, Google Drive, S3 and more :dog:
79 lines (70 loc) • 2.01 kB
JavaScript
/**
* A Barebones HTTP API client for Transloadit.
*/
module.exports = class Client {
constructor (opts = {}) {
this.opts = opts
}
/**
* Create a new assembly.
*
* @param {object} options
*/
createAssembly ({
templateId,
params,
fields,
signature,
expectedFiles
}) {
const data = new FormData()
data.append('params', typeof params === 'string'
? params
: JSON.stringify(params))
if (signature) {
data.append('signature', signature)
}
Object.keys(fields).forEach((key) => {
data.append(key, fields[key])
})
data.append('num_expected_upload_files', expectedFiles)
return fetch(`${this.opts.service}/assemblies`, {
method: 'post',
body: data
}).then((response) => response.json()).then((assembly) => {
if (assembly.error) {
const error = new Error(assembly.message)
error.code = assembly.error
error.status = assembly
throw error
}
return assembly
})
}
reserveFile (assembly, file) {
const size = encodeURIComponent(file.size)
return fetch(`${assembly.assembly_ssl_url}/reserve_file?size=${size}`, { method: 'post' })
.then((response) => response.json())
}
addFile (assembly, file) {
if (!file.uploadURL) {
return Promise.reject(new Error('File does not have an `uploadURL`.'))
}
const size = encodeURIComponent(file.size)
const url = encodeURIComponent(file.uploadURL)
const filename = encodeURIComponent(file.name)
const fieldname = 'file'
const qs = `size=${size}&filename=${filename}&fieldname=${fieldname}&s3Url=${url}`
return fetch(`${assembly.assembly_ssl_url}/add_file?${qs}`, { method: 'post' })
.then((response) => response.json())
}
/**
* Get the current status for an assembly.
*
* @param {string} url The status endpoint of the assembly.
*/
getAssemblyStatus (url) {
return fetch(url)
.then((response) => response.json())
}
}