UNPKG

5.75 kBJavaScriptView Raw
1var fetchWithNetworkError = require('@uppy/utils/lib/fetchWithNetworkError');
2/**
3 * A Barebones HTTP API client for Transloadit.
4 */
5
6
7module.exports = /*#__PURE__*/function () {
8 function Client(opts) {
9 if (opts === void 0) {
10 opts = {};
11 }
12
13 this.opts = opts;
14 this._reportError = this._reportError.bind(this);
15 this._headers = {
16 'Transloadit-Client': this.opts.client
17 };
18 }
19 /**
20 * Create a new assembly.
21 *
22 * @param {object} options
23 */
24
25
26 var _proto = Client.prototype;
27
28 _proto.createAssembly = function createAssembly(_ref) {
29 var _this = this;
30
31 var templateId = _ref.templateId,
32 params = _ref.params,
33 fields = _ref.fields,
34 signature = _ref.signature,
35 expectedFiles = _ref.expectedFiles;
36 var data = new FormData();
37 data.append('params', typeof params === 'string' ? params : JSON.stringify(params));
38
39 if (signature) {
40 data.append('signature', signature);
41 }
42
43 Object.keys(fields).forEach(function (key) {
44 data.append(key, fields[key]);
45 });
46 data.append('num_expected_upload_files', expectedFiles);
47 var url = this.opts.service + "/assemblies";
48 return fetchWithNetworkError(url, {
49 method: 'post',
50 headers: this._headers,
51 body: data
52 }).then(function (response) {
53 return response.json();
54 }).then(function (assembly) {
55 if (assembly.error) {
56 var error = new Error(assembly.error);
57 error.details = assembly.message;
58 error.assembly = assembly;
59
60 if (assembly.assembly_id) {
61 error.details += ' ' + ("Assembly ID: " + assembly.assembly_id);
62 }
63
64 throw error;
65 }
66
67 return assembly;
68 }).catch(function (err) {
69 return _this._reportError(err, {
70 url: url,
71 type: 'API_ERROR'
72 });
73 });
74 }
75 /**
76 * Reserve resources for a file in an Assembly. Then addFile can be used later.
77 *
78 * @param {object} assembly
79 * @param {UppyFile} file
80 */
81 ;
82
83 _proto.reserveFile = function reserveFile(assembly, file) {
84 var _this2 = this;
85
86 var size = encodeURIComponent(file.size);
87 var url = assembly.assembly_ssl_url + "/reserve_file?size=" + size;
88 return fetchWithNetworkError(url, {
89 method: 'post',
90 headers: this._headers
91 }).then(function (response) {
92 return response.json();
93 }).catch(function (err) {
94 return _this2._reportError(err, {
95 assembly: assembly,
96 file: file,
97 url: url,
98 type: 'API_ERROR'
99 });
100 });
101 }
102 /**
103 * Import a remote file to an Assembly.
104 *
105 * @param {object} assembly
106 * @param {UppyFile} file
107 */
108 ;
109
110 _proto.addFile = function addFile(assembly, file) {
111 var _this3 = this;
112
113 if (!file.uploadURL) {
114 return Promise.reject(new Error('File does not have an `uploadURL`.'));
115 }
116
117 var size = encodeURIComponent(file.size);
118 var uploadUrl = encodeURIComponent(file.uploadURL);
119 var filename = encodeURIComponent(file.name);
120 var fieldname = 'file';
121 var qs = "size=" + size + "&filename=" + filename + "&fieldname=" + fieldname + "&s3Url=" + uploadUrl;
122 var url = assembly.assembly_ssl_url + "/add_file?" + qs;
123 return fetchWithNetworkError(url, {
124 method: 'post',
125 headers: this._headers
126 }).then(function (response) {
127 return response.json();
128 }).catch(function (err) {
129 return _this3._reportError(err, {
130 assembly: assembly,
131 file: file,
132 url: url,
133 type: 'API_ERROR'
134 });
135 });
136 }
137 /**
138 * Cancel a running Assembly.
139 *
140 * @param {object} assembly
141 */
142 ;
143
144 _proto.cancelAssembly = function cancelAssembly(assembly) {
145 var _this4 = this;
146
147 var url = assembly.assembly_ssl_url;
148 return fetchWithNetworkError(url, {
149 method: 'delete',
150 headers: this._headers
151 }).then(function (response) {
152 return response.json();
153 }).catch(function (err) {
154 return _this4._reportError(err, {
155 url: url,
156 type: 'API_ERROR'
157 });
158 });
159 }
160 /**
161 * Get the current status for an assembly.
162 *
163 * @param {string} url The status endpoint of the assembly.
164 */
165 ;
166
167 _proto.getAssemblyStatus = function getAssemblyStatus(url) {
168 var _this5 = this;
169
170 return fetchWithNetworkError(url, {
171 headers: this._headers
172 }).then(function (response) {
173 return response.json();
174 }).catch(function (err) {
175 return _this5._reportError(err, {
176 url: url,
177 type: 'STATUS_ERROR'
178 });
179 });
180 };
181
182 _proto.submitError = function submitError(err, _ref2) {
183 var endpoint = _ref2.endpoint,
184 instance = _ref2.instance,
185 assembly = _ref2.assembly;
186 var message = err.details ? err.message + " (" + err.details + ")" : err.message;
187 return fetchWithNetworkError('https://status.transloadit.com/client_error', {
188 method: 'post',
189 body: JSON.stringify({
190 endpoint: endpoint,
191 instance: instance,
192 assembly_id: assembly,
193 agent: typeof navigator !== 'undefined' ? navigator.userAgent : '',
194 client: this.opts.client,
195 error: message
196 })
197 }).then(function (response) {
198 return response.json();
199 });
200 };
201
202 _proto._reportError = function _reportError(err, params) {
203 if (this.opts.errorReporting === false) {
204 throw err;
205 }
206
207 var opts = {
208 type: params.type
209 };
210
211 if (params.assembly) {
212 opts.assembly = params.assembly.assembly_id;
213 opts.instance = params.assembly.instance;
214 }
215
216 if (params.url) {
217 opts.endpoint = params.url;
218 }
219
220 this.submitError(err, opts).catch(function (_) {// not much we can do then is there
221 });
222 throw err;
223 };
224
225 return Client;
226}();
\No newline at end of file