@eluvio/elv-client-js 4.2.6 → 4.2.8

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 (41) hide show
  1. package/dist/ElvClient-min.js +1 -1
  2. package/dist/ElvClient-node-min.js +1 -1
  3. package/dist/ElvFrameClient-min.js +1 -1
  4. package/dist/ElvPermissionsClient-min.js +1 -1
  5. package/dist/ElvWalletClient-min.js +1 -1
  6. package/dist/ElvWalletClient-node-min.js +1 -1
  7. package/dist/src/AuthorizationClient.js +709 -710
  8. package/dist/src/ContentObjectAudit.js +56 -56
  9. package/dist/src/Crypto.js +85 -85
  10. package/dist/src/ElvClient.js +529 -499
  11. package/dist/src/ElvWallet.js +30 -28
  12. package/dist/src/EthClient.js +311 -311
  13. package/dist/src/FrameClient.js +63 -64
  14. package/dist/src/HttpClient.js +60 -60
  15. package/dist/src/Id.js +1 -2
  16. package/dist/src/PermissionsClient.js +499 -487
  17. package/dist/src/RemoteSigner.js +82 -83
  18. package/dist/src/UserProfileClient.js +392 -374
  19. package/dist/src/Utils.js +69 -66
  20. package/dist/src/Validation.js +10 -10
  21. package/dist/src/client/ABRPublishing.js +238 -238
  22. package/dist/src/client/AccessGroups.js +477 -474
  23. package/dist/src/client/ContentAccess.js +1707 -1711
  24. package/dist/src/client/ContentManagement.js +871 -871
  25. package/dist/src/client/Contracts.js +575 -578
  26. package/dist/src/client/Files.js +700 -684
  27. package/dist/src/client/LiveConf.js +1 -3
  28. package/dist/src/client/LiveStream.js +694 -693
  29. package/dist/src/client/NFT.js +14 -14
  30. package/dist/src/client/NTP.js +84 -84
  31. package/dist/src/client/Shares.js +53 -60
  32. package/dist/src/walletClient/ClientMethods.js +977 -951
  33. package/dist/src/walletClient/Notifications.js +14 -14
  34. package/dist/src/walletClient/Profile.js +66 -66
  35. package/dist/src/walletClient/Utils.js +15 -15
  36. package/dist/src/walletClient/index.js +572 -562
  37. package/package.json +1 -1
  38. package/src/AuthorizationClient.js +9 -3
  39. package/src/ElvClient.js +1 -1
  40. package/src/walletClient/index.js +6 -2
  41. package/dist/src/ContentObjectVerification.js +0 -281
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eluvio/elv-client-js",
3
- "version": "4.2.6",
3
+ "version": "4.2.8",
4
4
  "description": "Javascript client for the Eluvio Content Fabric",
5
5
  "main": "src/index.js",
6
6
  "author": "Kevin Talmadge",
@@ -143,9 +143,15 @@ class AuthorizationClient {
143
143
  this.noCache = true;
144
144
  }
145
145
 
