@twilio/mcs-client 0.5.3 → 0.6.0-canary.102

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/builds/browser.js +449 -484
  2. package/builds/browser.js.map +1 -1
  3. package/builds/lib.d.ts +16 -25
  4. package/builds/lib.js +449 -484
  5. package/builds/lib.js.map +1 -1
  6. package/builds/twilio-mcs-client.js +11240 -9472
  7. package/builds/twilio-mcs-client.min.js +37 -38
  8. package/dist/_virtual/rng-browser.js +34 -0
  9. package/dist/_virtual/rng-browser.js.map +1 -0
  10. package/dist/cancellable-promise.js +98 -0
  11. package/dist/cancellable-promise.js.map +1 -0
  12. package/dist/client.js +88 -23
  13. package/dist/client.js.map +1 -1
  14. package/dist/configuration.js.map +1 -1
  15. package/dist/index.js +8 -9
  16. package/dist/index.js.map +1 -1
  17. package/dist/logger.js +2 -4
  18. package/dist/logger.js.map +1 -1
  19. package/dist/media.js +15 -22
  20. package/dist/media.js.map +1 -1
  21. package/dist/node_modules/tslib/tslib.es6.js +1 -1
  22. package/dist/node_modules/tslib/tslib.es6.js.map +1 -1
  23. package/dist/node_modules/uuid/index.js +44 -0
  24. package/dist/node_modules/uuid/index.js.map +1 -0
  25. package/dist/node_modules/uuid/lib/bytesToUuid.js +60 -0
  26. package/dist/node_modules/uuid/lib/bytesToUuid.js.map +1 -0
  27. package/dist/node_modules/uuid/lib/rng-browser.js +65 -0
  28. package/dist/node_modules/uuid/lib/rng-browser.js.map +1 -0
  29. package/dist/node_modules/uuid/v1.js +146 -0
  30. package/dist/node_modules/uuid/v1.js.map +1 -0
  31. package/dist/node_modules/uuid/v4.js +66 -0
  32. package/dist/node_modules/uuid/v4.js.map +1 -0
  33. package/dist/packages/mcs-client/package.json.js +1 -1
  34. package/dist/services/network.js +54 -32
  35. package/dist/services/network.js.map +1 -1
  36. package/dist/services/transport.js +26 -11
  37. package/dist/services/transport.js.map +1 -1
  38. package/dist/services/transporterror.js.map +1 -1
  39. package/package.json +21 -16
  40. package/CHANGELOG.md +0 -210
package/builds/lib.js CHANGED
@@ -19,9 +19,13 @@ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
19
 
20
20
  Object.defineProperty(exports, '__esModule', { value: true });
21
21
 
22
+ var shared = require('@twilio/shared');
22
23
  var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
23
24
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
24
- require('core-js/modules/es.promise.js');
25
+ require('core-js/modules/es.array.iterator.js');
26
+ require('core-js/modules/es.map.js');
27
+ require('core-js/modules/web.dom-collections.iterator.js');
28
+ require('core-js/modules/web.dom-collections.for-each.js');
25
29
  var _regeneratorRuntime = require('@babel/runtime/regenerator');
26
30
  require('core-js/modules/es.array.from.js');
27
31
  var log$2 = require('loglevel');
@@ -29,10 +33,11 @@ require('core-js/modules/es.string.starts-with.js');
29
33
  require('core-js/modules/es.array.reduce.js');
30
34
  require('core-js/modules/es.regexp.exec.js');
31
35
  require('core-js/modules/es.string.split.js');
36
+ require('core-js/modules/es.string.replace.js');
37
+ require('core-js/modules/es.json.stringify.js');
32
38
  require('core-js/modules/es.object.assign.js');
33
- require('core-js/modules/es.array.iterator.js');
34
- require('core-js/modules/web.dom-collections.iterator.js');
35
39
  require('core-js/modules/web.url.js');
40
+ require('core-js/modules/web.url-search-params.js');
36
41
  var operationRetrier = require('@twilio/operation-retrier');
37
42
  var declarativeTypeValidator = require('@twilio/declarative-type-validator');
38
43
 
@@ -47,14 +52,12 @@ function _interopNamespace(e) {
47
52
  var d = Object.getOwnPropertyDescriptor(e, k);
48
53
  Object.defineProperty(n, k, d.get ? d : {
49
54
  enumerable: true,
50
- get: function () {
51
- return e[k];
52
- }
55
+ get: function () { return e[k]; }
53
56
  });
54
57
  }
55
58
  });
56
59
  }
57
- n['default'] = e;
60
+ n["default"] = e;
58
61
  return Object.freeze(n);
59
62
  }
60
63
 
@@ -63,7 +66,7 @@ var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_definePropert
63
66
  var _regeneratorRuntime__default = /*#__PURE__*/_interopDefaultLegacy(_regeneratorRuntime);
64
67
  var log__namespace = /*#__PURE__*/_interopNamespace(log$2);
65
68
 
66
- /*! *****************************************************************************
69
+ /******************************************************************************
67
70
  Copyright (c) Microsoft Corporation.
68
71
 
69
72
  Permission to use, copy, modify, and/or distribute this software for any
@@ -79,8 +82,8 @@ PERFORMANCE OF THIS SOFTWARE.
79
82
  ***************************************************************************** */
80
83
  function __decorate(decorators, target, key, desc) {
81
84
  var c = arguments.length,
82
- r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
83
- d;
85
+ r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
86
+ d;
84
87
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
85
88
  if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
86
89
  }
@@ -93,125 +96,99 @@ function __metadata(metadataKey, metadataValue) {
93
96
  function prepareLine(prefix, args) {
94
97
  return ["".concat(new Date().toISOString(), " MCS Client ").concat(prefix, ":")].concat(Array.from(args));
95
98
  }
96
-
97
99
  class Logger {
98
100
  constructor(prefix) {
99
- _defineProperty__default['default'](this, "prefix", "");
100
-
101
+ _defineProperty__default["default"](this, "prefix", "");
101
102
  this.prefix = prefix !== null && prefix !== undefined && prefix.length > 0 ? prefix + " " : "";
102
103
  }
103
-
104
104
  static scope(prefix) {
105
105
  return new Logger(prefix);
106
106
  }
107
-
108
107
  setLevel(level) {
109
108
  log__namespace.setLevel(level);
110
109
  }
111
-
112
110
  static setLevel(level) {
113
111
  log__namespace.setLevel(level);
114
112
  }
115
113
  /* eslint-disable @typescript-eslint/explicit-module-boundary-types */
116
-
117
-
118
114
  trace() {
119
115
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
120
116
  args[_key] = arguments[_key];
121
117
  }
122
-
123
118
  log__namespace.trace.apply(null, prepareLine(this.prefix + "T", args));
124
119
  }
125
-
126
120
  debug() {
127
121
  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
128
122
  args[_key2] = arguments[_key2];
129
123
  }
130
-
131
124
  log__namespace.debug.apply(null, prepareLine(this.prefix + "D", args));
132
125
  }
