@eluvio/elv-client-js 4.0.5 → 4.0.6
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.
- package/dist/ElvClient-min.js +12 -11
- package/dist/ElvClient-node-min.js +12 -17
- package/dist/ElvFrameClient-min.js +12 -11
- package/dist/ElvPermissionsClient-min.js +10 -9
- package/dist/ElvWalletClient-min.js +11 -10
- package/dist/ElvWalletClient-node-min.js +12 -17
- package/dist/src/AuthorizationClient.js +1556 -2077
- package/dist/src/ContentObjectVerification.js +134 -185
- package/dist/src/Crypto.js +225 -322
- package/dist/src/ElvClient.js +823 -1117
- package/dist/src/ElvWallet.js +64 -106
- package/dist/src/EthClient.js +719 -974
- package/dist/src/FrameClient.js +222 -318
- package/dist/src/HttpClient.js +112 -154
- package/dist/src/Id.js +1 -6
- package/dist/src/LogMessage.js +4 -8
- package/dist/src/PermissionsClient.js +973 -1271
- package/dist/src/RemoteSigner.js +161 -232
- package/dist/src/UserProfileClient.js +781 -1038
- package/dist/src/Utils.js +160 -302
- package/dist/src/Validation.js +2 -17
- package/dist/src/client/ABRPublishing.js +772 -942
- package/dist/src/client/AccessGroups.js +849 -1095
- package/dist/src/client/ContentAccess.js +3263 -4132
- package/dist/src/client/ContentManagement.js +1811 -2283
- package/dist/src/client/Contracts.js +468 -614
- package/dist/src/client/Files.js +1505 -1845
- package/dist/src/client/NFT.js +94 -116
- package/dist/src/client/NTP.js +326 -425
- package/dist/src/index.js +2 -5
- package/dist/src/walletClient/ClientMethods.js +1348 -1735
- package/dist/src/walletClient/Configuration.js +4 -2
- package/dist/src/walletClient/Notifications.js +98 -127
- package/dist/src/walletClient/Profile.js +184 -246
- package/dist/src/walletClient/Utils.js +76 -122
- package/dist/src/walletClient/index.js +1168 -1493
- package/package.json +2 -2
- package/src/Crypto.js +1 -1
- package/src/ElvClient.js +1 -3
- package/src/Utils.js +1 -1
- package/testScripts/Test.js +0 -1
- package/utilities/NFTIngest.js +527 -0
- package/utilities/lib/concerns/LocalFile.js +2 -1
|
@@ -1,169 +1,139 @@
|
|
|
1
1
|
var _regeneratorRuntime = require("@babel/runtime/regenerator");
|
|
2
|
-
|
|
3
2
|
var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
|
|
4
|
-
|
|
5
3
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, 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 normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
6
|
-
|
|
7
4
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
8
|
-
|
|
9
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
10
|
-
|
|
5
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
11
6
|
var CBOR = require("cbor");
|
|
12
|
-
|
|
13
7
|
var SJCL = require("sjcl");
|
|
14
|
-
|
|
15
8
|
var MultiHash = require("multihashes");
|
|
16
|
-
|
|
17
9
|
var DeepEqual = require("deep-equal");
|
|
18
|
-
|
|
19
10
|
var Utils = require("./Utils");
|
|
20
|
-
|
|
21
11
|
var ContentObjectVerification = {
|
|
22
12
|
VerifyContentObject: function VerifyContentObject(_ref) {
|
|
23
13
|
return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
24
14
|
var client, libraryId, objectId, versionHash, response, partHash, qpartsResponse, partVerification, qmdHash, metadataPartHash, metadataPartResponse, metadataVerification, metadata, qstructHash, structPartHash, structPartResponse, structVerification;
|
|
25
15
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
26
|
-
while (1) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
|
32
41
|
};
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
response
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
objectId: objectId,
|
|
129
|
-
partHash: structPartHash,
|
|
130
|
-
format: "arrayBuffer"
|
|
131
|
-
}).then(function (response) {
|
|
132
|
-
return Buffer.from(response);
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
case 27:
|
|
136
|
-
structPartResponse = _context.sent;
|
|
137
|
-
structVerification = ContentObjectVerification._VerifyPart({
|
|
138
|
-
partHash: structPartHash,
|
|
139
|
-
qpartsResponse: structPartResponse
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
if (structVerification.valid) {
|
|
143
|
-
response.qstruct = {
|
|
144
|
-
valid: true
|
|
145
|
-
};
|
|
146
|
-
} else {
|
|
147
|
-
response.qstruct = {
|
|
148
|
-
valid: false,
|
|
149
|
-
error: structVerification.error.message
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
response.qstruct.hash = structPartHash;
|
|
154
|
-
|
|
155
|
-
if (response.qstruct.valid) {
|
|
156
|
-
response.qstruct.parts = ContentObjectVerification._FormatQStruct(structVerification.cbor.Parts);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
case 32:
|
|
160
|
-
response.valid = response.qref.valid && response.qmd.valid && response.qstruct.valid && (!response.qmd.check || response.qmd.check.valid);
|
|
161
|
-
return _context.abrupt("return", response);
|
|
162
|
-
|
|
163
|
-
case 34:
|
|
164
|
-
case "end":
|
|
165
|
-
return _context.stop();
|
|
166
|
-
}
|
|
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();
|
|
167
137
|
}
|
|
168
138
|
}, _callee);
|
|
169
139
|
}))();
|
|
@@ -173,7 +143,6 @@ var ContentObjectVerification = {
|
|
|
173
143
|
if (!structParts) {
|
|
174
144
|
return [];
|
|
175
145
|
}
|
|
176
|
-
|
|
177
146
|
return structParts.map(function (structPart) {
|
|
178
147
|
return {
|
|
179
148
|
hash: "hqp_" + MultiHash.toB58String(structPart.Hash.value.slice(1, structPart.Hash.length)),
|
|
@@ -184,43 +153,34 @@ var ContentObjectVerification = {
|
|
|
184
153
|
_Hash: function _Hash(thing) {
|
|
185
154
|
function fromBits(arr) {
|
|
186
155
|
var out = [],
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
156
|
+
bl = SJCL.bitArray.bitLength(arr),
|
|
157
|
+
i,
|
|
158
|
+
tmp;
|
|
191
159
|
for (i = 0; i < bl / 8; i++) {
|
|
192
160
|
if ((i & 3) === 0) {
|
|
193
161
|
tmp = arr[i / 4];
|
|
194
162
|
}
|
|
195
|
-
|
|
196
163
|
out.push(tmp >>> 24);
|
|
197
164
|
tmp <<= 8;
|
|
198
165
|
}
|
|
199
|
-
|
|
200
166
|
return out;
|
|
201
167
|
}
|
|
202
|
-
|
|
203
168
|
function toBits(bytes) {
|
|
204
169
|
var out = [],
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
170
|
+
i,
|
|
171
|
+
tmp = 0;
|
|
208
172
|
for (i = 0; i < bytes.length; i++) {
|
|
209
173
|
tmp = tmp << 8 | bytes[i];
|
|
210
|
-
|
|
211
174
|
if ((i & 3) === 3) {
|
|
212
175
|
out.push(tmp);
|
|
213
176
|
tmp = 0;
|
|
214
177
|
}
|
|
215
178
|
}
|
|
216
|
-
|
|
217
179
|
if (i & 3) {
|
|
218
180
|
out.push(SJCL.bitArray.partial(8 * (i & 3), tmp));
|
|
219
181
|
}
|
|
220
|
-
|
|
221
182
|
return out;
|
|
222
183
|
}
|
|
223
|
-
|
|
224
184
|
var digest = SJCL.hash.sha256.hash(toBits(thing));
|
|
225
185
|
var bytes = fromBits(digest);
|
|
226
186
|
var out = Buffer.from(bytes, "binary");
|
|
@@ -233,15 +193,12 @@ var ContentObjectVerification = {
|
|
|
233
193
|
},
|
|
234
194
|
_VerifyPart: function _VerifyPart(_ref2) {
|
|
235
195
|
var partHash = _ref2.partHash,
|
|
236
|
-
|
|
237
|
-
|
|
196
|
+
qpartsResponse = _ref2.qpartsResponse;
|
|
238
197
|
try {
|
|
239
198
|
if (ContentObjectVerification._Hash(qpartsResponse) !== partHash.replace("hqp_", "")) {
|
|
240
199
|
throw Error("Hashes do not match");
|
|
241
200
|
}
|
|
242
|
-
|
|
243
201
|
var cbor = ContentObjectVerification._ParseCBOR(qpartsResponse);
|
|
244
|
-
|
|
245
202
|
return {
|
|
246
203
|
valid: true,
|
|
247
204
|
cbor: cbor
|
|
@@ -255,32 +212,28 @@ var ContentObjectVerification = {
|
|
|
255
212
|
},
|
|
256
213
|
_VerifyMetadata: function _VerifyMetadata(_ref3) {
|
|
257
214
|
var metadataCbor = _ref3.metadataCbor,
|
|
258
|
-
|
|
259
|
-
|
|
215
|
+
metadata = _ref3.metadata;
|
|
260
216
|
if (!metadataCbor) {
|
|
261
217
|
metadataCbor = {};
|
|
262
218
|
}
|
|
263
|
-
|
|
264
219
|
if (!metadata) {
|
|
265
220
|
metadata = {};
|
|
266
221
|
}
|
|
267
|
-
|
|
268
222
|
var response = {
|
|
269
223
|
valid: true,
|
|
270
224
|
invalidValues: []
|
|
271
225
|
};
|
|
272
226
|
var cborKeys = Object.keys(metadataCbor);
|
|
273
|
-
var metadataKeys = Object.keys(metadata);
|
|
227
|
+
var metadataKeys = Object.keys(metadata);
|
|
274
228
|
|
|
229
|
+
// Find any difference between top level keys
|
|
275
230
|
var differentKeys = cborKeys.filter(function (x) {
|
|
276
231
|
return !metadataKeys.includes(x);
|
|
277
232
|
}).concat(metadataKeys.filter(function (x) {
|
|
278
233
|
return !cborKeys.includes(x);
|
|
279
234
|
}));
|
|
280
|
-
|
|
281
235
|
var _iterator = _createForOfIteratorHelper(differentKeys),
|
|
282
|
-
|
|
283
|
-
|
|
236
|
+
_step;
|
|
284
237
|
try {
|
|
285
238
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
286
239
|
var key = _step.value;
|
|
@@ -291,23 +244,21 @@ var ContentObjectVerification = {
|
|
|
291
244
|
cborValue: cborValue,
|
|
292
245
|
metadataValue: metadataValue
|
|
293
246
|
});
|
|
294
|
-
}
|
|
247
|
+
}
|
|
295
248
|
|
|
249
|
+
// Deep comparison of up to 5 keys
|
|
296
250
|
} catch (err) {
|
|
297
251
|
_iterator.e(err);
|
|
298
252
|
} finally {
|
|
299
253
|
_iterator.f();
|
|
300
254
|
}
|
|
301
|
-
|
|
302
255
|
var _iterator2 = _createForOfIteratorHelper(Object.keys(metadataCbor).slice(0, 5)),
|
|
303
|
-
|
|
304
|
-
|
|
256
|
+
_step2;
|
|
305
257
|
try {
|
|
306
258
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
307
259
|
var fieldToValidate = _step2.value;
|
|
308
260
|
var _cborValue = metadataCbor[fieldToValidate];
|
|
309
261
|
var _metadataValue = metadata[fieldToValidate];
|
|
310
|
-
|
|
311
262
|
if (!DeepEqual(_cborValue, _metadataValue)) {
|
|
312
263
|
response.invalidValues.push({
|
|
313
264
|
key: fieldToValidate,
|
|
@@ -321,11 +272,9 @@ var ContentObjectVerification = {
|
|
|
321
272
|
} finally {
|
|
322
273
|
_iterator2.f();
|
|
323
274
|
}
|
|
324
|
-
|
|
325
275
|
if (response.invalidValues.length !== 0) {
|
|
326
276
|
response.valid = false;
|
|
327
277
|
}
|
|
328
|
-
|
|
329
278
|
return response;
|
|
330
279
|
}
|
|
331
280
|
};
|