@eluvio/elv-client-js 4.0.0 → 4.0.1

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.
@@ -87,7 +87,8 @@ var ElvClient = /*#__PURE__*/function () {
87
87
  * @param {number} fabricVersion - The version of the target content fabric
88
88
  * @param {Array<string>} fabricURIs - A list of full URIs to content fabric nodes
89
89
  * @param {Array<string>} ethereumURIs - A list of full URIs to ethereum nodes
90
- * @param {Array<string>} ethereumURIs - A list of full URIs to auth service endpoints
90
+ * @param {Array<string>} authServiceURIs - A list of full URIs to auth service endpoints
91
+ * @param {Array<string>=} searchURIs - A list of full URIs to search service endpoints
91
92
  * @param {number=} ethereumContractTimeout=10 - Number of seconds to wait for contract calls
92
93
  * @param {string=} trustAuthorityId - (OAuth) The ID of the trust authority to use for OAuth authentication
93
94
  * @param {string=} staticToken - Static token that will be used for all authorization in place of normal auth
@@ -104,6 +105,7 @@ var ElvClient = /*#__PURE__*/function () {
104
105
  fabricURIs = _ref.fabricURIs,
105
106
  ethereumURIs = _ref.ethereumURIs,
106
107
  authServiceURIs = _ref.authServiceURIs,
108
+ searchURIs = _ref.searchURIs,
107
109
  _ref$ethereumContract = _ref.ethereumContractTimeout,
108
110
  ethereumContractTimeout = _ref$ethereumContract === void 0 ? 10 : _ref$ethereumContract,
109
111
  trustAuthorityId = _ref.trustAuthorityId,
@@ -128,6 +130,7 @@ var ElvClient = /*#__PURE__*/function () {
128
130
  this.fabricURIs = fabricURIs;
129
131
  this.authServiceURIs = authServiceURIs;
130
132
  this.ethereumURIs = ethereumURIs;
133
+ this.searchURIs = searchURIs;
131
134
  this.ethereumContractTimeout = ethereumContractTimeout;
132
135
  this.trustAuthorityId = trustAuthorityId;
133
136
  this.noCache = noCache;
@@ -364,7 +367,7 @@ var ElvClient = /*#__PURE__*/function () {
364
367
  key: "UseRegion",
365
368
  value: function () {
366
369
  var _UseRegion = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(_ref4) {
367
- var region, _yield$ElvClient$Conf, fabricURIs, ethereumURIs, authServiceURIs;
370
+ var region, _yield$ElvClient$Conf, fabricURIs, ethereumURIs, authServiceURIs, searchURIs;
368
371
 
369
372
  return _regeneratorRuntime.wrap(function _callee3$(_context3) {
370
373
  while (1) {
@@ -391,19 +394,22 @@ var ElvClient = /*#__PURE__*/function () {
391
394
  fabricURIs = _yield$ElvClient$Conf.fabricURIs;
392
395
  ethereumURIs = _yield$ElvClient$Conf.ethereumURIs;
393
396
  authServiceURIs = _yield$ElvClient$Conf.authServiceURIs;
397
+ searchURIs = _yield$ElvClient$Conf.searchURIs;
394
398
  this.authServiceURIs = authServiceURIs;
395
399
  this.fabricURIs = fabricURIs;
396
400
  this.ethereumURIs = ethereumURIs;
401
+ this.searchURIs = searchURIs;
397
402
  this.HttpClient.uris = fabricURIs;
398
403
  this.HttpClient.uriIndex = 0;
399
404
  this.ethClient.ethereumURIs = ethereumURIs;
400
405
  this.ethClient.ethereumURIIndex = 0;
401
406
  return _context3.abrupt("return", {
402
407
  fabricURIs: fabricURIs,
403
- ethereumURIs: ethereumURIs
408
+ ethereumURIs: ethereumURIs,
409
+ searchURIs: searchURIs
404
410
  });
405
411
 
406
- case 17:
412
+ case 19:
407
413
  case "end":
408
414
  return _context3.stop();
409
415
  }
@@ -1715,7 +1721,7 @@ var ElvClient = /*#__PURE__*/function () {
1715
1721
  key: "Configuration",
1716
1722
  value: function () {
1717
1723
  var _Configuration = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee21(_ref22) {
1718
- var configUrl, _ref22$kmsUrls, kmsUrls, region, uri, fabricInfo, filterHTTPS, fabricURIs, ethereumURIs, authServiceURIs, fabricVersion;
1724
+ var configUrl, _ref22$kmsUrls, kmsUrls, region, uri, fabricInfo, filterHTTPS, fabricURIs, ethereumURIs, authServiceURIs, searchURIs, fabricVersion;
1719
1725
 
1720
1726
  return _regeneratorRuntime.wrap(function _callee21$(_context21) {
1721
1727
  while (1) {
@@ -1759,6 +1765,7 @@ var ElvClient = /*#__PURE__*/function () {
1759
1765
  authServiceURIs = authServiceURIs.filter(filterHTTPS);
1760
1766
  }
1761
1767
 
1768
+ searchURIs = fabricInfo.network.services.search || [];
1762
1769
  fabricVersion = Math.max.apply(Math, _toConsumableArray(fabricInfo.network.api_versions || [2]));
1763
1770
  return _context21.abrupt("return", {
1764
1771
  nodeId: fabricInfo.node_id,
@@ -1769,11 +1776,12 @@ var ElvClient = /*#__PURE__*/function () {
1769
1776
  ethereumURIs: ethereumURIs,
1770
1777
  authServiceURIs: authServiceURIs,
1771
1778
  kmsURIs: kmsUrls,
1779
+ searchURIs: searchURIs,
1772
1780
  fabricVersion: fabricVersion
1773
1781
  });
1774
1782
 
1775
- case 19:
1776
- _context21.prev = 19;
1783
+ case 20:
1784
+ _context21.prev = 20;
1777
1785
  _context21.t0 = _context21["catch"](1);
1778
1786
  // eslint-disable-next-line no-console
1779
1787
  console.error("Error retrieving fabric configuration:"); // eslint-disable-next-line no-console
@@ -1781,12 +1789,12 @@ var ElvClient = /*#__PURE__*/function () {
1781
1789
  console.error(_context21.t0);
1782
1790
  throw _context21.t0;
1783
1791
 
1784
- case 24:
1792
+ case 25:
1785
1793
  case "end":
1786
1794
  return _context21.stop();
1787
1795
  }
1788
1796
  }
1789
- }, _callee21, null, [[1, 19]]);
1797
+ }, _callee21, null, [[1, 20]]);
1790
1798
  }));
1791
1799
 
1792
1800
  function Configuration(_x18) {
@@ -1881,7 +1889,7 @@ var ElvClient = /*#__PURE__*/function () {
1881
1889
  key: "FromConfigurationUrl",
1882
1890
  value: function () {
1883
1891
  var _FromConfigurationUrl = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee23(_ref24) {
1884
- var configUrl, region, trustAuthorityId, staticToken, _ref24$ethereumContra, ethereumContractTimeout, _ref24$noCache, noCache, _ref24$noAuth, noAuth, _ref24$assumeV, assumeV3, _yield$ElvClient$Conf3, contentSpaceId, networkId, networkName, fabricURIs, ethereumURIs, authServiceURIs, fabricVersion, client;
1892
+ var configUrl, region, trustAuthorityId, staticToken, _ref24$ethereumContra, ethereumContractTimeout, _ref24$noCache, noCache, _ref24$noAuth, noAuth, _ref24$assumeV, assumeV3, _yield$ElvClient$Conf3, contentSpaceId, networkId, networkName, fabricURIs, ethereumURIs, authServiceURIs, searchURIs, fabricVersion, client;
1885
1893
 
1886
1894
  return _regeneratorRuntime.wrap(function _callee23$(_context23) {
1887
1895
  while (1) {
@@ -1902,6 +1910,7 @@ var ElvClient = /*#__PURE__*/function () {
1902
1910
  fabricURIs = _yield$ElvClient$Conf3.fabricURIs;
1903
1911
  ethereumURIs = _yield$ElvClient$Conf3.ethereumURIs;
1904
1912
  authServiceURIs = _yield$ElvClient$Conf3.authServiceURIs;
1913
+ searchURIs = _yield$ElvClient$Conf3.searchURIs;
1905
1914
  fabricVersion = _yield$ElvClient$Conf3.fabricVersion;
1906
1915
  client = new ElvClient({
1907
1916
  contentSpaceId: contentSpaceId,
@@ -1911,6 +1920,7 @@ var ElvClient = /*#__PURE__*/function () {
1911
1920
  fabricURIs: fabricURIs,
1912
1921
  ethereumURIs: ethereumURIs,
1913
1922
  authServiceURIs: authServiceURIs,
1923
+ searchURIs: searchURIs,
1914
1924
  ethereumContractTimeout: ethereumContractTimeout,
1915
1925
  trustAuthorityId: trustAuthorityId,
1916
1926
  staticToken: staticToken,
@@ -1921,7 +1931,7 @@ var ElvClient = /*#__PURE__*/function () {
1921
1931
  client.configUrl = configUrl;
1922
1932
  return _context23.abrupt("return", client);
1923
1933
 
1924
- case 14:
1934
+ case 15:
1925
1935
  case "end":
1926
1936
  return _context23.stop();
1927
1937
  }
@@ -36,8 +36,8 @@ var HttpClient = /*#__PURE__*/function () {
36
36
  }
37
37
  }, {
38
38
  key: "BaseURI",
39
- value: function BaseURI() {
40
- return new URI(this.uris[this.uriIndex]);
39
+ value: function BaseURI(url) {
40
+ return new URI(url || this.uris[this.uriIndex]);
41
41
  }
42
42
  }, {
43
43
  key: "RecordWriteToken",
@@ -65,14 +65,15 @@ var HttpClient = /*#__PURE__*/function () {
65
65
  key: "Request",
66
66
  value: function () {
67
67
  var _Request = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref2) {
68
- var method, path, _ref2$queryParams, queryParams, body, _ref2$bodyType, bodyType, _ref2$headers, headers, _ref2$attempts, attempts, _ref2$failover, failover, _ref2$forceFailover, forceFailover, baseURI, writeTokenMatch, writeToken, uri, fetchParameters, response, responseType, errorBody, error;
68
+ var method, path, _ref2$queryParams, queryParams, body, _ref2$bodyType, bodyType, _ref2$headers, headers, _ref2$attempts, attempts, _ref2$failover, failover, _ref2$forceFailover, forceFailover, nodeUrl, baseURI, writeTokenMatch, writeToken, uri, fetchParameters, response, responseType, errorBody, error;
69
69
 
70
70
  return _regeneratorRuntime.wrap(function _callee$(_context) {
71
71
  while (1) {
72
72
  switch (_context.prev = _context.next) {
73
73
  case 0:
74
- method = _ref2.method, path = _ref2.path, _ref2$queryParams = _ref2.queryParams, queryParams = _ref2$queryParams === void 0 ? {} : _ref2$queryParams, body = _ref2.body, _ref2$bodyType = _ref2.bodyType, bodyType = _ref2$bodyType === void 0 ? "JSON" : _ref2$bodyType, _ref2$headers = _ref2.headers, headers = _ref2$headers === void 0 ? {} : _ref2$headers, _ref2$attempts = _ref2.attempts, attempts = _ref2$attempts === void 0 ? 0 : _ref2$attempts, _ref2$failover = _ref2.failover, failover = _ref2$failover === void 0 ? true : _ref2$failover, _ref2$forceFailover = _ref2.forceFailover, forceFailover = _ref2$forceFailover === void 0 ? false : _ref2$forceFailover;
75
- baseURI = this.BaseURI(); // If URL contains a write token, it must go to the correct server and can not fail over
74
+ method = _ref2.method, path = _ref2.path, _ref2$queryParams = _ref2.queryParams, queryParams = _ref2$queryParams === void 0 ? {} : _ref2$queryParams, body = _ref2.body, _ref2$bodyType = _ref2.bodyType, bodyType = _ref2$bodyType === void 0 ? "JSON" : _ref2$bodyType, _ref2$headers = _ref2.headers, headers = _ref2$headers === void 0 ? {} : _ref2$headers, _ref2$attempts = _ref2.attempts, attempts = _ref2$attempts === void 0 ? 0 : _ref2$attempts, _ref2$failover = _ref2.failover, failover = _ref2$failover === void 0 ? true : _ref2$failover, _ref2$forceFailover = _ref2.forceFailover, forceFailover = _ref2$forceFailover === void 0 ? false : _ref2$forceFailover, nodeUrl = _ref2.nodeUrl;
75
+ // if nodeUrl passed in, restrict communication to that node only (unless previously recorded write token is found in next step)
76
+ baseURI = this.BaseURI(nodeUrl); // If URL contains a write token, it must go to the correct server and can not fail over
76
77
 
77
78
  writeTokenMatch = path.replace(/^\//, "").match(/(qlibs\/ilib[a-zA-Z0-9]+|q|qid)\/(tqw__[a-zA-Z0-9]+)/);
78
79
  writeToken = writeTokenMatch ? writeTokenMatch[2] : undefined;
@@ -127,7 +128,7 @@ var HttpClient = /*#__PURE__*/function () {
127
128
  break;
128
129
  }
129
130
 
130
- if (!(!writeToken && (failover && parseInt(response.status) >= 500 || forceFailover) && attempts < this.uris.length)) {
131
+ if (!(!writeToken && !nodeUrl && (failover && parseInt(response.status) >= 500 || forceFailover) && attempts < this.uris.length)) {
131
132
  _context.next = 24;
132
133
  break;
133
134
  }
@@ -1428,6 +1428,7 @@ exports.CreateNonOwnerCap = /*#__PURE__*/function () {
1428
1428
  * @param {object=} options -
1429
1429
  * meta: New metadata for the object - will be merged into existing metadata if specified
1430
1430
  * type: New type for the object - Object ID, version hash or name of type
1431
+ * nodeUrl: Node URL to use in HTTP call
1431
1432
  *
1432
1433
  * @returns {Promise<object>} - Response containing the object ID and write token of the draft, as well as URL of node handling the draft
1433
1434
  */
@@ -1517,26 +1518,28 @@ exports.EditContentObject = /*#__PURE__*/function () {
1517
1518
  _context15.t1 = _context15.sent;
1518
1519
  _context15.t2 = path;
1519
1520
  _context15.t3 = options;
1520
- _context15.t4 = {
1521
+ _context15.t4 = options.nodeUrl;
1522
+ _context15.t5 = {
1521
1523
  headers: _context15.t1,
1522
1524
  method: "POST",
1523
1525
  path: _context15.t2,
1524
- body: _context15.t3
1526
+ body: _context15.t3,
1527
+ nodeUrl: _context15.t4
1525
1528
  };
1526
- _context15.next = 33;
1527
- return _context15.t0.Request.call(_context15.t0, _context15.t4);
1529
+ _context15.next = 34;
1530
+ return _context15.t0.Request.call(_context15.t0, _context15.t5);
1528
1531
 
1529
- case 33:
1532
+ case 34:
1530
1533
  rawEditResponse = _context15.sent;
1531
1534
  actualUrl = new URL(rawEditResponse.url);
1532
1535
  actualUrl.pathname = "";
1533
1536
  actualUrl.search = "";
1534
1537
  actualUrl.hash = "";
1535
1538
  nodeUrl = actualUrl.href;
1536
- _context15.next = 41;
1539
+ _context15.next = 42;
1537
1540
  return this.utils.ResponseToJson(rawEditResponse);
1538
1541
 
1539
- case 41:
1542
+ case 42:
1540
1543
  editResponse = _context15.sent;
1541
1544
  // Record the node used in creating this write token
1542
1545
  this.HttpClient.RecordWriteToken(editResponse.write_token, nodeUrl);
@@ -1545,7 +1548,7 @@ exports.EditContentObject = /*#__PURE__*/function () {
1545
1548
  editResponse.nodeUrl = nodeUrl;
1546
1549
  return _context15.abrupt("return", editResponse);
1547
1550
 
1548
- case 47:
1551
+ case 48:
1549
1552
  case "end":
1550
1553
  return _context15.stop();
1551
1554
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eluvio/elv-client-js",
3
- "version": "4.0.0",
3
+ "version": "4.0.1",
4
4
  "description": "Javascript client for the Eluvio Content Fabric",
5
5
  "main": "src/index.js",
6
6
  "author": "Kevin Talmadge",
package/src/ElvClient.js CHANGED
@@ -130,7 +130,8 @@ class ElvClient {
130
130
  * @param {number} fabricVersion - The version of the target content fabric
131
131
  * @param {Array<string>} fabricURIs - A list of full URIs to content fabric nodes
132
132
  * @param {Array<string>} ethereumURIs - A list of full URIs to ethereum nodes
133
- * @param {Array<string>} ethereumURIs - A list of full URIs to auth service endpoints
133
+ * @param {Array<string>} authServiceURIs - A list of full URIs to auth service endpoints
134
+ * @param {Array<string>=} searchURIs - A list of full URIs to search service endpoints
134
135
  * @param {number=} ethereumContractTimeout=10 - Number of seconds to wait for contract calls
135
136
  * @param {string=} trustAuthorityId - (OAuth) The ID of the trust authority to use for OAuth authentication
136
137
  * @param {string=} staticToken - Static token that will be used for all authorization in place of normal auth
@@ -147,6 +148,7 @@ class ElvClient {
147
148
  fabricURIs,
148
149
  ethereumURIs,
149
150
  authServiceURIs,
151
+ searchURIs,
150
152
  ethereumContractTimeout = 10,
151
153
  trustAuthorityId,
152
154
  staticToken,
@@ -169,6 +171,7 @@ class ElvClient {
169
171
  this.fabricURIs = fabricURIs;
170
172
  this.authServiceURIs = authServiceURIs;
171
173
  this.ethereumURIs = ethereumURIs;
174
+ this.searchURIs = searchURIs;
172
175
  this.ethereumContractTimeout = ethereumContractTimeout;
173
176
 
174
177
  this.trustAuthorityId = trustAuthorityId;
@@ -230,6 +233,8 @@ class ElvClient {
230
233
  authServiceURIs = authServiceURIs.filter(filterHTTPS);
231
234
  }
232
235
 
236
+ const searchURIs = fabricInfo.network.services.search || [];
237
+
233
238
  const fabricVersion = Math.max(...(fabricInfo.network.api_versions || [2]));
234
239
 
235
240
  return {
@@ -241,6 +246,7 @@ class ElvClient {
241
246
  ethereumURIs,
242
247
  authServiceURIs,
243
248
  kmsURIs: kmsUrls,
249
+ searchURIs,
244
250
  fabricVersion
245
251
  };
246
252
  } catch(error) {
@@ -326,6 +332,7 @@ class ElvClient {
326
332
  fabricURIs,
327
333
  ethereumURIs,
328
334
  authServiceURIs,
335
+ searchURIs,
329
336
  fabricVersion
330
337
  } = await ElvClient.Configuration({
331
338
  configUrl,
@@ -340,6 +347,7 @@ class ElvClient {
340
347
  fabricURIs,
341
348
  ethereumURIs,
342
349
  authServiceURIs,
350
+ searchURIs,
343
351
  ethereumContractTimeout,
344
352
  trustAuthorityId,
345
353
  staticToken,
@@ -421,7 +429,7 @@ class ElvClient {
421
429
  throw Error("Unable to change region: Configuration URL not set");
422
430
  }
423
431
 
424
- const {fabricURIs, ethereumURIs, authServiceURIs} = await ElvClient.Configuration({
432
+ const {fabricURIs, ethereumURIs, authServiceURIs, searchURIs} = await ElvClient.Configuration({
425
433
  configUrl: this.configUrl,
426
434
  region
427
435
  });
@@ -429,6 +437,7 @@ class ElvClient {
429
437
  this.authServiceURIs = authServiceURIs;
430
438
  this.fabricURIs = fabricURIs;
431
439
  this.ethereumURIs = ethereumURIs;
440
+ this.searchURIs = searchURIs;
432
441
 
433
442
  this.HttpClient.uris = fabricURIs;
434
443
  this.HttpClient.uriIndex = 0;
@@ -438,7 +447,8 @@ class ElvClient {
438
447
 
439
448
  return {
440
449
  fabricURIs,
441
- ethereumURIs
450
+ ethereumURIs,
451
+ searchURIs
442
452
  };
443
453
  }
444
454
 
package/src/HttpClient.js CHANGED
@@ -14,8 +14,8 @@ class HttpClient {
14
14
  this.draftURIs = {};
15
15
  }
16
16
 
17
- BaseURI() {
18
- return new URI(this.uris[this.uriIndex]);
17
+ BaseURI(url) {
18
+ return new URI(url || this.uris[this.uriIndex]);
19
19
  }
20
20
 
21
21
  static Fetch(url, params={}) {
@@ -49,9 +49,11 @@ class HttpClient {
49
49
  headers={},
50
50
  attempts=0,
51
51
  failover=true,
52
- forceFailover=false
52
+ forceFailover=false,
53
+ nodeUrl
53
54
  }) {
54
- let baseURI = this.BaseURI();
55
+ // if nodeUrl passed in, restrict communication to that node only (unless previously recorded write token is found in next step)
56
+ let baseURI = this.BaseURI(nodeUrl);
55
57
 
56
58
  // If URL contains a write token, it must go to the correct server and can not fail over
57
59
  const writeTokenMatch = path.replace(/^\//, "").match(/(qlibs\/ilib[a-zA-Z0-9]+|q|qid)\/(tqw__[a-zA-Z0-9]+)/);
@@ -105,7 +107,7 @@ class HttpClient {
105
107
 
106
108
  if(!response.ok) {
107
109
  // Fail over if not a write token request, the response was a server error, and we haven't tried all available nodes
108
- if(!writeToken && ((failover && parseInt(response.status) >= 500) || forceFailover) && attempts < this.uris.length) {
110
+ if(!writeToken && !nodeUrl && ((failover && parseInt(response.status) >= 500) || forceFailover) && attempts < this.uris.length) {
109
111
  // Server error - Try next node
110
112
  this.Log(`HttpClient failing over from ${this.BaseURI()}: ${attempts + 1} attempts`, true);
111
113
  this.uriIndex = (this.uriIndex + 1) % this.uris.length;
@@ -749,6 +749,7 @@ exports.CreateNonOwnerCap = async function({objectId, libraryId, publicKey, writ
749
749
  * @param {object=} options -
750
750
  * meta: New metadata for the object - will be merged into existing metadata if specified
751
751
  * type: New type for the object - Object ID, version hash or name of type
752
+ * nodeUrl: Node URL to use in HTTP call
752
753
  *
753
754
  * @returns {Promise<object>} - Response containing the object ID and write token of the draft, as well as URL of node handling the draft
754
755
  */
@@ -778,7 +779,8 @@ exports.EditContentObject = async function({libraryId, objectId, options={}}) {
778
779
  headers: await this.authClient.AuthorizationHeader({libraryId, objectId, update: true}),
779
780
  method: "POST",
780
781
  path: path,
781
- body: options
782
+ body: options,
783
+ nodeUrl: options.nodeUrl
782
784
  });
783
785
 
784
786
  const actualUrl = new URL(rawEditResponse.url);
@@ -660,17 +660,17 @@
660
660
  },
661
661
  {
662
662
  "bit_rate": 810000,
663
- "height": 360,
663
+ "height": 640,
664
664
  "media_type": "video",
665
665
  "pregenerate": false,
666
- "width": 640
666
+ "width": 360
667
667
  },
668
668
  {
669
669
  "bit_rate": 520000,
670
- "height": 360,
670
+ "height": 640,
671
671
  "media_type": "video",
672
672
  "pregenerate": false,
673
- "width": 640
673
+ "width": 360
674
674
  }
675
675
  ]
676
676
  },
@@ -660,17 +660,17 @@
660
660
  },
661
661
  {
662
662
  "bit_rate": 810000,
663
- "height": 360,
663
+ "height": 640,
664
664
  "media_type": "video",
665
665
  "pregenerate": false,
666
- "width": 640
666
+ "width": 360
667
667
  },
668
668
  {
669
669
  "bit_rate": 520000,
670
- "height": 360,
670
+ "height": 640,
671
671
  "media_type": "video",
672
672
  "pregenerate": false,
673
- "width": 640
673
+ "width": 360
674
674
  }
675
675
  ]
676
676
  },
@@ -660,17 +660,17 @@
660
660
  },
661
661
  {
662
662
  "bit_rate": 810000,
663
- "height": 360,
663
+ "height": 640,
664
664
  "media_type": "video",
665
665
  "pregenerate": false,
666
- "width": 640
666
+ "width": 360
667
667
  },
668
668
  {
669
669
  "bit_rate": 520000,
670
- "height": 360,
670
+ "height": 640,
671
671
  "media_type": "video",
672
672
  "pregenerate": false,
673
- "width": 640
673
+ "width": 360
674
674
  }
675
675
  ]
676
676
  },
@@ -660,17 +660,17 @@
660
660
  },
661
661
  {
662
662
  "bit_rate": 810000,
663
- "height": 360,
663
+ "height": 640,
664
664
  "media_type": "video",
665
665
  "pregenerate": false,
666
- "width": 640
666
+ "width": 360
667
667
  },
668
668
  {
669
669
  "bit_rate": 520000,
670
- "height": 360,
670
+ "height": 640,
671
671
  "media_type": "video",
672
672
  "pregenerate": false,
673
- "width": 640
673
+ "width": 360
674
674
  }
675
675
  ]
676
676
  },
@@ -660,17 +660,17 @@
660
660
  },
661
661
  {
662
662
  "bit_rate": 810000,
663
- "height": 360,
663
+ "height": 640,
664
664
  "media_type": "video",
665
665
  "pregenerate": false,
666
- "width": 640
666
+ "width": 360
667
667
  },
668
668
  {
669
669
  "bit_rate": 520000,
670
- "height": 360,
670
+ "height": 640,
671
671
  "media_type": "video",
672
672
  "pregenerate": false,
673
- "width": 640
673
+ "width": 360
674
674
  }
675
675
  ]
676
676
  },
@@ -660,17 +660,17 @@
660
660
  },
661
661
  {
662
662
  "bit_rate": 810000,
663
- "height": 360,
663
+ "height": 640,
664
664
  "media_type": "video",
665
665
  "pregenerate": false,
666
- "width": 640
666
+ "width": 360
667
667
  },
668
668
  {
669
669
  "bit_rate": 520000,
670
- "height": 360,
670
+ "height": 640,
671
671
  "media_type": "video",
672
672
  "pregenerate": false,
673
- "width": 640
673
+ "width": 360
674
674
  }
675
675
  ]
676
676
  },
@@ -660,17 +660,17 @@
660
660
  },
661
661
  {
662
662
  "bit_rate": 810000,
663
- "height": 360,
663
+ "height": 640,
664
664
  "media_type": "video",
665
665
  "pregenerate": false,
666
- "width": 640
666
+ "width": 360
667
667
  },
668
668
  {
669
669
  "bit_rate": 520000,
670
- "height": 360,
670
+ "height": 640,
671
671
  "media_type": "video",
672
672
  "pregenerate": false,
673
- "width": 640
673
+ "width": 360
674
674
  }
675
675
  ]
676
676
  },
@@ -660,17 +660,17 @@
660
660
  },
661
661
  {
662
662
  "bit_rate": 810000,
663
- "height": 360,
663
+ "height": 640,
664
664
  "media_type": "video",
665
665
  "pregenerate": false,
666
- "width": 640
666
+ "width": 360
667
667
  },
668
668
  {
669
669
  "bit_rate": 520000,
670
- "height": 360,
670
+ "height": 640,
671
671
  "media_type": "video",
672
672
  "pregenerate": false,
673
- "width": 640
673
+ "width": 360
674
674
  }
675
675
  ]
676
676
  },
@@ -660,17 +660,17 @@
660
660
  },
661
661
  {
662
662
  "bit_rate": 810000,
663
- "height": 360,
663
+ "height": 640,
664
664
  "media_type": "video",
665
665
  "pregenerate": false,
666
- "width": 640
666
+ "width": 360
667
667
  },
668
668
  {
669
669
  "bit_rate": 520000,
670
- "height": 360,
670
+ "height": 640,
671
671
  "media_type": "video",
672
672
  "pregenerate": false,
673
- "width": 640
673
+ "width": 360
674
674
  }
675
675
  ]
676
676
  },
@@ -660,17 +660,17 @@
660
660
  },
661
661
  {
662
662
  "bit_rate": 810000,
663
- "height": 360,
663
+ "height": 640,
664
664
  "media_type": "video",
665
665
  "pregenerate": false,
666
- "width": 640
666
+ "width": 360
667
667
  },
668
668
  {
669
669
  "bit_rate": 520000,
670
- "height": 360,
670
+ "height": 640,
671
671
  "media_type": "video",
672
672
  "pregenerate": false,
673
- "width": 640
673
+ "width": 360
674
674
  }
675
675
  ]
676
676
  },
@@ -660,17 +660,17 @@
660
660
  },
661
661
  {
662
662
  "bit_rate": 810000,
663
- "height": 360,
663
+ "height": 640,
664
664
  "media_type": "video",
665
665
  "pregenerate": false,
666
- "width": 640
666
+ "width": 360
667
667
  },
668
668
  {
669
669
  "bit_rate": 520000,
670
- "height": 360,
670
+ "height": 640,
671
671
  "media_type": "video",
672
672
  "pregenerate": false,
673
- "width": 640
673
+ "width": 360
674
674
  }
675
675
  ]
676
676
  },