133
-
134
126
  info() {
135
127
  for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
136
128
  args[_key3] = arguments[_key3];
137
129
  }
138
-
139
130
  log__namespace.info.apply(null, prepareLine(this.prefix + "I", args));
140
131
  }
141
-
142
132
  warn() {
143
133
  for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
144
134
  args[_key4] = arguments[_key4];
145
135
  }
146
-
147
136
  log__namespace.warn.apply(null, prepareLine(this.prefix + "W", args));
148
137
  }
149
-
150
138
  error() {
151
139
  for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
152
140
  args[_key5] = arguments[_key5];
153
141
  }
154
-
155
142
  log__namespace.error.apply(null, prepareLine(this.prefix + "E", args));
156
143
  }
157
-
158
144
  static trace() {
159
145
  for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
160
146
  args[_key6] = arguments[_key6];
161
147
  }
162
-
163
148
  log__namespace.trace.apply(null, prepareLine("T", args));
164
149
  }
165
-
166
150
  static debug() {
167
151
  for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
168
152
  args[_key7] = arguments[_key7];
169
153
  }
170
-
171
154
  log__namespace.debug.apply(null, prepareLine("D", args));
172
155
  }
173
-
174
156
  static info() {
175
157
  for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
176
158
  args[_key8] = arguments[_key8];
177
159
  }
178
-
179
160
  log__namespace.info.apply(null, prepareLine("I", args));
180
161
  }
181
-
182
162
  static warn() {
183
163
  for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
184
164
  args[_key9] = arguments[_key9];
185
165
  }
186
-
187
166
  log__namespace.warn.apply(null, prepareLine("W", args));
188
167
  }
189
-
190
168
  static error() {
191
169
  for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
192
170
  args[_key10] = arguments[_key10];
193
171
  }
194
-
195
172
  log__namespace.error.apply(null, prepareLine("E", args));
196
173
  }
197
-
198
174
  }
199
175
 
200
176
  var MINIMUM_RETRY_DELAY = 1000;
201
177
  var MAXIMUM_RETRY_DELAY = 4000;
202
178
  var MAXIMUM_ATTEMPTS_COUNT = 3;
203
179
  var RETRY_WHEN_THROTTLED = true;
204
-
205
180
  var regionalMcsHost = region => "https://mcs.".concat(region !== null && region !== void 0 ? region : "us1", ".twilio.com");
206
-
207
181
  var isFullUrl = url => url.startsWith("http");
208
-
209
182
  var fullUrl = (partUrl, region) => "".concat(!isFullUrl(partUrl) ? regionalMcsHost(region) : "").concat(partUrl);
210
-
211
183
  class Configuration {
212
184
  constructor(token, baseUrl, baseSetUrl, options) {
213
185
  var _ref, _options$MCS, _ref2, _constructorOptions$r, _constructorOptions$r2, _constructorOptions$b;
214
-
186
+ _defineProperty__default["default"](this, "token", void 0);
187
+ _defineProperty__default["default"](this, "retryWhenThrottledOverride", void 0);
188
+ _defineProperty__default["default"](this, "backoffConfigOverride", void 0);
189
+ _defineProperty__default["default"](this, "mediaUrl", void 0);
190
+ _defineProperty__default["default"](this, "mediaSetUrl", void 0);
191
+ _defineProperty__default["default"](this, "region", void 0);
215
192
  var constructorOptions = (_ref = (_options$MCS = options.MCS) !== null && _options$MCS !== void 0 ? _options$MCS : options) !== null && _ref !== void 0 ? _ref : {};
216
193
  this.region = (_ref2 = (_constructorOptions$r = constructorOptions.region) !== null && _constructorOptions$r !== void 0 ? _constructorOptions$r : options.region) !== null && _ref2 !== void 0 ? _ref2 : 'us1';
217
194
  this.mediaUrl = fullUrl(baseUrl, this.region);
@@ -220,7 +197,6 @@ class Configuration {
220
197
  this.retryWhenThrottledOverride = (_constructorOptions$r2 = constructorOptions.retryWhenThrottledOverride) !== null && _constructorOptions$r2 !== void 0 ? _constructorOptions$r2 : RETRY_WHEN_THROTTLED;
221
198
  this.backoffConfigOverride = (_constructorOptions$b = constructorOptions.backoffConfigOverride) !== null && _constructorOptions$b !== void 0 ? _constructorOptions$b : Configuration.backoffConfigDefault;
222
199
  }
223
-
224
200
  static get backoffConfigDefault() {
225
201
  return {
226
202
  min: MINIMUM_RETRY_DELAY,
@@ -228,15 +204,12 @@ class Configuration {
228
204
  maxAttemptsCount: MAXIMUM_ATTEMPTS_COUNT
229
205
  };
230
206
  }
231
-
232
207
  static get retryWhenThrottledDefault() {
233
208
  return RETRY_WHEN_THROTTLED;
234
209
  }
235
-
236
210
  updateToken(token) {
237
211
  this.token = token;
238
212
  }
239
-
240
213
  }
241
214
 
242
215
  /**
@@ -252,46 +225,38 @@ class Configuration {
252
225
  */
253
226
  class Media {
254
227
  constructor(config, network, data) {
228
+ _defineProperty__default["default"](this, "state", void 0);
229
+ _defineProperty__default["default"](this, "network", void 0);
230
+ _defineProperty__default["default"](this, "config", void 0);
255
231
  this.config = config;
256
232
  this.network = network;
257
-
258
233
  this._update(data);
259
234
  }
260
-
261
235
  get sid() {
262
236
  return this.state.sid;
263
237
  }
264
-
265
238
  get serviceSid() {
266
239
  return this.state.serviceSid;
267
240
  }
268
-
269
241
  get dateCreated() {
270
242
  return this.state.dateCreated;
271
243
  }
272
-
273
244
  get dateUpdated() {
274
245
  return this.state.dateUpdated;
275
246
  }
276
-
277
247
  get contentType() {
278
248
  return this.state.contentType;
279
249
  }
280
-
281
250
  get size() {
282
251
  return this.state.size;
283
252
  }
284
253
  /** @deprecated Use filename instead */
285
-
286
-
287
254
  get fileName() {
288
255
  return this.state.filename;
289
256
  }
290
-
291
257
  get filename() {
292
258
  return this.state.filename;
293
259
  }
294
-
295
260
  get category() {
296
261
  return this.state.category;
297
262
  }
@@ -302,84 +267,45 @@ class Media {
302
267
  *
303
268
  * It is reasonable to build your own refresh logic upon these two functions: as soon as URL returned
304
269
  * by getCachedContentUrl() returns 40x status you should call getContentUrl() to refresh it.
305
- *
306
- * @returns {Promise<string>}
307
270
  */
308
-
309
-
310
271
  getContentUrl() {
311
272
  var _this = this;
312
-
313
- return _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee() {
314
- var response;
315
- return _regeneratorRuntime__default['default'].wrap(function _callee$(_context) {
316
- while (1) {
317
- switch (_context.prev = _context.next) {
318
- case 0:
319
- _context.next = 2;
320
- return _this.network.get("".concat(_this.config.mediaUrl, "/").concat(_this.sid));
321
-
322
- case 2:
323
- response = _context.sent;
324
-
325
- _this._update(response.body);
326
-
327
- return _context.abrupt("return", Promise.resolve(_this.state.contentDirectUrl));
328
-
329
- case 5:
330
- case "end":
331
- return _context.stop();
332
- }
333
- }
334
- }, _callee);
335
- }))();
336
- }
337
- /**
338
- * Returns direct content URL to uploaded binary. This URL will expire after some time.
339
- * This function does not support getting a new URL however. Once set it will remain the same.
340
- * Use getContentUrl() to query a new one.
341
- *
342
- * It is reasonable to build your own refresh logic upon these two functions: as soon as URL returned
343
- * by getCachedContentUrl() returns 40x status you should call getContentUrl() to refresh it.
344
- *
345
- * @returns {Promise<string>}
346
- */
347
-
348
-
349
- getCachedContentUrl() {
350
- var _this2 = this;
351
-
352
- return _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee2() {
353
- return _regeneratorRuntime__default['default'].wrap(function _callee2$(_context2) {
354
- while (1) {
355
- switch (_context2.prev = _context2.next) {
356
- case 0:
357
- if (!_this2.state.contentDirectUrl) {
358
- _context2.next = 2;
273
+ return new shared.CancellablePromise( /*#__PURE__*/function () {
274
+ var _ref = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(resolve, reject, onCancel) {
275
+ var request, response;
276
+ return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
277
+ while (1) {
278
+ switch (_context.prev = _context.next) {
279
+ case 0:
280
+ request = _this.network.get("".concat(_this.config.mediaUrl, "/").concat(_this.sid));
281
+ onCancel(() => request.cancel());
282
+ _context.prev = 2;
283
+ _context.next = 5;
284
+ return request;
285
+ case 5:
286
+ response = _context.sent;
287
+ _this._update(response.body);
288
+ resolve(_this.state.contentDirectUrl);
289
+ _context.next = 13;
359
290
  break;
360
- }
361
-
362
- return _context2.abrupt("return", Promise.resolve(_this2.state.contentDirectUrl));
363
-
364
- case 2:
365
- _context2.next = 4;
366
- return _this2.getContentUrl();
367
-
368
- case 4:
369
- return _context2.abrupt("return", _context2.sent);
370
-
371
- case 5:
372
- case "end":
373
- return _context2.stop();
291
+ case 10:
292
+ _context.prev = 10;
293
+ _context.t0 = _context["catch"](2);
294
+ reject(_context.t0);
295
+ case 13:
296
+ case "end":
297
+ return _context.stop();
298
+ }
374
299
  }
375
- }
376
- }, _callee2);
377
- }))();
300
+ }, _callee, null, [[2, 10]]);
301
+ }));
302
+ return function (_x, _x2, _x3) {
303
+ return _ref.apply(this, arguments);
304
+ };
305
+ }());
378
306
  }
