@eluvio/elv-client-js 4.0.114 → 4.0.116

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 (129) hide show
  1. package/dist/ElvClient-min.js +68 -0
  2. package/dist/ElvClient-node-min.js +67 -0
  3. package/dist/ElvFrameClient-min.js +60 -0
  4. package/dist/ElvPermissionsClient-min.js +60 -0
  5. package/dist/ElvWalletClient-min.js +68 -0
  6. package/dist/ElvWalletClient-node-min.js +67 -0
  7. package/dist/src/AuthorizationClient.js +2166 -0
  8. package/dist/src/ContentObjectAudit.js +175 -0
  9. package/dist/src/ContentObjectVerification.js +281 -0
  10. package/dist/src/Crypto.js +412 -0
  11. package/dist/src/ElvClient.js +2063 -0
  12. package/dist/src/ElvWallet.js +247 -0
  13. package/dist/src/EthClient.js +1153 -0
  14. package/dist/src/FrameClient.js +484 -0
  15. package/dist/src/HttpClient.js +314 -0
  16. package/dist/src/Id.js +20 -0
  17. package/dist/src/LogMessage.js +25 -0
  18. package/dist/src/PermissionsClient.js +1556 -0
  19. package/dist/src/RemoteSigner.js +383 -0
  20. package/dist/src/UserProfileClient.js +1465 -0
  21. package/dist/src/Utils.js +893 -0
  22. package/dist/src/Validation.js +121 -0
  23. package/dist/src/abr_profiles/abr_profile_live_drm.js +1661 -0
  24. package/dist/src/abr_profiles/abr_profile_live_to_vod.js +1606 -0
  25. package/dist/src/client/ABRPublishing.js +1018 -0
  26. package/dist/src/client/AccessGroups.js +1503 -0
  27. package/dist/src/client/ContentAccess.js +5202 -0
  28. package/dist/src/client/ContentManagement.js +2680 -0
  29. package/dist/src/client/Contracts.js +1520 -0
  30. package/dist/src/client/Files.js +2181 -0
  31. package/dist/src/client/LiveConf.js +567 -0
  32. package/dist/src/client/LiveStream.js +2638 -0
  33. package/dist/src/client/NFT.js +162 -0
  34. package/dist/src/client/NTP.js +581 -0
  35. package/dist/src/contracts/v2/AccessIndexor.js +831 -0
  36. package/dist/src/contracts/v2/Accessible.js +31 -0
  37. package/dist/src/contracts/v2/BaseAccessControlGroup.js +1263 -0
  38. package/dist/src/contracts/v2/BaseAccessWallet.js +1609 -0
  39. package/dist/src/contracts/v2/BaseAccessWalletFactory.js +93 -0
  40. package/dist/src/contracts/v2/BaseContent.js +1076 -0
  41. package/dist/src/contracts/v2/BaseContentFactory.js +219 -0
  42. package/dist/src/contracts/v2/BaseContentSpace.js +1352 -0
  43. package/dist/src/contracts/v2/BaseContentType.js +364 -0
  44. package/dist/src/contracts/v2/BaseFactory.js +107 -0
  45. package/dist/src/contracts/v2/BaseGroupFactory.js +93 -0
  46. package/dist/src/contracts/v2/BaseLibrary.js +1041 -0
  47. package/dist/src/contracts/v2/BaseLibraryFactory.js +96 -0
  48. package/dist/src/contracts/v2/Certifyer.js +86 -0
  49. package/dist/src/contracts/v2/Container.js +540 -0
  50. package/dist/src/contracts/v2/Content.js +443 -0
  51. package/dist/src/contracts/v2/Editable.js +306 -0
  52. package/dist/src/contracts/v2/ExternalUserWallet.js +379 -0
  53. package/dist/src/contracts/v2/IFactorySpace.js +57 -0
  54. package/dist/src/contracts/v2/IKmsSpace.js +52 -0
  55. package/dist/src/contracts/v2/INodeSpace.js +18 -0
  56. package/dist/src/contracts/v2/IUserSpace.js +18 -0
  57. package/dist/src/contracts/v2/LvRecordableStream.js +1037 -0
  58. package/dist/src/contracts/v2/LvRecording.js +627 -0
  59. package/dist/src/contracts/v2/LvStreamRightsHolder.js +562 -0
  60. package/dist/src/contracts/v2/MetaObject.js +119 -0
  61. package/dist/src/contracts/v2/Node.js +167 -0
  62. package/dist/src/contracts/v2/NodeSpace.js +273 -0
  63. package/dist/src/contracts/v2/Ownable.js +87 -0
  64. package/dist/src/contracts/v2/PaymentService.js +627 -0
  65. package/dist/src/contracts/v2/Precompile.js +15 -0
  66. package/dist/src/contracts/v2/Transactable.js +82 -0
  67. package/dist/src/contracts/v2/UserSpace.js +29 -0
  68. package/dist/src/contracts/v2/Utils.js +18 -0
  69. package/dist/src/contracts/v2/Verifier.js +53 -0
  70. package/dist/src/contracts/v2/strings.js +4 -0
  71. package/dist/src/contracts/v3/AccessIndexor.js +774 -0
  72. package/dist/src/contracts/v3/Accessible.js +232 -0
  73. package/dist/src/contracts/v3/Adminable.js +107 -0
  74. package/dist/src/contracts/v3/AvailsDelivery.js +586 -0
  75. package/dist/src/contracts/v3/BaseAccessControlGroup.js +1603 -0
  76. package/dist/src/contracts/v3/BaseAccessWallet.js +1628 -0
  77. package/dist/src/contracts/v3/BaseAccessWalletFactory.js +112 -0
  78. package/dist/src/contracts/v3/BaseContent.js +1312 -0
  79. package/dist/src/contracts/v3/BaseContentFactory.js +183 -0
  80. package/dist/src/contracts/v3/BaseContentFactoryExt.js +175 -0
  81. package/dist/src/contracts/v3/BaseContentSpace.js +1515 -0
  82. package/dist/src/contracts/v3/BaseContentType.js +527 -0
  83. package/dist/src/contracts/v3/BaseFactory.js +126 -0
  84. package/dist/src/contracts/v3/BaseGroupFactory.js +112 -0
  85. package/dist/src/contracts/v3/BaseLibrary.js +1204 -0
  86. package/dist/src/contracts/v3/BaseLibraryFactory.js +115 -0
  87. package/dist/src/contracts/v3/BaseTenantSpace.js +1587 -0
  88. package/dist/src/contracts/v3/Certifyer.js +86 -0
  89. package/dist/src/contracts/v3/Container.js +739 -0
  90. package/dist/src/contracts/v3/Content.js +438 -0
  91. package/dist/src/contracts/v3/CounterObject.js +243 -0
  92. package/dist/src/contracts/v3/Editable.js +519 -0
  93. package/dist/src/contracts/v3/EncToken.js +4 -0
  94. package/dist/src/contracts/v3/ExternalUserWallet.js +587 -0
  95. package/dist/src/contracts/v3/IAdmin.js +18 -0
  96. package/dist/src/contracts/v3/IFactorySpace.js +57 -0
  97. package/dist/src/contracts/v3/IKmsSpace.js +52 -0
  98. package/dist/src/contracts/v3/INodeSpace.js +18 -0
  99. package/dist/src/contracts/v3/IUserSpace.js +32 -0
  100. package/dist/src/contracts/v3/LvRecordableStream.js +1032 -0
  101. package/dist/src/contracts/v3/LvRecording.js +650 -0
  102. package/dist/src/contracts/v3/LvStreamRightsHolder.js +557 -0
  103. package/dist/src/contracts/v3/MetaObject.js +144 -0
  104. package/dist/src/contracts/v3/Node.js +178 -0
  105. package/dist/src/contracts/v3/NodeSpace.js +284 -0
  106. package/dist/src/contracts/v3/Ownable.js +98 -0
  107. package/dist/src/contracts/v3/PaymentService.js +622 -0
  108. package/dist/src/contracts/v3/Precompile.js +26 -0
  109. package/dist/src/contracts/v3/TenantFuncsBase.js +351 -0
  110. package/dist/src/contracts/v3/Transactable.js +82 -0
  111. package/dist/src/contracts/v3/UserSpace.js +43 -0
  112. package/dist/src/contracts/v3/Utils.js +18 -0
  113. package/dist/src/contracts/v3/Verifier.js +53 -0
  114. package/dist/src/contracts/v3/strings.js +4 -0
  115. package/dist/src/contracts/v3b/BaseAccessControlGroup.js +1704 -0
  116. package/dist/src/events/Topics.js +1793 -0
  117. package/dist/src/index.js +8 -0
  118. package/dist/src/walletClient/ClientMethods.js +3102 -0
  119. package/dist/src/walletClient/Configuration.js +38 -0
  120. package/dist/src/walletClient/Notifications.js +168 -0
  121. package/dist/src/walletClient/Profile.js +332 -0
  122. package/dist/src/walletClient/Utils.js +281 -0
  123. package/dist/src/walletClient/index.js +2109 -0
  124. package/package.json +1 -1
  125. package/src/AuthorizationClient.js +24 -16
  126. package/src/ElvClient.js +19 -0
  127. package/src/client/ContentAccess.js +20 -2
  128. package/src/client/LiveConf.js +10 -8
  129. package/src/client/LiveStream.js +6 -4
