Client.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. /**
  45. * Reserve resources for a file in an Assembly. Then addFile can be used later.
  46. *
  47. * @param {object} assembly
  48. * @param {UppyFile} file
  49. */
  50. reserveFile (assembly, file) {
  51. const size = encodeURIComponent(file.size)
  52. return fetch(`${assembly.assembly_ssl_url}/reserve_file?size=${size}`, { method: 'post' })
  53. .then((response) => response.json())
  54. }
  55. /**
  56. * Import a remote file to an Assembly.
  57. *
  58. * @param {object} assembly
  59. * @param {UppyFile} file
  60. */
  61. addFile (assembly, file) {
  62. if (!file.uploadURL) {
  63. return Promise.reject(new Error('File does not have an `uploadURL`.'))
  64. }
  65. const size = encodeURIComponent(file.size)
  66. const url = encodeURIComponent(file.uploadURL)
  67. const filename = encodeURIComponent(file.name)
  68. const fieldname = 'file'
  69. const qs = `size=${size}&filename=${filename}&fieldname=${fieldname}&s3Url=${url}`
  70. return fetch(`${assembly.assembly_ssl_url}/add_file?${qs}`, { method: 'post' })
  71. .then((response) => response.json())
  72. }
  73. /**
  74. * Cancel a running Assembly.
  75. *
  76. * @param {object} assembly
  77. */
  78. cancelAssembly (assembly) {
  79. return fetch(assembly.assembly_ssl_url, { method: 'delete' })
  80. .then((response) => response.json())
  81. }
  82. /**
  83. * Get the current status for an assembly.
  84. *
  85. * @param {string} url The status endpoint of the assembly.
  86. */
  87. getAssemblyStatus (url) {
  88. return fetch(url)
  89. .then((response) => response.json())
  90. }
  91. }