@eluvio/elv-client-js 4.0.80 → 4.0.82

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.
@@ -2,8 +2,8 @@ var _typeof = require("@babel/runtime/helpers/typeof");
2
2
  var _defineProperty = require("@babel/runtime/helpers/defineProperty");
3
3
  var _regeneratorRuntime = require("@babel/runtime/regenerator");
4
4
  var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
5
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
6
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
5
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
6
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7
7
  /**
8
8
  * Methods for managing content types, libraries and objects
9
9
  *
@@ -1711,7 +1711,7 @@ exports.FinalizeContentObject = /*#__PURE__*/function () {
1711
1711
  */
1712
1712
  exports.PublishContentVersion = /*#__PURE__*/function () {
1713
1713
  var _ref38 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee21(_ref37) {
1714
- var objectId, versionHash, _ref37$awaitCommitCon, awaitCommitConfirmation, commit, abi, fromBlock, objectHash, pendingHash, pollingInterval, events, confirmEvent;
1714
+ var objectId, versionHash, _ref37$awaitCommitCon, awaitCommitConfirmation, commit, abi, fromBlock, objectHash, pendingHash, pollingInterval, events, confirmEvent, _pollingInterval, tries, h;
1715
1715
  return _regeneratorRuntime.wrap(function _callee21$(_context21) {
1716
1716
  while (1) switch (_context21.prev = _context21.next) {
1717
1717
  case 0:
@@ -1793,12 +1793,44 @@ exports.PublishContentVersion = /*#__PURE__*/function () {
1793
1793
  break;
1794
1794
  }
1795
1795
  // Found confirmation
1796
- this.Log("Commit confirmed: ".concat(objectHash));
1796
+ this.Log("Commit confirmed on chain: ".concat(objectHash));
1797
1797
  return _context21.abrupt("break", 34);
1798
1798
  case 32:
1799
1799
  _context21.next = 22;
1800
1800
  break;
1801
1801
  case 34:
1802
+ if (!awaitCommitConfirmation) {
1803
+ _context21.next = 48;
1804
+ break;
1805
+ }
1806
+ _pollingInterval = 500; // ms
1807
+ tries = 20;
1808
+ case 37:
1809
+ if (!(tries > 0)) {
1810
+ _context21.next = 48;
1811
+ break;
1812
+ }
1813
+ _context21.next = 40;
1814
+ return this.LatestVersionHashV2({
1815
+ objectId: objectId
1816
+ });
1817
+ case 40:
1818
+ h = _context21.sent;
1819
+ if (!(h == versionHash)) {
1820
+ _context21.next = 44;
1821
+ break;
1822
+ }
1823
+ this.Log("Commit confirmed on fabric node: ".concat(versionHash));
1824
+ return _context21.abrupt("break", 48);
1825
+ case 44:
1826
+ _context21.next = 46;
1827
+ return new Promise(function (resolve) {
1828
+ return setTimeout(resolve, _pollingInterval);
1829
+ });
1830
+ case 46:
1831
+ _context21.next = 37;
1832
+ break;
1833
+ case 48:
1802
1834
  case "end":
1803
1835
  return _context21.stop();
1804
1836
  }
@@ -2226,7 +2258,7 @@ exports.UpdateContentObjectGraph = /*#__PURE__*/function () {
2226
2258
  return _context30.delegateYield(_loop(), "t0", 8);
2227
2259
  case 8:
2228
2260
  _ret = _context30.t0;
2229
- if (!(_typeof(_ret) === "object")) {
2261
+ if (!_ret) {
2230
2262
  _context30.next = 11;
2231
2263
  break;
2232
2264
  }
@@ -2,8 +2,8 @@ var _defineProperty = require("@babel/runtime/helpers/defineProperty");
2
2
  var _typeof = require("@babel/runtime/helpers/typeof");
3
3
  var _regeneratorRuntime = require("@babel/runtime/regenerator");
4
4
  var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
5
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
6
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
5
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
6
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7
7
  /**
8
8
  * Methods for deploying and interacting with contracts
9
9
  *
@@ -2,8 +2,8 @@ var _toConsumableArray = require("@babel/runtime/helpers/toConsumableArray");
2
2
  var _defineProperty = require("@babel/runtime/helpers/defineProperty");
3
3
  var _regeneratorRuntime = require("@babel/runtime/regenerator");
4
4
  var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
5
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
6
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
5
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
6
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7
7
  /**
8
8
  * Methods for accessing and managing access groups
9
9
  *
@@ -216,6 +216,18 @@ var LiveConf = /*#__PURE__*/function () {
216
216
 
217
217
  return seg;
218
218
  }
219
+
220
+ /*
221
+ * Calculate output timebase from the encoder (codec) timebase. The videoTimeBase parameter
222
+ * represents the encoder timebase. The format muxer will change it so it is greater than 10000.
223
+ */
224
+ }, {
225
+ key: "calcOutputTimebase",
226
+ value: function calcOutputTimebase(codecTimebase) {
227
+ var outputTimebase = codecTimebase;
228
+ while (outputTimebase < 10000) outputTimebase = outputTimebase * 2;
229
+ return outputTimebase;
230
+ }
219
231
  }, {
220
232
  key: "calcSegDurationMpegts",
221
233
  value: function calcSegDurationMpegts(_ref2) {
@@ -280,7 +292,9 @@ var LiveConf = /*#__PURE__*/function () {
280
292
  var seg = {};
281
293
  switch (frameRate) {
282
294
  case "24":
283
- seg.video = sourceTimescale * 30;
295
+ seg.videoTimeBase = 1536; // Output timebase: 12288
296
+ seg.videoFrameDurationTs = 512;
297
+ seg.video = this.calcOutputTimebase(seg.videoTimeBase) * 30;
284
298
  seg.keyint = 48;
285
299
  seg.duration = "30";
286
300
  break;
@@ -290,7 +304,9 @@ var LiveConf = /*#__PURE__*/function () {
290
304
  seg.duration = "30";
291
305
  break;
292
306
  case "30":
293
- seg.video = sourceTimescale * 30;
307
+ seg.videoTimeBase = 960; // Output timebase: 15360
308
+ seg.videoFrameDurationTs = 512;
309
+ seg.video = this.calcOutputTimebase(seg.videoTimeBase) * 30;
294
310
  seg.keyint = 60;
295
311
  seg.duration = "30";
296
312
  break;
@@ -300,7 +316,9 @@ var LiveConf = /*#__PURE__*/function () {
300
316
  seg.duration = "30.03";
301
317
  break;
302
318
  case "48":
303
- seg.video = sourceTimescale * 30;
319
+ seg.videoTimeBase = 1536; // Output timebase: 12288
320
+ seg.videoFrameDurationTs = 256;
321
+ seg.video = this.calcOutputTimebase(seg.videoTimeBase) * 30;
304
322
  seg.keyint = 96;
305
323
  seg.duration = "30";
306
324
  break;
@@ -310,7 +328,9 @@ var LiveConf = /*#__PURE__*/function () {
310
328
  seg.duration = "30";
311
329
  break;
312
330
  case "60":
313
- seg.video = sourceTimescale * 30;
331
+ seg.videoTimeBase = 960; // Output timebase: 15360
332
+ seg.videoFrameDurationTs = 256;
333
+ seg.video = this.calcOutputTimebase(seg.videoTimeBase) * 30;
314
334
  seg.keyint = 120;
315
335
  seg.duration = "30";
316
336
  break;
@@ -413,7 +433,9 @@ var LiveConf = /*#__PURE__*/function () {
413
433
  // Optional override output timebase and frame duration (ts)
414
434
  if (segDurations.videoTimeBase) {
415
435
  conf.live_recording.recording_config.recording_params.xc_params.video_time_base = segDurations.videoTimeBase;
416
- conf.live_recording.recording_config.recording_params.source_timescale = segDurations.videoTimeBase;
436
+
437
+ // Note 'source_timescale' needs to be set to the output timebase and is used by playout
438
+ conf.live_recording.recording_config.recording_params.source_timescale = this.calcOutputTimebase(segDurations.videoTimeBase);
417
439
  }
418
440
  if (segDurations.videoFrameDurationTs) {
419
441
  conf.live_recording.recording_config.recording_params.xc_params.video_frame_duration_ts = segDurations.videoFrameDurationTs;
@@ -1652,7 +1652,7 @@ exports.StreamConfig = /*#__PURE__*/function () {
1652
1652
  // Get node URI from user config
1653
1653
  hostName = userConfig.url.replace("udp://", "").replace("rtmp://", "").replace("srt://", "").split(":")[0];
1654
1654
  streamUrl = new URL(userConfig.url);
1655
- console.log("Retrieving nodes...");
1655
+ console.log("Retrieving nodes - matching", hostName);
1656
1656
  _context11.next = 21;
1657
1657
  return this.SpaceNodes({
1658
1658
  matchEndpoint: hostName
@@ -1,8 +1,8 @@
1
1
  var _regeneratorRuntime = require("@babel/runtime/regenerator");
2
2
  var _defineProperty = require("@babel/runtime/helpers/defineProperty");
3
3
  var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
4
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
5
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
6
6
  /**
7
7
  * Methods for creating and managing NFTs
8
8
  *
@@ -1,8 +1,8 @@
1
1
  var _defineProperty = require("@babel/runtime/helpers/defineProperty");
2
2
  var _regeneratorRuntime = require("@babel/runtime/regenerator");
3
3
  var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
4
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
5
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
6
6
  var Utils = require("../Utils");
7
7
  var UrlJoin = require("url-join");
8
8
  var _require = require("./Utils"),
@@ -2,8 +2,8 @@ var _defineProperty = require("@babel/runtime/helpers/defineProperty");
2
2
  var _typeof = require("@babel/runtime/helpers/typeof");
3
3
  var _regeneratorRuntime = require("@babel/runtime/regenerator");
4
4
  var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
5
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
6
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
5
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
6
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7
7
  var Utils = require("../Utils");
8
8
  var UrlJoin = require("url-join");
9
9
  var StateStorePath = function StateStorePath(_ref) {
@@ -2,8 +2,8 @@ var _regeneratorRuntime = require("@babel/runtime/regenerator");
2
2
  var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
3
3
  var _defineProperty = require("@babel/runtime/helpers/defineProperty");
4
4
  var _slicedToArray = require("@babel/runtime/helpers/slicedToArray");
5
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
6
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
5
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
6
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7
7
  var Utils = require("../Utils");
8
8
  var RarityToPercentage = function RarityToPercentage(rarity) {
9
9
  if (!rarity) {
@@ -5,8 +5,8 @@ var _typeof = require("@babel/runtime/helpers/typeof");
5
5
  var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
6
6
  var _classCallCheck = require("@babel/runtime/helpers/classCallCheck");
7
7
  var _createClass = require("@babel/runtime/helpers/createClass");
8
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
9
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
9
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
10
10
  var _require = require("../ElvClient"),
11
11
  ElvClient = _require.ElvClient;
12
12
  var Configuration = require("./Configuration");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eluvio/elv-client-js",
3
- "version": "4.0.80",
3
+ "version": "4.0.82",
4
4
  "description": "Javascript client for the Eluvio Content Fabric",
5
5
  "main": "src/index.js",
6
6
  "author": "Kevin Talmadge",
@@ -1075,7 +1075,7 @@ exports.ContentObjectVersions = async function({libraryId, objectId}) {
1075
1075
  };
1076
1076
 
1077
1077
  /**
1078
- * Retrieve the version hash of the latest version of the specified object
1078
+ * Retrieve the version hash of the latest version of the specified object from chain
1079
1079
  *
1080
1080
  * @methodGroup Content Objects
1081
1081
  * @namedParams
@@ -1122,6 +1122,42 @@ exports.LatestVersionHash = async function({objectId, versionHash}) {
1122
1122
  return latestHash;
1123
1123
  };
1124
1124
 
1125
+ /**
1126
+ * Retrieve the version hash of the latest version of the specified object via fabric API.
1127
+ * Requires authorization.
1128
+ *
1129
+ * @methodGroup Content Objects
1130
+ * @namedParams
1131
+ * @param {string=} objectId - ID of the object
1132
+ * @param {string=} versionHash - Version hash of the object
1133
+ *
1134
+ * @returns {Promise<string>} - The latest version hash of the object
1135
+ */
1136
+ exports.LatestVersionHashV2 = async function({objectId, versionHash}) {
1137
+ if(versionHash) { objectId = this.utils.DecodeVersionHash(versionHash).objectId; }
1138
+
1139
+ ValidateObject(objectId);
1140
+
1141
+ let latestHash;
1142
+ try {
1143
+ let path = UrlJoin("q", objectId);
1144
+
1145
+ let q = await this.utils.ResponseToJson(
1146
+ this.HttpClient.Request({
1147
+ headers: await this.authClient.AuthorizationHeader({objectId}),
1148
+ method: "GET",
1149
+ path: path
1150
+ })
1151
+ );
1152
+ latestHash = q.hash;
1153
+
1154
+ } catch(error) {
1155
+ console.log("ERROR", error);
1156
+ throw Error(`Unable to determine latest version hash for ${versionHash || objectId}`);
1157
+ }
1158
+ return latestHash;
1159
+ };
1160
+
1125
1161
  /* URL Methods */
1126
1162
 
1127
1163
  /**
@@ -1044,11 +1044,26 @@ exports.PublishContentVersion = async function({objectId, versionHash, awaitComm
1044
1044
 
1045
1045
  if(confirmEvent) {
1046
1046
  // Found confirmation
1047
- this.Log(`Commit confirmed: ${objectHash}`);
1047
+ this.Log(`Commit confirmed on chain: ${objectHash}`);
1048
1048
  break;
1049
1049
  }
1050
1050
  }
1051
1051
  }
1052
+
1053
+ // APIv2 ensure the fabric API returns the correct hash
1054
+ if(awaitCommitConfirmation) {
1055
+ const pollingInterval = 500; // ms
1056
+ let tries = 20;
1057
+ while (tries > 0) {
1058
+ const h = await this.LatestVersionHashV2({objectId});
1059
+ if (h == versionHash) {
1060
+ this.Log(`Commit confirmed on fabric node: ${versionHash}`);
1061
+ break;
1062
+ }
1063
+ await new Promise(resolve => setTimeout(resolve, pollingInterval));
1064
+ }
1065
+ }
1066
+
1052
1067
  };
1053
1068
 
1054
1069
  /**
@@ -209,6 +209,17 @@ class LiveConf {
209
209
  return seg;
210
210
  }
211
211
 
212
+ /*
213
+ * Calculate output timebase from the encoder (codec) timebase. The videoTimeBase parameter
214
+ * represents the encoder timebase. The format muxer will change it so it is greater than 10000.
215
+ */
216
+ calcOutputTimebase(codecTimebase) {
217
+ let outputTimebase = codecTimebase;
218
+ while (outputTimebase < 10000)
219
+ outputTimebase = outputTimebase * 2;
220
+ return outputTimebase;
221
+ }
222
+
212
223
  calcSegDurationMpegts({sourceTimescale}) {
213
224
  let videoStream = this.getStreamDataForCodecType("video");
214
225
  let frameRate = videoStream.frame_rate;
@@ -270,7 +281,9 @@ class LiveConf {
270
281
 
271
282
  switch(frameRate) {
272
283
  case "24":
273
- seg.video = sourceTimescale * 30;
284
+ seg.videoTimeBase = 1536; // Output timebase: 12288
285
+ seg.videoFrameDurationTs = 512;
286
+ seg.video = this.calcOutputTimebase(seg.videoTimeBase) * 30;
274
287
  seg.keyint = 48;
275
288
  seg.duration = "30";
276
289
  break;
@@ -280,7 +293,9 @@ class LiveConf {
280
293
  seg.duration = "30";
281
294
  break;
282
295
  case "30":
283
- seg.video = sourceTimescale * 30;
296
+ seg.videoTimeBase = 960; // Output timebase: 15360
297
+ seg.videoFrameDurationTs = 512;
298
+ seg.video = this.calcOutputTimebase(seg.videoTimeBase) * 30;
284
299
  seg.keyint = 60;
285
300
  seg.duration = "30";
286
301
  break;
@@ -290,7 +305,9 @@ class LiveConf {
290
305
  seg.duration = "30.03";
291
306
  break;
292
307
  case "48":
293
- seg.video = sourceTimescale * 30;
308
+ seg.videoTimeBase = 1536; // Output timebase: 12288
309
+ seg.videoFrameDurationTs = 256;
310
+ seg.video = this.calcOutputTimebase(seg.videoTimeBase) * 30;
294
311
  seg.keyint = 96;
295
312
  seg.duration = "30";
296
313
  break;
@@ -300,7 +317,9 @@ class LiveConf {
300
317
  seg.duration = "30";
301
318
  break;
302
319
  case "60":
303
- seg.video = sourceTimescale * 30;
320
+ seg.videoTimeBase = 960; // Output timebase: 15360
321
+ seg.videoFrameDurationTs = 256;
322
+ seg.video = this.calcOutputTimebase(seg.videoTimeBase) * 30;
304
323
  seg.keyint = 120;
305
324
  seg.duration = "30";
306
325
  break;
@@ -397,7 +416,9 @@ class LiveConf {
397
416
  // Optional override output timebase and frame duration (ts)
398
417
  if(segDurations.videoTimeBase) {
399
418
  conf.live_recording.recording_config.recording_params.xc_params.video_time_base = segDurations.videoTimeBase;
400
- conf.live_recording.recording_config.recording_params.source_timescale = segDurations.videoTimeBase;
419
+
420
+ // Note 'source_timescale' needs to be set to the output timebase and is used by playout
421
+ conf.live_recording.recording_config.recording_params.source_timescale = this.calcOutputTimebase(segDurations.videoTimeBase);
401
422
  }
402
423
  if(segDurations.videoFrameDurationTs) {
403
424
  conf.live_recording.recording_config.recording_params.xc_params.video_frame_duration_ts = segDurations.videoFrameDurationTs;
@@ -1322,7 +1322,7 @@ exports.StreamConfig = async function({name, customSettings={}}) {
1322
1322
  const hostName = userConfig.url.replace("udp://", "").replace("rtmp://", "").replace("srt://", "").split(":")[0];
1323
1323
  const streamUrl = new URL(userConfig.url);
1324
1324
 
1325
- console.log("Retrieving nodes...");
1325
+ console.log("Retrieving nodes - matching", hostName);
1326
1326
  let nodes = await this.SpaceNodes({matchEndpoint: hostName});
1327
1327
  if(nodes.length < 1) {
1328
1328
  status.error = "No node matching stream URL " + streamUrl.href;