Client.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /**
  2. * A Barebones HTTP API client for Transloadit.
  3. */
  4. module.exports = class Client {
  5. constructor (opts = {}) {
  6. this.opts = opts
  7. }
  8. /**
  9. * Create a new assembly.
  10. *
  11. * @param {object} options
  12. */
  13. createAssembly ({
  14. templateId,
  15. params,
  16. fields,
  17. signature,
  18. expectedFiles
  19. }) {
  20. const data = new FormData()
  21. data.append('params', typeof params === 'string'
  22. ? params
  23. : JSON.stringify(params))
  24. if (signature) {
  25. data.append('signature', signature)
  26. }
  27. Object.keys(fields).forEach((key) => {
  28. data.append(key, fields[key])
  29. })
  30. data.append('num_expected_upload_files', expectedFiles)
  31. return fetch(`${this.opts.service}/assemblies`, {
  32. method: 'post',
  33. body: data
  34. }).then((response) => response.json()).then((assembly) => {
  35. if (assembly.error) {
  36. const error = new Error(assembly.error)
  37. error.message = assembly.error
  38. error.details = assembly.reason
  39. throw error
  40. }
  41. return assembly
  42. })
  43. }
  44. reserveFile (assembly, file) {
  45. const size = encodeURIComponent(file.size)
  46. return fetch(`${assembly.assembly_ssl_url}/reserve_file?size=${size}`, { method: 'post' })
  47. .then((response) => response.json())
  48. }
  49. addFile (assembly, file) {
  50. if (!file.uploadURL) {
  51. return Promise.reject(new Error('File does not have an `uploadURL`.'))
  52. }
  53. const size = encodeURIComponent(file.size)
  54. const url = encodeURIComponent(file.uploadURL)
  55. const filename = encodeURIComponent(file.name)
  56. const fieldname = 'file'
  57. const qs = `size=${size}&filename=${filename}&fieldname=${fieldname}&s3Url=${url}`
  58. return fetch(`${assembly.assembly_ssl_url}/add_file?${qs}`, { method: 'post' })
  59. .then((response) => response.json())
  60. }
  61. /**
  62. * Get the current status for an assembly.
  63. *
  64. * @param {string} url The status endpoint of the assembly.
  65. */
  66. getAssemblyStatus (url) {
  67. return fetch(url)
  68. .then((response) => response.json())
  69. }
  70. }