@eluvio/elv-client-js 4.0.35 → 4.0.37

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.
@@ -27,7 +27,7 @@ var WalletConfiguration = {
27
27
  appUrl: "https://wallet.contentfabric.io"
28
28
  }
29
29
  },
30
- __MARKETPLACE_ORDER: ["PREVIEW", "masked-singer-brazil-marketplace", "eluvio-live-marketplace-globo-taf", "de228e92-ed45-4fe0-8e52-658cf366e962", "wwe-marketplace-main", "maskverse-marketplace", "dolly-marketplace", "eluvio-live-marketplace-sonark", "cirkay-marketplace", "eluvio-live-marketplace-fuudge", "oc-marketplace", "emp-marketplace", "microsoft", "indieflix-marketplace", "angels-airwaves-marketplace", "realcannonballrun-marketplace"]
30
+ __MARKETPLACE_ORDER: ["PREVIEW", "b63413a5-ce07-4848-b763-b4d97f4870ec", "masked-singer-brazil-marketplace", "eluvio-live-marketplace-globo-taf", "de228e92-ed45-4fe0-8e52-658cf366e962", "wwe-marketplace-main", "maskverse-marketplace", "dolly-marketplace", "eluvio-live-marketplace-sonark", "cirkay-marketplace", "eluvio-live-marketplace-fuudge", "oc-marketplace", "emp-marketplace", "microsoft", "indieflix-marketplace", "angels-airwaves-marketplace", "realcannonballrun-marketplace"]
31
31
  };
32
32
 
33
33
  // No production environment on demo
@@ -808,7 +808,27 @@ var ElvWalletClient = /*#__PURE__*/function () {
808
808
  return _SignMetamask.apply(this, arguments);
809
809
  }
810
810
  return SignMetamask;