379
-
380
307
  _update(data) {
381
308
  var _data$links$content_d, _data$filename, _data$category, _data$is_multipart_up;
382
-
383
309
  this.state = {
384
310
  sid: data.sid,
385
311
  serviceSid: data.service_sid,
@@ -399,40 +325,38 @@ class Media {
399
325
  isMultipartUpstream: (_data$is_multipart_up = data.is_multipart_upstream) !== null && _data$is_multipart_up !== void 0 ? _data$is_multipart_up : false
400
326
  };
401
327
  }
402
-
403
328
  }
404
329
 
405
330
  class TransportError extends Error {
406
331
  constructor(message, code, body, status, headers) {
407
332
  super(message);
333
+ _defineProperty__default["default"](this, "code", void 0);
334
+ _defineProperty__default["default"](this, "body", void 0);
335
+ _defineProperty__default["default"](this, "status", void 0);
336
+ _defineProperty__default["default"](this, "headers", void 0);
408
337
  this.code = code;
409
338
  this.body = body;
410
339
  this.status = status;
411
340
  this.headers = headers;
412
341
  }
413
-
414
342
  }
415
343
 
344
+ // eslint-disable-next-line
416
345
  var XHR = global["XMLHttpRequest"] || require("xmlhttprequest").XMLHttpRequest;
417
-
418
346
  function parseResponseHeaders(headerString) {
419
347
  if (!headerString) {
420
348
  return {};
421
349
  }
422
-
423
350
  return headerString.split("\r\n").map(el => el.split(": ")).filter(el => el.length === 2 && el[1].length > 0).reduce((prev, curr) => {
424
351
  prev[curr[0]] = curr[1];
425
352
  return prev;
426
353
  }, {});
427
354
  }
