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