811
- }() // Internal loading methods
811
+ }()
812
+ }, {
813
+ key: "FlowURL",
814
+ value: function FlowURL(_ref12) {
815
+ var _ref12$type = _ref12.type,
816
+ type = _ref12$type === void 0 ? "flow" : _ref12$type,
817
+ flow = _ref12.flow,
818
+ marketplaceId = _ref12.marketplaceId,
819
+ _ref12$parameters = _ref12.parameters,
820
+ parameters = _ref12$parameters === void 0 ? {} : _ref12$parameters;
821
+ var url = new URL(this.appUrl);
822
+ if (marketplaceId) {
823
+ url.hash = UrlJoin("/", type, flow, "marketplace", marketplaceId, Utils.B58(JSON.stringify(parameters)));
824
+ } else {
825
+ url.hash = UrlJoin("/", type, flow, Utils.B58(JSON.stringify(parameters)));
826
+ }
827
+ url.searchParams.set("origin", window.location.origin);
828
+ return url.toString();
829
+ }
830
+
831
+ // Internal loading methods
812
832
  }, {
813
833
  key: "LoadAvailableMarketplaces",
814
834
  value: function () {
@@ -844,8 +864,8 @@ var ElvWalletClient = /*#__PURE__*/function () {
844
864
  produceLinkUrls: true,
845
865
  authorizationToken: this.publicStaticToken,
846
866
  noAuth: true,
847
- select: ["*/.", "*/marketplaces/*/.", "*/marketplaces/*/info/tenant_id", "*/marketplaces/*/info/tenant_name", "*/marketplaces/*/info/branding", "*/marketplaces/*/info/storefront/background", "*/marketplaces/*/info/storefront/background_mobile"],
848
- remove: ["*/marketplaces/*/info/branding/custom_css"]
867
+ select: ["*/.", "*/info/branding", "*/marketplaces/*/.", "*/marketplaces/*/info/tenant_id", "*/marketplaces/*/info/tenant_name", "*/marketplaces/*/info/branding", "*/marketplaces/*/info/storefront/background", "*/marketplaces/*/info/storefront/background_mobile"],
868
+ remove: ["*/info/branding/wallet_css", "*/marketplaces/*/info/branding/custom_css"]
849
869
  });
850
870
  case 5:
851
871
  metadata = _context12.sent;
@@ -922,6 +942,7 @@ var ElvWalletClient = /*#__PURE__*/function () {
922
942
  marketplaceSlug: marketplaceSlug,
923
943
  marketplaceId: objectId,
924
944
  marketplaceHash: versionHash,
945
+ tenantBranding: (metadata[tenantSlug].info || {}).branding || {},
925
946
  order: Configuration.__MARKETPLACE_ORDER.findIndex(function (slug) {
926
947
  return slug === marketplaceSlug;
927
948
  })
@@ -959,12 +980,12 @@ var ElvWalletClient = /*#__PURE__*/function () {
959
980
  }, {
960
981
  key: "LatestMarketplaceHash",
961
982
  value: function () {
962
- var _LatestMarketplaceHash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee13(_ref12) {
983
+ var _LatestMarketplaceHash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee13(_ref13) {
963
984
  var marketplaceParams, marketplaceInfo, marketplaceLink;
964
985
  return _regeneratorRuntime.wrap(function _callee13$(_context13) {
965
986
  while (1) switch (_context13.prev = _context13.next) {
966
987
  case 0:
967
- marketplaceParams = _ref12.marketplaceParams;
988
+ marketplaceParams = _ref13.marketplaceParams;
968
989
  _context13.next = 3;
969
990
  return this.MarketplaceInfo({
970
991
  marketplaceParams: marketplaceParams
@@ -1022,7 +1043,7 @@ var ElvWalletClient = /*#__PURE__*/function () {
1022
1043
  delete this.cachedMarketplaces[marketplaceId];
1023
1044
  }
1024
1045
  if (this.cachedMarketplaces[marketplaceId]) {
1025
- _context15.next = 21;
1046
+ _context15.next = 28;
1026
1047
  break;
1027
1048
  }
1028
1049
  _context15.next = 9;
@@ -1040,9 +1061,31 @@ var ElvWalletClient = /*#__PURE__*/function () {
1040
1061
  });
1041
1062
  case 9:
1042
1063
  marketplace = _context15.sent;
1043
- _context15.next = 12;
1064
+ if (!marketplace.branding.use_tenant_styling) {
1065
+ _context15.next = 17;
1066
+ break;
1067
+ }
1068
+ _context15.next = 13;
1069
+ return this.client.ContentObjectMetadata({
1070
+ libraryId: this.mainSiteLibraryId,
1071
+ objectId: this.mainSiteId,
1072
+ metadataSubtree: UrlJoin("/public", "asset_metadata", "tenants", marketplaceInfo.tenantSlug, "info", "branding"),
1073
+ authorizationToken: this.publicStaticToken,
1074
+ produceLinkUrls: true
1075
+ });
1076
+ case 13:
1077
+ _context15.t0 = _context15.sent;
1078
+ if (_context15.t0) {
1079
+ _context15.next = 16;
1080
+ break;
1081
+ }
1082
+ _context15.t0 = {};
1083
+ case 16:
1084
+ marketplace.tenantBranding = _context15.t0;
1085
+ case 17:
1086
+ _context15.next = 19;
1044
1087
  return Promise.all(marketplace.items.map( /*#__PURE__*/function () {
1045
- var _ref13 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee14(item, index) {
1088
+ var _ref14 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee14(item, index) {
1046
1089
  var authorizationToken;
1047
1090
  return _regeneratorRuntime.wrap(function _callee14$(_context14) {
1048
1091
  while (1) switch (_context14.prev = _context14.next) {
@@ -1087,10 +1130,10 @@ var ElvWalletClient = /*#__PURE__*/function () {
1087
1130
  }, _callee14, null, [[5, 11]]);
1088
1131
  }));
1089
1132
  return function (_x18, _x19) {
1090
- return _ref13.apply(this, arguments);
1133
+ return _ref14.apply(this, arguments);
1091
1134
  };
1092
1135
  }()));
1093
- case 12:
1136
+ case 19:
1094
1137
  marketplace.items = _context15.sent;
1095
1138
  marketplace.collections = (marketplace.collections || []).map(function (collection, collectionIndex) {
1096
1139
  return _objectSpread(_objectSpread({}, collection), {}, {
@@ -1126,9 +1169,9 @@ var ElvWalletClient = /*#__PURE__*/function () {
1126
1169
  } catch (error) {}
1127
1170
  });
1128
1171
  this.cachedMarketplaces[marketplaceId] = marketplace;
1129
- case 21:
1172
+ case 28:
1130
1173
  return _context15.abrupt("return", this.cachedMarketplaces[marketplaceId]);
1131
- case 22:
1174
+ case 29:
1132
1175
  case "end":
1133
1176
  return _context15.stop();
1134
1177
  }
@@ -1144,12 +1187,12 @@ var ElvWalletClient = /*#__PURE__*/function () {
1144
1187
  value: function () {
1145
1188
  var _FilteredQuery = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee16() {
1146
1189
  var _this6 = this;
1147
- var _ref14,
1148
- _ref14$mode,
1190
+ var _ref15,
1191
+ _ref15$mode,
1149
1192
  mode,
1150
- _ref14$sortBy,
1193
+ _ref15$sortBy,
1151
1194
  sortBy,
1152
- _ref14$sortDesc,
1195
+ _ref15$sortDesc,
1153
1196
  sortDesc,
1154
1197
  filter,
1155
1198
  editionFilters,
@@ -1165,27 +1208,27 @@ var ElvWalletClient = /*#__PURE__*/function () {
1165
1208
  capLimit,
1166
1209
  userAddress,
1167
1210
  sellerAddress,
1168
- _ref14$lastNDays,
1211
+ _ref15$lastNDays,
1169
1212
  lastNDays,
1170
- _ref14$includeCheckou,
1213
+ _ref15$includeCheckou,
1171
1214
  includeCheckoutLocked,
1172
- _ref14$start,
1215
+ _ref15$start,
1173
1216
  start,
1174
- _ref14$limit,
1217
+ _ref15$limit,
1175
1218
  limit,
1176
1219
  params,
1177
1220
  marketplaceInfo,
1178
1221
  marketplace,
1179
1222
  filters,
1180
1223
  path,
1181
- _ref16,
1224
+ _ref17,
1182
1225
  contents,
1183
1226
  paging,
1184
1227
  _args16 = arguments;
1185
1228
  return _regeneratorRuntime.wrap(function _callee16$(_context16) {
1186
1229
  while (1) switch (_context16.prev = _context16.next) {
1187
1230
  case 0:
1188
- _ref14 = _args16.length > 0 && _args16[0] !== undefined ? _args16[0] : {}, _ref14$mode = _ref14.mode, mode = _ref14$mode === void 0 ? "listings" : _ref14$mode, _ref14$sortBy = _ref14.sortBy, sortBy = _ref14$sortBy === void 0 ? "created" : _ref14$sortBy, _ref14$sortDesc = _ref14.sortDesc, sortDesc = _ref14$sortDesc === void 0 ? false : _ref14$sortDesc, filter = _ref14.filter, editionFilters = _ref14.editionFilters, attributeFilters = _ref14.attributeFilters, contractAddress = _ref14.contractAddress, tokenId = _ref14.tokenId, currency = _ref14.currency, marketplaceParams = _ref14.marketplaceParams, tenantId = _ref14.tenantId, collectionIndexes = _ref14.collectionIndexes, priceRange = _ref14.priceRange, tokenIdRange = _ref14.tokenIdRange, capLimit = _ref14.capLimit, userAddress = _ref14.userAddress, sellerAddress = _ref14.sellerAddress, _ref14$lastNDays = _ref14.lastNDays, lastNDays = _ref14$lastNDays === void 0 ? -1 : _ref14$lastNDays, _ref14$includeCheckou = _ref14.includeCheckoutLocked, includeCheckoutLocked = _ref14$includeCheckou === void 0 ? false : _ref14$includeCheckou, _ref14$start = _ref14.start, start = _ref14$start === void 0 ? 0 : _ref14$start, _ref14$limit = _ref14.limit, limit = _ref14$limit === void 0 ? 50 : _ref14$limit;
1231
+ _ref15 = _args16.length > 0 && _args16[0] !== undefined ? _args16[0] : {}, _ref15$mode = _ref15.mode, mode = _ref15$mode === void 0 ? "listings" : _ref15$mode, _ref15$sortBy = _ref15.sortBy, sortBy = _ref15$sortBy === void 0 ? "created" : _ref15$sortBy, _ref15$sortDesc = _ref15.sortDesc, sortDesc = _ref15$sortDesc === void 0 ? false : _ref15$sortDesc, filter = _ref15.filter, editionFilters = _ref15.editionFilters, attributeFilters = _ref15.attributeFilters, contractAddress = _ref15.contractAddress, tokenId = _ref15.tokenId, currency = _ref15.currency, marketplaceParams = _ref15.marketplaceParams, tenantId = _ref15.tenantId, collectionIndexes = _ref15.collectionIndexes, priceRange = _ref15.priceRange, tokenIdRange = _ref15.tokenIdRange, capLimit = _ref15.capLimit, userAddress = _ref15.userAddress, sellerAddress = _ref15.sellerAddress, _ref15$lastNDays = _ref15.lastNDays, lastNDays = _ref15$lastNDays === void 0 ? -1 : _ref15$lastNDays, _ref15$includeCheckou = _ref15.includeCheckoutLocked, includeCheckoutLocked = _ref15$includeCheckou === void 0 ? false : _ref15$includeCheckou, _ref15$start = _ref15.start, start = _ref15$start === void 0 ? 0 : _ref15$start, _ref15$limit = _ref15.limit, limit = _ref15$limit === void 0 ? 50 : _ref15$limit;
1189
1232
  collectionIndexes = (collectionIndexes || []).map(function (i) {
1190
1233
  return parseInt(i);
1191
1234
  });
@@ -1284,9 +1327,9 @@ var ElvWalletClient = /*#__PURE__*/function () {
1284
1327
  });
1285
1328
  }
1286
1329
  if (attributeFilters) {
1287
- attributeFilters.map(function (_ref15) {
1288
- var name = _ref15.name,
1289
- value = _ref15.value;
1330
+ attributeFilters.map(function (_ref16) {
1331
+ var name = _ref16.name,
1332
+ value = _ref16.value;
1290
1333
  if (!name || !value) {
1291
1334
  return;
1292
1335
  }
@@ -1383,9 +1426,9 @@ var ElvWalletClient = /*#__PURE__*/function () {
1383
1426
  }
1384
1427
  _context16.t1 = [];
1385
1428
  case 62:
1386
- _ref16 = _context16.t1;
1387
- contents = _ref16.contents;
1388
- paging = _ref16.paging;
1429
+ _ref17 = _context16.t1;
1430
+ contents = _ref17.contents;
1431
+ paging = _ref17.paging;
1389
1432
  return _context16.abrupt("return", {
1390
1433
  paging: {
1391
1434
  start: params.start,
@@ -1429,12 +1472,12 @@ var ElvWalletClient = /*#__PURE__*/function () {
1429
1472
  }, {
1430
1473
  key: "MintingStatus",
1431
1474
  value: function () {
1432
- var _MintingStatus = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee17(_ref17) {
1475
+ var _MintingStatus = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee17(_ref18) {
1433
1476
  var marketplaceParams, tenantId, marketplaceInfo, response;
1434
1477
  return _regeneratorRuntime.wrap(function _callee17$(_context17) {
1435
1478
  while (1) switch (_context17.prev = _context17.next) {
1436
1479
  case 0:
1437
- marketplaceParams = _ref17.marketplaceParams, tenantId = _ref17.tenantId;
1480
+ marketplaceParams = _ref18.marketplaceParams, tenantId = _ref18.tenantId;
1438
1481
  if (tenantId) {
1439
1482
  _context17.next = 6;
1440
1483
  break;
@@ -1547,13 +1590,13 @@ var ElvWalletClient = /*#__PURE__*/function () {
1547
1590
  }, {
1548
1591
  key: "Initialize",
1549
1592
  value: function () {
1550
- var _Initialize = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee18(_ref18) {
1551
- var client, _ref18$appId, appId, _ref18$network, network, _ref18$mode, mode, localization, marketplaceParams, previewMarketplaceId, _ref18$storeAuthToken, storeAuthToken, _ref18$skipMarketplac, skipMarketplaceLoad, _ref19, tenantSlug, marketplaceSlug, marketplaceId, marketplaceHash, previewMarketplaceHash, walletClient, url, savedToken;
1593
+ var _Initialize = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee18(_ref19) {
1594
+ var client, _ref19$appId, appId, _ref19$network, network, _ref19$mode, mode, localization, marketplaceParams, previewMarketplaceId, _ref19$storeAuthToken, storeAuthToken, _ref19$skipMarketplac, skipMarketplaceLoad, _ref20, tenantSlug, marketplaceSlug, marketplaceId, marketplaceHash, previewMarketplaceHash, walletClient, url, savedToken;
1552
1595
  return _regeneratorRuntime.wrap(function _callee18$(_context18) {
1553
1596
  while (1) switch (_context18.prev = _context18.next) {
1554
1597
  case 0:
1555
- client = _ref18.client, _ref18$appId = _ref18.appId, appId = _ref18$appId === void 0 ? "general" : _ref18$appId, _ref18$network = _ref18.network, network = _ref18$network === void 0 ? "main" : _ref18$network, _ref18$mode = _ref18.mode, mode = _ref18$mode === void 0 ? "production" : _ref18$mode, localization = _ref18.localization, marketplaceParams = _ref18.marketplaceParams, previewMarketplaceId = _ref18.previewMarketplaceId, _ref18$storeAuthToken = _ref18.storeAuthToken, storeAuthToken = _ref18$storeAuthToken === void 0 ? true : _ref18$storeAuthToken, _ref18$skipMarketplac = _ref18.skipMarketplaceLoad, skipMarketplaceLoad = _ref18$skipMarketplac === void 0 ? false : _ref18$skipMarketplac;
1556
- _ref19 = marketplaceParams || {}, tenantSlug = _ref19.tenantSlug, marketplaceSlug = _ref19.marketplaceSlug, marketplaceId = _ref19.marketplaceId, marketplaceHash = _ref19.marketplaceHash;
1598
+ client = _ref19.client, _ref19$appId = _ref19.appId, appId = _ref19$appId === void 0 ? "general" : _ref19$appId, _ref19$network = _ref19.network, network = _ref19$network === void 0 ? "main" : _ref19$network, _ref19$mode = _ref19.mode, mode = _ref19$mode === void 0 ? "production" : _ref19$mode, localization = _ref19.localization, marketplaceParams = _ref19.marketplaceParams, previewMarketplaceId = _ref19.previewMarketplaceId, _ref19$storeAuthToken = _ref19.storeAuthToken, storeAuthToken = _ref19$storeAuthToken === void 0 ? true : _ref19$storeAuthToken, _ref19$skipMarketplac = _ref19.skipMarketplaceLoad, skipMarketplaceLoad = _ref19$skipMarketplac === void 0 ? false : _ref19$skipMarketplac;
1599
+ _ref20 = marketplaceParams || {}, tenantSlug = _ref20.tenantSlug, marketplaceSlug = _ref20.marketplaceSlug, marketplaceId = _ref20.marketplaceId, marketplaceHash = _ref20.marketplaceHash;
1557
1600
  if (Configuration[network]) {
1558
1601
  _context18.next = 6;
1559
1602
  break;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eluvio/elv-client-js",
3
- "version": "4.0.35",
3
+ "version": "4.0.37",
4
4
  "description": "Javascript client for the Eluvio Content Fabric",
5
5
  "main": "src/index.js",
6
6
  "author": "Kevin Talmadge",
@@ -1126,6 +1126,71 @@ exports.ClaimItem = async function({marketplaceParams, sku, email}) {
1126
1126
  });
1127
1127
  };
1128
1128
 
1129
+ /**
1130
+ * Redirect to the wallet app to purchase the specified item from the specified marketplace
1131
+ *
1132
+ * Use the <a href="#.PurchaseStatus">PurchaseStatus</a> method to check minting status after purchasing
1133
+ *
1134
+ * @methodGroup Purchase
1135
+ * @namedParams
1136
+ * @param {Object} marketplaceParams - Parameters of the marketplace
1137
+ * @param {string} sku - The SKU of the item to claim
1138
+ * @param {string=} confirmationId - Confirmation ID with which to reference this purchase. If not specified, a confirmation ID will be automatically generated. On success, the user will be returned to `successUrl` with the `confirmationId` as a URL parameter.
1139
+ * @param {string} successUrl - The URL to redirect back to upon successful purchase
1140
+ * @param {string} cancelUrl - The URL to redirect back to upon cancellation of purchase
1141
+ */
1142
+ exports.PurchaseItem = async function({marketplaceParams, sku, confirmationId, successUrl, cancelUrl}) {
1143
+ const marketplaceInfo = await this.MarketplaceInfo({marketplaceParams});
1144
+
1145
+ window.location.href = this.FlowURL({
1146
+ type: "action",
1147
+ flow: "purchase",
1148
+ marketplaceId: marketplaceInfo.marketplaceId,
1149
+ parameters: {
1150
+ sku,
1151
+ confirmationId,
1152
+ successUrl,
1153
+ cancelUrl,
1154
+ login: true,
1155
+ auth: this.ClientAuthToken(),
1156
+ }
1157
+ });
1158
+ };
1159
+
1160
+ /**
1161
+ * Redirect to the wallet app to purchase the specified listing
1162
+ *
1163
+ * Use the <a href="#.PurchaseStatus">ListingPurchaseStatus</a> method to check minting status after purchasing
1164
+ *
1165
+ * @methodGroup Purchase
1166
+ * @namedParams
1167
+ * @param {Object=} marketplaceParams - Parameters of the marketplace
1168
+ * @param {string} listingId - The SKU of the item to claim
1169
+ * @param {string=} confirmationId - Confirmation ID with which to reference this purchase. If not specified, a confirmation ID will be automatically generated. On success, the user will be returned to `successUrl` with the `confirmationId` as a URL parameter.
1170
+ * @param {string} successUrl - The URL to redirect back to upon successful purchase
1171
+ * @param {string} cancelUrl - The URL to redirect back to upon cancellation of purchase
1172
+ */
1173
+ exports.PurchaseListing = async function({marketplaceParams, listingId, confirmationId, successUrl, cancelUrl}) {
1174
+ let marketplaceInfo;
1175
+ if(marketplaceParams) {
1176
+ marketplaceInfo = await this.MarketplaceInfo({marketplaceParams});
1177
+ }
1178
+
1179
+ window.location.href = this.FlowURL({
1180
+ type: "action",
1181
+ flow: "purchase",
1182
+ marketplaceId: marketplaceInfo && marketplaceInfo.marketplaceId,
1183
+ parameters: {
1184
+ listingId,
1185
+ confirmationId,
1186
+ successUrl,
1187
+ cancelUrl,
1188
+ login: true,
1189
+ auth: this.ClientAuthToken(),
1190
+ }
1191
+ });
1192
+ };
1193
+
1129
1194
  /* MINTING STATUS */
1130
1195
 
1131
1196
  /**
@@ -619,6 +619,19 @@ class ElvWalletClient {
619
619
  });
620
620
  }
621
621
 
622
+ FlowURL({type="flow", flow, marketplaceId, parameters={}}) {
623
+ const url = new URL(this.appUrl);
624
+ if(marketplaceId) {
625
+ url.hash = UrlJoin("/", type, flow, "marketplace", marketplaceId, Utils.B58(JSON.stringify(parameters)));
626
+ } else {
627
+ url.hash = UrlJoin("/", type, flow, Utils.B58(JSON.stringify(parameters)));
628
+ }
629
+
630
+ url.searchParams.set("origin", window.location.origin);
631
+
632
+ return url.toString();
633
+ }
634
+
622
635
 
623
636
  // Internal loading methods
624
637
 
@@ -77,7 +77,7 @@ const defaultSpec = {
77
77
  ],
78
78
  searchable_links: [
79
79
  {target: "/public/asset_metadata", link_key: "asset_metadata"},
80
- {target: "/public/assets", link_key: "assets"},
80
+ {target: "/assets", link_key: "assets"},
81
81
  {target: "/offerings", link_key: "offerings"},
82
82
  {target: "/video_tags", link_key: "video_tags"}
83
83
  ]