428
-
429
355
  function extractBody(xhr) {
430
356
  var contentType = xhr.getResponseHeader("Content-Type");
431
-
432
357
  if (!contentType || contentType.indexOf("application/json") !== 0 || xhr.responseText.length === 0) {
433
358
  return xhr.responseText;
434
359
  }
435
-
436
360
  try {
437
361
  return JSON.parse(xhr.responseText);
438
362
  } catch (e) {
@@ -442,168 +366,125 @@ function extractBody(xhr) {
442
366
  /**
443
367
  * Provides generic network interface
444
368
  */
445
-
446
-
447
369
  class Transport {
448
370
  static request(method, url, headers, body) {
449
- return _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee() {
450
- return _regeneratorRuntime__default['default'].wrap(function _callee$(_context) {
451
- while (1) {
452
- switch (_context.prev = _context.next) {
453
- case 0:
454
- return _context.abrupt("return", new Promise((resolve, reject) => {
455
- var xhr = new XHR();
456
- xhr.open(method, url, true);
457
-
458
- xhr.onreadystatechange = function onreadystatechange() {
459
- if (xhr.readyState !== 4) {
460
- return;
461
- }
462
-
463
- var headers = parseResponseHeaders(xhr.getAllResponseHeaders());
464
- var body = extractBody(xhr);
465
-
466
- if (200 <= xhr.status && xhr.status < 300) {
467
- resolve({
468
- status: xhr.status,
469
- headers,
470
- body
471
- });
472
- } else {
473
- var _xhr$statusText;
474
-
475
- var status = (_xhr$statusText = xhr.statusText) !== null && _xhr$statusText !== void 0 ? _xhr$statusText : "NONE";
476
- var bodyRepresentation;
477
-
478
- if (typeof body === "string") {
479
- bodyRepresentation = body && body.split("\n", 2).length === 1 ? body : "";
480
- } else {
481
- bodyRepresentation = JSON.stringify(body);
482
- }
483
-
484
- var message = "".concat(xhr.status, ": [").concat(status, "] ").concat(bodyRepresentation);
485
- reject(new TransportError(message, xhr.status, body, status, headers));
486
- }
487
- };
488
-
489
- for (var headerName in headers) {
490
- xhr.setRequestHeader(headerName, headers[headerName]);
491
-
492
- if (headerName === "Content-Type" && headers[headerName] === "application/json") {
493
- body = JSON.stringify(body);
494
- }
495
- }
496
-
497
- xhr.send(body);
498
- }));
499
-
500
- case 1:
501
- case "end":
502
- return _context.stop();
371
+ return new shared.CancellablePromise((resolve, reject, onCancel) => {
372
+ var xhr = new XHR();
373
+ var isCancelled = false;
374
+ onCancel(() => {
375
+ xhr.abort();
376
+ isCancelled = true;
377
+ });
378
+ xhr.open(method, url, true);
379
+ xhr.onreadystatechange = function onreadystatechange() {
380
+ if (xhr.readyState !== 4 || isCancelled) {
381
+ return;
382
+ }
383
+ var responseHeaders = parseResponseHeaders(xhr.getAllResponseHeaders());
384
+ var body = extractBody(xhr);
385
+ if (200 <= xhr.status && xhr.status < 300) {
386
+ resolve({
387
+ status: xhr.status,
388
+ headers: responseHeaders,
389
+ body
390
+ });
391
+ } else {
392
+ var _xhr$statusText;
393
+ var status = (_xhr$statusText = xhr.statusText) !== null && _xhr$statusText !== void 0 ? _xhr$statusText : "NONE";
394
+ var bodyRepresentation;
395
+ if (typeof body === "string") {
396
+ if (body && body.split("\n", 2).length === 1) bodyRepresentation = body;else {
397
+ var _body$replace$split$f;
398
+ // TODO: RTDSDK-3716: investigate why body is HTML string
399
+ var errorInfo = (_body$replace$split$f = body.replace(/<.*?>/g, "").split(/\r\n/g).filter(str => str.length)[0]) === null || _body$replace$split$f === void 0 ? void 0 : _body$replace$split$f.split(" ");
400
+ bodyRepresentation = (errorInfo === null || errorInfo === void 0 ? void 0 : errorInfo.length) > 2 ? errorInfo === null || errorInfo === void 0 ? void 0 : errorInfo.slice(1).join(" ") : "";
401
+ }
402
+ } else {
403
+ bodyRepresentation = JSON.stringify(body);
503
404
  }
405
+ var message = "".concat(xhr.status, ": [").concat(status, "] ").concat(bodyRepresentation);
406
+ reject(new TransportError(message, xhr.status, body, status, responseHeaders));
504
407
  }
505
- }, _callee);
506
- }))();
408
+ };
409
+ for (var headerName in headers) {
410
+ xhr.setRequestHeader(headerName, headers[headerName]);
411
+ if (headerName === "Content-Type" && headers[headerName] === "application/json") {
412
+ body = JSON.stringify(body);
413
+ }
414
+ }
415
+ xhr.send(body);
416
+ });
507
417
  }
508
418
  /**
509
419
  * Make a GET request by given URL
510
420
  */
511
-
512
-
513
421
  get(url, headers) {
514
- return _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee2() {
515
- return _regeneratorRuntime__default['default'].wrap(function _callee2$(_context2) {
516
- while (1) {
517
- switch (_context2.prev = _context2.next) {
518
- case 0:
519
- return _context2.abrupt("return", Transport.request("GET", url, headers));
520
-
521
- case 1:
522
- case "end":
523
- return _context2.stop();
524
- }
525
- }
526
- }, _callee2);
527
- }))();
422
+ return Transport.request("GET", url, headers);
528
423
  }
529
424
  /**
530
425
  * Make a POST request by given URL
531
426
  */
532
-
533
-
534
427
  post(url, headers, body) {
535
- return _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee3() {
536
- return _regeneratorRuntime__default['default'].wrap(function _callee3$(_context3) {
537
- while (1) {
538
- switch (_context3.prev = _context3.next) {
539
- case 0:
540
- return _context3.abrupt("return", Transport.request("POST", url, headers, body));
541
-
542
- case 1:
543
- case "end":
544
- return _context3.stop();
545
- }
546
- }
547
- }, _callee3);
548
- }))();
428
+ return Transport.request("POST", url, headers, body);
549
429
  }
550
-
551
430
  }
552
431
 
553
432
  var log$1 = Logger.scope("Network");
