@eluvio/elv-client-js 4.2.16 → 4.2.17
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 +1 -1
- package/dist/ElvClient-node-min.js +1 -1
- package/dist/ElvFrameClient-min.js +1 -1
- package/dist/ElvPermissionsClient-min.js +1 -1
- package/dist/ElvWalletClient-min.js +1 -1
- package/dist/ElvWalletClient-node-min.js +1 -1
- package/dist/src/AuthorizationClient.js +2 -1
- package/dist/src/ContentObjectAudit.js +2 -1
- package/dist/src/ContentObjectVerification.js +281 -0
- package/dist/src/ElvClient.js +8 -9
- package/dist/src/FrameClient.js +1 -1
- package/dist/src/HttpClient.js +83 -47
- package/dist/src/NetworkUrls.js +8 -0
- package/dist/src/abr_profiles/abr_profile_live_drm.js +0 -10
- package/dist/src/client/ContentAccess.js +76 -85
- package/dist/src/client/LiveConf.js +170 -84
- package/dist/src/client/LiveStream.js +5205 -2118
- package/dist/src/live_recording_config_profiles/live_recording_config_default.js +45 -0
- package/package.json +3 -2
- package/src/FrameClient.js +23 -2
- package/src/abr_profiles/abr_profile_live_drm.js +0 -10
- package/src/client/ContentAccess.js +1 -2
- package/src/client/LiveConf.js +149 -65
- package/src/client/LiveStream.js +2592 -654
- package/src/live_recording_config_profiles/live_recording_config_default.js +54 -0
- package/src/live_recording_config_profiles/live_stream_profile_full.json +143 -0
- package/testScripts/StreamUpdateLinks.js +95 -0
- package/utilities/LiveOutputs.js +149 -0
- package/utilities/StreamCreate.js +53 -0
- package/utilities/lib/helpers.js +5 -1
- package/utilities/tests/mocks/ElvClient.mock.js +9 -1
- package/utilities/tests/unit/StreamCreate.test.js +39 -0
|
@@ -1775,7 +1775,8 @@ var AuthorizationClient = /*#__PURE__*/function () {
|
|
|
1775
1775
|
throw Error("No KMS info set for ".concat(versionHash || objectId || "default KMS"));
|
|
1776
1776
|
case 15:
|
|
1777
1777
|
kmsHttpClient = new HttpClient({
|
|
1778
|
-
uris: kmsUrls
|
|
1778
|
+
uris: kmsUrls,
|
|
1779
|
+
networkName: this.client.networkName
|
|
1779
1780
|
});
|
|
1780
1781
|
_context24.next = 18;
|
|
1781
1782
|
return kmsHttpClient.Request({
|
|
@@ -69,7 +69,8 @@ var ContentObjectAudit = {
|
|
|
69
69
|
return s.indexOf(v) === i;
|
|
70
70
|
});
|
|
71
71
|
httpClient = new HttpClient({
|
|
72
|
-
uris: uris
|
|
72
|
+
uris: uris,
|
|
73
|
+
networkName: client.networkName
|
|
73
74
|
});
|
|
74
75
|
path = UrlJoin("qlibs", libraryId, "q", versionHash || objectId, live ? "call/live/audit" : "audit");
|
|
75
76
|
_context.t4 = httpClient;
|
|
@@ -0,0 +1,281 @@
|
|
|
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;
|
package/dist/src/ElvClient.js
CHANGED
|
@@ -20,6 +20,7 @@ var HttpClient = require("./HttpClient");
|
|
|
20
20
|
var RemoteSigner = require("./RemoteSigner");
|
|
21
21
|
var Utils = require("./Utils");
|
|
22
22
|
var Crypto = require("./Crypto");
|
|
23
|
+
var NetworkUrls = require("./NetworkUrls");
|
|
23
24
|
var _require = require("./LogMessage"),
|
|
24
25
|
LogMessage = _require.LogMessage;
|
|
25
26
|
var Pako = require("pako");
|
|
@@ -27,13 +28,6 @@ var _require2 = require("./Validation"),
|
|
|
27
28
|
ValidatePresence = _require2.ValidatePresence,
|
|
28
29
|
ValidateWriteToken = _require2.ValidateWriteToken;
|
|
29
30
|
var UrlJoin = require("url-join");
|
|
30
|
-
var networks = {
|
|
31
|
-
"main": "https://main.net955305.contentfabric.io",
|
|
32
|
-
"demo": "https://demov3.net955210.contentfabric.io",
|
|
33
|
-
"demov3": "https://demov3.net955210.contentfabric.io",
|
|
34
|
-
"local": "http://127.0.0.1:8008/config?qspace=dev&self",
|
|
35
|
-
"test": "https://test.net955203.contentfabric.io"
|
|
36
|
-
};
|
|
37
31
|
if (Utils.Platform() === Utils.PLATFORM_NODE) {
|
|
38
32
|
// Define Response in node
|
|
39
33
|
// eslint-disable-next-line no-global-assign
|
|
@@ -260,18 +254,22 @@ var ElvClient = /*#__PURE__*/function () {
|
|
|
260
254
|
uris = this.service === "search" ? this.searchURIs : this.fabricURIs;
|
|
261
255
|
this.HttpClient = new HttpClient({
|
|
262
256
|
uris: uris,
|
|
257
|
+
networkName: this.networkName,
|
|
263
258
|
debug: this.debug
|
|
264
259
|
});
|
|
265
260
|
this.AuthHttpClient = new HttpClient({
|
|
266
261
|
uris: this.authServiceURIs,
|
|
262
|
+
networkName: this.networkName,
|
|
267
263
|
debug: this.debug
|
|
268
264
|
});
|
|
269
265
|
this.FileServiceHttpClient = new HttpClient({
|
|
270
266
|
uris: this.fileServiceURIs,
|
|
267
|
+
networkName: this.networkName,
|
|
271
268
|
debug: this.debug
|
|
272
269
|
});
|
|
273
270
|
this.SearchHttpClient = new HttpClient({
|
|
274
271
|
uris: this.searchURIs || [],
|
|
272
|
+
networkName: this.networkName,
|
|
275
273
|
debug: this.debug
|
|
276
274
|
});
|
|
277
275
|
this.ethClient = new EthClient({
|
|
@@ -1489,6 +1487,7 @@ var ElvClient = /*#__PURE__*/function () {
|
|
|
1489
1487
|
path = "/ks/jwt/wlt";
|
|
1490
1488
|
httpClient = new HttpClient({
|
|
1491
1489
|
uris: this.kmsURIs,
|
|
1490
|
+
networkName: this.networkName,
|
|
1492
1491
|
debug: this.debug
|
|
1493
1492
|
});
|
|
1494
1493
|
_context19.next = 22;
|
|
@@ -2019,7 +2018,7 @@ var ElvClient = /*#__PURE__*/function () {
|
|
|
2019
2018
|
}, {
|
|
2020
2019
|
key: "Networks",
|
|
2021
2020
|
value: function Networks() {
|
|
2022
|
-
return Object.assign({},
|
|
2021
|
+
return Object.assign({}, NetworkUrls);
|
|
2023
2022
|
}
|
|
2024
2023
|
|
|
2025
2024
|
/**
|
|
@@ -2047,7 +2046,7 @@ var ElvClient = /*#__PURE__*/function () {
|
|
|
2047
2046
|
while (1) switch (_context28.prev = _context28.next) {
|
|
2048
2047
|
case 0:
|
|
2049
2048
|
networkName = _ref31.networkName, region = _ref31.region, clientIP = _ref31.clientIP, trustAuthorityId = _ref31.trustAuthorityId, staticToken = _ref31.staticToken, _ref31$ethereumContra = _ref31.ethereumContractTimeout, ethereumContractTimeout = _ref31$ethereumContra === void 0 ? 10 : _ref31$ethereumContra, _ref31$noCache = _ref31.noCache, noCache = _ref31$noCache === void 0 ? false : _ref31$noCache, _ref31$noAuth = _ref31.noAuth, noAuth = _ref31$noAuth === void 0 ? false : _ref31$noAuth, assumeV3 = _ref31.assumeV3;
|
|
2050
|
-
configUrl =
|
|
2049
|
+
configUrl = this.Networks()[networkName];
|
|
2051
2050
|
if (configUrl) {
|
|
2052
2051
|
_context28.next = 4;
|
|
2053
2052
|
break;
|
package/dist/src/FrameClient.js
CHANGED
|
@@ -449,7 +449,7 @@ var FrameClient = /*#__PURE__*/function () {
|
|
|
449
449
|
}, {
|
|
450
450
|
key: "AllowedMethods",
|
|
451
451
|
value: function AllowedMethods() {
|
|
452
|
-
return ["AccessGroupManagers", "AccessGroupMembers", "AccessGroupOwner", "AccessInfo", "AccessRequest", "AccessType", "AddAccessGroupManager", "AddAccessGroupMember", "AddContentLibraryGroup", "AddContentObjectGroupPermission", "AddLibraryContentType", "AssetMetadata", "AuditContentObject", "AuditStream", "AvailableDRMs", "AvailableOfferings", "AwaitPending", "BitmovinPlayoutOptions", "BlockNumber", "CallBitcodeMethod", "CallContractMethod", "CallContractMethodAndWait", "ClearCache", "ClearStaticToken", "Collection", "CollectionTransactions", "ConfigUrl", "ContentLibraries", "ContentLibrary", "ContentLibraryGroupPermissions", "ContentLibraryOwner", "ContentObject", "ContentObjectAccessComplete", "ContentObjectGraph", "ContentObjectGroupPermissions", "ContentObjectImageUrl", "ContentObjectLibraryId", "ContentObjectMetadata", "ContentObjectOwner", "ContentObjectTenantId", "ContentObjectVersions", "ContentObjects", "ContentPart", "ContentParts", "ContentSpaceId", "ContentType", "ContentTypeOwner", "ContentTypes", "ContractAbi", "ContractEvents", "ContractInfo", "ContractMetadata", "ContractName", "CopyContentObject", "CreateABRMezzanine", "CreateAccessGroup", "CreateAndFinalizeContentObject", "CreateAuthorizationToken", "CreateContentLibrary", "CreateContentObject", "CreateContentType", "CreateEncryptionConk", "CreateFabricToken", "CreateFileDirectories", "CreateFileUploadJob", "CreateLinks", "CreateNTPInstance", "CreateNonOwnerCap", "CreatePart", "CreateProductionMaster", "CreateShare", "CreateSignedMessageJSON", "CreateSignedToken", "CreateStaticToken", "CurrentAccountAddress", "CustomContractAddress", "DecodeSignedMessageJSON", "Decrypt", "DecryptECIES", "DefaultKMSAddress", "DeleteAccessGroup", "DeleteContentLibrary", "DeleteContentObject", "DeleteContentVersion", "DeleteFiles", "DeleteMetadata", "DeleteNTPInstance", "DeletePart", "DeleteWriteToken", "DeployContract", "Download", "DownloadEncrypted", "DownloadFile", "DownloadPart", "EditAndFinalizeContentObject", "EditContentObject", "EmbedUrl", "Encrypt", "EncryptECIES", "EncryptionConk", "Events", "ExtractEventFromLogs", "ExtractValueFromEvent", "FabricUrl", "FileUrl", "FinalizeABRMezzanine", "FinalizeContentObject", "FinalizePart", "FinalizeStateChannelAccess", "FinalizeUploadJob", "FormatContractArguments", "GenerateStateChannelToken", "GenerateSignedLinkToken", "GetBalance", "GlobalUrl", "InitializeAuthPolicy", "IssueNTPCode", "IssueSignedNTPCode", "LatestVersionHash", "LibraryContentTypes", "LinkAccessGroupToOauth", "LinkData", "LinkTarget", "LinkUrl", "ListAccessGroups", "ListFiles", "ListNTPInstances", "LRODraftInfo", "LROStatus", "MakeAuthServiceRequest", "MakeFileServiceRequest", "MergeContractMetadata", "MergeMetadata", "MetadataAuth", "MintNFT", "MoveFiles", "NetworkInfo", "NodeId", "Nodes", "NTPInstance", "ObjectCleanup", "Permission", "PlayoutOptions", "PlayoutPathResolution", "ProduceMetadataLinks", "Proofs", "PublicRep", "PublishContentVersion", "QParts", "RecordWriteToken", "RedeemCode", "RedeemShareToken", "RemoveAccessGroupManager", "RemoveAccessGroupMember", "RemoveContentObjectGroupPermission", "RemoveContentLibraryGroup", "RemoveLibraryContentType", "Rep", "ReplaceContractMetadata", "ReplaceMetadata", "Request", "ResetRegion", "ResetTenantId", "RevokeShare", "SendFunds", "SetAccessCharge", "SetAuth", "SetAuthContext", "SetAuthPolicy", "SetContentLibraryImage", "SetContentObjectImage", "SetCustomContentContract", "SetGroupPermission", "SetNodes", "SetOauthToken", "SetPolicyAuthorization", "SetSignerFromOauthToken", "SetStaticToken", "SetTenantContractId", "SetTenantId", "TenantAdminGroup", "ContentAdminGroup", "TenantUsersGroup", "SetVisibility", "SetPermission", "ShareInfo", "Shares", "SpaceNodes", "StartABRMezzanineJobs", "StreamAddWatermark", "StreamConfig", "StreamCopyToVod", "StreamCreate", "StreamInitialize", "StreamInsertion", "StreamListUrls", "StreamRemoveWatermark", "StreamSetOfferingAndDRM", "
|
|
452
|
+
return ["AccessGroupManagers", "AccessGroupMembers", "AccessGroupOwner", "AccessInfo", "AccessRequest", "AccessType", "AddAccessGroupManager", "AddAccessGroupMember", "AddContentLibraryGroup", "AddContentObjectGroupPermission", "AddLibraryContentType", "AssetMetadata", "AuditContentObject", "AuditStream", "AvailableDRMs", "AvailableOfferings", "AwaitPending", "BitmovinPlayoutOptions", "BlockNumber", "CallBitcodeMethod", "CallContractMethod", "CallContractMethodAndWait", "ClearCache", "ClearStaticToken", "Collection", "CollectionTransactions", "ConfigUrl", "ContentLibraries", "ContentLibrary", "ContentLibraryGroupPermissions", "ContentLibraryOwner", "ContentObject", "ContentObjectAccessComplete", "ContentObjectGraph", "ContentObjectGroupPermissions", "ContentObjectImageUrl", "ContentObjectLibraryId", "ContentObjectMetadata", "ContentObjectOwner", "ContentObjectTenantId", "ContentObjectVersions", "ContentObjects", "ContentPart", "ContentParts", "ContentSpaceId", "ContentType", "ContentTypeOwner", "ContentTypes", "ContractAbi", "ContractEvents", "ContractInfo", "ContractMetadata", "ContractName", "CopyContentObject", "CreateABRMezzanine", "CreateAccessGroup", "CreateAndFinalizeContentObject", "CreateAuthorizationToken", "CreateContentLibrary", "CreateContentObject", "CreateContentType", "CreateEncryptionConk", "CreateFabricToken", "CreateFileDirectories", "CreateFileUploadJob", "CreateLinks", "CreateNTPInstance", "CreateNonOwnerCap", "CreatePart", "CreateProductionMaster", "CreateShare", "CreateSignedMessageJSON", "CreateSignedToken", "CreateStaticToken", "CurrentAccountAddress", "CustomContractAddress", "DecodeSignedMessageJSON", "Decrypt", "DecryptECIES", "DefaultKMSAddress", "DeleteAccessGroup", "DeleteContentLibrary", "DeleteContentObject", "DeleteContentVersion", "DeleteFiles", "DeleteMetadata", "DeleteNTPInstance", "DeletePart", "DeleteWriteToken", "DeployContract", "Download", "DownloadEncrypted", "DownloadFile", "DownloadPart", "EditAndFinalizeContentObject", "EditContentObject", "EmbedUrl", "Encrypt", "EncryptECIES", "EncryptionConk", "Events", "ExtractEventFromLogs", "ExtractValueFromEvent", "FabricUrl", "FileUrl", "FinalizeABRMezzanine", "FinalizeContentObject", "FinalizePart", "FinalizeStateChannelAccess", "FinalizeUploadJob", "FormatContractArguments", "GenerateStateChannelToken", "GenerateSignedLinkToken", "GetBalance", "GlobalUrl", "InitializeAuthPolicy", "IssueNTPCode", "IssueSignedNTPCode", "LatestVersionHash", "LibraryContentTypes", "LinkAccessGroupToOauth", "LinkData", "LinkTarget", "LinkUrl", "ListAccessGroups", "ListFiles", "ListNTPInstances", "LRODraftInfo", "LROStatus", "MakeAuthServiceRequest", "MakeFileServiceRequest", "MergeContractMetadata", "MergeMetadata", "MetadataAuth", "MintNFT", "MoveFiles", "NetworkInfo", "NodeId", "Nodes", "NTPInstance", "ObjectCleanup", "OutputsCreate", "OutputsDelete", "OutputsList", "OutputsListItem", "OutputsModify", "OutputsModifyBatch", "OutputsResolveSrtPullUrls", "OutputsState", "OutputsStop", "Permission", "PlayoutOptions", "PlayoutPathResolution", "ProduceMetadataLinks", "Proofs", "PublicRep", "PublishContentVersion", "QParts", "RecordWriteToken", "RedeemCode", "RedeemShareToken", "RemoveAccessGroupManager", "RemoveAccessGroupMember", "RemoveContentObjectGroupPermission", "RemoveContentLibraryGroup", "RemoveLibraryContentType", "Rep", "ReplaceContractMetadata", "ReplaceMetadata", "Request", "ResetRegion", "ResetTenantId", "RevokeShare", "SendFunds", "SetAccessCharge", "StreamApplyProfile", "SetAuth", "SetAuthContext", "SetAuthPolicy", "SetContentLibraryImage", "SetContentObjectImage", "SetCustomContentContract", "SetGroupPermission", "SetNodes", "SetOauthToken", "SetPolicyAuthorization", "SetSignerFromOauthToken", "SetStaticToken", "SetTenantContractId", "SetTenantId", "TenantAdminGroup", "ContentAdminGroup", "TenantUsersGroup", "SetVisibility", "SetPermission", "ShareInfo", "Shares", "SpaceNodes", "StartABRMezzanineJobs", "StreamAddWatermark", "StreamApplyProfile", "StreamAssignProfile", "StreamConfig", "StreamConfigProfile", "StreamConfigProfiles", "StreamCopyToVod", "StreamCreate", "StreamInitialize", "StreamInsertion", "StreamLinkToSite", "StreamListUrls", "StreamRemoveLinkToSite", "StreamRemoveWatermark", "StreamSaveConfigProfile", "StreamSetOfferingAndDRM", "StreamSiteSettings", "StreamStartRecording", "StreamStartOrStopOrReset", "StreamStatus", "StreamStopRecording", "StreamUnassignProfile", "StreamUpdateConfig", "SuspendNTPInstance", "TenantContractId", "TenantId", "UnlinkAccessGroupFromOauth", "UpdateContentObjectGraph", "UpdateNTPInstance", "UpdateShare", "UploadFileData", "UploadFilesFromS3", "UploadJobStatus", "UploadPart", "UploadPartChunk", "UploadStatus", "UseRegion", "Visibility", "WriteTokenNodeUrlLocal", "WriteTokenNodeUrlNetwork"];
|
|
453
453
|
}
|
|
454
454
|
}, {
|
|
455
455
|
key: "AllowedUserProfileMethods",
|
package/dist/src/HttpClient.js
CHANGED
|
@@ -7,17 +7,21 @@ var _Fetch = typeof fetch !== "undefined" ? fetch : require("node-fetch")["defau
|
|
|
7
7
|
var _require = require("./LogMessage"),
|
|
8
8
|
LogMessage = _require.LogMessage;
|
|
9
9
|
var Utils = require("./Utils");
|
|
10
|
+
var UrlJoin = require("url-join");
|
|
11
|
+
var NetworkUrls = require("./NetworkUrls");
|
|
10
12
|
var HttpClient = /*#__PURE__*/function () {
|
|
11
13
|
"use strict";
|
|
12
14
|
|
|
13
15
|
function HttpClient(_ref) {
|
|
14
16
|
var uris = _ref.uris,
|
|
17
|
+
networkName = _ref.networkName,
|
|
15
18
|
debug = _ref.debug;
|
|
16
19
|
_classCallCheck(this, HttpClient);
|
|
17
20
|
this.uris = uris;
|
|
18
21
|
this.uriIndex = 0;
|
|
19
22
|
this.debug = debug;
|
|
20
23
|
this.draftURIs = {};
|
|
24
|
+
this.networkName = networkName;
|
|
21
25
|
this.retries = Math.max(3, uris.length);
|
|
22
26
|
}
|
|
23
27
|
_createClass(HttpClient, [{
|
|
@@ -67,7 +71,7 @@ var HttpClient = /*#__PURE__*/function () {
|
|
|
67
71
|
key: "Request",
|
|
68
72
|
value: function () {
|
|
69
73
|
var _Request = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref3) {
|
|
70
|
-
var method, path, _ref3$queryParams, queryParams, body, _ref3$bodyType, bodyType, _ref3$headers, headers, _ref3$attempts, attempts, _ref3$allowFailover, allowFailover, _ref3$forceFailover, forceFailover, _ref3$allowRetry, allowRetry, uriIndex, baseURI, writeTokenMatch, writeToken, uri, fetchParameters, response, responseType, errorBody, error;
|
|
74
|
+
var method, path, _ref3$queryParams, queryParams, body, _ref3$bodyType, bodyType, _ref3$headers, headers, _ref3$attempts, attempts, _ref3$allowFailover, allowFailover, _ref3$forceFailover, forceFailover, _ref3$allowRetry, allowRetry, uriIndex, baseURI, writeTokenMatch, writeToken, configUrl, uri, fetchParameters, response, responseType, errorBody, error;
|
|
71
75
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
72
76
|
while (1) switch (_context.prev = _context.next) {
|
|
73
77
|
case 0:
|
|
@@ -75,16 +79,48 @@ var HttpClient = /*#__PURE__*/function () {
|
|
|
75
79
|
baseURI = this.BaseURI(uriIndex); // If URL contains a write token, it must go to the correct server and can not fail over
|
|
76
80
|
writeTokenMatch = path.replace(/^\//, "").match(/(qlibs\/ilib[a-zA-Z0-9]+|q|qid)\/(tqw__[a-zA-Z0-9]+)/);
|
|
77
81
|
writeToken = writeTokenMatch ? writeTokenMatch[2] : undefined;
|
|
78
|
-
if (writeToken) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
82
|
+
if (!writeToken) {
|
|
83
|
+
_context.next = 29;
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
allowFailover = false;
|
|
87
|
+
if (!this.draftURIs[writeToken]) {
|
|
88
|
+
_context.next = 10;
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
// Use saved write token URI
|
|
92
|
+
baseURI = this.draftURIs[writeToken];
|
|
93
|
+
_context.next = 29;
|
|
94
|
+
break;
|
|
95
|
+
case 10:
|
|
96
|
+
if (!this.networkName) {
|
|
97
|
+
_context.next = 28;
|
|
98
|
+
break;
|
|
87
99
|
}
|
|
100
|
+
_context.prev = 11;
|
|
101
|
+
configUrl = new URL(NetworkUrls[this.networkName]);
|
|
102
|
+
configUrl.pathname = UrlJoin("/s", this.networkName, "nodes");
|
|
103
|
+
configUrl.searchParams.set("token", writeToken);
|
|
104
|
+
_context.t0 = URI;
|
|
105
|
+
_context.next = 18;
|
|
106
|
+
return fetch(configUrl);
|
|
107
|
+
case 18:
|
|
108
|
+
_context.next = 20;
|
|
109
|
+
return _context.sent.json();
|
|
110
|
+
case 20:
|
|
111
|
+
_context.t1 = _context.sent.nodes[0].services.fabric_api.urls[0];
|
|
112
|
+
baseURI = new _context.t0(_context.t1);
|
|
113
|
+
_context.next = 28;
|
|
114
|
+
break;
|
|
115
|
+
case 24:
|
|
116
|
+
_context.prev = 24;
|
|
117
|
+
_context.t2 = _context["catch"](11);
|
|
118
|
+
this.Log("Failed to retrieve write token node for " + writeToken);
|
|
119
|
+
this.Log(_context.t2);
|
|
120
|
+
case 28:
|
|
121
|
+
// Save current URI for all future requests involving this write token
|
|
122
|
+
this.draftURIs[writeToken] = baseURI;
|
|
123
|
+
case 29:
|
|
88
124
|
uri = baseURI.path(path).query(queryParams).hash("");
|
|
89
125
|
fetchParameters = {
|
|
90
126
|
method: method,
|
|
@@ -101,50 +137,50 @@ var HttpClient = /*#__PURE__*/function () {
|
|
|
101
137
|
this.Log("".concat(method, " - ").concat(uri.toString()));
|
|
102
138
|
this.Log("fetchParameters: ".concat(JSON.stringify(fetchParameters, null, 2)));
|
|
103
139
|
}
|
|
104
|
-
_context.prev =
|
|
105
|
-
_context.next =
|
|
140
|
+
_context.prev = 33;
|
|
141
|
+
_context.next = 36;
|
|
106
142
|
return HttpClient.Fetch(uri.toString(), fetchParameters);
|
|
107
|
-
case
|
|
143
|
+
case 36:
|
|
108
144
|
response = _context.sent;
|
|
109
|
-
_context.next =
|
|
145
|
+
_context.next = 42;
|
|
110
146
|
break;
|
|
111
|
-
case
|
|
112
|
-
_context.prev =
|
|
113
|
-
_context.
|
|
147
|
+
case 39:
|
|
148
|
+
_context.prev = 39;
|
|
149
|
+
_context.t3 = _context["catch"](33);
|
|
114
150
|
response = {
|
|
115
151
|
ok: false,
|
|
116
|
-
status: _context.
|
|
117
|
-
statusText: "ElvClient Error: " + _context.
|
|
152
|
+
status: _context.t3 && _context.t3.status || 500,
|
|
153
|
+
statusText: "ElvClient Error: " + _context.t3.message,
|
|
118
154
|
url: uri.toString(),
|
|
119
|
-
error: _context.
|
|
155
|
+
error: _context.t3
|
|
120
156
|
};
|
|
121
|
-
case
|
|
157
|
+
case 42:
|
|
122
158
|
if (response.ok) {
|
|
123
|
-
_context.next =
|
|
159
|
+
_context.next = 71;
|
|
124
160
|
break;
|
|
125
161
|
}
|
|
126
162
|
if (!((parseInt(response.status) >= 500 || forceFailover) && allowRetry && attempts < this.retries)) {
|
|
127
|
-
_context.next =
|
|
163
|
+
_context.next = 55;
|
|
128
164
|
break;
|
|
129
165
|
}
|
|
130
166
|
if (!allowFailover) {
|
|
131
|
-
_context.next =
|
|
167
|
+
_context.next = 49;
|
|
132
168
|
break;
|
|
133
169
|
}
|
|
134
170
|
// Fail over to alternate node
|
|
135
171
|
this.uriIndex = (this.uriIndex + 1) % this.uris.length;
|
|
136
172
|
this.Log("HttpClient failing over from ".concat(baseURI.toString(), ": ").concat(attempts + 1, " attempts"), true);
|
|
137
|
-
_context.next =
|
|
173
|
+
_context.next = 52;
|
|
138
174
|
break;
|
|
139
|
-
case
|
|
175
|
+
case 49:
|
|
140
176
|
// Wait and retry
|
|
141
177
|
this.Log("HttpClient retrying request from ".concat(baseURI.toString(), ": ").concat(attempts + 1, " attempts"), true);
|
|
142
|
-
_context.next =
|
|
178
|
+
_context.next = 52;
|
|
143
179
|
return new Promise(function (resolve) {
|
|
144
180
|
return setTimeout(resolve, 1000);
|
|
145
181
|
});
|
|
146
|
-
case
|
|
147
|
-
_context.next =
|
|
182
|
+
case 52:
|
|
183
|
+
_context.next = 54;
|
|
148
184
|
return this.Request({
|
|
149
185
|
method: method,
|
|
150
186
|
path: path,
|
|
@@ -156,34 +192,34 @@ var HttpClient = /*#__PURE__*/function () {
|
|
|
156
192
|
uriIndex: uriIndex,
|
|
157
193
|
forceFailover: forceFailover
|
|
158
194
|
});
|
|
159
|
-
case
|
|
195
|
+
case 54:
|
|
160
196
|
return _context.abrupt("return", _context.sent);
|
|
161
|
-
case
|
|
197
|
+
case 55:
|
|
162
198
|
// Parse JSON error if headers indicate JSON
|
|
163
199
|
responseType = response.headers ? response.headers.get("content-type") || "" : "";
|
|
164
200
|
errorBody = "";
|
|
165
201
|
if (!(response.text && response.json)) {
|
|
166
|
-
_context.next =
|
|
202
|
+
_context.next = 68;
|
|
167
203
|
break;
|
|
168
204
|
}
|
|
169
205
|
if (!responseType.includes("application/json")) {
|
|
170
|
-
_context.next =
|
|
206
|
+
_context.next = 64;
|
|
171
207
|
break;
|
|
172
208
|
}
|
|
173
|
-
_context.next =
|
|
209
|
+
_context.next = 61;
|
|
174
210
|
return response.json();
|
|
175
|
-
case
|
|
176
|
-
_context.
|
|
177
|
-
_context.next =
|
|
211
|
+
case 61:
|
|
212
|
+
_context.t4 = _context.sent;
|
|
213
|
+
_context.next = 67;
|
|
178
214
|
break;
|
|
179
|
-
case
|
|
180
|
-
_context.next =
|
|
215
|
+
case 64:
|
|
216
|
+
_context.next = 66;
|
|
181
217
|
return response.text();
|
|
182
|
-
case
|
|
183
|
-
_context.
|
|
184
|
-
case
|
|
185
|
-
errorBody = _context.
|
|
186
|
-
case
|
|
218
|
+
case 66:
|
|
219
|
+
_context.t4 = _context.sent;
|
|
220
|
+
case 67:
|
|
221
|
+
errorBody = _context.t4;
|
|
222
|
+
case 68:
|
|
187
223
|
error = {
|
|
188
224
|
name: "ElvHttpClientError",
|
|
189
225
|
status: response.status,
|
|
@@ -196,14 +232,14 @@ var HttpClient = /*#__PURE__*/function () {
|
|
|
196
232
|
};
|
|
197
233
|
if (this.debug) this.Log(JSON.stringify(error, null, 2), true);
|
|
198
234
|
throw error;
|
|
199
|
-
case
|
|
235
|
+
case 71:
|
|
200
236
|
this.Log("".concat(response.status, " - ").concat(method, " ").concat(uri.toString()));
|
|
201
237
|
return _context.abrupt("return", response);
|
|
202
|
-
case
|
|
238
|
+
case 73:
|
|
203
239
|
case "end":
|
|
204
240
|
return _context.stop();
|
|
205
241
|
}
|
|
206
|
-
}, _callee, this, [[
|
|
242
|
+
}, _callee, this, [[11, 24], [33, 39]]);
|
|
207
243
|
}));
|
|
208
244
|
function Request(_x) {
|
|
209
245
|
return _Request.apply(this, arguments);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
var networks = {
|
|
2
|
+
"main": "https://main.net955305.contentfabric.io",
|
|
3
|
+
"demo": "https://demov3.net955210.contentfabric.io",
|
|
4
|
+
"demov3": "https://demov3.net955210.contentfabric.io",
|
|
5
|
+
"local": "http://127.0.0.1:8008/config?qspace=dev&self",
|
|
6
|
+
"test": "https://test.net955203.contentfabric.io"
|
|
7
|
+
};
|
|
8
|
+
module.exports = networks;
|
|
@@ -1578,16 +1578,6 @@ var AbrProfileLiveDrm = {
|
|
|
1578
1578
|
}
|
|
1579
1579
|
},
|
|
1580
1580
|
"playout_formats": {
|
|
1581
|
-
"dash-playready-cenc": {
|
|
1582
|
-
"drm": {
|
|
1583
|
-
"enc_scheme_name": "cenc",
|
|
1584
|
-
"type": "DrmPlayReady"
|
|
1585
|
-
},
|
|
1586
|
-
"protocol": {
|
|
1587
|
-
"min_buffer_length": 2,
|
|
1588
|
-
"type": "ProtoDash"
|
|
1589
|
-
}
|
|
1590
|
-
},
|
|
1591
1581
|
"dash-widevine": {
|
|
1592
1582
|
"drm": {
|
|
1593
1583
|
"content_id": "",
|