@eluvio/elv-client-js 4.0.116 → 4.0.118

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 (38) hide show
  1. package/dist/ElvClient-min.js +14 -15
  2. package/dist/ElvClient-node-min.js +13 -14
  3. package/dist/ElvFrameClient-min.js +10 -10
  4. package/dist/ElvPermissionsClient-min.js +9 -9
  5. package/dist/ElvWalletClient-min.js +14 -15
  6. package/dist/ElvWalletClient-node-min.js +13 -14
  7. package/dist/src/AuthorizationClient.js +12 -9
  8. package/dist/src/ContentObjectAudit.js +3 -3
  9. package/dist/src/ContentObjectVerification.js +3 -3
  10. package/dist/src/Crypto.js +2 -2
  11. package/dist/src/ElvClient.js +28 -47
  12. package/dist/src/ElvWallet.js +5 -7
  13. package/dist/src/EthClient.js +9 -8
  14. package/dist/src/FrameClient.js +9 -8
  15. package/dist/src/HttpClient.js +2 -1
  16. package/dist/src/Id.js +2 -1
  17. package/dist/src/PermissionsClient.js +19 -31
  18. package/dist/src/RemoteSigner.js +8 -6
  19. package/dist/src/UserProfileClient.js +20 -35
  20. package/dist/src/Utils.js +3 -2
  21. package/dist/src/client/ABRPublishing.js +2 -2
  22. package/dist/src/client/AccessGroups.js +2 -2
  23. package/dist/src/client/ContentAccess.js +32 -39
  24. package/dist/src/client/ContentManagement.js +3 -3
  25. package/dist/src/client/Contracts.js +2 -2
  26. package/dist/src/client/Files.js +2 -2
  27. package/dist/src/client/LiveConf.js +5 -3
  28. package/dist/src/client/LiveStream.js +2 -0
  29. package/dist/src/client/NFT.js +2 -2
  30. package/dist/src/walletClient/ClientMethods.js +2 -2
  31. package/dist/src/walletClient/Profile.js +2 -2
  32. package/dist/src/walletClient/Utils.js +2 -2
  33. package/dist/src/walletClient/index.js +14 -17
  34. package/package.json +1 -1
  35. package/src/client/ContentAccess.js +1 -1
  36. package/src/client/LiveConf.js +1 -1
  37. package/src/walletClient/index.js +23 -123
  38. package/utilities/GenerateEditorSignedAccessToken.js +72 -0
@@ -185,6 +185,12 @@ class ElvWalletClient {
185
185
  }
186
186
  }
187
187
 
188
+ walletClient.topLevelInfo = await client.utils.ResponseToJson(
189
+ client.MakeAuthServiceRequest({
190
+ path: "/as/mw/toplevel"
191
+ })
192
+ );
193
+
188
194
  if(!skipMarketplaceLoad) {
189
195
  await walletClient.LoadAvailableMarketplaces();
190
196
  }
@@ -749,136 +755,29 @@ class ElvWalletClient {
749
755
  return;
750
756
  }
751
757
 
752
- let metadata = await this.client.ContentObjectMetadata({
753
- libraryId: this.mainSiteLibraryId,
754
- objectId: this.mainSiteId,
755
- metadataSubtree: "public/asset_metadata",
756
- resolveLinks: true,
757
- linkDepthLimit: 2,
758
- resolveIncludeSource: true,
759
- resolveIgnoreErrors: true,
760
- produceLinkUrls: true,
761
- authorizationToken: this.publicStaticToken,
762
- noAuth: true,
763
- select: [
764
- "info/marketplace_order",
765
- "tenants/*/.",
766
- "tenants/*/info/branding/show",
767
- "tenants/*/info/branding/name",
768
- "tenants/*/marketplaces/*/.",
769
- "tenants/*/marketplaces/*/info/tenant_id",
770
- "tenants/*/marketplaces/*/info/tenant_name",
771
- "tenants/*/marketplaces/*/info/branding/show",
772
- "tenants/*/marketplaces/*/info/branding/name"
773
- ]
774
- });
758
+ const marketplaces = this.topLevelInfo.marketplaces;
775
759
 