554
-
555
433
  class Network {
556
434
  constructor(config, transport) {
435
+ _defineProperty__default["default"](this, "config", void 0);
436
+ _defineProperty__default["default"](this, "transport", void 0);
557
437
  this.config = config;
558
438
  this.transport = transport;
559
439
  }
560
-
561
440
  backoffConfig() {
562
441
  return Object.assign(Configuration.backoffConfigDefault, this.config.backoffConfigOverride);
563
442
  }
564
-
565
443
  retryWhenThrottled() {
566
444
  var _ref, _this$config$retryWhe;
567
-
568
445
  return (_ref = (_this$config$retryWhe = this.config.retryWhenThrottledOverride) !== null && _this$config$retryWhe !== void 0 ? _this$config$retryWhe : Configuration.retryWhenThrottledDefault) !== null && _ref !== void 0 ? _ref : false;
569
446
  }
570
-
571
447
  executeWithRetry(request, retryWhenThrottled) {
572
448
  var _this = this;
573
-
574
- return _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee2() {
575
- return _regeneratorRuntime__default['default'].wrap(function _callee2$(_context2) {
576
- while (1) {
577
- switch (_context2.prev = _context2.next) {
578
- case 0:
579
- return _context2.abrupt("return", new Promise((resolve, reject) => {
580
- var codesToRetryOn = [502, 503, 504];
581
-
449
+ return new shared.CancellablePromise( /*#__PURE__*/function () {
450
+ var _ref2 = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2(resolve, reject, onCancel) {
451
+ var retrier, codesToRetryOn;
452
+ return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) {
453
+ while (1) {
454
+ switch (_context2.prev = _context2.next) {
455
+ case 0:
456
+ retrier = new operationRetrier.Retrier(_this.backoffConfig());
457
+ codesToRetryOn = [502, 503, 504];
582
458
  if (retryWhenThrottled) {
583
459
  codesToRetryOn.push(429);
584
460
  }
585
-
586
- var retrier = new operationRetrier.Retrier(_this.backoffConfig());
587
- retrier.on("attempt", /*#__PURE__*/_asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee() {
588
- var result;
589
- return _regeneratorRuntime__default['default'].wrap(function _callee$(_context) {
461
+ onCancel(() => {
462
+ retrier.cancel();
463
+ retrier.removeAllListeners();
464
+ });
465
+ retrier.on("attempt", /*#__PURE__*/_asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee() {
466
+ var requestPromise, result;
467
+ return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
590
468
  while (1) {
591
469
  switch (_context.prev = _context.next) {
592
470
  case 0:
593
471
  _context.prev = 0;
594
- _context.next = 3;
595
- return request();
596
-
597
- case 3:
472
+ requestPromise = request();
473
+ onCancel(() => {
474
+ requestPromise.cancel();
475
+ retrier.cancel();
476
+ retrier.removeAllListeners();
477
+ });
478
+ _context.next = 5;
479
+ return requestPromise;
480
+ case 5:
598
481
  result = _context.sent;
599
482
  retrier.succeeded(result);
600
- _context.next = 10;
483
+ _context.next = 12;
601
484
  break;
602
-
603
- case 7:
604
- _context.prev = 7;
485
+ case 9:
486
+ _context.prev = 9;
605
487
  _context.t0 = _context["catch"](0);
606
-
607
488
  if (codesToRetryOn.indexOf(_context.t0.status) > -1) {
608
489
  retrier.failed(_context.t0);
609
490
  } else if (_context.t0.message === "Twilsock disconnected") {
@@ -615,13 +496,12 @@ class Network {
615
496
  retrier.cancel();
616
497
  reject(_context.t0);
617
498
  }
618
-
619
- case 10:
499
+ case 12:
620
500
  case "end":
621
501
  return _context.stop();
622
502
  }
623
503
  }
624
- }, _callee, null, [[0, 7]]);
504
+ }, _callee, null, [[0, 9]]);
625
505
  })));
626
506
  retrier.on("succeeded", result => {
627
507
  resolve(result);
@@ -629,132 +509,131 @@ class Network {
629
509
  retrier.on("cancelled", err => reject(err));
630
510
  retrier.on("failed", err => reject(err));
631
511
  retrier.start();
632
- }));
633
-
634
- case 1:
635
- case "end":
636
- return _context2.stop();
512
+ case 9:
513
+ case "end":
514
+ return _context2.stop();
515
+ }
637
516
  }
638
- }
639
- }, _callee2);
640
- }))();
517
+ }, _callee2);
518
+ }));
519
+ return function (_x, _x2, _x3) {
520
+ return _ref2.apply(this, arguments);
521
+ };
522
+ }());
641
523
  }
642
-
643
524
  get(url) {
644
525
  var _this2 = this;
645
-
646
- return _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee3() {
647
- var headers, response;
648
- return _regeneratorRuntime__default['default'].wrap(function _callee3$(_context3) {
649
- while (1) {
650
- switch (_context3.prev = _context3.next) {
651
- case 0:
652
- headers = {
653
- "X-Twilio-Token": _this2.config.token
654
- };
655
- log$1.trace("sending GET request to ", url, " headers ", headers);
656
- _context3.prev = 2;
657
- _context3.next = 5;
658
- return _this2.executeWithRetry(() => _this2.transport.get(url, headers), _this2.retryWhenThrottled());
659
-
660
- case 5:
661
- response = _context3.sent;
662
- log$1.trace("response", response);
663
- return _context3.abrupt("return", response);
664
-
665
- case 10:
666
- _context3.prev = 10;
667
- _context3.t0 = _context3["catch"](2);
668
- log$1.debug("get() error ".concat(_context3.t0));
669
- throw _context3.t0;
670
-
671
- case 14:
672
- case "end":
673
- return _context3.stop();
526
+ return new shared.CancellablePromise( /*#__PURE__*/function () {
527
+ var _ref4 = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee3(resolve, reject, onCancel) {
528
+ var headers, request, response;
529
+ return _regeneratorRuntime__default["default"].wrap(function _callee3$(_context3) {
530
+ while (1) {
531
+ switch (_context3.prev = _context3.next) {
532
+ case 0:
533
+ headers = {
534
+ "X-Twilio-Token": _this2.config.token
535
+ };
536
+ request = _this2.executeWithRetry(() => _this2.transport.get(url, headers), _this2.retryWhenThrottled());
537
+ log$1.trace("sending GET request to ", url, " headers ", headers);
538
+ onCancel(() => request.cancel());
539
+ _context3.prev = 4;
540
+ _context3.next = 7;
541
+ return request;
542
+ case 7:
543
+ response = _context3.sent;
544
+ log$1.trace("response", response);
545
+ resolve(response);
546
+ _context3.next = 16;
547
+ break;
548
+ case 12:
549
+ _context3.prev = 12;
550
+ _context3.t0 = _context3["catch"](4);
551
+ log$1.debug("get() error ".concat(_context3.t0));
552
+ reject(_context3.t0);
553
+ case 16:
554
+ case "end":
555
+ return _context3.stop();
556
+ }
674
557
  }
675
- }
676
- }, _callee3, null, [[2, 10]]);
677
- }))();
558
+ }, _callee3, null, [[4, 12]]);
559
+ }));
560
+ return function (_x4, _x5, _x6) {
561
+ return _ref4.apply(this, arguments);
562
+ };
563
+ }());
678
564
  }
