@eluvio/elv-client-js 4.2.5 → 4.2.7
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/package.json +1 -1
- package/src/ElvClient.js +1 -1
- package/src/client/ABRPublishing.js +1 -1
- package/src/client/LiveStream.js +77 -50
- package/src/walletClient/index.js +6 -2
package/package.json
CHANGED
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.
|
|
1263
|
+
let token = { qspace_id: this.contentSpaceId };
|
|
1264
1264
|
|
|
1265
1265
|
if(libraryId) {
|
|
1266
1266
|
token.qlib_id = libraryId;
|
|
@@ -323,7 +323,7 @@ exports.CreateABRMezzanine = async function({
|
|
|
323
323
|
// determine master object id if a master write token was passed in
|
|
324
324
|
ValidateWriteToken(masterWriteToken);
|
|
325
325
|
masterObjectId = this.utils.DecodeWriteToken(masterWriteToken).objectId;
|
|
326
|
-
masterLibId = await client.ContentObjectLibraryId({masterObjectId});
|
|
326
|
+
masterLibId = await client.ContentObjectLibraryId({objectId: masterObjectId});
|
|
327
327
|
}
|
|
328
328
|
|
|
329
329
|
// if pre-existing mez object id passed in, validate
|
package/src/client/LiveStream.js
CHANGED
|
@@ -69,6 +69,7 @@ const CueInfo = async ({eventId, status}) => {
|
|
|
69
69
|
* @param {Object} client - The client object
|
|
70
70
|
* @param {string} libraryId - ID of the library for the new live stream object
|
|
71
71
|
* @param {string} objectId - ID of the new live stream object
|
|
72
|
+
* @param {string=} writeToken - Write token of the draft
|
|
72
73
|
* @param {string=} typeAbrMaster - Content type hash
|
|
73
74
|
* @param {string=} typeLiveStream - Content type hash
|
|
74
75
|
* @param {string} streamUrl - Live source URL
|
|
@@ -93,6 +94,7 @@ const StreamGenerateOffering = async({
|
|
|
93
94
|
client,
|
|
94
95
|
libraryId,
|
|
95
96
|
objectId,
|
|
97
|
+
writeToken,
|
|
96
98
|
typeAbrMaster,
|
|
97
99
|
typeLiveStream,
|
|
98
100
|
streamUrl,
|
|
@@ -109,7 +111,8 @@ const StreamGenerateOffering = async({
|
|
|
109
111
|
vWidth,
|
|
110
112
|
vDisplayAspectRatio,
|
|
111
113
|
vFrameRate,
|
|
112
|
-
vTimeBase
|
|
114
|
+
vTimeBase,
|
|
115
|
+
finalize=true
|
|
113
116
|
}) => {
|
|
114
117
|
// compute duration_ts
|
|
115
118
|
const DUMMY_DURATION = 1001; // should result in integer duration_ts values for both audio and video
|
|
@@ -232,27 +235,29 @@ const StreamGenerateOffering = async({
|
|
|
232
235
|
// construct /production_master
|
|
233
236
|
const production_master = {sources, variants};
|
|
234
237
|
|
|
238
|
+
const existingWriteToken = !!writeToken;
|
|
239
|
+
|
|
235
240
|
// get existing metadata
|
|
236
241
|
console.log("Retrieving current metadata...");
|
|
237
242
|
let metadata = await client.ContentObjectMetadata({
|
|
238
243
|
libraryId,
|
|
239
|
-
objectId
|
|
244
|
+
objectId,
|
|
245
|
+
writeToken
|
|
240
246
|
});
|
|
241
247
|
|
|
242
248
|
// add /production_master to metadata
|
|
243
249
|
metadata.production_master = production_master;
|
|
244
250
|
|
|
245
251
|
// write back to object
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
console.log(`New write token: ${writeToken}`);
|
|
252
|
+
if(!writeToken) {
|
|
253
|
+
({writeToken} = await client.EditContentObject({
|
|
254
|
+
libraryId,
|
|
255
|
+
objectId,
|
|
256
|
+
options: {
|
|
257
|
+
type: typeAbrMaster
|
|
258
|
+
}
|
|
259
|
+
}));
|
|
260
|
+
}
|
|
256
261
|
|
|
257
262
|
console.log("Writing back metadata with /production_master added...");
|
|
258
263
|
await client.ReplaceMetadata({
|
|
@@ -262,20 +267,23 @@ const StreamGenerateOffering = async({
|
|
|
262
267
|
writeToken
|
|
263
268
|
});
|
|
264
269
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
270
|
+
let finalizeResponse, masterVersionHash;
|
|
271
|
+
if(!existingWriteToken) {
|
|
272
|
+
finalizeResponse = await client.FinalizeContentObject({
|
|
273
|
+
libraryId,
|
|
274
|
+
objectId,
|
|
275
|
+
writeToken
|
|
276
|
+
});
|
|
277
|
+
masterVersionHash = finalizeResponse.hash;
|
|
278
|
+
}
|
|
273
279
|
|
|
274
280
|
// Generate offering
|
|
275
281
|
const createResponse = await client.CreateABRMezzanine({
|
|
276
282
|
libraryId,
|
|
277
283
|
objectId,
|
|
278
|
-
masterVersionHash,
|
|
284
|
+
masterVersionHash: existingWriteToken ? undefined : masterVersionHash,
|
|
285
|
+
masterWriteToken: existingWriteToken ? writeToken : undefined,
|
|
286
|
+
writeToken: existingWriteToken ? writeToken : undefined,
|
|
279
287
|
variant: "default",
|
|
280
288
|
offeringKey: "default",
|
|
281
289
|
abrProfile
|
|
@@ -292,13 +300,14 @@ const StreamGenerateOffering = async({
|
|
|
292
300
|
}
|
|
293
301
|
|
|
294
302
|
let versionHash = createResponse.hash;
|
|
295
|
-
console.log(`New version hash: ${versionHash}`);
|
|
296
303
|
|
|
297
304
|
// get new metadata
|
|
298
305
|
console.log("Retrieving revised metadata with offering...");
|
|
299
306
|
metadata = await client.ContentObjectMetadata({
|
|
300
307
|
libraryId,
|
|
301
|
-
|
|
308
|
+
objectId,
|
|
309
|
+
writeToken: existingWriteToken ? writeToken : undefined,
|
|
310
|
+
versionHash: existingWriteToken ? undefined : versionHash
|
|
302
311
|
});
|
|
303
312
|
|
|
304
313
|
console.log("Moving /abr_mezzanine/offerings to /offerings and removing /abr_mezzanine...");
|
|
@@ -308,18 +317,6 @@ const StreamGenerateOffering = async({
|
|
|
308
317
|
// add items to media_struct needed to use options.json handler
|
|
309
318
|
metadata.offerings.default.media_struct.duration_rat = `${DUMMY_DURATION}`;
|
|
310
319
|
|
|
311
|
-
// write back to object
|
|
312
|
-
console.log("Getting write token...");
|
|
313
|
-
editResponse = await client.EditContentObject({
|
|
314
|
-
libraryId,
|
|
315
|
-
objectId,
|
|
316
|
-
options: {
|
|
317
|
-
type: typeLiveStream
|
|
318
|
-
}
|
|
319
|
-
});
|
|
320
|
-
writeToken = editResponse.write_token;
|
|
321
|
-
console.log(`New write token: ${writeToken}`);
|
|
322
|
-
|
|
323
320
|
console.log("Writing back metadata with /offerings...");
|
|
324
321
|
await client.ReplaceMetadata({
|
|
325
322
|
libraryId,
|
|
@@ -328,17 +325,19 @@ const StreamGenerateOffering = async({
|
|
|
328
325
|
writeToken
|
|
329
326
|
});
|
|
330
327
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
console.log(`Finalized, new version hash: ${finalHash}`);
|
|
328
|
+
if(finalize) {
|
|
329
|
+
console.log("Finalizing...");
|
|
330
|
+
finalizeResponse = await client.FinalizeContentObject({
|
|
331
|
+
libraryId,
|
|
332
|
+
objectId,
|
|
333
|
+
writeToken,
|
|
334
|
+
commitMessage: "Update offering"
|
|
335
|
+
});
|
|
340
336
|
|
|
341
|
-
|
|
337
|
+
const finalHash = finalizeResponse.hash;
|
|
338
|
+
console.log(`Finalized, new version hash: ${finalHash}`);
|
|
339
|
+
return finalHash;
|
|
340
|
+
}
|
|
342
341
|
};
|
|
343
342
|
|
|
344
343
|
/**
|
|
@@ -947,10 +946,18 @@ exports.StreamStopSession = async function({name}) {
|
|
|
947
946
|
* @param {string=} format - Specify the list of playout formats and DRM to support,
|
|
948
947
|
comma-separated (hls-clear, hls-aes128, hls-sample-aes,
|
|
949
948
|
hls-fairplay)
|
|
949
|
+
* @param {string=} writeToken - Write token of the draft
|
|
950
|
+
* @param {boolean=} finalize - If enabled, target object will be finalized after configuration
|
|
950
951
|
*
|
|
951
952
|
* @return {Promise<Object>} - The name, object ID, and state of the stream
|
|
952
953
|
*/
|
|
953
|
-
exports.StreamInitialize = async function({
|
|
954
|
+
exports.StreamInitialize = async function({
|
|
955
|
+
name,
|
|
956
|
+
drm=false,
|
|
957
|
+
format,
|
|
958
|
+
writeToken,
|
|
959
|
+
finalize=true
|
|
960
|
+
}) {
|
|
954
961
|
let typeAbrMaster;
|
|
955
962
|
let typeLiveStream;
|
|
956
963
|
|
|
@@ -979,7 +986,15 @@ exports.StreamInitialize = async function({name, drm=false, format}) {
|
|
|
979
986
|
return {};
|
|
980
987
|
}
|
|
981
988
|
|
|
982
|
-
const res = await this.StreamSetOfferingAndDRM({
|
|
989
|
+
const res = await this.StreamSetOfferingAndDRM({
|
|
990
|
+
name,
|
|
991
|
+
typeAbrMaster,
|
|
992
|
+
typeLiveStream,
|
|
993
|
+
drm,
|
|
994
|
+
format,
|
|
995
|
+
writeToken,
|
|
996
|
+
finalize
|
|
997
|
+
});
|
|
983
998
|
|
|
984
999
|
return res;
|
|
985
1000
|
};
|
|
@@ -996,10 +1011,19 @@ exports.StreamInitialize = async function({name, drm=false, format}) {
|
|
|
996
1011
|
* @param {string=} format - A list of playout formats and DRM to support, comma-separated
|
|
997
1012
|
* (hls-clear, hls-aes128, hls-sample-aes, hls-fairplay). If specified,
|
|
998
1013
|
* this will take precedence over the drm value
|
|
1014
|
+
* @param {string=} writeToken - Write token of the draft
|
|
999
1015
|
*
|
|
1000
1016
|
* @return {Promise<Object>} - The name, object ID, and state of the stream
|
|
1001
1017
|
*/
|
|
1002
|
-
exports.StreamSetOfferingAndDRM = async function({
|
|
1018
|
+
exports.StreamSetOfferingAndDRM = async function({
|
|
1019
|
+
name,
|
|
1020
|
+
typeAbrMaster,
|
|
1021
|
+
typeLiveStream,
|
|
1022
|
+
drm=false,
|
|
1023
|
+
format,
|
|
1024
|
+
writeToken,
|
|
1025
|
+
finalize=true
|
|
1026
|
+
}) {
|
|
1003
1027
|
let status = await this.StreamStatus({name});
|
|
1004
1028
|
if(status.state != "uninitialized" && status.state != "inactive" && status.state != "stopped") {
|
|
1005
1029
|
return {
|
|
@@ -1088,7 +1112,8 @@ exports.StreamSetOfferingAndDRM = async function({name, typeAbrMaster, typeLiveS
|
|
|
1088
1112
|
try {
|
|
1089
1113
|
let mainMeta = await this.ContentObjectMetadata({
|
|
1090
1114
|
libraryId,
|
|
1091
|
-
objectId
|
|
1115
|
+
objectId,
|
|
1116
|
+
writeToken
|
|
1092
1117
|
});
|
|
1093
1118
|
|
|
1094
1119
|
let fabURI = mainMeta.live_recording.fabric_config.ingress_node_api;
|
|
@@ -1122,7 +1147,9 @@ exports.StreamSetOfferingAndDRM = async function({name, typeAbrMaster, typeLiveS
|
|
|
1122
1147
|
vWidth,
|
|
1123
1148
|
vDisplayAspectRatio,
|
|
1124
1149
|
vFrameRate,
|
|
1125
|
-
vTimeBase
|
|
1150
|
+
vTimeBase,
|
|
1151
|
+
writeToken,
|
|
1152
|
+
finalize
|
|
1126
1153
|
});
|
|
1127
1154
|
|
|
1128
1155
|
console.log("Finished generating offering");
|
|
@@ -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,
|