776
- const marketplaceOrder = ((metadata || {}).info || {}).marketplace_order || [];
777
- metadata = (metadata || {}).tenants || {};
778
-
779
- // If preview marketplace is specified, load it appropriately
780
- if(this.previewMarketplaceId) {
781
- let previewTenantSlug = "PREVIEW";
782
- let previewMarketplaceSlug, previewMarketplaceMetadata;
783
- Object.keys(metadata || {}).forEach(tenantSlug =>
784
- Object.keys(metadata[tenantSlug].marketplaces || {}).forEach(marketplaceSlug => {
785
- const versionHash = metadata[tenantSlug].marketplaces[marketplaceSlug]["."].source;
786
- const objectId = this.utils.DecodeVersionHash(versionHash).objectId;
787
-
788
- if(objectId === this.previewMarketplaceId) {
789
- // Marketplace exists in site meta
790
- previewTenantSlug = tenantSlug;
791
- previewMarketplaceSlug = marketplaceSlug;
792
-
793
- // Deployed marketplace is same as preview marketplace
794
- if(versionHash === this.previewMarketplaceHash) {
795
- previewMarketplaceMetadata = metadata[tenantSlug].marketplaces[marketplaceSlug];
796
- }
797
- }
798
- })
799
- );
800
-
801
- // Marketplace not present in branch, or preview version is different - Load metadata directly
802
- if(!previewMarketplaceMetadata) {
803
- previewMarketplaceMetadata = await this.client.ContentObjectMetadata({
804
- versionHash: this.previewMarketplaceHash,
805
- metadataSubtree: "public/asset_metadata",
806
- produceLinkUrls: true,
807
- authorizationToken: this.publicStaticToken,
808
- noAuth: true,
809
- select: [
810
- "slug",
811
- "info/tenant_id",
812
- "info/tenant_name",
813
- "info/branding",
814
- ],
815
- remove: [
816
- "info/branding/custom_css"
817
- ]
818
- });
760
+ let availableMarketplaces = { ...(this.availableMarketplaces || {}) };
761
+ let availableMarketplacesById = { ...(this.availableMarketplacesById || {}) };
819
762
 
820
- if(!previewMarketplaceSlug) {
821
- previewMarketplaceSlug = previewMarketplaceMetadata.slug;
822
- }
823
- }
763
+ marketplaces.map(marketplaceInfo => {
764
+ const marketplaceId = Utils.DecodeVersionHash(marketplaceInfo.source_hash).objectId;
765
+ const marketplaceSlug = marketplaceInfo.slug || marketplaceInfo.name;
824
766
 
825
- previewMarketplaceMetadata["."] = {
826
- source: this.previewMarketplaceHash
827
- };
767
+ availableMarketplaces[marketplaceInfo.tenant_slug] = availableMarketplaces[marketplaceInfo.tenant_slug] || {};
828
768
 
829
- previewMarketplaceMetadata.info["."] = {
830
- source: this.previewMarketplaceHash
769
+ availableMarketplaces[marketplaceInfo.tenant_slug][marketplaceSlug] = {
770
+ tenantName: marketplaceInfo.tenant_slug,
771
+ tenantSlug: marketplaceInfo.tenant_slug,
772
+ tenantId: marketplaceInfo.tenant_id,
773
+ marketplaceSlug: marketplaceSlug,
774
+ marketplaceId,
775
+ marketplaceHash: marketplaceInfo.source_hash,
831
776
  };
832
777
 
833
- previewMarketplaceMetadata.info.branding.preview = true;
834
- previewMarketplaceMetadata.info.branding.show = true;
835
-
836
- metadata[previewTenantSlug] = metadata[previewTenantSlug] || {};
837
- metadata[previewTenantSlug].marketplaces = metadata[previewTenantSlug].marketplaces || {};
838
- metadata[previewTenantSlug].marketplaces[previewMarketplaceSlug] = previewMarketplaceMetadata;
839
- }
840
-
841
- let availableMarketplaces = { ...(this.availableMarketplaces || {}) };
842
- let availableMarketplacesById = { ...(this.availableMarketplacesById || {}) };
843
- Object.keys(metadata || {}).forEach(tenantSlug => {
844
- try {
845
- availableMarketplaces[tenantSlug] = metadata[tenantSlug]["."] ?
846
- { versionHash: metadata[tenantSlug]["."].source } : { };
778
+ availableMarketplacesById[marketplaceId] = availableMarketplaces[marketplaceInfo.tenant_slug][marketplaceSlug];
847
779
 
848
- Object.keys(metadata[tenantSlug].marketplaces || {}).forEach(marketplaceSlug => {
849
- try {
850
- const versionHash = metadata[tenantSlug].marketplaces[marketplaceSlug]["."].source;
851
- const objectId = this.utils.DecodeVersionHash(versionHash).objectId;
852
-
853
- availableMarketplaces[tenantSlug][marketplaceSlug] = {
854
- ...(metadata[tenantSlug].marketplaces[marketplaceSlug].info || {}),
855
- tenantName: metadata[tenantSlug].marketplaces[marketplaceSlug].info.tenant_name,
856
- tenantId: metadata[tenantSlug].marketplaces[marketplaceSlug].info.tenant_id,
857
- tenantSlug,
858
- marketplaceSlug,
859
- marketplaceId: objectId,
860
- marketplaceHash: versionHash,
861
- tenantBranding: (metadata[tenantSlug].info || {}).branding || {},
862
- order: marketplaceOrder.findIndex(slug => slug === marketplaceSlug)
863
- };
864
-
865
- availableMarketplacesById[objectId] = availableMarketplaces[tenantSlug][marketplaceSlug];
866
-
867
- this.marketplaceHashes[objectId] = versionHash;
868
-
869
- // Fill out selected marketplace info
870
- if(this.selectedMarketplaceInfo) {
871
- if((this.selectedMarketplaceInfo.tenantSlug === tenantSlug && this.selectedMarketplaceInfo.marketplaceSlug === marketplaceSlug) || this.selectedMarketplaceInfo.marketplaceId === objectId) {
872
- this.selectedMarketplaceInfo = availableMarketplaces[tenantSlug][marketplaceSlug];
873
- }
874
- }
875
- } catch(error) {
876
- this.Log(`Eluvio Wallet Client: Unable to load info for marketplace ${tenantSlug}/${marketplaceSlug}`, true);
877
- }
878
- });
879
- } catch(error) {
880
- this.Log(`Eluvio Wallet Client: Failed to load tenant info ${tenantSlug}`, true, error);
881
- }
780
+ this.marketplaceHashes[marketplaceId] = marketplaceInfo.source_hash;
882
781
  });
883
782
 
884
783
  this.availableMarketplaces = availableMarketplaces;
@@ -1352,6 +1251,7 @@ class ElvWalletClient {
1352
1251
  }
1353
1252
 
1354
1253
  if(op === "nft-claim-entitlement") {
1254
+ // eslint-disable-next-line no-unused-vars
1355
1255
  let [op, marketplace, sku, purchaseId ] = status.op.split(":");
1356
1256
  confirmationId = purchaseId;
1357
1257
  if(status.extra && status.extra["0"]) {
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Generate an Editor Signed Access Token (ESAT)
3
+ *
4
+ * ESAT tokens can be content-based or policy-based.
5
+ * - content-based tokens are specifically for one content
6
+ * - policy-based tokens can give permissions to a list of content objects and can specifically
7
+ * restrict access to playout offerings, files, metadata subtrees and /rep calls
8
+ */
9
+ const { ElvClient } = require("../src/ElvClient");
10
+
11
+ const yargs = require("yargs");
12
+ const argv = yargs
13
+ .option("object-id", {
14
+ description: "Object ID to give access to",
15
+ type: "string"
16
+ })
17
+ .option("subject", {
18
+ description: "Subject (user) of the token",
19
+ type: "string"
20
+ })
21
+ .demandOption(
22
+ ["subject"],
23
+ "\nUsage: PRIVATE_KEY=<private-key> node GenerateEditorSignedAccessToken.js --subject <sub> --object-id <qid>\n"
24
+ )
25
+ .strict().argv;
26
+
27
+ const sampleContext = {
28
+ usr: {
29
+ email: 'jane@example.com',
30
+ tags: ["000", "001"]
31
+ },
32
+ authorized_offerings: [
33
+ "default",
34
+ "default_clear"
35
+ ],
36
+ authorized_qids: [
37
+ "iq__2LUxseAk7qkZ5t5XFNWE45vBmwhZ"
38
+ ],
39
+ authorized_meta: [
40
+ "/offerings/default"
41
+ ],
42
+ authorized_reps: [
43
+ "playout",
44
+ "image",
45
+ "thumbnails",
46
+ "media_download"
47
+ ]
48
+ };
49
+
50
+ const GenerateEditorSignedAccessToken = async ({objectId, subject}) => {
51
+ const client = await ElvClient.FromNetworkName({networkName: "main"});
52
+
53
+ const wallet = client.GenerateWallet();
54
+ const signer = wallet.AddAccount({
55
+ privateKey: process.env.PRIVATE_KEY
56
+ });
57
+
58
+ client.SetSigner({signer});
59
+
60
+ var tok = await client.CreateSignedToken({
61
+ objectId,
62
+ subject,
63
+ duration: 30 * 86400000 // 1 month
64
+ //policyId,
65
+ //context,
66
+ });
67
+ console.log(tok);
68
+ return tok;
69
+ }
70
+
71
+ GenerateEditorSignedAccessToken({objectId: argv["object-id"], subject: argv.subject});
72
+