679
-
680
565
  post(url, category, media, contentType, filename) {
681
566
  var _this3 = this;
682
-
683
- return _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee4() {
684
- var headers, fullUrl, response;
685
- return _regeneratorRuntime__default['default'].wrap(function _callee4$(_context4) {
686
- while (1) {
687
- switch (_context4.prev = _context4.next) {
688
- case 0:
689
- headers = {
690
- "X-Twilio-Token": _this3.config.token
691
- };
692
-
693
- if ((typeof FormData === "undefined" || !(media instanceof FormData)) && contentType) {
694
- Object.assign(headers, {
695
- "Content-Type": contentType
696
- });
697
- }
698
-
699
- fullUrl = new URL(url);
700
-
701
- if (category) {
702
- fullUrl.searchParams.append("Category", category);
703
- }
704
-
705
- if (filename) {
706
- fullUrl.searchParams.append("Filename", filename);
707
- }
708
-
709
- log$1.trace("sending POST request to ".concat(url, " with headers ").concat(headers));
710
- _context4.prev = 6;
711
- _context4.next = 9;
712
- return _this3.transport.post(fullUrl.href, headers, media);
713
-
714
- case 9:
715
- response = _context4.sent;
716
- _context4.next = 18;
717
- break;
718
-
719
- case 12:
720
- _context4.prev = 12;
721
- _context4.t0 = _context4["catch"](6);
722
-
723
- if (!(global["XMLHttpRequest"] === undefined && media instanceof FormData)) {
724
- _context4.next = 16;
567
+ var headers = {
568
+ "X-Twilio-Token": this.config.token
569
+ };
570
+ if ((typeof FormData === "undefined" || !(media instanceof FormData)) && contentType) {
571
+ Object.assign(headers, {
572
+ "Content-Type": contentType
573
+ });
574
+ }
575
+ var fullUrl = new URL(url);
576
+ if (category) {
577
+ fullUrl.searchParams.append("Category", category);
578
+ }
579
+ if (filename) {
580
+ fullUrl.searchParams.append("Filename", filename);
581
+ }
582
+ return new shared.CancellablePromise( /*#__PURE__*/function () {
583
+ var _ref5 = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee4(resolve, reject, onCancel) {
584
+ var request, response;
585
+ return _regeneratorRuntime__default["default"].wrap(function _callee4$(_context4) {
586
+ while (1) {
587
+ switch (_context4.prev = _context4.next) {
588
+ case 0:
589
+ request = _this3.transport.post(fullUrl.href, headers, media);
590
+ onCancel(() => request.cancel());
591
+ log$1.trace("sending POST request to ".concat(url, " with headers ").concat(headers));
592
+ _context4.prev = 3;
593
+ _context4.next = 6;
594
+ return request;
595
+ case 6:
596
+ response = _context4.sent;
597
+ _context4.next = 17;
725
598
  break;
726
- }
727
-
728
- throw new TypeError("Posting FormData supported only with browser engine's FormData");
729
-
730
- case 16:
731
- log$1.debug("post() error ".concat(_context4.t0));
732
- throw _context4.t0;
733
-
734
- case 18:
735
- log$1.trace("response", response);
736
- return _context4.abrupt("return", response);
737
-
738
- case 20:
739
- case "end":
740
- return _context4.stop();
599
+ case 9:
600
+ _context4.prev = 9;
601
+ _context4.t0 = _context4["catch"](3);
602
+ if (!(global["XMLHttpRequest"] === undefined && media instanceof FormData)) {
603
+ _context4.next = 14;
604
+ break;
605
+ }
606
+ reject(new TypeError("Posting FormData supported only with browser engine's FormData"));
607
+ return _context4.abrupt("return");
608
+ case 14:
609
+ log$1.debug("post() error ".concat(_context4.t0));
610
+ reject(_context4.t0);
611
+ return _context4.abrupt("return");
612
+ case 17:
613
+ log$1.trace("response", response);
614
+ resolve(response);
615
+ case 19:
616
+ case "end":
617
+ return _context4.stop();
618
+ }
741
619
  }
742
- }
743
- }, _callee4, null, [[6, 12]]);
744
- }))();
620
+ }, _callee4, null, [[3, 9]]);
621
+ }));
622
+ return function (_x7, _x8, _x9) {
623
+ return _ref5.apply(this, arguments);
624
+ };
625
+ }());
745
626
  }
746
-
747
627
  }
748
628
 
749
- var version = "0.5.3";
629
+ var version = "0.6.1";
750
630
 
751
- var _class, _temp;
631
+ var _class;
752
632
  var log = Logger.scope("");
753
633
  /**
754
634
  * @classdesc A Client provides an interface for Media Content Service
755
635
  */