146
- if(channelAuth && this.client.signer && this.client.signer.remoteSigner) {
147
- // Channel auth not supported for remote signer, use a self-signed no-auth token instead
148
- return this.client.CreateFabricToken({context});
146
+ if(channelAuth && this.client.signer) {
147
+ const balance = Utils.ToBigNumber(
148
+ await this.client.GetBalance({address: this.client.CurrentAccountAddress()})
149
+ ).toFixed(3);
150
+
151
+ if(balance < 0.02) {
152
+ // Channel auth not supported for remote signer, use a self-signed no-auth token instead
153
+ return this.client.CreateFabricToken({context});
154
+ }
149
155
  }
150
156
 
151
157
  let authorizationToken;
package/src/ElvClient.js CHANGED
@@ -1260,7 +1260,7 @@ class ElvClient {
1260
1260
  * @return {string} - The created static token
1261
1261
  */
1262
1262
  CreateStaticToken({libraryId}) {
1263
- let token = { qspace_id: this.client.contentSpaceId };
1263
+ let token = { qspace_id: this.contentSpaceId };
1264
1264
 
1265
1265
  if(libraryId) {
1266
1266
  token.qlib_id = libraryId;
@@ -494,12 +494,13 @@ class ElvWalletClient {
494
494
 
495
495
  await this.client.SetRemoteSigner({idToken, tenantId, signerURIs, extraData: { ...extraData, share_email: shareEmail }, unsignedPublicAuth: true});
496
496
 
497
- let fabricToken, expiresAt;
497
+ let fabricToken, refreshToken, expiresAt;
498
498
  if(createRemoteToken && this.client.signer.remoteSigner) {
499
499
  expiresAt = Date.now() + tokenDuration * 60 * 60 * 1000;
500
500
  const tokenResponse = await this.client.signer.RetrieveCSAT({email, nonce, tenantId, force, duration: tokenDuration});
501
501
  fabricToken = tokenResponse.token;
502
502
  nonce = tokenResponse.nonce;
503
+ refreshToken = tokenResponse.refresh_token;
503
504
  } else {
504
505
  expiresAt = Date.now() + tokenDuration * 60 * 60 * 1000;
505
506
  fabricToken = await this.client.CreateFabricToken({
@@ -523,6 +524,7 @@ class ElvWalletClient {
523
524
  return {
524
525
  authToken: this.SetAuthorization({
525
526
  fabricToken,
527
+ refreshToken,
526
528
  tenantId,
527
529
  address,
528
530
  email,
@@ -536,6 +538,7 @@ class ElvWalletClient {
536
538
  signingToken: this.SetAuthorization({
537
539
  clusterToken: this.client.signer.authToken,
538
540
  fabricToken,
541
+ refreshToken,
539
542
  tenantId,
540
543
  address,
541
544
  email,
@@ -604,11 +607,12 @@ class ElvWalletClient {
604
607
  return this.__authorization.fabricToken;
605
608
  }
606
609
 
607
- SetAuthorization({clusterToken, fabricToken, tenantId, address, email, expiresAt, signerURIs, walletType, walletName, nonce, register=false}) {
610
+ SetAuthorization({clusterToken, fabricToken, refreshToken, tenantId, address, email, expiresAt, signerURIs, walletType, walletName, nonce, register=false}) {
608
611
  address = this.client.utils.FormatAddress(address);
609
612
 
610
613
  this.__authorization = {
611
614
  fabricToken,
615
+ refreshToken,
612
616
  tenantId,
613
617
  address,
614
618
  email,
@@ -1,281 +0,0 @@
1
- var _regeneratorRuntime = require("@babel/runtime/regenerator");
2
- var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
3
- function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
4
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
5
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
6
- var CBOR = require("cbor");
7
- var SJCL = require("sjcl");
8
- var MultiHash = require("multihashes");
9
- var DeepEqual = require("deep-equal");
10
- var Utils = require("./Utils");
11
- var ContentObjectVerification = {
12
- VerifyContentObject: function VerifyContentObject(_ref) {
13
- return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
14
- var client, libraryId, objectId, versionHash, response, partHash, qpartsResponse, partVerification, qmdHash, metadataPartHash, metadataPartResponse, metadataVerification, metadata, qstructHash, structPartHash, structPartResponse, structVerification;
15
- return _regeneratorRuntime.wrap(function _callee$(_context) {
16
- while (1) switch (_context.prev = _context.next) {
17
- case 0:
18
- client = _ref.client, libraryId = _ref.libraryId, objectId = _ref.objectId, versionHash = _ref.versionHash;
19
- response = {
20
- hash: versionHash
21
- };
22
- partHash = Utils.DecodeVersionHash(versionHash).partHash;
23
- _context.next = 5;
24
- return client.QParts({
25
- libraryId: libraryId,
26
- objectId: objectId,
27
- partHash: partHash,
28
- format: "arrayBuffer"
29
- }).then(function (response) {
30
- return Buffer.from(response);
31
- });
32
- case 5:
33
- qpartsResponse = _context.sent;
34
- partVerification = ContentObjectVerification._VerifyPart({
35
- partHash: partHash,
36
- qpartsResponse: qpartsResponse
37
- });
38
- if (partVerification.valid) {
39
- response.qref = {
40
- valid: true
41
- };
42
- } else {
43
- response.qref = {
44
- valid: false,
45
- error: partVerification.error.message
46
- };
47
- }
48
- response.qref.hash = partHash;
49
- if (!response.qref.valid) {
50
- _context.next = 32;
51
- break;
52
- }
53
- // Validate Metadata
54
- qmdHash = partVerification.cbor.QmdHash.value;
55
- metadataPartHash = "hqp_" + MultiHash.toB58String(qmdHash.slice(1, qmdHash.length));
56
- _context.next = 14;
57
- return client.QParts({
58
- libraryId: libraryId,
59
- objectId: objectId,
60
- partHash: metadataPartHash,
61
- format: "arrayBuffer"
62
- }).then(function (response) {
63
- return Buffer.from(response);
64
- });
65
- case 14:
66
- metadataPartResponse = _context.sent;
67
- metadataVerification = ContentObjectVerification._VerifyPart({
68
- partHash: metadataPartHash,
69
- qpartsResponse: metadataPartResponse
70
- });
71
- if (metadataVerification.valid) {
72
- response.qmd = {
73
- valid: true
74
- };
75
- } else {
76
- response.qmd = {
77
- valid: false,
78
- error: metadataVerification.error.message
79
- };
80
- }
81
- response.qmd.hash = metadataPartHash;
82
- if (!(response.qmd.valid && libraryId)) {
83
- _context.next = 23;
84
- break;
85
- }
86
- _context.next = 21;
87
- return client.ContentObjectMetadata({
88
- libraryId: libraryId,
89
- objectId: objectId,
90
- versionHash: partHash.replace("hqp_", "hq__")
91
- });
92
- case 21:
93
- metadata = _context.sent;
94
- response.qmd.check = ContentObjectVerification._VerifyMetadata({
95
- metadataCbor: metadataVerification.cbor,
96
- metadata: metadata
97
- });
98
- case 23:
99
- // Validate Qstruct
100
- qstructHash = partVerification.cbor.QstructHash.value;
101
- structPartHash = "hqp_" + MultiHash.toB58String(qstructHash.slice(1, qstructHash.length));
102
- _context.next = 27;
103
- return client.QParts({
104
- libraryId: libraryId,
105
- objectId: objectId,
106
- partHash: structPartHash,
107
- format: "arrayBuffer"
108
- }).then(function (response) {
109
- return Buffer.from(response);
110
- });
111
- case 27:
112
- structPartResponse = _context.sent;
113
- structVerification = ContentObjectVerification._VerifyPart({
114
- partHash: structPartHash,
115
- qpartsResponse: structPartResponse
116
- });
117
- if (structVerification.valid) {
118
- response.qstruct = {
119
- valid: true
120
- };
121
- } else {
122
- response.qstruct = {
123
- valid: false,
124
- error: structVerification.error.message
125
- };
126
- }
127
- response.qstruct.hash = structPartHash;
128
- if (response.qstruct.valid) {
129
- response.qstruct.parts = ContentObjectVerification._FormatQStruct(structVerification.cbor.Parts);
130
- }
131
- case 32:
132
- response.valid = response.qref.valid && response.qmd.valid && response.qstruct.valid && (!response.qmd.check || response.qmd.check.valid);
133
- return _context.abrupt("return", response);
134
- case 34:
135
- case "end":
136
- return _context.stop();
137
- }
138
- }, _callee);
139
- }))();
140
- },
141
- // Content verification methods //
142
- _FormatQStruct: function _FormatQStruct(structParts) {
143
- if (!structParts) {
144
- return [];
145
- }
146
- return structParts.map(function (structPart) {
147
- return {
148
- hash: "hqp_" + MultiHash.toB58String(structPart.Hash.value.slice(1, structPart.Hash.length)),
149
- size: structPart.Size
150
- };
151
- });
152
- },
153
- _Hash: function _Hash(thing) {
154
- function fromBits(arr) {
155
- var out = [],
156
- bl = SJCL.bitArray.bitLength(arr),
157
- i,
158
- tmp;
159
- for (i = 0; i < bl / 8; i++) {
160
- if ((i & 3) === 0) {
161
- tmp = arr[i / 4];
162
- }
163
- out.push(tmp >>> 24);
164
- tmp <<= 8;
165
- }
166
- return out;
167
- }
168
- function toBits(bytes) {
169
- var out = [],
170
- i,
171
- tmp = 0;
172
- for (i = 0; i < bytes.length; i++) {
173
- tmp = tmp << 8 | bytes[i];
174
- if ((i & 3) === 3) {
175
- out.push(tmp);
176
- tmp = 0;
177
- }
178
- }
179
- if (i & 3) {
180
- out.push(SJCL.bitArray.partial(8 * (i & 3), tmp));
181
- }
182
- return out;
183
- }
184
- var digest = SJCL.hash.sha256.hash(toBits(thing));
185
- var bytes = fromBits(digest);
186
- var out = Buffer.from(bytes, "binary");
187
- return MultiHash.toB58String(MultiHash.encode(out, "sha2-256"));
188
- },
189
- _ParseCBOR: function _ParseCBOR(cborResponse) {
190
- var buffer = cborResponse.slice(7, cborResponse.length);
191
- var hex = buffer.toString("hex");
192
- return CBOR.decodeFirstSync(hex);
193
- },
194
- _VerifyPart: function _VerifyPart(_ref2) {
195
- var partHash = _ref2.partHash,
196
- qpartsResponse = _ref2.qpartsResponse;
197
- try {
198
- if (ContentObjectVerification._Hash(qpartsResponse) !== partHash.replace("hqp_", "")) {
199
- throw Error("Hashes do not match");
200
- }
201
- var cbor = ContentObjectVerification._ParseCBOR(qpartsResponse);
202
- return {
203
- valid: true,
204
- cbor: cbor
205
- };
206
- } catch (error) {
207
- return {
208
- valid: false,
209
- error: error
210
- };
211
- }
212
- },
213
- _VerifyMetadata: function _VerifyMetadata(_ref3) {
214
- var metadataCbor = _ref3.metadataCbor,
215
- metadata = _ref3.metadata;
216
- if (!metadataCbor) {
217
- metadataCbor = {};
218
- }
219
- if (!metadata) {
220
- metadata = {};
221
- }
222
- var response = {
223
- valid: true,
224
- invalidValues: []
225
- };
226
- var cborKeys = Object.keys(metadataCbor);
227
- var metadataKeys = Object.keys(metadata);
228
-
229
- // Find any difference between top level keys
230
- var differentKeys = cborKeys.filter(function (x) {
231
- return !metadataKeys.includes(x);
232
- }).concat(metadataKeys.filter(function (x) {
233
- return !cborKeys.includes(x);
234
- }));
235
- var _iterator = _createForOfIteratorHelper(differentKeys),
236
- _step;
237
- try {
238
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
239
- var key = _step.value;
240
- var cborValue = metadataCbor[key];
241
- var metadataValue = metadata[key];
242
- response.invalidValues.push({
243
- key: key,
244
- cborValue: cborValue,
245
- metadataValue: metadataValue
246
- });
247
- }
248
-
249
- // Deep comparison of up to 5 keys
250
- } catch (err) {
251
- _iterator.e(err);
252
- } finally {
253
- _iterator.f();
254
- }
255
- var _iterator2 = _createForOfIteratorHelper(Object.keys(metadataCbor).slice(0, 5)),
256
- _step2;
257
- try {
258
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
259
- var fieldToValidate = _step2.value;
260
- var _cborValue = metadataCbor[fieldToValidate];
261
- var _metadataValue = metadata[fieldToValidate];
262
- if (!DeepEqual(_cborValue, _metadataValue)) {
263
- response.invalidValues.push({
264
- key: fieldToValidate,
265
- cborValue: _cborValue,
266
- metadataValue: _metadataValue
267
- });
268
- }
269
- }
270
- } catch (err) {
271
- _iterator2.e(err);
272
- } finally {
273
- _iterator2.f();
274
- }
275
- if (response.invalidValues.length !== 0) {
276
- response.valid = false;
277
- }
278
- return response;
279
- }
280
- };
281
- module.exports = ContentObjectVerification;