@eluvio/elv-client-js 3.2.45 → 4.0.1
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 +17 -9
- package/dist/ElvClient-node-min.js +12 -25
- package/dist/ElvFrameClient-min.js +17 -9
- package/dist/ElvPermissionsClient-min.js +16 -8
- package/dist/ElvWalletClient-min.js +17 -9
- package/dist/ElvWalletClient-node-min.js +12 -25
- package/dist/src/AuthorizationClient.js +6 -6
- package/dist/src/ElvClient.js +24 -14
- package/dist/src/ElvWallet.js +1 -3
- package/dist/src/EthClient.js +21 -12
- package/dist/src/FrameClient.js +10 -7
- package/dist/src/HttpClient.js +7 -6
- package/dist/src/client/ContentAccess.js +3 -3
- package/dist/src/client/ContentManagement.js +15 -12
- package/dist/src/client/Contracts.js +1 -1
- package/package.json +2 -2
- package/src/AuthorizationClient.js +6 -6
- package/src/ElvClient.js +16 -5
- package/src/ElvWallet.js +1 -3
- package/src/EthClient.js +19 -10
- package/src/FrameClient.js +10 -2
- package/src/HttpClient.js +7 -5
- package/src/client/ContentAccess.js +3 -3
- package/src/client/ContentManagement.js +7 -5
- package/src/client/Contracts.js +1 -1
- package/testScripts/Test.js +7 -36
- package/testScripts/abr_profile_both.json +4 -4
- package/testScripts/abr_profile_clear_store_encrypted.json +4 -4
- package/testScripts/abr_profile_clear_store_unencrypted.json +4 -4
- package/testScripts/abr_profile_drm.json +4 -4
- package/utilities/example_files/abr_profile_both.json +4 -4
- package/utilities/example_files/abr_profile_clear_hls_only_store_encrypted.json +4 -4
- package/utilities/example_files/abr_profile_clear_hls_only_store_unencrypted.json +4 -4
- package/utilities/example_files/abr_profile_clear_store_encrypted.json +4 -4
- package/utilities/example_files/abr_profile_clear_store_unencrypted.json +4 -4
- package/utilities/example_files/abr_profile_drm.json +4 -4
- package/utilities/example_files/abr_profile_drm_hls_only.json +4 -4
package/src/ElvClient.js
CHANGED
|
@@ -130,7 +130,8 @@ class ElvClient {
|
|
|
130
130
|
* @param {number} fabricVersion - The version of the target content fabric
|
|
131
131
|
* @param {Array<string>} fabricURIs - A list of full URIs to content fabric nodes
|
|
132
132
|
* @param {Array<string>} ethereumURIs - A list of full URIs to ethereum nodes
|
|
133
|
-
* @param {Array<string>}
|
|
133
|
+
* @param {Array<string>} authServiceURIs - A list of full URIs to auth service endpoints
|
|
134
|
+
* @param {Array<string>=} searchURIs - A list of full URIs to search service endpoints
|
|
134
135
|
* @param {number=} ethereumContractTimeout=10 - Number of seconds to wait for contract calls
|
|
135
136
|
* @param {string=} trustAuthorityId - (OAuth) The ID of the trust authority to use for OAuth authentication
|
|
136
137
|
* @param {string=} staticToken - Static token that will be used for all authorization in place of normal auth
|
|
@@ -147,6 +148,7 @@ class ElvClient {
|
|
|
147
148
|
fabricURIs,
|
|
148
149
|
ethereumURIs,
|
|
149
150
|
authServiceURIs,
|
|
151
|
+
searchURIs,
|
|
150
152
|
ethereumContractTimeout = 10,
|
|
151
153
|
trustAuthorityId,
|
|
152
154
|
staticToken,
|
|
@@ -169,6 +171,7 @@ class ElvClient {
|
|
|
169
171
|
this.fabricURIs = fabricURIs;
|
|
170
172
|
this.authServiceURIs = authServiceURIs;
|
|
171
173
|
this.ethereumURIs = ethereumURIs;
|
|
174
|
+
this.searchURIs = searchURIs;
|
|
172
175
|
this.ethereumContractTimeout = ethereumContractTimeout;
|
|
173
176
|
|
|
174
177
|
this.trustAuthorityId = trustAuthorityId;
|
|
@@ -230,6 +233,8 @@ class ElvClient {
|
|
|
230
233
|
authServiceURIs = authServiceURIs.filter(filterHTTPS);
|
|
231
234
|
}
|
|
232
235
|
|
|
236
|
+
const searchURIs = fabricInfo.network.services.search || [];
|
|
237
|
+
|
|
233
238
|
const fabricVersion = Math.max(...(fabricInfo.network.api_versions || [2]));
|
|
234
239
|
|
|
235
240
|
return {
|
|
@@ -241,6 +246,7 @@ class ElvClient {
|
|
|
241
246
|
ethereumURIs,
|
|
242
247
|
authServiceURIs,
|
|
243
248
|
kmsURIs: kmsUrls,
|
|
249
|
+
searchURIs,
|
|
244
250
|
fabricVersion
|
|
245
251
|
};
|
|
246
252
|
} catch(error) {
|
|
@@ -326,6 +332,7 @@ class ElvClient {
|
|
|
326
332
|
fabricURIs,
|
|
327
333
|
ethereumURIs,
|
|
328
334
|
authServiceURIs,
|
|
335
|
+
searchURIs,
|
|
329
336
|
fabricVersion
|
|
330
337
|
} = await ElvClient.Configuration({
|
|
331
338
|
configUrl,
|
|
@@ -340,6 +347,7 @@ class ElvClient {
|
|
|
340
347
|
fabricURIs,
|
|
341
348
|
ethereumURIs,
|
|
342
349
|
authServiceURIs,
|
|
350
|
+
searchURIs,
|
|
343
351
|
ethereumContractTimeout,
|
|
344
352
|
trustAuthorityId,
|
|
345
353
|
staticToken,
|
|
@@ -421,7 +429,7 @@ class ElvClient {
|
|
|
421
429
|
throw Error("Unable to change region: Configuration URL not set");
|
|
422
430
|
}
|
|
423
431
|
|
|
424
|
-
const {fabricURIs, ethereumURIs, authServiceURIs} = await ElvClient.Configuration({
|
|
432
|
+
const {fabricURIs, ethereumURIs, authServiceURIs, searchURIs} = await ElvClient.Configuration({
|
|
425
433
|
configUrl: this.configUrl,
|
|
426
434
|
region
|
|
427
435
|
});
|
|
@@ -429,6 +437,7 @@ class ElvClient {
|
|
|
429
437
|
this.authServiceURIs = authServiceURIs;
|
|
430
438
|
this.fabricURIs = fabricURIs;
|
|
431
439
|
this.ethereumURIs = ethereumURIs;
|
|
440
|
+
this.searchURIs = searchURIs;
|
|
432
441
|
|
|
433
442
|
this.HttpClient.uris = fabricURIs;
|
|
434
443
|
this.HttpClient.uriIndex = 0;
|
|
@@ -438,7 +447,8 @@ class ElvClient {
|
|
|
438
447
|
|
|
439
448
|
return {
|
|
440
449
|
fabricURIs,
|
|
441
|
-
ethereumURIs
|
|
450
|
+
ethereumURIs,
|
|
451
|
+
searchURIs
|
|
442
452
|
};
|
|
443
453
|
}
|
|
444
454
|
|
|
@@ -998,7 +1008,7 @@ class ElvClient {
|
|
|
998
1008
|
|
|
999
1009
|
ValidatePresence("message", message);
|
|
1000
1010
|
|
|
1001
|
-
return await this.Crypto.EncryptConk(message, publicKey || this.signer.
|
|
1011
|
+
return await this.Crypto.EncryptConk(message, publicKey || this.signer._signingKey().publicKey);
|
|
1002
1012
|
}
|
|
1003
1013
|
|
|
1004
1014
|
/**
|
|
@@ -1016,7 +1026,7 @@ class ElvClient {
|
|
|
1016
1026
|
|
|
1017
1027
|
ValidatePresence("message", message);
|
|
1018
1028
|
|
|
1019
|
-
return await this.Crypto.DecryptCap(message, this.signer.
|
|
1029
|
+
return await this.Crypto.DecryptCap(message, this.signer._signingKey().privateKey);
|
|
1020
1030
|
}
|
|
1021
1031
|
|
|
1022
1032
|
/**
|
|
@@ -1061,6 +1071,7 @@ class ElvClient {
|
|
|
1061
1071
|
"GenerateWallet",
|
|
1062
1072
|
"InitializeClients",
|
|
1063
1073
|
"Log",
|
|
1074
|
+
"PersonalSign",
|
|
1064
1075
|
"SetRemoteSigner",
|
|
1065
1076
|
"SetSigner",
|
|
1066
1077
|
"SetSignerFromWeb3Provider",
|
package/src/ElvWallet.js
CHANGED
|
@@ -7,8 +7,6 @@ class ElvWallet {
|
|
|
7
7
|
* NOTE: It is recommended to initialize wallets from the ElvClient, not using this constructor
|
|
8
8
|
*
|
|
9
9
|
* @see ElvClient#GenerateWallet()
|
|
10
|
-
*
|
|
11
|
-
* @param {string} providerUrl - URL of blockchain provider
|
|
12
10
|
*/
|
|
13
11
|
constructor(provider) {
|
|
14
12
|
this.provider = provider;
|
|
@@ -21,7 +19,7 @@ class ElvWallet {
|
|
|
21
19
|
* @returns {string} - Space-separated list of random words
|
|
22
20
|
*/
|
|
23
21
|
GenerateMnemonic() {
|
|
24
|
-
return Ethers.
|
|
22
|
+
return Ethers.Wallet.createRandom().mnemonic.phrase;
|
|
25
23
|
}
|
|
26
24
|
|
|
27
25
|
/**
|
package/src/EthClient.js
CHANGED
|
@@ -39,7 +39,7 @@ class EthClient {
|
|
|
39
39
|
// HTTP client for making misc calls to elv-master
|
|
40
40
|
this.HttpClient = new HttpClient({uris: this.ethereumURIs, debug: this.debug});
|
|
41
41
|
|
|
42
|
-
Ethers.errors.setLogLevel("error");
|
|
42
|
+
//Ethers.errors.setLogLevel("error");
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
SetEthereumURIs(uris) {
|
|
@@ -234,7 +234,7 @@ class EthClient {
|
|
|
234
234
|
|
|
235
235
|
contract = contract || this.Contract({contractAddress, abi, cacheContract, overrideCachedContract});
|
|
236
236
|
|
|
237
|
-
abi = contract.interface.
|
|
237
|
+
abi = contract.interface.fragments;
|
|
238
238
|
|
|
239
239
|
// Automatically format contract arguments
|
|
240
240
|
if(formatArguments) {
|
|
@@ -262,7 +262,7 @@ class EthClient {
|
|
|
262
262
|
Args: [${methodArgs.join(", ")}]`
|
|
263
263
|
);
|
|
264
264
|
|
|
265
|
-
const methodAbi = contract.interface.
|
|
265
|
+
const methodAbi = contract.interface.fragments.find(method => method.name === methodName);
|
|
266
266
|
|
|
267
267
|
// Lock if performing a transaction
|
|
268
268
|
if(!methodAbi || !methodAbi.constant) {
|
|
@@ -278,7 +278,7 @@ class EthClient {
|
|
|
278
278
|
let success = false;
|
|
279
279
|
while(!success) {
|
|
280
280
|
try {
|
|
281
|
-
result = await contract
|
|
281
|
+
result = await contract[methodName](...methodArgs, overrides);
|
|
282
282
|
success = true;
|
|
283
283
|
} catch(error) {
|
|
284
284
|
if(error.code === -32000 || error.code === "REPLACEMENT_UNDERPRICED") {
|
|
@@ -343,9 +343,15 @@ class EthClient {
|
|
|
343
343
|
|
|
344
344
|
if(methodEvent) {
|
|
345
345
|
methodEvent.logs = methodEvent.logs.map(log => {
|
|
346
|
+
let parsedLogs = {};
|
|
347
|
+
try {
|
|
348
|
+
parsedLogs = contract.interface.parseLog(log);
|
|
349
|
+
// eslint-disable-next-line no-empty
|
|
350
|
+
} catch(error) {}
|
|
351
|
+
|
|
346
352
|
return {
|
|
347
353
|
...log,
|
|
348
|
-
...
|
|
354
|
+
...parsedLogs
|
|
349
355
|
};
|
|
350
356
|
});
|
|
351
357
|
|
|
@@ -378,10 +384,13 @@ class EthClient {
|
|
|
378
384
|
const contractInterface = new Ethers.utils.Interface(abi);
|
|
379
385
|
// Loop through logs to find the desired log
|
|
380
386
|
for(const log of event.logs) {
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
387
|
+
try {
|
|
388
|
+
const parsedLog = contractInterface.parseLog(log);
|
|
389
|
+
if(parsedLog && parsedLog.name === eventName) {
|
|
390
|
+
return parsedLog;
|
|
391
|
+
}
|
|
392
|
+
// eslint-disable-next-line no-empty
|
|
393
|
+
} catch(error) {}
|
|
385
394
|
}
|
|
386
395
|
}
|
|
387
396
|
|
|
@@ -400,7 +409,7 @@ class EthClient {
|
|
|
400
409
|
throw Error(`${methodName} failed - Log not present in transaction`);
|
|
401
410
|
}
|
|
402
411
|
|
|
403
|
-
const newContractAddress = eventLog.
|
|
412
|
+
const newContractAddress = eventLog.args[eventValue];
|
|
404
413
|
|
|
405
414
|
return {
|
|
406
415
|
contractAddress: Utils.FormatAddress(newContractAddress),
|
package/src/FrameClient.js
CHANGED
|
@@ -243,7 +243,7 @@ class FrameClient {
|
|
|
243
243
|
"DeleteUserMetadata",
|
|
244
244
|
"MergeUserMetadata",
|
|
245
245
|
"ReplaceUserMetadata",
|
|
246
|
-
"UserMetadata"
|
|
246
|
+
"UserMetadata",
|
|
247
247
|
];
|
|
248
248
|
}
|
|
249
249
|
|
|
@@ -268,6 +268,13 @@ class FrameClient {
|
|
|
268
268
|
];
|
|
269
269
|
}
|
|
270
270
|
|
|
271
|
+
// List of methods that are defined separately in FrameClient
|
|
272
|
+
OverriddenMethods() {
|
|
273
|
+
return [
|
|
274
|
+
"UploadFiles"
|
|
275
|
+
];
|
|
276
|
+
}
|
|
277
|
+
|
|
271
278
|
// List of allowed methods available to frames
|
|
272
279
|
// This should match ElvClient.FrameAvailableMethods()
|
|
273
280
|
// ElvClient will also reject any disallowed methods
|
|
@@ -334,6 +341,7 @@ class FrameClient {
|
|
|
334
341
|
"CreateContentObject",
|
|
335
342
|
"CreateContentType",
|
|
336
343
|
"CreateEncryptionConk",
|
|
344
|
+
"CreateFabricToken",
|
|
337
345
|
"CreateFileDirectories",
|
|
338
346
|
"CreateFileUploadJob",
|
|
339
347
|
"CreateLinks",
|
|
@@ -377,6 +385,7 @@ class FrameClient {
|
|
|
377
385
|
"FinalizeUploadJob",
|
|
378
386
|
"FormatContractArguments",
|
|
379
387
|
"GenerateStateChannelToken",
|
|
388
|
+
"GenerateSignedLinkToken",
|
|
380
389
|
"GetBalance",
|
|
381
390
|
"InitializeAuthPolicy",
|
|
382
391
|
"IssueNTPCode",
|
|
@@ -440,7 +449,6 @@ class FrameClient {
|
|
|
440
449
|
"UpdateContentObjectGraph",
|
|
441
450
|
"UpdateNTPInstance",
|
|
442
451
|
"UploadFileData",
|
|
443
|
-
/*"UploadFiles",*/ //Override
|
|
444
452
|
"UploadFilesFromS3",
|
|
445
453
|
"UploadJobStatus",
|
|
446
454
|
"UploadPart",
|
package/src/HttpClient.js
CHANGED
|
@@ -14,8 +14,8 @@ class HttpClient {
|
|
|
14
14
|
this.draftURIs = {};
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
BaseURI() {
|
|
18
|
-
return new URI(this.uris[this.uriIndex]);
|
|
17
|
+
BaseURI(url) {
|
|
18
|
+
return new URI(url || this.uris[this.uriIndex]);
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
static Fetch(url, params={}) {
|
|
@@ -49,9 +49,11 @@ class HttpClient {
|
|
|
49
49
|
headers={},
|
|
50
50
|
attempts=0,
|
|
51
51
|
failover=true,
|
|
52
|
-
forceFailover=false
|
|
52
|
+
forceFailover=false,
|
|
53
|
+
nodeUrl
|
|
53
54
|
}) {
|
|
54
|
-
|
|
55
|
+
// if nodeUrl passed in, restrict communication to that node only (unless previously recorded write token is found in next step)
|
|
56
|
+
let baseURI = this.BaseURI(nodeUrl);
|
|
55
57
|
|
|
56
58
|
// If URL contains a write token, it must go to the correct server and can not fail over
|
|
57
59
|
const writeTokenMatch = path.replace(/^\//, "").match(/(qlibs\/ilib[a-zA-Z0-9]+|q|qid)\/(tqw__[a-zA-Z0-9]+)/);
|
|
@@ -105,7 +107,7 @@ class HttpClient {
|
|
|
105
107
|
|
|
106
108
|
if(!response.ok) {
|
|
107
109
|
// Fail over if not a write token request, the response was a server error, and we haven't tried all available nodes
|
|
108
|
-
if(!writeToken && ((failover && parseInt(response.status) >= 500) || forceFailover) && attempts < this.uris.length) {
|
|
110
|
+
if(!writeToken && !nodeUrl && ((failover && parseInt(response.status) >= 500) || forceFailover) && attempts < this.uris.length) {
|
|
109
111
|
// Server error - Try next node
|
|
110
112
|
this.Log(`HttpClient failing over from ${this.BaseURI()}: ${attempts + 1} attempts`, true);
|
|
111
113
|
this.uriIndex = (this.uriIndex + 1) % this.uris.length;
|
|
@@ -2372,7 +2372,7 @@ exports.CreateEncryptionConk = async function({libraryId, objectId, versionHash,
|
|
|
2372
2372
|
});
|
|
2373
2373
|
|
|
2374
2374
|
if(existingUserCap) {
|
|
2375
|
-
this.encryptionConks[objectId] = await this.Crypto.DecryptCap(existingUserCap, this.signer.
|
|
2375
|
+
this.encryptionConks[objectId] = await this.Crypto.DecryptCap(existingUserCap, this.signer._signingKey().privateKey);
|
|
2376
2376
|
} else {
|
|
2377
2377
|
this.encryptionConks[objectId] = await this.Crypto.GeneratePrimaryConk({
|
|
2378
2378
|
spaceId: this.contentSpaceId,
|
|
@@ -2384,7 +2384,7 @@ exports.CreateEncryptionConk = async function({libraryId, objectId, versionHash,
|
|
|
2384
2384
|
objectId,
|
|
2385
2385
|
writeToken,
|
|
2386
2386
|
metadataSubtree: capKey,
|
|
2387
|
-
metadata: await this.Crypto.EncryptConk(this.encryptionConks[objectId], this.signer.
|
|
2387
|
+
metadata: await this.Crypto.EncryptConk(this.encryptionConks[objectId], this.signer._signingKey().publicKey)
|
|
2388
2388
|
});
|
|
2389
2389
|
}
|
|
2390
2390
|
|
|
@@ -2475,7 +2475,7 @@ exports.EncryptionConk = async function({libraryId, objectId, versionHash, write
|
|
|
2475
2475
|
});
|
|
2476
2476
|
|
|
2477
2477
|
if(existingUserCap) {
|
|
2478
|
-
this.encryptionConks[objectId] = await this.Crypto.DecryptCap(existingUserCap, this.signer.
|
|
2478
|
+
this.encryptionConks[objectId] = await this.Crypto.DecryptCap(existingUserCap, this.signer._signingKey().privateKey);
|
|
2479
2479
|
} else if(writeToken) {
|
|
2480
2480
|
await this.CreateEncryptionConk({libraryId, objectId, versionHash, writeToken, createKMSConk: false});
|
|
2481
2481
|
} else {
|
|
@@ -656,7 +656,7 @@ exports.CopyContentObject = async function({libraryId, originalVersionHash, opti
|
|
|
656
656
|
const userCapKey = `eluv.caps.iusr${this.utils.AddressToHash(this.signer.address)}`;
|
|
657
657
|
|
|
658
658
|
if(metadata[userCapKey]) {
|
|
659
|
-
const userConkKey = await this.Crypto.DecryptCap(metadata[userCapKey], this.signer.
|
|
659
|
+
const userConkKey = await this.Crypto.DecryptCap(metadata[userCapKey], this.signer._signingKey().privateKey);
|
|
660
660
|
userConkKey.qid = objectId;
|
|
661
661
|
|
|
662
662
|
await this.ReplaceMetadata({
|
|
@@ -664,7 +664,7 @@ exports.CopyContentObject = async function({libraryId, originalVersionHash, opti
|
|
|
664
664
|
objectId,
|
|
665
665
|
writeToken,
|
|
666
666
|
metadataSubtree: userCapKey,
|
|
667
|
-
metadata: await this.Crypto.EncryptConk(userConkKey, this.signer.
|
|
667
|
+
metadata: await this.Crypto.EncryptConk(userConkKey, this.signer._signingKey().publicKey)
|
|
668
668
|
});
|
|
669
669
|
}
|
|
670
670
|
|
|
@@ -709,7 +709,7 @@ exports.CreateNonOwnerCap = async function({objectId, libraryId, publicKey, writ
|
|
|
709
709
|
throw Error("No user cap found for current user");
|
|
710
710
|
}
|
|
711
711
|
|
|
712
|
-
const userConk = await this.Crypto.DecryptCap(userCapValue, this.signer.
|
|
712
|
+
const userConk = await this.Crypto.DecryptCap(userCapValue, this.signer._signingKey().privateKey);
|
|
713
713
|
|
|
714
714
|
const publicAddress = this.utils.PublicKeyToAddress(publicKey);
|
|
715
715
|
|
|
@@ -749,6 +749,7 @@ exports.CreateNonOwnerCap = async function({objectId, libraryId, publicKey, writ
|
|
|
749
749
|
* @param {object=} options -
|
|
750
750
|
* meta: New metadata for the object - will be merged into existing metadata if specified
|
|
751
751
|
* type: New type for the object - Object ID, version hash or name of type
|
|
752
|
+
* nodeUrl: Node URL to use in HTTP call
|
|
752
753
|
*
|
|
753
754
|
* @returns {Promise<object>} - Response containing the object ID and write token of the draft, as well as URL of node handling the draft
|
|
754
755
|
*/
|
|
@@ -778,7 +779,8 @@ exports.EditContentObject = async function({libraryId, objectId, options={}}) {
|
|
|
778
779
|
headers: await this.authClient.AuthorizationHeader({libraryId, objectId, update: true}),
|
|
779
780
|
method: "POST",
|
|
780
781
|
path: path,
|
|
781
|
-
body: options
|
|
782
|
+
body: options,
|
|
783
|
+
nodeUrl: options.nodeUrl
|
|
782
784
|
});
|
|
783
785
|
|
|
784
786
|
const actualUrl = new URL(rawEditResponse.url);
|
|
@@ -1052,7 +1054,7 @@ exports.PublishContentVersion = async function({objectId, versionHash, awaitComm
|
|
|
1052
1054
|
});
|
|
1053
1055
|
|
|
1054
1056
|
const confirmEvent = events.find(blockEvents =>
|
|
1055
|
-
blockEvents.find(event => objectHash === (event && event.
|
|
1057
|
+
blockEvents.find(event => objectHash === (event && event.args && event.args.objectHash))
|
|
1056
1058
|
);
|
|
1057
1059
|
|
|
1058
1060
|
if(confirmEvent) {
|
package/src/client/Contracts.js
CHANGED
|
@@ -455,7 +455,7 @@ exports.ExtractEventFromLogs = function({abi, event, eventName}) {
|
|
|
455
455
|
*/
|
|
456
456
|
exports.ExtractValueFromEvent = function({abi, event, eventName, eventValue}) {
|
|
457
457
|
const eventLog = this.ethClient.ExtractEventFromLogs({abi, event, eventName, eventValue});
|
|
458
|
-
return eventLog ? eventLog.
|
|
458
|
+
return eventLog ? eventLog.args[eventValue] : undefined;
|
|
459
459
|
};
|
|
460
460
|
|
|
461
461
|
exports.FormatBlockNumbers = async function({fromBlock, toBlock, count=10}) {
|
package/testScripts/Test.js
CHANGED
|
@@ -2,50 +2,21 @@ const { ElvClient } = require("../src/ElvClient");
|
|
|
2
2
|
const { ElvWalletClient } = require("../src/walletClient/index");
|
|
3
3
|
const ClientConfiguration = require("../TestConfiguration.json");
|
|
4
4
|
|
|
5
|
+
const ethers = require("ethers");
|
|
6
|
+
|
|
5
7
|
const Test = async () => {
|
|
6
8
|
try {
|
|
7
|
-
|
|
8
|
-
const client = await ElvClient.
|
|
9
|
-
|
|
9
|
+
|
|
10
|
+
const client = await ElvClient.FromNetworkName({
|
|
11
|
+
networkName: "demo"
|
|
10
12
|
});
|
|
11
13
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
const wallet = client.GenerateWallet();
|
|
15
|
+
const signer = wallet.AddAccount({
|
|
14
16
|
privateKey: process.env.PRIVATE_KEY
|
|
15
17
|
});
|
|
16
18
|
|
|
17
19
|
client.SetSigner({signer});
|
|
18
|
-
|
|
19
|
-
*/
|
|
20
|
-
//const idToken = "eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMCIsInppcCI6IkRlZmxhdGUiLCJzZXIiOiIxLjAifQ..-hVeBqfPm9f0dsZ_.h7ECJlFBsX1y8rfAVanFXoper2YBRd_yH3HyJiyV5fZJ-GGxMJR8y7gP_YIWS1D-zps4fR2QkFZ1j7DZKHQwZH0kOkCq-OYyNvLDHulF-uIY1HW9U-yfpyPO2K6Ukr0QcUvGASB7RyqqVLhvDAxCBYTpm4vEHo9DQrVal--9YlkdGogeF6HLLfYoFFCGdjb5korzaQIKyWTP4LsDDTZXITcCjHaCR9GC8rNHOybLy58IbEjukvJzooKpaRxzp20OuKr96-TDApKpklpCDCgiCsCvnOj5-CxhI10rs4frsFKF4s4d2RAa93RLplzy2SLJkg9zRe6cyezp9APZYGRUHb2wjEK8YXH0-_Uus48OIfPJQIbA-BatMHZUMTUJ9ZnYRCIL2FrIRu3QcaBR1KL2DYOJLVC3uQvNwUYV0_Yxr4CgooP2e6wb0Y61d5qU_O649XjIXIqHn0slr9lcAufIrG1or5D9Gc-yliF9BCoRZQi3Zgm80L6T3imO0XT8J3abTJpBJ9PtoW5cADPKEXz5GAENkjjay3YUyC4ZX_3u0ZdaNTOd8JAL6wKQRI3lBfJS_77MkTk8ea2JDCX4MJjYCIVOpIo_YVNOmx9cQEPSZiQ5.ZPc2LOM-vuHeZBrETCCOaA";
|
|
21
|
-
//const idToken = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Inlwd1ZUbXJkWENkYU5tcjAzVGRDaCJ9.eyJodHRwczovL2F1dGguY29udGVudGZhYnJpYy5pby9nZW8iOnsiY291bnRyeV9jb2RlIjoiVVMiLCJjb3VudHJ5X2NvZGUzIjoiVVNBIiwiY291bnRyeV9uYW1lIjoiVW5pdGVkIFN0YXRlcyIsImNpdHlfbmFtZSI6IkZvbHNvbSIsImxhdGl0dWRlIjozOC42NzExLCJsb25naXR1ZGUiOi0xMjEuMTQ5NSwidGltZV96b25lIjoiQW1lcmljYS9Mb3NfQW5nZWxlcyIsImNvbnRpbmVudF9jb2RlIjoiTkEiLCJzdWJkaXZpc2lvbl9jb2RlIjoiQ0EiLCJzdWJkaXZpc2lvbl9uYW1lIjoiQ2FsaWZvcm5pYSJ9LCJuaWNrbmFtZSI6ImtldmluKzciLCJuYW1lIjoia2V2aW4rN0BlbHV2LmlvIiwicGljdHVyZSI6Imh0dHBzOi8vcy5ncmF2YXRhci5jb20vYXZhdGFyL2ZkNDMxN2Y4ZjdmMzBjNTVkZTA2YTI5Y2ExY2I2OWYxP3M9NDgwJnI9cGcmZD1odHRwcyUzQSUyRiUyRmNkbi5hdXRoMC5jb20lMkZhdmF0YXJzJTJGa2UucG5nIiwidXBkYXRlZF9hdCI6IjIwMjItMDctMjJUMjE6NTU6MjkuOTQ4WiIsImVtYWlsIjoia2V2aW4rN0BlbHV2LmlvIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJpc3MiOiJodHRwczovL2F1dGguY29udGVudGZhYnJpYy5pby8iLCJzdWIiOiJhdXRoMHw2MTY2NzcxNzg5OWI5MjAwNzBmMzRhYzQiLCJhdWQiOiJPTnl1YlA5ckZJNUJIem1ZZ2xRS0JaMWJCYml5b0IzUyIsImlhdCI6MTY1ODUyNzA1NywiZXhwIjoxNjU4NTYzMDU3LCJub25jZSI6Ilh6a3pUakF1VW5CRFgwVTVkR1pxU0dWK2JHazFjVXArUlZOamJWTlhlbFZzUzJSSWFUZE9hSEJsT1E9PSJ9.nLH00sOatOcuIv-QPgCp6Pjm565RpLqqy3VOtzJt9p2rSsIBgJxfl6j1zuFQV_H5UquYTx15BNN3_WglqVXF7U-aCb7ozsYsQCl4nv8rjumkla2pRUGCFt89B7-NR8yGXr9eak6IgE6ADe6uqiM10CWmxp8BI3Z1PficNGVDUcwmrTW_IeDFyqTw_gedDVAeYcd79xMGR5exqiHD6P2AljXKAXzNaaAVrRbBp1FBrNZnuD97k-EDta6G6lr1qqN1Gc2oS2vTrfjPjmHMBtz99_UYSrfPjPSrRMpPi9Vt3YTzEBTb-BTOKG1SSfBVHkxOqIRO1ZlNxE_bPCMJXwhSVA"
|
|
22
|
-
//const idToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJleHAiOjE2NTg1MjkwMTQsIm5iZiI6MTY1ODUyODcxNCwidmVyIjoiMS4wIiwiaXNzIjoiaHR0cHM6Ly93ZGNiMmMuYjJjbG9naW4uY29tL3RmcC9mYWVhYTg5ZS02YTA1LTRjMzEtOGJkNS01MGRlNWNkNGQyZTEvYjJjXzFfbXNfc2lnbl91cF9pbi92Mi4wLyIsInN1YiI6IjVhYWIyOWNiLWRiZDMtNDM1ZS04MzViLTlmYmFkYTBkODg2MyIsImF1ZCI6ImFjYjQ3MjMzLTk3ZDUtNGFjMy04OWQzLTdkMTUzNjFjMjYzNiIsImlhdCI6MTY1ODUyODcxNCwiYXV0aF90aW1lIjoxNjU4NTI4NzAxLCJpZHAiOiJsaXZlLmNvbSIsImVtYWlscyI6WyJrZXZpbkBlbHV2LmlvIl0sInRmcCI6IkIyQ18xX21zX3NpZ25fdXBfaW4ifQ.H9-YrUQFDBM8potZpGJsNA1roQ15SiBUg40_C9XVy5LQ6thGKuM7TzxJj1ALViwLTEL1ytL5r6g8r0tVYWOiQwfU1W7m7m0rK4D6VJ-pby69o0f4jZaqdWLak-ALncxAl1IOaxtDD2vpmx8XTT8Qabp8DImzK9xzc0bAUirPERUK08lJ3LR8bZjH2TaLMvEii9i-Ss0kZoSvdZI_a4xQqXcU2knJ-2Ds-S-upAAq70lMnSlmG16-MGHM2ZGtz7w6O2FoS9CRs0QI9FBtziSEVMAVigKIMLtWcJwPOnFDeCv_qY2TpOabUzyjfm0DZDlcQRnNjV6i0LfwYLyNWGmcHg";
|
|
23
|
-
const idToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhTmsifQ.eyJleHAiOjE2NTg1MzAyMjYsIm5iZiI6MTY1ODUyOTkyNiwidmVyIjoiMS4wIiwiaXNzIjoiaHR0cHM6Ly93ZGNiMmMuYjJjbG9naW4uY29tL3RmcC9mYWVhYTg5ZS02YTA1LTRjMzEtOGJkNS01MGRlNWNkNGQyZTEvYjJjXzFfbXNfc2lnbl91cF9pbi92Mi4wLyIsInN1YiI6IjVhYWIyOWNiLWRiZDMtNDM1ZS04MzViLTlmYmFkYTBkODg2MyIsImF1ZCI6ImFjYjQ3MjMzLTk3ZDUtNGFjMy04OWQzLTdkMTUzNjFjMjYzNiIsImlhdCI6MTY1ODUyOTkyNiwiYXV0aF90aW1lIjoxNjU4NTI5OTA2LCJpZHAiOiJsaXZlLmNvbSIsImVtYWlscyI6WyJrZXZpbkBlbHV2LmlvIl0sInRmcCI6IkIyQ18xX21zX3NpZ25fdXBfaW4ifQ.H1rbbrKCzU2dkdWe62GCTlOHACLbr8IV8UDiL1nukyerGrBVq_LtguLJAOjKO1jBClyJDOTMgI9y1wGb1zHdF2tCeN75wNwXCUUC5hn_TcemLOgp-haAEMC7KFFdR-4K_5A7IUUW9IqOQciE5DKNCKRDOKVNsDoMg7eV3VFp8QSeSCp7OGWL9FI1dWLmD6D_uoHfyYxE96LPrB-VCveCThQgsLMb6QE072S05w8ZM8CGxbLXcgKWG3VVaKT95e1e0NlDWQYlQQGFMBirUISpA3D82q3Wm4QlrANfGv49oypdnj-T4Uclu6pVnNwLvCIisj5w2GLobiyyyqMhEEsI1Q";
|
|
24
|
-
|
|
25
|
-
const client = await ElvWalletClient.Initialize({
|
|
26
|
-
network: "demo",
|
|
27
|
-
mode: "staging"
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
/*
|
|
31
|
-
console.log(
|
|
32
|
-
await client.AuthenticateOAuth({
|
|
33
|
-
idToken,
|
|
34
|
-
signerURIs: [
|
|
35
|
-
"https://wlt.stg.svc.eluv.io"
|
|
36
|
-
]
|
|
37
|
-
})
|
|
38
|
-
);
|
|
39
|
-
|
|
40
|
-
*/
|
|
41
|
-
|
|
42
|
-
await client.Authenticate({
|
|
43
|
-
token: "DYxK5cLMW5ofVh3pU23TmbAzkpFAsYrQQLsantU3uHFCJgyAjNoRHE7HvSCbQzZx1F33JM65R6oWZ1ZLYPEUhfA3WrnN9emo69A6AAKyFNBecKSFn3T6PP5MxMMPZRwN6AgwmuRgZMJQthF1xo7cMUqVwZCXtdHARYSrTHoRe3QMPggd6EJ6MzK7WHv2Sb7MPGGyVCR8uC4mK9SbncNm77Fj4H2LWxQpQggnF579GWv3SwAYiUBhbtgnfw6WEzyo1ZmBTV8vSkMiDAyBoMC138nokWNZc6DkpBNkyn6z3GwszoPsdXezKv7vANEVF6rrD3odbjosJpRoWbeEoPkebjoVySTgU8ywJybCDzeoFcg2XC1FQ4nyBhv5o3UVyXWispw3hN7oNs65vt9DaXmXwy45HzG3vL7PNdK8qviBg5XttCHUxkQ2aeYXTXcUzBYJ34PgDTXPBUwrj7a5FBa3gyC42eu48DAyxaFtV6GC5SXJCczTgQW6DPTrXiwzyEkBbVCoyDbMepaAA5MWH5WmpeWWzuexbHhKd3qW2ukWMHyjJpwAy1aUMZXGrAx3eGjTTmev342DqsV8ECHw9zPuzKv7MufkU7A9N9Wgi6jWoZXZvbMySxuRo81CV7XQZ6Zvcfy2xXFbtu5rgYA1xxhZaGZBioMUgT3HwEo1eqJuvs7r1QW3t1mMx9zbAJDTJtHFsYu4nkvyrDHQwDgKvQmnzSDhUs7yxeKeVKeFi2wy4QkXz56VJKxp3CtB9gM8qMLP3eUg1B3BRaNH8uPmy7qVYn3wn9epwPA2fDwR6MbunU5C4kx7rTbZmiQtKW4VUVP8iL6MvVy6Wx3NEXCeTmaSDz2BAfkrv7zFmC9ERyeqfrPvCYDyeTV2PHA6vVmdh5cXo6meJWKCD6jc5QAd6J7D1hJw6PWP8gyUQZGtZ6Xd9v82v3cP1L6njMWc4kpivB41mUF7Q86Zy8EoZ2xYhFrU3MoUuNPV3ApVKRqUmcL4cpKhbcSCgPi8QvnhUCjZGyEtxLwzCaRhXa"
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
console.log(
|
|
47
|
-
await client.PersonalSign({message: "test"})
|
|
48
|
-
)
|
|
49
20
|
} catch(error) {
|
|
50
21
|
console.error(error);
|
|
51
22
|
console.error(JSON.stringify(error, null, 2));
|
|
@@ -660,17 +660,17 @@
|
|
|
660
660
|
},
|
|
661
661
|
{
|
|
662
662
|
"bit_rate": 810000,
|
|
663
|
-
"height":
|
|
663
|
+
"height": 640,
|
|
664
664
|
"media_type": "video",
|
|
665
665
|
"pregenerate": false,
|
|
666
|
-
"width":
|
|
666
|
+
"width": 360
|
|
667
667
|
},
|
|
668
668
|
{
|
|
669
669
|
"bit_rate": 520000,
|
|
670
|
-
"height":
|
|
670
|
+
"height": 640,
|
|
671
671
|
"media_type": "video",
|
|
672
672
|
"pregenerate": false,
|
|
673
|
-
"width":
|
|
673
|
+
"width": 360
|
|
674
674
|
}
|
|
675
675
|
]
|
|
676
676
|
},
|
|
@@ -660,17 +660,17 @@
|
|
|
660
660
|
},
|
|
661
661
|
{
|
|
662
662
|
"bit_rate": 810000,
|
|
663
|
-
"height":
|
|
663
|
+
"height": 640,
|
|
664
664
|
"media_type": "video",
|
|
665
665
|
"pregenerate": false,
|
|
666
|
-
"width":
|
|
666
|
+
"width": 360
|
|
667
667
|
},
|
|
668
668
|
{
|
|
669
669
|
"bit_rate": 520000,
|
|
670
|
-
"height":
|
|
670
|
+
"height": 640,
|
|
671
671
|
"media_type": "video",
|
|
672
672
|
"pregenerate": false,
|
|
673
|
-
"width":
|
|
673
|
+
"width": 360
|
|
674
674
|
}
|
|
675
675
|
]
|
|
676
676
|
},
|
|
@@ -660,17 +660,17 @@
|
|
|
660
660
|
},
|
|
661
661
|
{
|
|
662
662
|
"bit_rate": 810000,
|
|
663
|
-
"height":
|
|
663
|
+
"height": 640,
|
|
664
664
|
"media_type": "video",
|
|
665
665
|
"pregenerate": false,
|
|
666
|
-
"width":
|
|
666
|
+
"width": 360
|
|
667
667
|
},
|
|
668
668
|
{
|
|
669
669
|
"bit_rate": 520000,
|
|
670
|
-
"height":
|
|
670
|
+
"height": 640,
|
|
671
671
|
"media_type": "video",
|
|
672
672
|
"pregenerate": false,
|
|
673
|
-
"width":
|
|
673
|
+
"width": 360
|
|
674
674
|
}
|
|
675
675
|
]
|
|
676
676
|
},
|
|
@@ -660,17 +660,17 @@
|
|
|
660
660
|
},
|
|
661
661
|
{
|
|
662
662
|
"bit_rate": 810000,
|
|
663
|
-
"height":
|
|
663
|
+
"height": 640,
|
|
664
664
|
"media_type": "video",
|
|
665
665
|
"pregenerate": false,
|
|
666
|
-
"width":
|
|
666
|
+
"width": 360
|
|
667
667
|
},
|
|
668
668
|
{
|
|
669
669
|
"bit_rate": 520000,
|
|
670
|
-
"height":
|
|
670
|
+
"height": 640,
|
|
671
671
|
"media_type": "video",
|
|
672
672
|
"pregenerate": false,
|
|
673
|
-
"width":
|
|
673
|
+
"width": 360
|
|
674
674
|
}
|
|
675
675
|
]
|
|
676
676
|
},
|
|
@@ -660,17 +660,17 @@
|
|
|
660
660
|
},
|
|
661
661
|
{
|
|
662
662
|
"bit_rate": 810000,
|
|
663
|
-
"height":
|
|
663
|
+
"height": 640,
|
|
664
664
|
"media_type": "video",
|
|
665
665
|
"pregenerate": false,
|
|
666
|
-
"width":
|
|
666
|
+
"width": 360
|
|
667
667
|
},
|
|
668
668
|
{
|
|
669
669
|
"bit_rate": 520000,
|
|
670
|
-
"height":
|
|
670
|
+
"height": 640,
|
|
671
671
|
"media_type": "video",
|
|
672
672
|
"pregenerate": false,
|
|
673
|
-
"width":
|
|
673
|
+
"width": 360
|
|
674
674
|
}
|
|
675
675
|
]
|
|
676
676
|
},
|
|
@@ -660,17 +660,17 @@
|
|
|
660
660
|
},
|
|
661
661
|
{
|
|
662
662
|
"bit_rate": 810000,
|
|
663
|
-
"height":
|
|
663
|
+
"height": 640,
|
|
664
664
|
"media_type": "video",
|
|
665
665
|
"pregenerate": false,
|
|
666
|
-
"width":
|
|
666
|
+
"width": 360
|
|
667
667
|
},
|
|
668
668
|
{
|
|
669
669
|
"bit_rate": 520000,
|
|
670
|
-
"height":
|
|
670
|
+
"height": 640,
|
|
671
671
|
"media_type": "video",
|
|
672
672
|
"pregenerate": false,
|
|
673
|
-
"width":
|
|
673
|
+
"width": 360
|
|
674
674
|
}
|
|
675
675
|
]
|
|
676
676
|
},
|
|
@@ -660,17 +660,17 @@
|
|
|
660
660
|
},
|
|
661
661
|
{
|
|
662
662
|
"bit_rate": 810000,
|
|
663
|
-
"height":
|
|
663
|
+
"height": 640,
|
|
664
664
|
"media_type": "video",
|
|
665
665
|
"pregenerate": false,
|
|
666
|
-
"width":
|
|
666
|
+
"width": 360
|
|
667
667
|
},
|
|
668
668
|
{
|
|
669
669
|
"bit_rate": 520000,
|
|
670
|
-
"height":
|
|
670
|
+
"height": 640,
|
|
671
671
|
"media_type": "video",
|
|
672
672
|
"pregenerate": false,
|
|
673
|
-
"width":
|
|
673
|
+
"width": 360
|
|
674
674
|
}
|
|
675
675
|
]
|
|
676
676
|
},
|
|
@@ -660,17 +660,17 @@
|
|
|
660
660
|
},
|
|
661
661
|
{
|
|
662
662
|
"bit_rate": 810000,
|
|
663
|
-
"height":
|
|
663
|
+
"height": 640,
|
|
664
664
|
"media_type": "video",
|
|
665
665
|
"pregenerate": false,
|
|
666
|
-
"width":
|
|
666
|
+
"width": 360
|
|
667
667
|
},
|
|
668
668
|
{
|
|
669
669
|
"bit_rate": 520000,
|
|
670
|
-
"height":
|
|
670
|
+
"height": 640,
|
|
671
671
|
"media_type": "video",
|
|
672
672
|
"pregenerate": false,
|
|
673
|
-
"width":
|
|
673
|
+
"width": 360
|
|
674
674
|
}
|
|
675
675
|
]
|
|
676
676
|
},
|
|
@@ -660,17 +660,17 @@
|
|
|
660
660
|
},
|
|
661
661
|
{
|
|
662
662
|
"bit_rate": 810000,
|
|
663
|
-
"height":
|
|
663
|
+
"height": 640,
|
|
664
664
|
"media_type": "video",
|
|
665
665
|
"pregenerate": false,
|
|
666
|
-
"width":
|
|
666
|
+
"width": 360
|
|
667
667
|
},
|
|
668
668
|
{
|
|
669
669
|
"bit_rate": 520000,
|
|
670
|
-
"height":
|
|
670
|
+
"height": 640,
|
|
671
671
|
"media_type": "video",
|
|
672
672
|
"pregenerate": false,
|
|
673
|
-
"width":
|
|
673
|
+
"width": 360
|
|
674
674
|
}
|
|
675
675
|
]
|
|
676
676
|
},
|