756
-
757
- exports['default'] = (_temp = _class = class Client {
636
+ exports["default"] = (_class = class Client {
758
637
  // eslint-disable-next-line
759
638
 
760
639
  /**
@@ -768,8 +647,11 @@ exports['default'] = (_temp = _class = class Client {
768
647
  */
769
648
  constructor(token, baseUrl, baseSetUrl) {
770
649
  var _this$options$logLeve, _this$options$transpo;
771
-
772
650
  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
651
+ _defineProperty__default["default"](this, "transport", void 0);
652
+ _defineProperty__default["default"](this, "options", void 0);
653
+ _defineProperty__default["default"](this, "network", void 0);
654
+ _defineProperty__default["default"](this, "config", void 0);
773
655
  this.options = options;
774
656
  this.options.logLevel = (_this$options$logLeve = this.options.logLevel) !== null && _this$options$logLeve !== void 0 ? _this$options$logLeve : "silent";
775
657
  this.config = new Configuration(token, baseUrl, baseSetUrl, this.options);
@@ -784,14 +666,11 @@ exports['default'] = (_temp = _class = class Client {
784
666
  * @property {String} [logLevel='silent'] - The level of logging to enable. Valid options
785
667
  * (from strictest to broadest): ['silent', 'error', 'warn', 'info', 'debug', 'trace']
786
668
  */
787
-
788
669
  /**
789
670
  * Update the token used for Client operations
790
671
  * @param {String} token - The JWT string of the new token
791
672
  * @returns {void}
792
673
  */
793
-
794
-
795
674
  updateToken(token) {
796
675
  log.info("updateToken");
797
676
  this.config.updateToken(token);
@@ -799,66 +678,82 @@ exports['default'] = (_temp = _class = class Client {
799
678
  /**
800
679
  * Gets media from media service
801
680
  * @param {String} sid - Media's SID
802
- * @returns {Promise<Media>}
803
681
  */
804
-
805
-
806
682
  get(sid) {
807
683
  var _this = this;
808
-
809
- return _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee() {
810
- var response;
811
- return _regeneratorRuntime__default['default'].wrap(function _callee$(_context) {
812
- while (1) {
813
- switch (_context.prev = _context.next) {
814
- case 0:
815
- _context.next = 2;
816
- return _this.network.get("".concat(_this.config.mediaUrl, "/").concat(sid));
817
-
818
- case 2:
819
- response = _context.sent;
820
- return _context.abrupt("return", new Media(_this.config, _this.network, response.body));
821
-
822
- case 4:
823
- case "end":
824
- return _context.stop();
684
+ return new shared.CancellablePromise( /*#__PURE__*/function () {
685
+ var _ref = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(resolve, reject, onCancel) {
686
+ var request, response;
687
+ return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
688
+ while (1) {
689
+ switch (_context.prev = _context.next) {
690
+ case 0:
691
+ request = _this.network.get("".concat(_this.config.mediaUrl, "/").concat(sid));
692
+ onCancel(() => request.cancel());
693
+ _context.prev = 2;
694
+ _context.next = 5;
695
+ return request;
696
+ case 5:
697
+ response = _context.sent;
698
+ resolve(new Media(_this.config, _this.network, response.body));
699
+ _context.next = 12;
700
+ break;
701
+ case 9:
702
+ _context.prev = 9;
703
+ _context.t0 = _context["catch"](2);
704
+ reject(_context.t0);
705
+ case 12:
706
+ case "end":
707
+ return _context.stop();
708
+ }
825
709
  }
826
- }
827
- }, _callee);
828
- }))();
710
+ }, _callee, null, [[2, 9]]);
711
+ }));
712
+ return function (_x, _x2, _x3) {
713
+ return _ref.apply(this, arguments);
714
+ };
715
+ }());
829
716
  }
830
717
  /**
831
718
  * Posts raw content to media service
832
719
  * @param {String} contentType - content type of media
833
720
  * @param {String|Buffer|Blob} media - content to post
834
721
  * @param {MediaCategory|null} category - category for the media
835
- * @returns {Promise<Media>}
836
722
  */
837
-
838
-
839
723
  post(contentType, media, category, filename) {
840
724
  var _this2 = this;
841
-
842
- return _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee2() {
843
- var response;
844
- return _regeneratorRuntime__default['default'].wrap(function _callee2$(_context2) {
845
- while (1) {
846
- switch (_context2.prev = _context2.next) {
847
- case 0:
848
- _context2.next = 2;
849
- return _this2.network.post(_this2.config.mediaUrl, category !== null && category !== void 0 ? category : "media", media, contentType, filename);
850
-
851
- case 2:
852
- response = _context2.sent;
853
- return _context2.abrupt("return", new Media(_this2.config, _this2.network, response.body));
854
-
855
- case 4:
856
- case "end":
857
- return _context2.stop();
725
+ return new shared.CancellablePromise( /*#__PURE__*/function () {
726
+ var _ref2 = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2(resolve, reject, onCancel) {
727
+ var request, response;
728
+ return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) {
729
+ while (1) {
730
+ switch (_context2.prev = _context2.next) {
731
+ case 0:
732
+ request = _this2.network.post(_this2.config.mediaUrl, category !== null && category !== void 0 ? category : "media", media, contentType, filename);
733
+ onCancel(() => request.cancel());
734
+ _context2.prev = 2;
735
+ _context2.next = 5;
736
+ return request;
737
+ case 5:
738
+ response = _context2.sent;
739
+ resolve(new Media(_this2.config, _this2.network, response.body));
740
+ _context2.next = 12;
741
+ break;
742
+ case 9:
743
+ _context2.prev = 9;
744
+ _context2.t0 = _context2["catch"](2);
745
+ reject(_context2.t0);
746
+ case 12:
747
+ case "end":
748
+ return _context2.stop();
749
+ }
858
750
  }
859
- }
860
- }, _callee2);
861
- }))();
751
+ }, _callee2, null, [[2, 9]]);
752
+ }));
753
+ return function (_x4, _x5, _x6) {
754
+ return _ref2.apply(this, arguments);
755
+ };
756
+ }());
862
757
  }
863
758
  /**
864
759
  * Posts FormData to media service. Can be used only with browser engine's FormData.
@@ -866,88 +761,158 @@ exports['default'] = (_temp = _class = class Client {
866
761
  * new TypeError("Posting FormData supported only with browser engine's FormData")
867
762
  * @param {FormData} formData - form data to post
868
763
  * @param {MediaCategory|null} category - category for the media
869
- * @returns {Promise<Media>}
870
764
  */
871
-
872
-
873
765
  postFormData(formData, category) {
874
766
  var _this3 = this;
875
-
876
- return _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee3() {
877
- var response;
878
- return _regeneratorRuntime__default['default'].wrap(function _callee3$(_context3) {
879
- while (1) {
880
- switch (_context3.prev = _context3.next) {
881
- case 0:
882
- _context3.next = 2;
883
- return _this3.network.post(_this3.config.mediaUrl, category !== null && category !== void 0 ? category : "media", formData);
884
-
885
- case 2:
886
- response = _context3.sent;
887
- return _context3.abrupt("return", new Media(_this3.config, _this3.network, response.body));
888
-
889
- case 4:
890
- case "end":
891
- return _context3.stop();
767
+ return new shared.CancellablePromise( /*#__PURE__*/function () {
768
+ var _ref3 = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee3(resolve, reject, onCancel) {
769
+ var request, response;
770
+ return _regeneratorRuntime__default["default"].wrap(function _callee3$(_context3) {
771
+ while (1) {
772
+ switch (_context3.prev = _context3.next) {
773
+ case 0:
774
+ request = _this3.network.post(_this3.config.mediaUrl, category !== null && category !== void 0 ? category : "media", formData);
775
+ onCancel(() => request.cancel());
776
+ _context3.prev = 2;
777
+ _context3.next = 5;
778
+ return request;
779
+ case 5:
780
+ response = _context3.sent;
781
+ resolve(new Media(_this3.config, _this3.network, response.body));
782
+ _context3.next = 12;
783
+ break;
784
+ case 9:
785
+ _context3.prev = 9;
786
+ _context3.t0 = _context3["catch"](2);
787
+ reject(_context3.t0);
788
+ case 12:
789
+ case "end":
790
+ return _context3.stop();
791
+ }
892
792
  }
893
- }
894
- }, _callee3);
895
- }))();
793
+ }, _callee3, null, [[2, 9]]);
794
+ }));
795
+ return function (_x7, _x8, _x9) {
796
+ return _ref3.apply(this, arguments);
797
+ };
798
+ }());
896
799
  }
897
800
  /**
898
801
  * Retrieve information about multiple media SIDs at the same time.
899
802
  * @param mediaSids Array of Media SIDs to get information from.
900
803
  */