@@ -0,0 +1,1465 @@
1
+ var _regeneratorRuntime = require("@babel/runtime/regenerator");
2
+ var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
3
+ var _classCallCheck = require("@babel/runtime/helpers/classCallCheck");
4
+ var _createClass = require("@babel/runtime/helpers/createClass");
5
+ var Utils = require("./Utils");
6
+ var UrlJoin = require("url-join");
7
+ var _require = require("./FrameClient"),
8
+ FrameClient = _require.FrameClient;
9
+ var _require2 = require("./LogMessage"),
10
+ LogMessage = _require2.LogMessage;
11
+ var UserProfileClient = /*#__PURE__*/function () {
12
+ "use strict";
13
+
14
+ /**
15
+ * Methods used to access and modify information about the user
16
+ *
17
+ * <h4 id="PromptsAndAccessLevels">A note about access level and prompts: </h4>
18
+ *
19
+ * Note: This section only applies to applications working within Eluvio Core
20
+ *
21
+ * Users can choose whether or not their info is shared to applications. A user
22
+ * may choose to allow open access to their profile, no access to their profile, or
23
+ * they may choose to be prompted to give access when an application requests it. The
24
+ * user's access level can be determined using the <a href="#AccessLevel">AccessLevel</a>
25
+ * method.
26
+ *
27
+ * By default, users will be prompted to give access. For methods that access the user's private information,
28
+ * Eluvio Core will intercept the request and prompt the user for permission before proceeding. In
29
+ * these cases, the normal FrameClient timeout period will be ignored, and the response will come
30
+ * only after the user accepts or rejects the request.
31
+ *
32
+ * Access and modification of user metadata is namespaced to the requesting application when using the
33
+ * FrameClient. Public user metadata can be accessed using the PublicUserMetadata method.
34
+ *
35
+ * If the user refuses to give permission, an error will be thrown. Otherwise, the request will proceed
36
+ * as normal.
37
+ *
38
+ * <h4>Usage</h4>
39
+ *
40
+ * Access the UserProfileClient from ElvClient or FrameClient via client.userProfileClient
41
+ *
42
+ * @example
43
+ let client = ElvClient.FromConfiguration({configuration: ClientConfiguration});
44
+ let wallet = client.GenerateWallet();
45
+ let signer = wallet.AddAccount({
46
+ accountName: "Alice",
47
+ privateKey: "0x0000000000000000000000000000000000000000000000000000000000000000"
48
+ });
49
+ client.SetSigner({signer});
50
+ await client.userProfileClient.UserMetadata()
51
+ let frameClient = new FrameClient();
52
+ await client.userProfileClient.UserMetadata()
53
+ *
54
+ */
55
+ function UserProfileClient(_ref) {
56
+ var client = _ref.client,
57
+ debug = _ref.debug;
58
+ _classCallCheck(this, UserProfileClient);
59
+ this.client = client;
60
+ this.debug = debug;
61
+ this.userWalletAddresses = {};
62
+ this.walletAddress = undefined;
63
+ this.walletAddressRetrieved = false;
64
+ }
65
+ return _createClass(UserProfileClient, [{
66
+ key: "Log",
67
+ value: function Log(message) {
68
+ var error = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
69
+ LogMessage(this, message, error);
70
+ }
71
+ }, {
72
+ key: "CreateWallet",
73
+ value: function () {
74
+ var _CreateWallet = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
75
+ var balance, walletCreationEvent, abi, libraryId, objectId, createResponse;
76
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
77
+ while (1) switch (_context.prev = _context.next) {
78
+ case 0:
79
+ if (!this.creatingWallet) {
80
+ _context.next = 6;
81
+ break;
82
+ }
83
+ case 1:
84
+ if (!this.creatingWallet) {
85
+ _context.next = 6;
86
+ break;
87
+ }
88
+ _context.next = 4;
89
+ return new Promise(function (resolve) {
90
+ return setTimeout(resolve, 500);
91
+ });
92
+ case 4:
93
+ _context.next = 1;
94
+ break;
95
+ case 6:
96
+ this.creatingWallet = true;
97
+ _context.prev = 7;
98
+ if (!(!this.walletAddress || Utils.EqualAddress(this.walletAddress, Utils.nullAddress))) {
99
+ _context.next = 23;
100
+ break;
101
+ }
102
+ this.Log("Creating user wallet for user ".concat(this.client.signer.address));
103
+
104
+ // Don't attempt to create a user wallet if user has no funds
105
+ _context.next = 12;
106
+ return this.client.GetBalance({
107
+ address: this.client.signer.address
108
+ });
109
+ case 12:
110
+ balance = _context.sent;
111
+ if (!(balance < 0.05)) {
112
+ _context.next = 15;
113
+ break;
114
+ }
115
+ return _context.abrupt("return", undefined);
116
+ case 15:
117
+ _context.next = 17;
118
+ return this.client.CallContractMethodAndWait({
119
+ contractAddress: Utils.HashToAddress(this.client.contentSpaceId),
120
+ methodName: "createAccessWallet",
121
+ methodArgs: []
122
+ });
123
+ case 17:
124
+ walletCreationEvent = _context.sent;
125
+ _context.next = 20;
126
+ return this.client.ContractAbi({
127
+ contractAddress: this.client.contentSpaceAddress
128
+ });
129
+ case 20:
130
+ abi = _context.sent;
131
+ this.walletAddress = this.client.ExtractValueFromEvent({
132
+ abi: abi,
133
+ event: walletCreationEvent,
134
+ eventName: "CreateAccessWallet",
135
+ eventValue: "wallet"
136
+ });
137
+ this.userWalletAddresses[Utils.FormatAddress(this.client.signer.address)] = this.walletAddress;
138
+ case 23:
139
+ // Check if wallet object is created
140
+ libraryId = this.client.contentSpaceLibraryId;
141
+ objectId = Utils.AddressToObjectId(this.walletAddress);
142
+ _context.prev = 25;
143
+ _context.next = 28;
144
+ return this.client.ContentObject({
145
+ libraryId: libraryId,
146
+ objectId: objectId
147
+ });
148
+ case 28:
149
+ _context.next = 39;
150
+ break;
151
+ case 30:
152
+ _context.prev = 30;
153
+ _context.t0 = _context["catch"](25);
154
+ if (!(_context.t0.status === 404)) {
155
+ _context.next = 39;
156
+ break;
157
+ }
158
+ this.Log("Creating wallet object for user ".concat(this.client.signer.address));
159
+ _context.next = 36;
160
+ return this.client.CreateContentObject({
161
+ libraryId: libraryId,
162
+ objectId: objectId
163
+ });
164
+ case 36:
165
+ createResponse = _context.sent;
166
+ _context.next = 39;
167
+ return this.client.FinalizeContentObject({
168
+ libraryId: libraryId,
169
+ objectId: objectId,
170
+ writeToken: createResponse.write_token,
171
+ commitMessage: "Create user wallet object"
172
+ });
173
+ case 39:
174
+ _context.next = 45;
175
+ break;
176
+ case 41:
177
+ _context.prev = 41;
178
+ _context.t1 = _context["catch"](7);
179
+ // eslint-disable-next-line no-console
180
+ console.error("Failed to create wallet contract:");
181
+ // eslint-disable-next-line no-console
182
+ console.error(_context.t1);
183
+ case 45:
184
+ _context.prev = 45;
185
+ this.creatingWallet = false;
186
+ return _context.finish(45);
187
+ case 48:
188
+ case "end":
189
+ return _context.stop();
190
+ }
191
+ }, _callee, this, [[7, 41, 45, 48], [25, 30]]);
192
+ }));
193
+ function CreateWallet() {
194
+ return _CreateWallet.apply(this, arguments);
195
+ }
196
+ return CreateWallet;
197
+ }()
198
+ /**
199
+ * Get the contract address of the current user's BaseAccessWallet contract
200
+ *
201
+ * @return {Promise<string>} - The contract address of the current user's wallet contract
202
+ */
203
+ }, {
204
+ key: "WalletAddress",
205
+ value: (function () {
206
+ var _WalletAddress = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
207
+ var autoCreate,
208
+ walletAddress,
209
+ _args2 = arguments;
210
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
211
+ while (1) switch (_context2.prev = _context2.next) {
212
+ case 0:
213
+ autoCreate = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : true;
214
+ if (!(this.walletAddress || this.walletAddressRetrieved)) {
215
+ _context2.next = 3;
216
+ break;
217
+ }
218
+ return _context2.abrupt("return", this.walletAddress);
219
+ case 3:
220
+ if (!this.walletAddressPromise) {
221
+ this.walletAddressPromise = this.client.CallContractMethod({
222
+ contractAddress: Utils.HashToAddress(this.client.contentSpaceId),
223
+ methodName: "userWallets",
224
+ methodArgs: [this.client.signer.address]
225
+ });
226
+ }
227
+ _context2.next = 6;
228
+ return this.walletAddressPromise;
229
+ case 6:
230
+ walletAddress = _context2.sent;
231
+ if (!Utils.EqualAddress(walletAddress, Utils.nullAddress)) {
232
+ this.walletAddress = walletAddress;
233
+ }
234
+ if (!(!this.walletAddress && autoCreate)) {
235
+ _context2.next = 11;
236
+ break;
237
+ }
238
+ _context2.next = 11;
239
+ return this.CreateWallet();
240
+ case 11:
241
+ this.walletAddressRetrieved = true;
242
+ return _context2.abrupt("return", this.walletAddress);
243
+ case 13:
244
+ case "end":
245
+ return _context2.stop();
246
+ }
247
+ }, _callee2, this);
248
+ }));
249
+ function WalletAddress() {
250
+ return _WalletAddress.apply(this, arguments);
251
+ }
252
+ return WalletAddress;
253
+ }()
254
+ /**
255
+ * Get the user wallet address for the specified user, if it exists
256
+ *
257
+ * @namedParams
258
+ * @param {string} address - The address of the user
259
+ *
260
+ * @return {Promise<string>} - The wallet address of the specified user, if it exists
261
+ */
262
+ )
263
+ }, {
264
+ key: "UserWalletAddress",
265
+ value: (function () {
266
+ var _UserWalletAddress = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(_ref2) {
267
+ var address, walletAddress;
268
+ return _regeneratorRuntime.wrap(function _callee3$(_context3) {
269
+ while (1) switch (_context3.prev = _context3.next) {
270
+ case 0:
271
+ address = _ref2.address;
272
+ if (!Utils.EqualAddress(address, this.client.signer.address)) {
273
+ _context3.next = 5;
274
+ break;
275
+ }
276
+ _context3.next = 4;
277
+ return this.WalletAddress();
278
+ case 4:
279
+ return _context3.abrupt("return", _context3.sent);
280
+ case 5:
281
+ if (this.userWalletAddresses[address]) {
282
+ _context3.next = 11;
283
+ break;
284
+ }
285
+ this.Log("Retrieving user wallet address for user ".concat(address));
286
+ _context3.next = 9;
287
+ return this.client.CallContractMethod({
288
+ contractAddress: Utils.HashToAddress(this.client.contentSpaceId),
289
+ methodName: "userWallets",
290
+ methodArgs: [address]
291
+ });
292
+ case 9:
293
+ walletAddress = _context3.sent;
294
+ if (!Utils.EqualAddress(walletAddress, Utils.nullAddress)) {
295
+ this.userWalletAddresses[address] = walletAddress;
296
+ }
297
+ case 11:
298
+ return _context3.abrupt("return", this.userWalletAddresses[address]);
299
+ case 12:
300
+ case "end":
301
+ return _context3.stop();
302
+ }
303
+ }, _callee3, this);
304
+ }));
305
+ function UserWalletAddress(_x) {
306
+ return _UserWalletAddress.apply(this, arguments);
307
+ }
308
+ return UserWalletAddress;
309
+ }()
310
+ /**
311
+ * Retrieve the user wallet object information (library ID and object ID)
312
+ *
313
+ * The user's wallet can be modified in the same way as any other object, using
314
+ * EditContentObject to get a write token, modification methods to change it,
315
+ * and FinalizeContentObject to finalize the draft
316
+ *
317
+ * @return {Promise<{Object}>} - An object containing the libraryId and objectId for the wallet object.
318
+ */
319
+ )
320
+ }, {
321
+ key: "UserWalletObjectInfo",
322
+ value: (function () {
323
+ var _UserWalletObjectInfo = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
324
+ var _ref3,
325
+ address,
326
+ walletAddress,
327
+ _args4 = arguments;
328
+ return _regeneratorRuntime.wrap(function _callee4$(_context4) {
329
+ while (1) switch (_context4.prev = _context4.next) {
330
+ case 0:
331
+ _ref3 = _args4.length > 0 && _args4[0] !== undefined ? _args4[0] : {}, address = _ref3.address;
332
+ if (!address) {
333
+ _context4.next = 7;
334
+ break;
335
+ }
336
+ _context4.next = 4;
337
+ return this.UserWalletAddress({
338
+ address: address
339
+ });
340
+ case 4:
341
+ _context4.t0 = _context4.sent;
342
+ _context4.next = 10;
343
+ break;
344
+ case 7:
345
+ _context4.next = 9;
346
+ return this.WalletAddress();
347
+ case 9:
348
+ _context4.t0 = _context4.sent;
349
+ case 10:
350
+ walletAddress = _context4.t0;
351
+ return _context4.abrupt("return", {
352
+ libraryId: this.client.contentSpaceLibraryId,
353
+ objectId: walletAddress ? Utils.AddressToObjectId(walletAddress) : ""
354
+ });
355
+ case 12:
356
+ case "end":
357
+ return _context4.stop();
358
+ }
359
+ }, _callee4, this);
360
+ }));
361
+ function UserWalletObjectInfo() {
362
+ return _UserWalletObjectInfo.apply(this, arguments);
363
+ }
364
+ return UserWalletObjectInfo;
365
+ }()
366
+ /**
367
+ * Access the specified user's public profile metadata
368
+ *
369
+ * @namedParams
370
+ * @param {string=} address - The address of the user
371
+ * @param {string=} metadataSubtree - Subtree of the metadata to retrieve
372
+ * @param {Object=} queryParams={} - Additional query params for the call
373
+ * @param {Array<string>=} select - Limit the returned metadata to the specified attributes
374
+ * - Note: Selection is relative to "metadataSubtree". For example, metadataSubtree="public" and select=["name", "description"] would select "public/name" and "public/description"
375
+ * @param {boolean=} resolveLinks=false - If specified, links in the metadata will be resolved
376
+ * @param {boolean=} resolveIncludeSource=false - If specified, resolved links will include the hash of the link at the root of the metadata
377
+ Example:
378
+ {
379
+ "resolved-link": {
380
+ ".": {
381
+ "source": "hq__HPXNia6UtXyuUr6G3Lih8PyUhvYYHuyLTt3i7qSfYgYBB7sF1suR7ky7YRXsUARUrTB1Um1x5a"
382
+ },
383
+ "public": {
384
+ "name": "My Linked Object",
385
+ }
386
+ ...
387
+ }
388
+ }
389
+ * @param {boolean=} resolveIgnoreErrors=false - If specified, link errors within the requested metadata will not cause the entire response to result in an error
390
+ * @param {number=} linkDepthLimit=1 - Limit link resolution to the specified depth. Default link depth is 1 (only links directly in the object's metadata will be resolved)
391
+ *
392
+ * @return {Promise<Object|string>}
393
+ */
394
+ )
395
+ }, {
396
+ key: "PublicUserMetadata",
397
+ value: (function () {
398
+ var _PublicUserMetadata = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(_ref4) {
399
+ var address, _ref4$metadataSubtree, metadataSubtree, _ref4$queryParams, queryParams, _ref4$select, select, _ref4$resolveLinks, resolveLinks, _ref4$resolveIncludeS, resolveIncludeSource, _ref4$resolveIgnoreEr, resolveIgnoreErrors, _ref4$linkDepthLimit, linkDepthLimit, walletAddress, _yield$this$UserWalle, libraryId, objectId;
400
+ return _regeneratorRuntime.wrap(function _callee5$(_context5) {
401
+ while (1) switch (_context5.prev = _context5.next) {
402
+ case 0:
403
+ address = _ref4.address, _ref4$metadataSubtree = _ref4.metadataSubtree, metadataSubtree = _ref4$metadataSubtree === void 0 ? "/" : _ref4$metadataSubtree, _ref4$queryParams = _ref4.queryParams, queryParams = _ref4$queryParams === void 0 ? {} : _ref4$queryParams, _ref4$select = _ref4.select, select = _ref4$select === void 0 ? [] : _ref4$select, _ref4$resolveLinks = _ref4.resolveLinks, resolveLinks = _ref4$resolveLinks === void 0 ? false : _ref4$resolveLinks, _ref4$resolveIncludeS = _ref4.resolveIncludeSource, resolveIncludeSource = _ref4$resolveIncludeS === void 0 ? false : _ref4$resolveIncludeS, _ref4$resolveIgnoreEr = _ref4.resolveIgnoreErrors, resolveIgnoreErrors = _ref4$resolveIgnoreEr === void 0 ? false : _ref4$resolveIgnoreEr, _ref4$linkDepthLimit = _ref4.linkDepthLimit, linkDepthLimit = _ref4$linkDepthLimit === void 0 ? 1 : _ref4$linkDepthLimit;
404
+ if (address) {
405
+ _context5.next = 3;
406
+ break;
407
+ }
408
+ return _context5.abrupt("return");
409
+ case 3:
410
+ _context5.next = 5;
411
+ return this.UserWalletAddress({
412
+ address: address
413
+ });
414
+ case 5:
415
+ walletAddress = _context5.sent;
416
+ if (walletAddress) {
417
+ _context5.next = 8;
418
+ break;
419
+ }
420
+ return _context5.abrupt("return");
421
+ case 8:
422
+ metadataSubtree = UrlJoin("public", metadataSubtree || "/");
423
+ _context5.next = 11;
424
+ return this.UserWalletObjectInfo({
425
+ address: address
426
+ });
427
+ case 11:
428
+ _yield$this$UserWalle = _context5.sent;
429
+ libraryId = _yield$this$UserWalle.libraryId;
430
+ objectId = _yield$this$UserWalle.objectId;
431
+ if (objectId) {
432
+ _context5.next = 16;
433
+ break;
434
+ }
435
+ return _context5.abrupt("return");
436
+ case 16:
437
+ _context5.next = 18;
438
+ return this.client.ContentObjectMetadata({
439
+ libraryId: libraryId,
440
+ objectId: objectId,
441
+ queryParams: queryParams,
442
+ select: select,
443
+ metadataSubtree: metadataSubtree,
444
+ resolveLinks: resolveLinks,
445
+ resolveIncludeSource: resolveIncludeSource,
446
+ resolveIgnoreErrors: resolveIgnoreErrors,
447
+ linkDepthLimit: linkDepthLimit
448
+ });
449
+ case 18:
450
+ return _context5.abrupt("return", _context5.sent);
451
+ case 19:
452
+ case "end":
453
+ return _context5.stop();
454
+ }
455
+ }, _callee5, this);
456
+ }));
457
+ function PublicUserMetadata(_x2) {
458
+ return _PublicUserMetadata.apply(this, arguments);
459
+ }
460
+ return PublicUserMetadata;
461
+ }()
462
+ /**
463
+ * Access the current user's metadata
464
+ *
465
+ * Note: Subject to user's access level
466
+ *
467
+ * @see <a href="#PromptsAndAccessLevels">Prompts and access levels</a>
468
+ *
469
+ * @namedParams
470
+ * @param {string=} metadataSubtree - Subtree of the metadata to retrieve
471
+ * @param {Object=} queryParams={} - Additional query params for the call
472
+ * @param {Array<string>=} select - Limit the returned metadata to the specified attributes
473
+ * - Note: Selection is relative to "metadataSubtree". For example, metadataSubtree="public" and select=["name", "description"] would select "public/name" and "public/description"
474
+ * @param {boolean=} resolveLinks=false - If specified, links in the metadata will be resolved
475
+ * @param {boolean=} resolveIncludeSource=false - If specified, resolved links will include the hash of the link at the root of the metadata
476
+ Example:
477
+ {
478
+ "resolved-link": {
479
+ ".": {
480
+ "source": "hq__HPXNia6UtXyuUr6G3Lih8PyUhvYYHuyLTt3i7qSfYgYBB7sF1suR7ky7YRXsUARUrTB1Um1x5a"
481
+ },
482
+ "public": {
483
+ "name": "My Linked Object",
484
+ }
485
+ ...
486
+ }
487
+ }
488
+ * @param {boolean=} resolveIgnoreErrors=false - If specified, link errors within the requested metadata will not cause the entire response to result in an error
489
+ * @param {number=} linkDepthLimit=1 - Limit link resolution to the specified depth. Default link depth is 1 (only links directly in the object's metadata will be resolved)
490
+ *
491
+ * @return {Promise<Object|string>} - The user's profile metadata - returns undefined if no metadata set or subtree doesn't exist
492
+ */
493
+ )
494
+ }, {
495
+ key: "UserMetadata",
496
+ value: (function () {
497
+ var _UserMetadata = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
498
+ var _ref5,
499
+ _ref5$metadataSubtree,
500
+ metadataSubtree,
501
+ _ref5$queryParams,
502
+ queryParams,
503
+ _ref5$select,
504
+ select,
505
+ _ref5$resolveLinks,
506
+ resolveLinks,
507
+ _ref5$resolveIncludeS,
508
+ resolveIncludeSource,
509
+ _ref5$resolveIgnoreEr,
510
+ resolveIgnoreErrors,
511
+ _ref5$linkDepthLimit,
512
+ linkDepthLimit,
513
+ _yield$this$UserWalle2,
514
+ libraryId,
515
+ objectId,
516
+ _args6 = arguments;
517
+ return _regeneratorRuntime.wrap(function _callee6$(_context6) {
518
+ while (1) switch (_context6.prev = _context6.next) {
519
+ case 0:
520
+ _ref5 = _args6.length > 0 && _args6[0] !== undefined ? _args6[0] : {}, _ref5$metadataSubtree = _ref5.metadataSubtree, metadataSubtree = _ref5$metadataSubtree === void 0 ? "/" : _ref5$metadataSubtree, _ref5$queryParams = _ref5.queryParams, queryParams = _ref5$queryParams === void 0 ? {} : _ref5$queryParams, _ref5$select = _ref5.select, select = _ref5$select === void 0 ? [] : _ref5$select, _ref5$resolveLinks = _ref5.resolveLinks, resolveLinks = _ref5$resolveLinks === void 0 ? false : _ref5$resolveLinks, _ref5$resolveIncludeS = _ref5.resolveIncludeSource, resolveIncludeSource = _ref5$resolveIncludeS === void 0 ? false : _ref5$resolveIncludeS, _ref5$resolveIgnoreEr = _ref5.resolveIgnoreErrors, resolveIgnoreErrors = _ref5$resolveIgnoreEr === void 0 ? false : _ref5$resolveIgnoreEr, _ref5$linkDepthLimit = _ref5.linkDepthLimit, linkDepthLimit = _ref5$linkDepthLimit === void 0 ? 1 : _ref5$linkDepthLimit;
521
+ this.Log("Accessing private user metadata at ".concat(metadataSubtree));
522
+ _context6.next = 4;
523
+ return this.UserWalletObjectInfo();
524
+ case 4:
525
+ _yield$this$UserWalle2 = _context6.sent;
526
+ libraryId = _yield$this$UserWalle2.libraryId;
527
+ objectId = _yield$this$UserWalle2.objectId;
528
+ _context6.next = 9;
529
+ return this.client.ContentObjectMetadata({
530
+ libraryId: libraryId,
531
+ objectId: objectId,
532
+ metadataSubtree: metadataSubtree,
533
+ queryParams: queryParams,
534
+ select: select,
535
+ resolveLinks: resolveLinks,
536
+ resolveIncludeSource: resolveIncludeSource,
537
+ resolveIgnoreErrors: resolveIgnoreErrors,
538
+ linkDepthLimit: linkDepthLimit
539
+ });
540
+ case 9:
541
+ return _context6.abrupt("return", _context6.sent);
542
+ case 10:
543
+ case "end":
544
+ return _context6.stop();
545
+ }
546
+ }, _callee6, this);
547
+ }));
548
+ function UserMetadata() {
549
+ return _UserMetadata.apply(this, arguments);
550
+ }
551
+ return UserMetadata;
552
+ }()
553
+ /**
554
+ * Merge the current user's profile metadata
555
+ *
556
+ * @namedParams
557
+ * @param {Object} metadata - New metadata
558
+ * @param {string=} metadataSubtree - Subtree to merge into - modifies root metadata if not specified
559
+ */
560
+ )
561
+ }, {
562
+ key: "MergeUserMetadata",
563
+ value: (function () {
564
+ var _MergeUserMetadata = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee7(_ref6) {
565
+ var _ref6$metadataSubtree, metadataSubtree, _ref6$metadata, metadata, _yield$this$UserWalle3, libraryId, objectId, editRequest;
566
+ return _regeneratorRuntime.wrap(function _callee7$(_context7) {
567
+ while (1) switch (_context7.prev = _context7.next) {
568
+ case 0:
569
+ _ref6$metadataSubtree = _ref6.metadataSubtree, metadataSubtree = _ref6$metadataSubtree === void 0 ? "/" : _ref6$metadataSubtree, _ref6$metadata = _ref6.metadata, metadata = _ref6$metadata === void 0 ? {} : _ref6$metadata;
570
+ this.Log("Merging user metadata at ".concat(metadataSubtree));
571
+ _context7.next = 4;
572
+ return this.UserWalletObjectInfo();
573
+ case 4:
574
+ _yield$this$UserWalle3 = _context7.sent;
575
+ libraryId = _yield$this$UserWalle3.libraryId;
576
+ objectId = _yield$this$UserWalle3.objectId;
577
+ _context7.next = 9;
578
+ return this.client.EditContentObject({
579
+ libraryId: libraryId,
580
+ objectId: objectId
581
+ });
582
+ case 9:
583
+ editRequest = _context7.sent;
584
+ _context7.next = 12;
585
+ return this.client.MergeMetadata({
586
+ libraryId: libraryId,
587
+ objectId: objectId,
588
+ writeToken: editRequest.write_token,
589
+ metadataSubtree: metadataSubtree,
590
+ metadata: metadata
591
+ });
592
+ case 12:
593
+ _context7.next = 14;
594
+ return this.client.FinalizeContentObject({
595
+ libraryId: libraryId,
596
+ objectId: objectId,
597
+ writeToken: editRequest.write_token,
598
+ commitMessage: "Merge user metadata"
599
+ });
600
+ case 14:
601
+ case "end":
602
+ return _context7.stop();
603
+ }
604
+ }, _callee7, this);
605
+ }));
606
+ function MergeUserMetadata(_x3) {
607
+ return _MergeUserMetadata.apply(this, arguments);
608
+ }
609
+ return MergeUserMetadata;
610
+ }()
611
+ /**
612
+ * Replace the current user's profile metadata
613
+ *
614
+ * @namedParams
615
+ * @param {Object} metadata - New metadata
616
+ * @param {string=} metadataSubtree - Subtree to replace - modifies root metadata if not specified
617
+ */
618
+ )
619
+ }, {
620
+ key: "ReplaceUserMetadata",
621
+ value: (function () {
622
+ var _ReplaceUserMetadata = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee8(_ref7) {
623
+ var _ref7$metadataSubtree, metadataSubtree, _ref7$metadata, metadata, _yield$this$UserWalle4, libraryId, objectId, editRequest;
624
+ return _regeneratorRuntime.wrap(function _callee8$(_context8) {
625
+ while (1) switch (_context8.prev = _context8.next) {
626
+ case 0:
627
+ _ref7$metadataSubtree = _ref7.metadataSubtree, metadataSubtree = _ref7$metadataSubtree === void 0 ? "/" : _ref7$metadataSubtree, _ref7$metadata = _ref7.metadata, metadata = _ref7$metadata === void 0 ? {} : _ref7$metadata;
628
+ this.Log("Replacing user metadata at ".concat(metadataSubtree));
629
+ _context8.next = 4;
630
+ return this.UserWalletObjectInfo();
631
+ case 4:
632
+ _yield$this$UserWalle4 = _context8.sent;
633
+ libraryId = _yield$this$UserWalle4.libraryId;
634
+ objectId = _yield$this$UserWalle4.objectId;
635
+ _context8.next = 9;
636
+ return this.client.EditContentObject({
637
+ libraryId: libraryId,
638
+ objectId: objectId
639
+ });
640
+ case 9:
641
+ editRequest = _context8.sent;
642
+ _context8.next = 12;
643
+ return this.client.ReplaceMetadata({
644
+ libraryId: libraryId,
645
+ objectId: objectId,
646
+ writeToken: editRequest.write_token,
647
+ metadataSubtree: metadataSubtree,
648
+ metadata: metadata
649
+ });
650
+ case 12:
651
+ _context8.next = 14;
652
+ return this.client.FinalizeContentObject({
653
+ libraryId: libraryId,
654
+ objectId: objectId,
655
+ writeToken: editRequest.write_token,
656
+ commitMessage: "Replace user metadata"
657
+ });
658
+ case 14:
659
+ case "end":
660
+ return _context8.stop();
661
+ }
662
+ }, _callee8, this);
663
+ }));
664
+ function ReplaceUserMetadata(_x4) {
665
+ return _ReplaceUserMetadata.apply(this, arguments);
666
+ }
667
+ return ReplaceUserMetadata;
668
+ }()
669
+ /**
670
+ * Delete the specified subtree from the users profile metadata
671
+ *
672
+ * @namedParams
673
+ * @param {string=} metadataSubtree - Subtree to delete - deletes all metadata if not specified
674
+ */
675
+ )
676
+ }, {
677
+ key: "DeleteUserMetadata",
678
+ value: (function () {
679
+ var _DeleteUserMetadata = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee9(_ref8) {
680
+ var _ref8$metadataSubtree, metadataSubtree, _yield$this$UserWalle5, libraryId, objectId, editRequest;
681
+ return _regeneratorRuntime.wrap(function _callee9$(_context9) {
682
+ while (1) switch (_context9.prev = _context9.next) {
683
+ case 0:
684
+ _ref8$metadataSubtree = _ref8.metadataSubtree, metadataSubtree = _ref8$metadataSubtree === void 0 ? "/" : _ref8$metadataSubtree;
685
+ this.Log("Deleting user metadata at ".concat(metadataSubtree));
686
+ _context9.next = 4;
687
+ return this.UserWalletObjectInfo();
688
+ case 4:
689
+ _yield$this$UserWalle5 = _context9.sent;
690
+ libraryId = _yield$this$UserWalle5.libraryId;
691
+ objectId = _yield$this$UserWalle5.objectId;
692
+ _context9.next = 9;
693
+ return this.client.EditContentObject({
694
+ libraryId: libraryId,
695
+ objectId: objectId
696
+ });
697
+ case 9:
698
+ editRequest = _context9.sent;
699
+ _context9.next = 12;
700
+ return this.client.DeleteMetadata({
701
+ libraryId: libraryId,
702
+ objectId: objectId,
703
+ writeToken: editRequest.write_token,
704
+ metadataSubtree: metadataSubtree
705
+ });
706
+ case 12:
707
+ _context9.next = 14;
708
+ return this.client.FinalizeContentObject({
709
+ libraryId: libraryId,
710
+ objectId: objectId,
711
+ writeToken: editRequest.write_token,
712
+ commitMessage: "Delete user metadata"
713
+ });
714
+ case 14:
715
+ case "end":
716
+ return _context9.stop();
717
+ }
718
+ }, _callee9, this);
719
+ }));
720
+ function DeleteUserMetadata(_x5) {
721
+ return _DeleteUserMetadata.apply(this, arguments);
722
+ }
723
+ return DeleteUserMetadata;
724
+ }()
725
+ /**
726
+ * Return the permissions the current user allows for apps to access their profile.
727
+ *
728
+ * "private" - No access allowed
729
+ * "prompt" - (default) - When access is requested by an app, the user will be prompted to give permission
730
+ * "public - Public - Any access allowed
731
+ *
732
+ * @return {Promise<string>} - Access setting
733
+ */
734
+ )
735
+ }, {
736
+ key: "AccessLevel",
737
+ value: (function () {
738
+ var _AccessLevel = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee10() {
739
+ return _regeneratorRuntime.wrap(function _callee10$(_context10) {
740
+ while (1) switch (_context10.prev = _context10.next) {
741
+ case 0:
742
+ _context10.next = 2;
743
+ return this.UserMetadata({
744
+ metadataSubtree: "access_level"
745
+ });
746
+ case 2:
747
+ _context10.t0 = _context10.sent;
748
+ if (_context10.t0) {
749
+ _context10.next = 5;
750
+ break;
751
+ }
752
+ _context10.t0 = "prompt";
753
+ case 5:
754
+ return _context10.abrupt("return", _context10.t0);
755
+ case 6:
756
+ case "end":
757
+ return _context10.stop();
758
+ }
759
+ }, _callee10, this);
760
+ }));
761
+ function AccessLevel() {
762
+ return _AccessLevel.apply(this, arguments);
763
+ }
764
+ return AccessLevel;
765
+ }()
766
+ /**
767
+ * Set the current user's access level.
768
+ *
769
+ * Note: This method is not accessible to applications. Eluvio core will drop the request.
770
+ *
771
+ * @namedParams
772
+ * @param level
773
+ */
774
+ )
775
+ }, {
776
+ key: "SetAccessLevel",
777
+ value: (function () {
778
+ var _SetAccessLevel = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee11(_ref9) {
779
+ var level;
780
+ return _regeneratorRuntime.wrap(function _callee11$(_context11) {
781
+ while (1) switch (_context11.prev = _context11.next) {
782
+ case 0:
783
+ level = _ref9.level;
784
+ level = level.toLowerCase();
785
+ if (["private", "prompt", "public"].includes(level)) {
786
+ _context11.next = 4;
787
+ break;
788
+ }
789
+ throw new Error("Invalid access level: " + level);
790
+ case 4:
791
+ _context11.next = 6;
792
+ return this.ReplaceUserMetadata({
793
+ metadataSubtree: "access_level",
794
+ metadata: level
795
+ });
796
+ case 6:
797
+ case "end":
798
+ return _context11.stop();
799
+ }
800
+ }, _callee11, this);
801
+ }));
802
+ function SetAccessLevel(_x6) {
803
+ return _SetAccessLevel.apply(this, arguments);
804
+ }
805
+ return SetAccessLevel;
806
+ }()
807
+ /**
808
+ * Return the ID of the tenant admin group set for current user
809
+ *
810
+ * @return {Promise<string>} - Tenant ID
811
+ */
812
+ )
813
+ }, {
814
+ key: "TenantId",
815
+ value: (function () {
816
+ var _TenantId = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee12() {
817
+ var _yield$this$UserWalle6, objectId;
818
+ return _regeneratorRuntime.wrap(function _callee12$(_context12) {
819
+ while (1) switch (_context12.prev = _context12.next) {
820
+ case 0:
821
+ if (this.tenantId) {
822
+ _context12.next = 8;
823
+ break;
824
+ }
825
+ _context12.next = 3;
826
+ return this.UserWalletObjectInfo();
827
+ case 3:
828
+ _yield$this$UserWalle6 = _context12.sent;
829
+ objectId = _yield$this$UserWalle6.objectId;
830
+ _context12.next = 7;
831
+ return this.client.TenantId({
832
+ objectId: objectId
833
+ });
834
+ case 7:
835
+ this.tenantId = _context12.sent;
836
+ case 8:
837
+ return _context12.abrupt("return", this.tenantId);
838
+ case 9:
839
+ case "end":
840
+ return _context12.stop();
841
+ }
842
+ }, _callee12, this);
843
+ }));
844
+ function TenantId() {
845
+ return _TenantId.apply(this, arguments);
846
+ }
847
+ return TenantId;
848
+ }()
849
+ /**
850
+ * Set the current user's tenant admin group ID
851
+ *
852
+ * Note: This method is not accessible to applications. Eluvio core will drop the request.
853
+ *
854
+ * @namedParams
855
+ * @param {string} id - The tenant ID in hash format
856
+ * @param {string} address - The group address to use in the hash if id is not provided
857
+ */
858
+ )
859
+ }, {
860
+ key: "SetTenantId",
861
+ value: (function () {
862
+ var _SetTenantId = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee13(_ref10) {
863
+ var id, address, _yield$this$UserWalle7, objectId, tenantInfo;
864
+ return _regeneratorRuntime.wrap(function _callee13$(_context13) {
865
+ while (1) switch (_context13.prev = _context13.next) {
866
+ case 0:
867
+ id = _ref10.id, address = _ref10.address;
868
+ if (!(id && (!id.startsWith("iten") || !Utils.ValidHash(id)))) {
869
+ _context13.next = 3;
870
+ break;
871
+ }
872
+ throw Error("Invalid tenant ID: ".concat(id));
873
+ case 3:
874
+ if (!address) {
875
+ _context13.next = 7;
876
+ break;
877
+ }
878
+ if (Utils.ValidAddress(address)) {
879
+ _context13.next = 6;
880
+ break;
881
+ }
882
+ throw Error("Invalid address: ".concat(address));
883
+ case 6:
884
+ id = "iten".concat(Utils.AddressToHash(address));
885
+ case 7:
886
+ _context13.next = 9;
887
+ return this.UserWalletObjectInfo();
888
+ case 9:
889
+ _yield$this$UserWalle7 = _context13.sent;
890
+ objectId = _yield$this$UserWalle7.objectId;
891
+ _context13.next = 13;
892
+ return this.client.SetTenantId({
893
+ objectId: objectId,
894
+ tenantId: id
895
+ });
896
+ case 13:
897
+ tenantInfo = _context13.sent;
898
+ this.tenantContractId = tenantInfo.tenantContractId;
899
+ this.tenantId = tenantInfo.tenantId;
900
+ case 16:
901
+ case "end":
902
+ return _context13.stop();
903
+ }
904
+ }, _callee13, this);
905
+ }));
906
+ function SetTenantId(_x7) {
907
+ return _SetTenantId.apply(this, arguments);
908
+ }
909
+ return SetTenantId;
910
+ }()
911
+ /**
912
+ * Return the ID of the tenant contract this user belongs to, if set.
913
+ *
914
+ * @return {Promise<string>} - Tenant Contract ID
915
+ */
916
+ )
917
+ }, {
918
+ key: "TenantContractId",
919
+ value: (function () {
920
+ var _TenantContractId = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee14() {
921
+ var _yield$this$UserWalle8, objectId;
922
+ return _regeneratorRuntime.wrap(function _callee14$(_context14) {
923
+ while (1) switch (_context14.prev = _context14.next) {
924
+ case 0:
925
+ if (this.tenantContractId) {
926
+ _context14.next = 8;
927
+ break;
928
+ }
929
+ _context14.next = 3;
930
+ return this.UserWalletObjectInfo();
931
+ case 3:
932
+ _yield$this$UserWalle8 = _context14.sent;
933
+ objectId = _yield$this$UserWalle8.objectId;
934
+ _context14.next = 7;
935
+ return this.client.TenantContractId({
936
+ objectId: objectId
937
+ });
938
+ case 7:
939
+ this.tenantContractId = _context14.sent;
940
+ case 8:
941
+ return _context14.abrupt("return", this.tenantContractId);
942
+ case 9:
943
+ case "end":
944
+ return _context14.stop();
945
+ }
946
+ }, _callee14, this);
947
+ }));
948
+ function TenantContractId() {
949
+ return _TenantContractId.apply(this, arguments);
950
+ }
951
+ return TenantContractId;
952
+ }()
953
+ /**
954
+ * Set the current user's tenant contract.
955
+ *
956
+ * Note: This method is not accessible to applications. Eluvio core will drop the request.
957
+ *
958
+ * @namedParams
959
+ * @param {string} tenantContractId - The tenant contract ID in hash format
960
+ * @param {string} address - The tenant address to use in the hash if id is not provided
961
+ */
962
+ )
963
+ }, {
964
+ key: "SetTenantContractId",
965
+ value: (function () {
966
+ var _SetTenantContractId = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee15(_ref11) {
967
+ var tenantContractId, _yield$this$UserWalle9, objectId, tenantInfo;
968
+ return _regeneratorRuntime.wrap(function _callee15$(_context15) {
969
+ while (1) switch (_context15.prev = _context15.next) {
970
+ case 0:
971
+ tenantContractId = _ref11.tenantContractId;
972
+ _context15.next = 3;
973
+ return this.UserWalletObjectInfo();
974
+ case 3:
975
+ _yield$this$UserWalle9 = _context15.sent;
976
+ objectId = _yield$this$UserWalle9.objectId;
977
+ _context15.next = 7;
978
+ return this.client.SetTenantContractId({
979
+ objectId: objectId,
980
+ tenantContractId: tenantContractId
981
+ });
982
+ case 7:
983
+ tenantInfo = _context15.sent;
984
+ this.tenantContractId = tenantInfo.tenantContractId;
985
+ this.tenantId = tenantInfo.tenantId;
986
+ case 10:
987
+ case "end":
988
+ return _context15.stop();
989
+ }
990
+ }, _callee15, this);
991
+ }));
992
+ function SetTenantContractId(_x8) {
993
+ return _SetTenantContractId.apply(this, arguments);
994
+ }
995
+ return SetTenantContractId;
996
+ }())
997
+ }, {
998
+ key: "ResetTenantId",
999
+ value: function () {
1000
+ var _ResetTenantId = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee16() {
1001
+ var _yield$this$UserWalle10, objectId;
1002
+ return _regeneratorRuntime.wrap(function _callee16$(_context16) {
1003
+ while (1) switch (_context16.prev = _context16.next) {
1004
+ case 0:
1005
+ _context16.next = 2;
1006
+ return this.UserWalletObjectInfo();
1007
+ case 2:
1008
+ _yield$this$UserWalle10 = _context16.sent;
1009
+ objectId = _yield$this$UserWalle10.objectId;
1010
+ _context16.next = 6;
1011
+ return this.client.ResetTenantId({
1012
+ objectId: objectId
1013
+ });
1014
+ case 6:
1015
+ this.tenantId = this.client.TenantId({
1016
+ objectId: objectId
1017
+ });
1018
+ this.tenantContractId = this.client.TenantContractId({
1019
+ objectId: objectId
1020
+ });
1021
+ case 8:
1022
+ case "end":
1023
+ return _context16.stop();
1024
+ }
1025
+ }, _callee16, this);
1026
+ }));
1027
+ function ResetTenantId() {
1028
+ return _ResetTenantId.apply(this, arguments);
1029
+ }
1030
+ return ResetTenantId;
1031
+ }()
1032
+ /**
1033
+ * Get the URL of the current user's profile image
1034
+ *
1035
+ * Note: Part hash of profile image will be appended to the URL as a query parameter to invalidate
1036
+ * browser caching when the image is updated
1037
+ *
1038
+ * @namedParams
1039
+ * @param {string=} address - The address of the user. If not specified, the address of the current user will be used.
1040
+ * @param {number=} height - If specified, the image will be scaled to the specified maximum height
1041
+ *
1042
+ * @see <a href="Utils.html#.ResizeImage">Utils#ResizeImage</a>
1043
+ *
1044
+ * @return {Promise<string | undefined>} - URL of the user's profile image. Will be undefined if no profile image is set.
1045
+ */
1046
+ }, {
1047
+ key: "UserProfileImage",
1048
+ value: (function () {
1049
+ var _UserProfileImage = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee17() {
1050
+ var _ref12,
1051
+ address,
1052
+ height,
1053
+ walletAddress,
1054
+ _yield$this$UserWalle11,
1055
+ libraryId,
1056
+ objectId,
1057
+ _args17 = arguments;
1058
+ return _regeneratorRuntime.wrap(function _callee17$(_context17) {
1059
+ while (1) switch (_context17.prev = _context17.next) {
1060
+ case 0:
1061
+ _ref12 = _args17.length > 0 && _args17[0] !== undefined ? _args17[0] : {}, address = _ref12.address, height = _ref12.height;
1062
+ if (!address) {
1063
+ _context17.next = 7;
1064
+ break;
1065
+ }
1066
+ _context17.next = 4;
1067
+ return this.UserWalletAddress({
1068
+ address: address
1069
+ });
1070
+ case 4:
1071
+ walletAddress = _context17.sent;
1072
+ _context17.next = 9;
1073
+ break;
1074
+ case 7:
1075
+ address = this.client.signer.address;
1076
+ walletAddress = this.walletAddress;
1077
+ case 9:
1078
+ if (walletAddress) {
1079
+ _context17.next = 11;
1080
+ break;
1081
+ }
1082
+ return _context17.abrupt("return");
1083
+ case 11:
1084
+ _context17.next = 13;
1085
+ return this.UserWalletObjectInfo({
1086
+ address: address
1087
+ });
1088
+ case 13:
1089
+ _yield$this$UserWalle11 = _context17.sent;
1090
+ libraryId = _yield$this$UserWalle11.libraryId;
1091
+ objectId = _yield$this$UserWalle11.objectId;
1092
+ return _context17.abrupt("return", this.client.ContentObjectImageUrl({
1093
+ libraryId: libraryId,
1094
+ objectId: objectId,
1095
+ height: height,
1096
+ imagePath: "public/profile_image"
1097
+ }));
1098
+ case 17:
1099
+ case "end":
1100
+ return _context17.stop();
1101
+ }
1102
+ }, _callee17, this);
1103
+ }));
1104
+ function UserProfileImage() {
1105
+ return _UserProfileImage.apply(this, arguments);
1106
+ }
1107
+ return UserProfileImage;
1108
+ }()
1109
+ /**
1110
+ * Set a new profile image for the current user
1111
+ *
1112
+ * @namedParams
1113
+ * @param {blob} image - The new profile image for the current user
1114
+ */
1115
+ )
1116
+ }, {
1117
+ key: "SetUserProfileImage",
1118
+ value: (function () {
1119
+ var _SetUserProfileImage = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee18(_ref13) {
1120
+ var image, size, _yield$this$UserWalle12, libraryId, objectId, editRequest;
1121
+ return _regeneratorRuntime.wrap(function _callee18$(_context18) {
1122
+ while (1) switch (_context18.prev = _context18.next) {
1123
+ case 0:
1124
+ image = _ref13.image;
1125
+ this.Log("Setting profile image for user ".concat(this.client.signer.address));
1126
+ size = image.length || image.byteLength || image.size;
1127
+ if (!(size > 5000000)) {
1128
+ _context18.next = 5;
1129
+ break;
1130
+ }
1131
+ throw Error("Maximum profile image size is 5MB");
1132
+ case 5:
1133
+ _context18.next = 7;
1134
+ return this.UserWalletObjectInfo();
1135
+ case 7:
1136
+ _yield$this$UserWalle12 = _context18.sent;
1137
+ libraryId = _yield$this$UserWalle12.libraryId;
1138
+ objectId = _yield$this$UserWalle12.objectId;
1139
+ _context18.next = 12;
1140
+ return this.client.EditContentObject({
1141
+ libraryId: libraryId,
1142
+ objectId: objectId
1143
+ });
1144
+ case 12:
1145
+ editRequest = _context18.sent;
1146
+ _context18.next = 15;
1147
+ return this.client.SetContentObjectImage({
1148
+ libraryId: libraryId,
1149
+ objectId: objectId,
1150
+ writeToken: editRequest.write_token,
1151
+ image: image,
1152
+ imageName: "profile_image",
1153
+ imagePath: "public/profile_image"
1154
+ });
1155
+ case 15:
1156
+ _context18.next = 17;
1157
+ return this.client.FinalizeContentObject({
1158
+ libraryId: libraryId,
1159
+ objectId: objectId,
1160
+ writeToken: editRequest.write_token,
1161
+ commitMessage: "Set user profile image"
1162
+ });
1163
+ case 17:
1164
+ case "end":
1165
+ return _context18.stop();
1166
+ }
1167
+ }, _callee18, this);
1168
+ }));
1169
+ function SetUserProfileImage(_x9) {
1170
+ return _SetUserProfileImage.apply(this, arguments);
1171
+ }
1172
+ return SetUserProfileImage;
1173
+ }()
1174
+ /**
1175
+ * Get the accumulated tags for the current user
1176
+ *
1177
+ * Note: Subject to user's access level
1178
+ *
1179
+ * @see <a href="#PromptsAndAccessLevels">Prompts and access levels</a>
1180
+ *
1181
+ * @return {Promise<Object>} - User tags
1182
+ */
1183
+ )
1184
+ }, {
1185
+ key: "CollectedTags",
1186
+ value: (function () {
1187
+ var _CollectedTags = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee19() {
1188
+ return _regeneratorRuntime.wrap(function _callee19$(_context19) {
1189
+ while (1) switch (_context19.prev = _context19.next) {
1190
+ case 0:
1191
+ _context19.next = 2;
1192
+ return this.UserMetadata({
1193
+ metadataSubtree: "collected_data"
1194
+ });
1195
+ case 2:
1196
+ _context19.t0 = _context19.sent;
1197
+ if (_context19.t0) {
1198
+ _context19.next = 5;
1199
+ break;
1200
+ }
1201
+ _context19.t0 = {};
1202
+ case 5:
1203
+ return _context19.abrupt("return", _context19.t0);
1204
+ case 6:
1205
+ case "end":
1206
+ return _context19.stop();
1207
+ }
1208
+ }, _callee19, this);
1209
+ }));
1210
+ function CollectedTags() {
1211
+ return _CollectedTags.apply(this, arguments);
1212
+ }
1213
+ return CollectedTags;
1214
+ }() // Ensure recording tags never causes action to fail
1215
+ )
1216
+ }, {
1217
+ key: "RecordTags",
1218
+ value: function () {
1219
+ var _RecordTags = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee20(_ref14) {
1220
+ var libraryId, objectId, versionHash;
1221
+ return _regeneratorRuntime.wrap(function _callee20$(_context20) {
1222
+ while (1) switch (_context20.prev = _context20.next) {
1223
+ case 0:
1224
+ libraryId = _ref14.libraryId, objectId = _ref14.objectId, versionHash = _ref14.versionHash;
1225
+ _context20.prev = 1;
1226
+ _context20.next = 4;
1227
+ return this.__RecordTags({
1228
+ libraryId: libraryId,
1229
+ objectId: objectId,
1230
+ versionHash: versionHash
1231
+ });
1232
+ case 4:
1233
+ _context20.next = 9;
1234
+ break;
1235
+ case 6:
1236
+ _context20.prev = 6;
1237
+ _context20.t0 = _context20["catch"](1);
1238
+ // eslint-disable-next-line no-console
1239
+ console.error(_context20.t0);
1240
+ case 9:
1241
+ case "end":
1242
+ return _context20.stop();
1243
+ }
1244
+ }, _callee20, this, [[1, 6]]);
1245
+ }));
1246
+ function RecordTags(_x10) {
1247
+ return _RecordTags.apply(this, arguments);
1248
+ }
1249
+ return RecordTags;
1250
+ }()
1251
+ }, {
1252
+ key: "__RecordTags",
1253
+ value: function () {
1254
+ var _RecordTags2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee21(_ref15) {
1255
+ var libraryId, objectId, versionHash, accessType, seen, walletObjectInfo, userLibraryId, userObjectId, editRequest, contentTags, userTags, formattedTags;
1256
+ return _regeneratorRuntime.wrap(function _callee21$(_context21) {
1257
+ while (1) switch (_context21.prev = _context21.next) {
1258
+ case 0:
1259
+ libraryId = _ref15.libraryId, objectId = _ref15.objectId, versionHash = _ref15.versionHash;
1260
+ _context21.next = 3;
1261
+ return this.client.AccessType({
1262
+ id: objectId
1263
+ });
1264
+ case 3:
1265
+ accessType = _context21.sent;
1266
+ if (!(accessType !== "object")) {
1267
+ _context21.next = 6;
1268
+ break;
1269
+ }
1270
+ return _context21.abrupt("return");
1271
+ case 6:
1272
+ if (!(!versionHash && !libraryId)) {
1273
+ _context21.next = 10;
1274
+ break;
1275
+ }
1276
+ _context21.next = 9;
1277
+ return this.client.ContentObjectLibraryId({
1278
+ objectId: objectId
1279
+ });
1280
+ case 9:
1281
+ libraryId = _context21.sent;
1282
+ case 10:
1283
+ if (versionHash) {
1284
+ _context21.next = 14;
1285
+ break;
1286
+ }
1287
+ _context21.next = 13;
1288
+ return this.client.ContentObject({
1289
+ libraryId: libraryId,
1290
+ objectId: objectId
1291
+ });
1292
+ case 13:
1293
+ versionHash = _context21.sent.hash;
1294
+ case 14:
1295
+ _context21.next = 16;
1296
+ return this.UserMetadata({
1297
+ metadataSubtree: UrlJoin("accessed_content", versionHash)
1298
+ });
1299
+ case 16:
1300
+ seen = _context21.sent;
1301
+ if (!seen) {
1302
+ _context21.next = 19;
1303
+ break;
1304
+ }
1305
+ return _context21.abrupt("return");
1306
+ case 19:
1307
+ _context21.next = 21;
1308
+ return this.UserWalletObjectInfo();
1309
+ case 21:
1310
+ walletObjectInfo = _context21.sent;
1311
+ userLibraryId = walletObjectInfo.libraryId;
1312
+ userObjectId = walletObjectInfo.objectId; // Mark content as seen
1313
+ _context21.next = 26;
1314
+ return this.client.EditContentObject({
1315
+ libraryId: userLibraryId,
1316
+ objectId: userObjectId
1317
+ });
1318
+ case 26:
1319
+ editRequest = _context21.sent;
1320
+ _context21.next = 29;
1321
+ return this.client.ReplaceMetadata({
1322
+ libraryId: userLibraryId,
1323
+ objectId: userObjectId,
1324
+ writeToken: editRequest.write_token,
1325
+ metadataSubtree: UrlJoin("accessed_content", versionHash),
1326
+ metadata: Date.now()
1327
+ });
1328
+ case 29:
1329
+ _context21.next = 31;
1330
+ return this.client.ContentObjectMetadata({
1331
+ libraryId: libraryId,
1332
+ objectId: objectId,
1333
+ versionHash: versionHash,
1334
+ metadataSubtree: "video_tags"
1335
+ });
1336
+ case 31:
1337
+ contentTags = _context21.sent;
1338
+ if (!(contentTags && contentTags.length > 0)) {
1339
+ _context21.next = 40;
1340
+ break;
1341
+ }
1342
+ _context21.next = 35;
1343
+ return this.CollectedTags();
1344
+ case 35:
1345
+ userTags = _context21.sent;
1346
+ formattedTags = this.__FormatVideoTags(contentTags);
1347
+ Object.keys(formattedTags).forEach(function (tag) {
1348
+ if (userTags[tag]) {
1349
+ // User has seen this tag before
1350
+ userTags[tag].occurrences += 1;
1351
+ userTags[tag].aggregate += formattedTags[tag];
1352
+ } else {
1353
+ // New tag
1354
+ userTags[tag] = {
1355
+ occurrences: 1,
1356
+ aggregate: formattedTags[tag]
1357
+ };
1358
+ }
1359
+ });
1360
+
1361
+ // Update user tags
1362
+ _context21.next = 40;
1363
+ return this.client.ReplaceMetadata({
1364
+ libraryId: userLibraryId,
1365
+ objectId: userObjectId,
1366
+ writeToken: editRequest.write_token,
1367
+ metadataSubtree: "collected_data",
1368
+ metadata: userTags
1369
+ });
1370
+ case 40:
1371
+ _context21.next = 42;
1372
+ return this.client.FinalizeContentObject({
1373
+ libraryId: userLibraryId,
1374
+ objectId: userObjectId,
1375
+ writeToken: editRequest.write_token,
1376
+ commitMessage: "Record user tags",
1377
+ awaitCommitConfirmation: false
1378
+ });
1379
+ case 42:
1380
+ case "end":
1381
+ return _context21.stop();
1382
+ }
1383
+ }, _callee21, this);
1384
+ }));
1385
+ function __RecordTags(_x11) {
1386
+ return _RecordTags2.apply(this, arguments);
1387
+ }
1388
+ return __RecordTags;
1389
+ }()
1390
+ /*
1391
+ Format video tags into an easier format and average scores
1392
+ Example content tags:
1393
+ [
1394
+ {
1395
+ "tags": [
1396
+ {
1397
+ "score": 0.3,
1398
+ "tag": "cherry"
1399
+ },
1400
+ {
1401
+ "score": 0.8,
1402
+ "tag": "chocolate"
1403
+ },
1404
+ {
1405
+ "score": 0.6,
1406
+ "tag": "boat"
1407
+ }
1408
+ ],
1409
+ "time_in": "00:00:00.000",
1410
+ "time_out": "00:03:00.000"
1411
+ },
1412
+ ...
1413
+ ]
1414
+ */
1415
+ }, {
1416
+ key: "__FormatVideoTags",
1417
+ value: function __FormatVideoTags(videoTags) {
1418
+ var collectedTags = {};
1419
+ videoTags.forEach(function (videoTag) {
1420
+ var tags = videoTag["tags"];
1421
+ tags.forEach(function (tag) {
1422
+ if (collectedTags[tag.tag]) {
1423
+ collectedTags[tag.tag].occurrences += 1;
1424
+ collectedTags[tag.tag].aggregate += tag.score;
1425
+ } else {
1426
+ collectedTags[tag.tag] = {
1427
+ occurrences: 1,
1428
+ aggregate: tag.score
1429
+ };
1430
+ }
1431
+ });
1432
+ });
1433
+ var formattedTags = {};
1434
+ Object.keys(collectedTags).forEach(function (tag) {
1435
+ formattedTags[tag] = collectedTags[tag].aggregate / collectedTags[tag].occurrences;
1436
+ });
1437
+ return formattedTags;
1438
+ }
1439
+
1440
+ // List of methods that may require a prompt - these should have an unlimited timeout period
1441
+ }, {
1442
+ key: "PromptedMethods",
1443
+ value: function PromptedMethods() {
1444
+ return FrameClient.PromptedMethods();
1445
+ }
1446
+
1447
+ // List of methods for accessing user metadata - these should be namespaced when used by an app
1448
+ }, {
1449
+ key: "MetadataMethods",
1450
+ value: function MetadataMethods() {
1451
+ return FrameClient.MetadataMethods();
1452
+ }
1453
+
1454
+ // Whitelist of methods allowed to be called using the frame API
1455
+ }, {
1456
+ key: "FrameAllowedMethods",
1457
+ value: function FrameAllowedMethods() {
1458
+ var forbiddenMethods = ["constructor", "FrameAllowedMethods", "Log", "MetadataMethods", "PromptedMethods", "RecordTags", "SetAccessLevel", "SetTenantId", "SetUserProfileImage", "__IsLibraryCreated", "__TouchLibrary", "__FormatVideoTags", "__RecordTags"];
1459
+ return Object.getOwnPropertyNames(Object.getPrototypeOf(this)).filter(function (method) {
1460
+ return !forbiddenMethods.includes(method);
1461
+ });
1462
+ }
1463
+ }]);
1464
+ }();
1465
+ module.exports = UserProfileClient;