901
-
902
-
903
804
  mediaSetGet(mediaSids) {
904
805
  var _this4 = this;
905
-
906
- return _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee4() {
907
- var query, response;
908
- return _regeneratorRuntime__default['default'].wrap(function _callee4$(_context4) {
909
- while (1) {
910
- switch (_context4.prev = _context4.next) {
911
- case 0:
912
- query = {
913
- command: "get",
914
- list: mediaSids.map(sid => ({
915
- media_sid: sid
916
- }))
917
- };
918
- _context4.next = 3;
919
- return _this4.network.post("".concat(_this4.config.mediaSetUrl), null, query, "application/json");
920
-
921
- case 3:
922
- response = _context4.sent;
923
- return _context4.abrupt("return", response.body.map(item => {
924
- if (item.code !== 200) {
925
- throw new Error("Failed to obtain detailed information about Media items (failed SID ".concat(item.media_record.sid, ")"));
926
- }
927
-
928
- return new Media(_this4.config, _this4.network, item.media_record);
929
- }));
930
-
931
- case 5:
932
- case "end":
933
- return _context4.stop();
806
+ return new shared.CancellablePromise( /*#__PURE__*/function () {
807
+ var _ref4 = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee4(resolve, reject, onCancel) {
808
+ var query, request, response, media;
809
+ return _regeneratorRuntime__default["default"].wrap(function _callee4$(_context4) {
810
+ while (1) {
811
+ switch (_context4.prev = _context4.next) {
812
+ case 0:
813
+ query = {
814
+ command: "get",
815
+ list: mediaSids.map(sid => ({
816
+ media_sid: sid
817
+ }))
818
+ };
819
+ request = _this4.network.post("".concat(_this4.config.mediaSetUrl), null, query, "application/json");
820
+ onCancel(() => request.cancel());
821
+ _context4.prev = 3;
822
+ _context4.next = 6;
823
+ return request;
824
+ case 6:
825
+ response = _context4.sent;
826
+ media = response.body.map(item => {
827
+ if (item.code !== 200) {
828
+ reject("Failed to obtain detailed information about Media items (failed SID ".concat(item.media_record.sid, ")"));
829
+ return;
830
+ }
831
+ return new Media(_this4.config, _this4.network, item.media_record);
832
+ });
833
+ resolve(media);
834
+ _context4.next = 14;
835
+ break;
836
+ case 11:
837
+ _context4.prev = 11;
838
+ _context4.t0 = _context4["catch"](3);
839
+ reject(_context4.t0);
840
+ case 14:
841
+ case "end":
842
+ return _context4.stop();
843
+ }
934
844
  }
935
- }
936
- }, _callee4);
937
- }))();
845
+ }, _callee4, null, [[3, 11]]);
846
+ }));
847
+ return function (_x10, _x11, _x12) {
848
+ return _ref4.apply(this, arguments);
849
+ };
850
+ }());
938
851
  }
939
-
940
- }, _defineProperty__default['default'](_class, "version", version), _temp);
941
-
942
- __decorate([declarativeTypeValidator.validateTypes(declarativeTypeValidator.nonEmptyString), __metadata("design:type", Function), __metadata("design:paramtypes", [String]), __metadata("design:returntype", void 0)], exports['default'].prototype, "updateToken", null);
943
-
944
- __decorate([declarativeTypeValidator.validateTypesAsync(declarativeTypeValidator.nonEmptyString), __metadata("design:type", Function), __metadata("design:paramtypes", [String]), __metadata("design:returntype", Promise)], exports['default'].prototype, "get", null);
945
-
946
- exports['default'] = __decorate([declarativeTypeValidator.validateConstructorTypes(declarativeTypeValidator.nonEmptyString, declarativeTypeValidator.nonEmptyString, [declarativeTypeValidator.nonEmptyString, declarativeTypeValidator.literal(null)], [declarativeTypeValidator.pureObject, "undefined"]), __metadata("design:paramtypes", [String, String, Object, Object])], exports['default']); // Proper renames should happen in index.ts,
947
-
948
- exports.Client = exports['default'];
949
- exports.McsClient = exports['default'];
852
+ /**
853
+ * Retrieve temporary URLs for a set of media SIDs.
854
+ * @param mediaSids array of the media SIDs to get URLs from.
855
+ */
856
+ mediaSetGetContentUrls(mediaSids) {
857
+ var _this5 = this;
858
+ return new shared.CancellablePromise( /*#__PURE__*/function () {
859
+ var _ref5 = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee5(resolve, reject, onCancel) {
860
+ var query, request, response, urls;
861
+ return _regeneratorRuntime__default["default"].wrap(function _callee5$(_context5) {
862
+ while (1) {
863
+ switch (_context5.prev = _context5.next) {
864
+ case 0:
865
+ query = {
866
+ command: "get",
867
+ list: mediaSids.map(sid => ({
868
+ media_sid: sid
869
+ }))
870
+ };
871
+ request = _this5.network.post("".concat(_this5.config.mediaSetUrl), null, query, "application/json");
872
+ onCancel(() => request.cancel());
873
+ _context5.prev = 3;
874
+ _context5.next = 6;
875
+ return request;
876
+ case 6:
877
+ response = _context5.sent;
878
+ urls = new Map();
879
+ response.body.forEach(item => {
880
+ if (item.code !== 200) {
881
+ reject("Failed to obtain detailed information about Media items (failed SID ".concat(item.media_record.sid, ")"));
882
+ return;
883
+ }
884
+ urls.set(item.media_record.sid, item.media_record.links.content_direct_temporary);
885
+ });
886
+ resolve(urls);
887
+ _context5.next = 15;
888
+ break;
889
+ case 12:
890
+ _context5.prev = 12;
891
+ _context5.t0 = _context5["catch"](3);
892
+ reject(_context5.t0);
893
+ case 15:
894
+ case "end":
895
+ return _context5.stop();
896
+ }
897
+ }
898
+ }, _callee5, null, [[3, 12]]);
899
+ }));
900
+ return function (_x13, _x14, _x15) {
901
+ return _ref5.apply(this, arguments);
902
+ };
903
+ }());
904
+ }
905
+ }, _defineProperty__default["default"](_class, "version", version), _class);
906
+ __decorate([declarativeTypeValidator.validateTypes(declarativeTypeValidator.nonEmptyString), __metadata("design:type", Function), __metadata("design:paramtypes", [String]), __metadata("design:returntype", void 0)], exports["default"].prototype, "updateToken", null);
907
+ __decorate([declarativeTypeValidator.validateTypesAsync(declarativeTypeValidator.nonEmptyString), __metadata("design:type", Function), __metadata("design:paramtypes", [String]), __metadata("design:returntype", shared.CancellablePromise)], exports["default"].prototype, "get", null);
908
+ exports["default"] = __decorate([declarativeTypeValidator.validateConstructorTypes(declarativeTypeValidator.nonEmptyString, declarativeTypeValidator.nonEmptyString, [declarativeTypeValidator.nonEmptyString, declarativeTypeValidator.literal(null)], [declarativeTypeValidator.pureObject, "undefined"]), __metadata("design:paramtypes", [String, String, Object, Object])], exports["default"]);
909
+
910
+ Object.defineProperty(exports, 'CancellablePromise', {
911
+ enumerable: true,
912
+ get: function () { return shared.CancellablePromise; }
913
+ });
914
+ exports.Client = exports["default"];
915
+ exports.McsClient = exports["default"];
950
916
  exports.McsMedia = Media;
951
917
  exports.Media = Media;
952
- exports.default = exports['default'];
953
918
  //# sourceMappingURL=lib.js.map