rx-player 4.2.0-dev.2024080600 → 4.2.0-dev.2024081300
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/VERSION +1 -1
- package/dist/commonjs/main_thread/api/public_api.js +2 -2
- package/dist/commonjs/main_thread/decrypt/attach_media_keys.d.ts +6 -1
- package/dist/commonjs/main_thread/decrypt/attach_media_keys.d.ts.map +1 -1
- package/dist/commonjs/main_thread/decrypt/attach_media_keys.js +2 -1
- package/dist/commonjs/main_thread/decrypt/content_decryptor.d.ts.map +1 -1
- package/dist/commonjs/main_thread/decrypt/content_decryptor.js +2 -1
- package/dist/commonjs/main_thread/decrypt/find_key_system.d.ts +17 -5
- package/dist/commonjs/main_thread/decrypt/find_key_system.d.ts.map +1 -1
- package/dist/commonjs/main_thread/decrypt/find_key_system.js +56 -26
- package/dist/commonjs/main_thread/decrypt/get_media_keys.d.ts +5 -0
- package/dist/commonjs/main_thread/decrypt/get_media_keys.d.ts.map +1 -1
- package/dist/commonjs/main_thread/decrypt/get_media_keys.js +4 -2
- package/dist/commonjs/main_thread/decrypt/utils/media_keys_infos_store.d.ts +5 -0
- package/dist/commonjs/main_thread/decrypt/utils/media_keys_infos_store.d.ts.map +1 -1
- package/dist/es2017/main_thread/api/public_api.js +2 -2
- package/dist/es2017/main_thread/decrypt/attach_media_keys.d.ts +6 -1
- package/dist/es2017/main_thread/decrypt/attach_media_keys.d.ts.map +1 -1
- package/dist/es2017/main_thread/decrypt/attach_media_keys.js +2 -1
- package/dist/es2017/main_thread/decrypt/content_decryptor.d.ts.map +1 -1
- package/dist/es2017/main_thread/decrypt/content_decryptor.js +2 -1
- package/dist/es2017/main_thread/decrypt/find_key_system.d.ts +17 -5
- package/dist/es2017/main_thread/decrypt/find_key_system.d.ts.map +1 -1
- package/dist/es2017/main_thread/decrypt/find_key_system.js +61 -35
- package/dist/es2017/main_thread/decrypt/get_media_keys.d.ts +5 -0
- package/dist/es2017/main_thread/decrypt/get_media_keys.d.ts.map +1 -1
- package/dist/es2017/main_thread/decrypt/get_media_keys.js +3 -1
- package/dist/es2017/main_thread/decrypt/utils/media_keys_infos_store.d.ts +5 -0
- package/dist/es2017/main_thread/decrypt/utils/media_keys_infos_store.d.ts.map +1 -1
- package/dist/rx-player.js +15 -15
- package/package.json +1 -1
- package/src/main_thread/api/public_api.ts +2 -2
- package/src/main_thread/decrypt/__tests__/__global__/media_key_system_access.test.ts +376 -102
- package/src/main_thread/decrypt/__tests__/__global__/utils.ts +4 -23
- package/src/main_thread/decrypt/attach_media_keys.ts +7 -0
- package/src/main_thread/decrypt/content_decryptor.ts +3 -1
- package/src/main_thread/decrypt/find_key_system.ts +78 -43
- package/src/main_thread/decrypt/get_media_keys.ts +8 -1
- package/src/main_thread/decrypt/utils/media_keys_infos_store.ts +6 -0
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
4.2.0-dev.
|
|
1
|
+
4.2.0-dev.2024081300
|
|
@@ -160,7 +160,7 @@ var Player = /** @class */ (function (_super) {
|
|
|
160
160
|
// Workaround to support Firefox autoplay on FF 42.
|
|
161
161
|
// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
|
|
162
162
|
videoElement.preload = "auto";
|
|
163
|
-
_this.version = /* PLAYER_VERSION */ "4.2.0-dev.
|
|
163
|
+
_this.version = /* PLAYER_VERSION */ "4.2.0-dev.2024081300";
|
|
164
164
|
_this.log = log_1.default;
|
|
165
165
|
_this.state = "STOPPED";
|
|
166
166
|
_this.videoElement = videoElement;
|
|
@@ -2628,5 +2628,5 @@ var Player = /** @class */ (function (_super) {
|
|
|
2628
2628
|
Player._priv_currentlyUsedVideoElements = new WeakSet();
|
|
2629
2629
|
return Player;
|
|
2630
2630
|
}(event_emitter_1.default));
|
|
2631
|
-
Player.version = /* PLAYER_VERSION */ "4.2.0-dev.
|
|
2631
|
+
Player.version = /* PLAYER_VERSION */ "4.2.0-dev.2024081300";
|
|
2632
2632
|
exports.default = Player;
|
|
@@ -34,7 +34,7 @@ export declare function disableMediaKeys(mediaElement: IMediaElement): Promise<u
|
|
|
34
34
|
* @param {Object} cancelSignal
|
|
35
35
|
* @returns {Promise}
|
|
36
36
|
*/
|
|
37
|
-
export default function attachMediaKeys(mediaElement: IMediaElement, { emeImplementation, keySystemOptions, loadedSessionsStore, mediaKeySystemAccess, mediaKeys, }: IMediaKeysState, cancelSignal: CancellationSignal): Promise<void>;
|
|
37
|
+
export default function attachMediaKeys(mediaElement: IMediaElement, { emeImplementation, keySystemOptions, askedConfiguration, loadedSessionsStore, mediaKeySystemAccess, mediaKeys, }: IMediaKeysState, cancelSignal: CancellationSignal): Promise<void>;
|
|
38
38
|
/** MediaKeys and associated state attached to a media element. */
|
|
39
39
|
export interface IMediaKeysState {
|
|
40
40
|
/** Options set when the MediaKeys has been attached. */
|
|
@@ -45,6 +45,11 @@ export interface IMediaKeysState {
|
|
|
45
45
|
mediaKeySystemAccess: MediaKeySystemAccess | ICustomMediaKeySystemAccess;
|
|
46
46
|
/** The MediaKeys instance to attach to the media element. */
|
|
47
47
|
mediaKeys: MediaKeys | ICustomMediaKeys;
|
|
48
|
+
/**
|
|
49
|
+
* The MediaKeySystemConfiguration that has been provided to the
|
|
50
|
+
* `requestMediaKeySystemAccess` API.
|
|
51
|
+
*/
|
|
52
|
+
askedConfiguration: MediaKeySystemConfiguration;
|
|
48
53
|
/**
|
|
49
54
|
* The chosen EME implementation abstraction linked to `mediaKeys`.
|
|
50
55
|
* Different EME implementation might for example be used while debugging or
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attach_media_keys.d.ts","sourceRoot":"","sources":["../../../../src/main_thread/decrypt/attach_media_keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,KAAK,EACV,gBAAgB,EAChB,2BAA2B,EAC3B,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAK1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,mBAAmB,MAAM,+BAA+B,CAAC;AAGrE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAI9E;AAED;;;;;;;;GAQG;AACH,wBAA8B,eAAe,CAC3C,YAAY,EAAE,aAAa,EAC3B,EACE,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,GACV,EAAE,eAAe,EAClB,YAAY,EAAE,kBAAkB,GAC/B,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"attach_media_keys.d.ts","sourceRoot":"","sources":["../../../../src/main_thread/decrypt/attach_media_keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,KAAK,EACV,gBAAgB,EAChB,2BAA2B,EAC3B,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAK1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,mBAAmB,MAAM,+BAA+B,CAAC;AAGrE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAI9E;AAED;;;;;;;;GAQG;AACH,wBAA8B,eAAe,CAC3C,YAAY,EAAE,aAAa,EAC3B,EACE,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,GACV,EAAE,eAAe,EAClB,YAAY,EAAE,kBAAkB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAsCf;AAED,kEAAkE;AAClE,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,gEAAgE;IAChE,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,uEAAuE;IACvE,oBAAoB,EAAE,oBAAoB,GAAG,2BAA2B,CAAC;IACzE,6DAA6D;IAC7D,SAAS,EAAE,SAAS,GAAG,gBAAgB,CAAC;IACxC;;;OAGG;IACH,kBAAkB,EAAE,2BAA2B,CAAC;IAChD;;;;OAIG;IACH,iBAAiB,EAAE,qBAAqB,CAAC;CAC1C"}
|
|
@@ -82,7 +82,7 @@ function disableMediaKeys(mediaElement) {
|
|
|
82
82
|
function attachMediaKeys(mediaElement_1, _a, cancelSignal_1) {
|
|
83
83
|
return __awaiter(this, arguments, void 0, function (mediaElement, _b, cancelSignal) {
|
|
84
84
|
var previousState, closeAllSessions;
|
|
85
|
-
var emeImplementation = _b.emeImplementation, keySystemOptions = _b.keySystemOptions, loadedSessionsStore = _b.loadedSessionsStore, mediaKeySystemAccess = _b.mediaKeySystemAccess, mediaKeys = _b.mediaKeys;
|
|
85
|
+
var emeImplementation = _b.emeImplementation, keySystemOptions = _b.keySystemOptions, askedConfiguration = _b.askedConfiguration, loadedSessionsStore = _b.loadedSessionsStore, mediaKeySystemAccess = _b.mediaKeySystemAccess, mediaKeys = _b.mediaKeys;
|
|
86
86
|
return __generator(this, function (_c) {
|
|
87
87
|
switch (_c.label) {
|
|
88
88
|
case 0:
|
|
@@ -104,6 +104,7 @@ function attachMediaKeys(mediaElement_1, _a, cancelSignal_1) {
|
|
|
104
104
|
mediaKeySystemAccess: mediaKeySystemAccess,
|
|
105
105
|
mediaKeys: mediaKeys,
|
|
106
106
|
loadedSessionsStore: loadedSessionsStore,
|
|
107
|
+
askedConfiguration: askedConfiguration,
|
|
107
108
|
});
|
|
108
109
|
if (mediaElement.mediaKeys === mediaKeys) {
|
|
109
110
|
return [2 /*return*/];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content_decryptor.d.ts","sourceRoot":"","sources":["../../../../src/main_thread/decrypt/content_decryptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAO9E,OAAO,KAAK,EAAE,gBAAgB,EAAgB,MAAM,oBAAoB,CAAC;AAIzE,OAAO,YAAY,MAAM,2BAA2B,CAAC;AAerD,OAAO,KAAK,EACV,eAAe,EAEf,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,SAAS,CAAC;AACjB,OAAO,EAA8B,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAU5E,OAAO,KAAK,gBAAgB,MAAM,4BAA4B,CAAC;AAE/D;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,YAAY,CAAC,sBAAsB,CAAC;IAChF;;;;;;;;;;;;OAYG;IACI,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAEpC;;;OAGG;IACI,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAE3B;;;;;;;OAOG;IACH,OAAO,CAAC,UAAU,CAA6B;IAE/C;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB,CAAuB;IAE/C;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAgB;IAElC;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc,CAAoB;IAE1C;;OAEG;IACH,OAAO,CAAC,4BAA4B,CAAoB;IAExD;;;;;OAKG;WACW,UAAU,IAAI,OAAO;IAInC;;;;;;;;;;;;;OAaG;gBACS,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,EAAE;IAqEtE;;;;OAIG;IACI,QAAQ,IAAI,qBAAqB;IAIxC;;;;;;;;OAQG;IACI,MAAM,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"content_decryptor.d.ts","sourceRoot":"","sources":["../../../../src/main_thread/decrypt/content_decryptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAO9E,OAAO,KAAK,EAAE,gBAAgB,EAAgB,MAAM,oBAAoB,CAAC;AAIzE,OAAO,YAAY,MAAM,2BAA2B,CAAC;AAerD,OAAO,KAAK,EACV,eAAe,EAEf,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,SAAS,CAAC;AACjB,OAAO,EAA8B,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAU5E,OAAO,KAAK,gBAAgB,MAAM,4BAA4B,CAAC;AAE/D;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,YAAY,CAAC,sBAAsB,CAAC;IAChF;;;;;;;;;;;;OAYG;IACI,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAEpC;;;OAGG;IACI,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAE3B;;;;;;;OAOG;IACH,OAAO,CAAC,UAAU,CAA6B;IAE/C;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB,CAAuB;IAE/C;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAgB;IAElC;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc,CAAoB;IAE1C;;OAEG;IACH,OAAO,CAAC,4BAA4B,CAAoB;IAExD;;;;;OAKG;WACW,UAAU,IAAI,OAAO;IAInC;;;;;;;;;;;;;OAaG;gBACS,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,EAAE;IAqEtE;;;;OAIG;IACI,QAAQ,IAAI,qBAAqB;IAIxC;;;;;;;;OAQG;IACI,MAAM,IAAI,IAAI;IAgFrB;;;;;;OAMG;IACI,OAAO;IAYd;;;;;;;;;;OAUG;IACI,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAgB7E;;;;;;;;OAQG;IACI,oBAAoB,CAAC,kBAAkB,EAAE,eAAe,GAAG,IAAI;IAqBtE;;;;;;;;OAQG;YACW,0BAA0B;IAiTxC,OAAO,CAAC,8BAA8B;IAyItC;;;;;;OAMG;IACH,OAAO,CAAC,wBAAwB;IAmChC;;;;;;;;;OASG;IACH,OAAO,CAAC,aAAa;IAuBrB;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAOlB;;;OAGG;IACH,OAAO,CAAC,4BAA4B;IAUpC;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;CAQ7B;AAeD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,UAAU,EAAE,EAC5B,YAAY,EAAE,UAAU,EAAE,GACzB,UAAU,EAAE,CAId;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,UAAU,EAAE,GACtB,UAAU,EAAE,CAUd;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,kBAAkB,EAAE,wBAAwB,EAC5C,SAAS,EAAE,UAAU,EAAE,GACtB,UAAU,EAAE,CAcd"}
|
|
@@ -260,7 +260,7 @@ var ContentDecryptor = /** @class */ (function (_super) {
|
|
|
260
260
|
return;
|
|
261
261
|
}
|
|
262
262
|
var _a = this._stateData.data, mediaElement = _a.mediaElement, mediaKeysInfo = _a.mediaKeysInfo;
|
|
263
|
-
var options = mediaKeysInfo.options, mediaKeys = mediaKeysInfo.mediaKeys, mediaKeySystemAccess = mediaKeysInfo.mediaKeySystemAccess, stores = mediaKeysInfo.stores;
|
|
263
|
+
var options = mediaKeysInfo.options, mediaKeys = mediaKeysInfo.mediaKeys, mediaKeySystemAccess = mediaKeysInfo.mediaKeySystemAccess, stores = mediaKeysInfo.stores, askedConfiguration = mediaKeysInfo.askedConfiguration;
|
|
264
264
|
var shouldDisableLock = options.disableMediaKeysAttachmentLock === true;
|
|
265
265
|
if (shouldDisableLock) {
|
|
266
266
|
this._stateData = {
|
|
@@ -281,6 +281,7 @@ var ContentDecryptor = /** @class */ (function (_super) {
|
|
|
281
281
|
loadedSessionsStore: stores.loadedSessionsStore,
|
|
282
282
|
mediaKeySystemAccess: mediaKeySystemAccess,
|
|
283
283
|
mediaKeys: mediaKeys,
|
|
284
|
+
askedConfiguration: askedConfiguration,
|
|
284
285
|
keySystemOptions: options,
|
|
285
286
|
};
|
|
286
287
|
log_1.default.debug("DRM: Attaching current MediaKeys");
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import type { IMediaElement } from "../../compat/browser_compatibility_types";
|
|
17
17
|
import type { ICustomMediaKeySystemAccess } from "../../compat/eme";
|
|
18
|
-
import type {
|
|
18
|
+
import type { IKeySystemOption } from "../../public_types";
|
|
19
19
|
import type { CancellationSignal } from "../../utils/task_canceller";
|
|
20
20
|
export type ICodecSupportList = Array<{
|
|
21
21
|
codec: string;
|
|
@@ -23,8 +23,19 @@ export type ICodecSupportList = Array<{
|
|
|
23
23
|
result: boolean;
|
|
24
24
|
}>;
|
|
25
25
|
export interface IMediaKeySystemAccessInfos {
|
|
26
|
+
/** `MediaKeySystemAccess` to use to create `MediaKeys` instances. */
|
|
26
27
|
mediaKeySystemAccess: MediaKeySystemAccess | ICustomMediaKeySystemAccess;
|
|
28
|
+
/**
|
|
29
|
+
* The MediaKeySystemConfiguration that has been provided to the
|
|
30
|
+
* `requestMediaKeySystemAccess` API.
|
|
31
|
+
*/
|
|
32
|
+
askedConfiguration: MediaKeySystemConfiguration;
|
|
33
|
+
/**
|
|
34
|
+
* Corresponding `keySystems` element that has led to the creation of the
|
|
35
|
+
* `MediaKeySystemAccess`.
|
|
36
|
+
*/
|
|
27
37
|
options: IKeySystemOption;
|
|
38
|
+
/** Information on supported or unsupported codec on that `MediaKeySystemAccess`. */
|
|
28
39
|
codecSupport: ICodecSupportList;
|
|
29
40
|
}
|
|
30
41
|
export interface IReuseMediaKeySystemAccessEvent {
|
|
@@ -38,12 +49,13 @@ export interface ICreateMediaKeySystemAccessEvent {
|
|
|
38
49
|
export type IFoundMediaKeySystemAccessEvent = IReuseMediaKeySystemAccessEvent | ICreateMediaKeySystemAccessEvent;
|
|
39
50
|
/**
|
|
40
51
|
* Extract from the current mediaKeys the supported Codecs.
|
|
41
|
-
* @param {Object
|
|
42
|
-
*
|
|
43
|
-
* @param {Object | undefined} mksConfiguration - The result of
|
|
52
|
+
* @param {Object} initialConfiguration - The MediaKeySystemConfiguration given
|
|
53
|
+
* to the `navigator.requestMediaKeySystemAccess` API.
|
|
54
|
+
* @param {Object | undefined} mksConfiguration - The result of
|
|
55
|
+
* getConfiguration() of the media keys.
|
|
44
56
|
* @return {Array} The list of supported codec by the CDM.
|
|
45
57
|
*/
|
|
46
|
-
export declare function extractCodecSupportListFromConfiguration(
|
|
58
|
+
export declare function extractCodecSupportListFromConfiguration(initialConfiguration: MediaKeySystemConfiguration, mksConfiguration: MediaKeySystemConfiguration): ICodecSupportList;
|
|
47
59
|
/**
|
|
48
60
|
* Try to find a compatible key system from the keySystems array given.
|
|
49
61
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find_key_system.d.ts","sourceRoot":"","sources":["../../../../src/main_thread/decrypt/find_key_system.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAE9E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAUpE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"find_key_system.d.ts","sourceRoot":"","sources":["../../../../src/main_thread/decrypt/find_key_system.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAE9E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAUpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAK3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAKrE,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC,CAAC;AAEH,MAAM,WAAW,0BAA0B;IACzC,qEAAqE;IACrE,oBAAoB,EAAE,oBAAoB,GAAG,2BAA2B,CAAC;IACzE;;;OAGG;IACH,kBAAkB,EAAE,2BAA2B,CAAC;IAChD;;;OAGG;IACH,OAAO,EAAE,gBAAgB,CAAC;IAC1B,oFAAoF;IACpF,YAAY,EAAE,iBAAiB,CAAC;CACjC;AAED,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,+BAA+B,CAAC;IACtC,KAAK,EAAE,0BAA0B,CAAC;CACnC;AAED,MAAM,WAAW,gCAAgC;IAC/C,IAAI,EAAE,gCAAgC,CAAC;IACvC,KAAK,EAAE,0BAA0B,CAAC;CACnC;AAED,MAAM,MAAM,+BAA+B,GACvC,+BAA+B,GAC/B,gCAAgC,CAAC;AAkPrC;;;;;;;GAOG;AACH,wBAAgB,wCAAwC,CACtD,oBAAoB,EAAE,2BAA2B,EACjD,gBAAgB,EAAE,2BAA2B,GAC5C,iBAAiB,CA2CnB;AACD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,YAAY,EAAE,aAAa,EAC3B,iBAAiB,EAAE,gBAAgB,EAAE,EACrC,YAAY,EAAE,kBAAkB,GAC/B,OAAO,CAAC,+BAA+B,CAAC,CA+H1C;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,uBAAuB,EAAE,2BAA2B,EAAE,+FAmBvD"}
|
|
@@ -119,7 +119,7 @@ var media_keys_infos_store_1 = require("./utils/media_keys_infos_store");
|
|
|
119
119
|
* @param {Object} currentKeySystemOptions
|
|
120
120
|
* @returns {null|Object}
|
|
121
121
|
*/
|
|
122
|
-
function checkCachedMediaKeySystemAccess(keySystems, currentKeySystemAccess, currentKeySystemOptions) {
|
|
122
|
+
function checkCachedMediaKeySystemAccess(keySystems, askedConfiguration, currentKeySystemAccess, currentKeySystemOptions) {
|
|
123
123
|
var mksConfiguration = currentKeySystemAccess.getConfiguration();
|
|
124
124
|
if ((0, should_renew_media_key_system_access_1.default)() || (0, is_null_or_undefined_1.default)(mksConfiguration)) {
|
|
125
125
|
return null;
|
|
@@ -144,6 +144,7 @@ function checkCachedMediaKeySystemAccess(keySystems, currentKeySystemAccess, cur
|
|
|
144
144
|
return {
|
|
145
145
|
keySystemOptions: firstCompatibleOption,
|
|
146
146
|
keySystemAccess: currentKeySystemAccess,
|
|
147
|
+
askedConfiguration: askedConfiguration,
|
|
147
148
|
};
|
|
148
149
|
}
|
|
149
150
|
return null;
|
|
@@ -276,6 +277,27 @@ function buildKeySystemConfigurations(keySystemTypeInfo) {
|
|
|
276
277
|
persistentState: persistentState,
|
|
277
278
|
sessionTypes: sessionTypes,
|
|
278
279
|
};
|
|
280
|
+
if (audioCapabilitiesConfig !== undefined) {
|
|
281
|
+
if (videoCapabilitiesConfig !== undefined) {
|
|
282
|
+
return [wantedMediaKeySystemConfiguration];
|
|
283
|
+
}
|
|
284
|
+
return [
|
|
285
|
+
wantedMediaKeySystemConfiguration,
|
|
286
|
+
__assign(__assign({}, wantedMediaKeySystemConfiguration), {
|
|
287
|
+
// Re-try without `videoCapabilities` in case the EME implementation is
|
|
288
|
+
// buggy
|
|
289
|
+
videoCapabilities: undefined }),
|
|
290
|
+
];
|
|
291
|
+
}
|
|
292
|
+
else if (videoCapabilitiesConfig !== undefined) {
|
|
293
|
+
return [
|
|
294
|
+
wantedMediaKeySystemConfiguration,
|
|
295
|
+
__assign(__assign({}, wantedMediaKeySystemConfiguration), {
|
|
296
|
+
// Re-try without `audioCapabilities` in case the EME implementation is
|
|
297
|
+
// buggy
|
|
298
|
+
audioCapabilities: undefined }),
|
|
299
|
+
];
|
|
300
|
+
}
|
|
279
301
|
return [
|
|
280
302
|
wantedMediaKeySystemConfiguration,
|
|
281
303
|
// Some legacy implementations have issues with `audioCapabilities` and
|
|
@@ -286,23 +308,21 @@ function buildKeySystemConfigurations(keySystemTypeInfo) {
|
|
|
286
308
|
}
|
|
287
309
|
/**
|
|
288
310
|
* Extract from the current mediaKeys the supported Codecs.
|
|
289
|
-
* @param {Object
|
|
290
|
-
*
|
|
291
|
-
* @param {Object | undefined} mksConfiguration - The result of
|
|
311
|
+
* @param {Object} initialConfiguration - The MediaKeySystemConfiguration given
|
|
312
|
+
* to the `navigator.requestMediaKeySystemAccess` API.
|
|
313
|
+
* @param {Object | undefined} mksConfiguration - The result of
|
|
314
|
+
* getConfiguration() of the media keys.
|
|
292
315
|
* @return {Array} The list of supported codec by the CDM.
|
|
293
316
|
*/
|
|
294
|
-
function extractCodecSupportListFromConfiguration(
|
|
295
|
-
var _a, _b;
|
|
296
|
-
var
|
|
297
|
-
var
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
var testedCodecs = testedAudioCodecs.concat(testedVideoCodecs);
|
|
304
|
-
var supportedVideoCodecs = (_a = mksConfiguration.videoCapabilities) === null || _a === void 0 ? void 0 : _a.map(function (entry) { return entry.contentType; });
|
|
305
|
-
var supportedAudioCodecs = (_b = mksConfiguration.audioCapabilities) === null || _b === void 0 ? void 0 : _b.map(function (entry) { return entry.contentType; });
|
|
317
|
+
function extractCodecSupportListFromConfiguration(initialConfiguration, mksConfiguration) {
|
|
318
|
+
var _a, _b, _c, _d, _e, _f;
|
|
319
|
+
var testedAudioCodecs = (_b = (_a = initialConfiguration.audioCapabilities) === null || _a === void 0 ? void 0 : _a.map(function (v) { return v.contentType; })) !== null && _b !== void 0 ? _b : [];
|
|
320
|
+
var testedVideoCodecs = (_d = (_c = initialConfiguration.videoCapabilities) === null || _c === void 0 ? void 0 : _c.map(function (v) { return v.contentType; })) !== null && _d !== void 0 ? _d : [];
|
|
321
|
+
var testedCodecs = testedAudioCodecs
|
|
322
|
+
.concat(testedVideoCodecs)
|
|
323
|
+
.filter(function (c) { return c !== undefined; });
|
|
324
|
+
var supportedVideoCodecs = (_e = mksConfiguration.videoCapabilities) === null || _e === void 0 ? void 0 : _e.map(function (entry) { return entry.contentType; });
|
|
325
|
+
var supportedAudioCodecs = (_f = mksConfiguration.audioCapabilities) === null || _f === void 0 ? void 0 : _f.map(function (entry) { return entry.contentType; });
|
|
306
326
|
var supportedCodecs = __spreadArray(__spreadArray([], __read((supportedVideoCodecs !== null && supportedVideoCodecs !== void 0 ? supportedVideoCodecs : [])), false), __read((supportedAudioCodecs !== null && supportedAudioCodecs !== void 0 ? supportedAudioCodecs : [])), false).filter(function (contentType) { return contentType !== undefined; });
|
|
307
327
|
if (supportedCodecs.length === 0) {
|
|
308
328
|
// Some legacy implementations have issues with `audioCapabilities` and
|
|
@@ -349,15 +369,16 @@ function getMediaKeySystemAccess(mediaElement, keySystemsConfigs, cancelSignal)
|
|
|
349
369
|
if (eme_1.default.implementation === currentState.emeImplementation.implementation) {
|
|
350
370
|
// Fast way to find a compatible keySystem if the currently loaded
|
|
351
371
|
// one as exactly the same compatibility options.
|
|
352
|
-
var cachedKeySystemAccess = checkCachedMediaKeySystemAccess(keySystemsConfigs, currentState.mediaKeySystemAccess, currentState.keySystemOptions);
|
|
372
|
+
var cachedKeySystemAccess = checkCachedMediaKeySystemAccess(keySystemsConfigs, currentState.askedConfiguration, currentState.mediaKeySystemAccess, currentState.keySystemOptions);
|
|
353
373
|
if (cachedKeySystemAccess !== null) {
|
|
354
374
|
log_1.default.info("DRM: Found cached compatible keySystem");
|
|
355
375
|
return Promise.resolve({
|
|
356
376
|
type: "reuse-media-key-system-access",
|
|
357
377
|
value: {
|
|
358
378
|
mediaKeySystemAccess: cachedKeySystemAccess.keySystemAccess,
|
|
379
|
+
askedConfiguration: cachedKeySystemAccess.askedConfiguration,
|
|
359
380
|
options: cachedKeySystemAccess.keySystemOptions,
|
|
360
|
-
codecSupport: extractCodecSupportListFromConfiguration(cachedKeySystemAccess.
|
|
381
|
+
codecSupport: extractCodecSupportListFromConfiguration(cachedKeySystemAccess.askedConfiguration, cachedKeySystemAccess.keySystemAccess.getConfiguration()),
|
|
361
382
|
},
|
|
362
383
|
});
|
|
363
384
|
}
|
|
@@ -401,7 +422,7 @@ function getMediaKeySystemAccess(mediaElement, keySystemsConfigs, cancelSignal)
|
|
|
401
422
|
*/
|
|
402
423
|
function recursivelyTestKeySystems(index) {
|
|
403
424
|
return __awaiter(this, void 0, void 0, function () {
|
|
404
|
-
var chosenType, keyType, keySystemOptions, keySystemConfigurations, keySystemAccess, _1;
|
|
425
|
+
var chosenType, keyType, keySystemOptions, keySystemConfigurations, keySystemAccess, configIdx, keySystemConfiguration, _1;
|
|
405
426
|
return __generator(this, function (_a) {
|
|
406
427
|
switch (_a.label) {
|
|
407
428
|
case 0:
|
|
@@ -419,11 +440,16 @@ function getMediaKeySystemAccess(mediaElement, keySystemsConfigs, cancelSignal)
|
|
|
419
440
|
keySystemConfigurations = buildKeySystemConfigurations(chosenType);
|
|
420
441
|
log_1.default.debug("DRM: Request keysystem access ".concat(keyType, ",") +
|
|
421
442
|
"".concat(index + 1, " of ").concat(keySystemsType.length));
|
|
443
|
+
configIdx = 0;
|
|
422
444
|
_a.label = 1;
|
|
423
445
|
case 1:
|
|
424
|
-
|
|
425
|
-
|
|
446
|
+
if (!(configIdx < keySystemConfigurations.length)) return [3 /*break*/, 6];
|
|
447
|
+
keySystemConfiguration = keySystemConfigurations[configIdx];
|
|
448
|
+
_a.label = 2;
|
|
426
449
|
case 2:
|
|
450
|
+
_a.trys.push([2, 4, , 5]);
|
|
451
|
+
return [4 /*yield*/, testKeySystem(keyType, [keySystemConfiguration])];
|
|
452
|
+
case 3:
|
|
427
453
|
keySystemAccess = _a.sent();
|
|
428
454
|
log_1.default.info("DRM: Found compatible keysystem", keyType, index + 1);
|
|
429
455
|
return [2 /*return*/, {
|
|
@@ -431,17 +457,21 @@ function getMediaKeySystemAccess(mediaElement, keySystemsConfigs, cancelSignal)
|
|
|
431
457
|
value: {
|
|
432
458
|
options: keySystemOptions,
|
|
433
459
|
mediaKeySystemAccess: keySystemAccess,
|
|
434
|
-
|
|
460
|
+
askedConfiguration: keySystemConfiguration,
|
|
461
|
+
codecSupport: extractCodecSupportListFromConfiguration(keySystemConfiguration, keySystemAccess.getConfiguration()),
|
|
435
462
|
},
|
|
436
463
|
}];
|
|
437
|
-
case
|
|
464
|
+
case 4:
|
|
438
465
|
_1 = _a.sent();
|
|
439
|
-
log_1.default.debug("DRM: Rejected access to keysystem", keyType, index + 1);
|
|
466
|
+
log_1.default.debug("DRM: Rejected access to keysystem", keyType, index + 1, configIdx);
|
|
440
467
|
if (cancelSignal.cancellationError !== null) {
|
|
441
468
|
throw cancelSignal.cancellationError;
|
|
442
469
|
}
|
|
443
|
-
return [
|
|
444
|
-
case
|
|
470
|
+
return [3 /*break*/, 5];
|
|
471
|
+
case 5:
|
|
472
|
+
configIdx++;
|
|
473
|
+
return [3 /*break*/, 1];
|
|
474
|
+
case 6: return [2 /*return*/, recursivelyTestKeySystems(index + 1)];
|
|
445
475
|
}
|
|
446
476
|
});
|
|
447
477
|
});
|
|
@@ -23,6 +23,11 @@ import type { IMediaKeySessionStores } from "./types";
|
|
|
23
23
|
export interface IMediaKeysInfos {
|
|
24
24
|
/** The MediaKeySystemAccess which allowed to create the MediaKeys instance. */
|
|
25
25
|
mediaKeySystemAccess: MediaKeySystemAccess | ICustomMediaKeySystemAccess;
|
|
26
|
+
/**
|
|
27
|
+
* The MediaKeySystemConfiguration that has been provided to the
|
|
28
|
+
* `requestMediaKeySystemAccess` API.
|
|
29
|
+
*/
|
|
30
|
+
askedConfiguration: MediaKeySystemConfiguration;
|
|
26
31
|
/** The MediaKeys instance. */
|
|
27
32
|
mediaKeys: MediaKeys | ICustomMediaKeys;
|
|
28
33
|
/** Stores allowing to create and retrieve MediaKeySessions. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_media_keys.d.ts","sourceRoot":"","sources":["../../../../src/main_thread/decrypt/get_media_keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAE9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAGtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAuBtD,8CAA8C;AAC9C,MAAM,WAAW,eAAe;IAC9B,+EAA+E;IAC/E,oBAAoB,EAAE,oBAAoB,GAAG,2BAA2B,CAAC;IACzE,8BAA8B;IAC9B,SAAS,EAAE,SAAS,GAAG,gBAAgB,CAAC;IACxC,+DAA+D;IAC/D,MAAM,EAAE,sBAAsB,CAAC;IAC/B,qEAAqE;IACrE,OAAO,EAAE,gBAAgB,CAAC;IAC1B,yBAAyB;IACzB,YAAY,EAAE,iBAAiB,CAAC;CACjC;AAED;;;;;;;;;;;;GAYG;AACH,wBAA8B,iBAAiB,CAC7C,YAAY,EAAE,aAAa,EAC3B,iBAAiB,EAAE,gBAAgB,EAAE,EACrC,YAAY,EAAE,kBAAkB,GAC/B,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"get_media_keys.d.ts","sourceRoot":"","sources":["../../../../src/main_thread/decrypt/get_media_keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAE9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAGtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAuBtD,8CAA8C;AAC9C,MAAM,WAAW,eAAe;IAC9B,+EAA+E;IAC/E,oBAAoB,EAAE,oBAAoB,GAAG,2BAA2B,CAAC;IACzE;;;OAGG;IACH,kBAAkB,EAAE,2BAA2B,CAAC;IAChD,8BAA8B;IAC9B,SAAS,EAAE,SAAS,GAAG,gBAAgB,CAAC;IACxC,+DAA+D;IAC/D,MAAM,EAAE,sBAAsB,CAAC;IAC/B,qEAAqE;IACrE,OAAO,EAAE,gBAAgB,CAAC;IAC1B,yBAAyB;IACzB,YAAY,EAAE,iBAAiB,CAAC;CACjC;AAED;;;;;;;;;;;;GAYG;AACH,wBAA8B,iBAAiB,CAC7C,YAAY,EAAE,aAAa,EAC3B,iBAAiB,EAAE,gBAAgB,EAAE,EACrC,YAAY,EAAE,kBAAkB,GAC/B,OAAO,CAAC,eAAe,CAAC,CAmD1B"}
|
|
@@ -89,7 +89,7 @@ function createPersistentSessionsStorage(keySystemOptions) {
|
|
|
89
89
|
*/
|
|
90
90
|
function getMediaKeysInfos(mediaElement, keySystemsConfigs, cancelSignal) {
|
|
91
91
|
return __awaiter(this, void 0, void 0, function () {
|
|
92
|
-
var evt, _a, options, mediaKeySystemAccess, codecSupport, currentState, persistentSessionsStore, mediaKeys_1, loadedSessionsStore_1, mediaKeys, loadedSessionsStore;
|
|
92
|
+
var evt, _a, options, mediaKeySystemAccess, askedConfiguration, codecSupport, currentState, persistentSessionsStore, mediaKeys_1, loadedSessionsStore_1, mediaKeys, loadedSessionsStore;
|
|
93
93
|
return __generator(this, function (_b) {
|
|
94
94
|
switch (_b.label) {
|
|
95
95
|
case 0: return [4 /*yield*/, (0, find_key_system_1.default)(mediaElement, keySystemsConfigs, cancelSignal)];
|
|
@@ -98,7 +98,7 @@ function getMediaKeysInfos(mediaElement, keySystemsConfigs, cancelSignal) {
|
|
|
98
98
|
if (cancelSignal.cancellationError !== null) {
|
|
99
99
|
throw cancelSignal.cancellationError;
|
|
100
100
|
}
|
|
101
|
-
_a = evt.value, options = _a.options, mediaKeySystemAccess = _a.mediaKeySystemAccess, codecSupport = _a.codecSupport;
|
|
101
|
+
_a = evt.value, options = _a.options, mediaKeySystemAccess = _a.mediaKeySystemAccess, askedConfiguration = _a.askedConfiguration, codecSupport = _a.codecSupport;
|
|
102
102
|
currentState = media_keys_infos_store_1.default.getState(mediaElement);
|
|
103
103
|
persistentSessionsStore = createPersistentSessionsStorage(options);
|
|
104
104
|
if ((0, can_reuse_media_keys_1.default)() &&
|
|
@@ -114,6 +114,7 @@ function getMediaKeysInfos(mediaElement, keySystemsConfigs, cancelSignal) {
|
|
|
114
114
|
return [2 /*return*/, {
|
|
115
115
|
mediaKeys: mediaKeys_1,
|
|
116
116
|
mediaKeySystemAccess: mediaKeySystemAccess,
|
|
117
|
+
askedConfiguration: askedConfiguration,
|
|
117
118
|
stores: { loadedSessionsStore: loadedSessionsStore_1, persistentSessionsStore: persistentSessionsStore },
|
|
118
119
|
options: options,
|
|
119
120
|
codecSupport: codecSupport,
|
|
@@ -128,6 +129,7 @@ function getMediaKeysInfos(mediaElement, keySystemsConfigs, cancelSignal) {
|
|
|
128
129
|
return [2 /*return*/, {
|
|
129
130
|
mediaKeys: mediaKeys,
|
|
130
131
|
mediaKeySystemAccess: mediaKeySystemAccess,
|
|
132
|
+
askedConfiguration: askedConfiguration,
|
|
131
133
|
stores: { loadedSessionsStore: loadedSessionsStore, persistentSessionsStore: persistentSessionsStore },
|
|
132
134
|
options: options,
|
|
133
135
|
codecSupport: codecSupport,
|
|
@@ -22,6 +22,11 @@ export interface IMediaElementMediaKeysInfos {
|
|
|
22
22
|
emeImplementation: IEmeApiImplementation;
|
|
23
23
|
/** Last keySystemOptions used with that HTMLMediaElement. */
|
|
24
24
|
keySystemOptions: IKeySystemOption;
|
|
25
|
+
/**
|
|
26
|
+
* The actual MediaKeySystemConfiguration asked to the
|
|
27
|
+
* `requestMediaKeySystemAccess` API.
|
|
28
|
+
*/
|
|
29
|
+
askedConfiguration: MediaKeySystemConfiguration;
|
|
25
30
|
/**
|
|
26
31
|
* Last MediaKeySystemAccess used to create a MediaKeys bound to that
|
|
27
32
|
* HTMLMediaElement.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media_keys_infos_store.d.ts","sourceRoot":"","sources":["../../../../../src/main_thread/decrypt/utils/media_keys_infos_store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,KAAK,EACV,gBAAgB,EAChB,2BAA2B,EAC3B,qBAAqB,EACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,mBAAmB,MAAM,yBAAyB,CAAC;AAE/D,6EAA6E;AAC7E,MAAM,WAAW,2BAA2B;IAC1C,iBAAiB,EAAE,qBAAqB,CAAC;IAEzC,6DAA6D;IAC7D,gBAAgB,EAAE,gBAAgB,CAAC;IAEnC;;;OAGG;IACH,oBAAoB,EAAE,2BAA2B,GAAG,oBAAoB,CAAC;IAEzE,8DAA8D;IAC9D,SAAS,EAAE,SAAS,GAAG,gBAAgB,CAAC;IAExC;;;OAGG;IACH,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C;;IASC;;;;OAIG;2BACoB,aAAa,SAAS,2BAA2B,GAAG,IAAI,GAAG,IAAI;IAItF;;;;OAIG;2BACoB,aAAa,GAAG,2BAA2B,GAAG,IAAI;IAKzE;;;OAGG;6BACsB,aAAa,GAAG,IAAI;;AAxB/C,wBA2BE"}
|
|
1
|
+
{"version":3,"file":"media_keys_infos_store.d.ts","sourceRoot":"","sources":["../../../../../src/main_thread/decrypt/utils/media_keys_infos_store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,KAAK,EACV,gBAAgB,EAChB,2BAA2B,EAC3B,qBAAqB,EACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,mBAAmB,MAAM,yBAAyB,CAAC;AAE/D,6EAA6E;AAC7E,MAAM,WAAW,2BAA2B;IAC1C,iBAAiB,EAAE,qBAAqB,CAAC;IAEzC,6DAA6D;IAC7D,gBAAgB,EAAE,gBAAgB,CAAC;IAEnC;;;OAGG;IACH,kBAAkB,EAAE,2BAA2B,CAAC;IAEhD;;;OAGG;IACH,oBAAoB,EAAE,2BAA2B,GAAG,oBAAoB,CAAC;IAEzE,8DAA8D;IAC9D,SAAS,EAAE,SAAS,GAAG,gBAAgB,CAAC;IAExC;;;OAGG;IACH,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C;;IASC;;;;OAIG;2BACoB,aAAa,SAAS,2BAA2B,GAAG,IAAI,GAAG,IAAI;IAItF;;;;OAIG;2BACoB,aAAa,GAAG,2BAA2B,GAAG,IAAI;IAKzE;;;OAGG;6BACsB,aAAa,GAAG,IAAI;;AAxB/C,wBA2BE"}
|
|
@@ -142,7 +142,7 @@ class Player extends EventEmitter {
|
|
|
142
142
|
// Workaround to support Firefox autoplay on FF 42.
|
|
143
143
|
// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1194624
|
|
144
144
|
videoElement.preload = "auto";
|
|
145
|
-
this.version = /* PLAYER_VERSION */ "4.2.0-dev.
|
|
145
|
+
this.version = /* PLAYER_VERSION */ "4.2.0-dev.2024081300";
|
|
146
146
|
this.log = log;
|
|
147
147
|
this.state = "STOPPED";
|
|
148
148
|
this.videoElement = videoElement;
|
|
@@ -2410,5 +2410,5 @@ class Player extends EventEmitter {
|
|
|
2410
2410
|
* Use of a WeakSet ensure the object is garbage collected if it's not used anymore.
|
|
2411
2411
|
*/
|
|
2412
2412
|
Player._priv_currentlyUsedVideoElements = new WeakSet();
|
|
2413
|
-
Player.version = /* PLAYER_VERSION */ "4.2.0-dev.
|
|
2413
|
+
Player.version = /* PLAYER_VERSION */ "4.2.0-dev.2024081300";
|
|
2414
2414
|
export default Player;
|
|
@@ -34,7 +34,7 @@ export declare function disableMediaKeys(mediaElement: IMediaElement): Promise<u
|
|
|
34
34
|
* @param {Object} cancelSignal
|
|
35
35
|
* @returns {Promise}
|
|
36
36
|
*/
|
|
37
|
-
export default function attachMediaKeys(mediaElement: IMediaElement, { emeImplementation, keySystemOptions, loadedSessionsStore, mediaKeySystemAccess, mediaKeys, }: IMediaKeysState, cancelSignal: CancellationSignal): Promise<void>;
|
|
37
|
+
export default function attachMediaKeys(mediaElement: IMediaElement, { emeImplementation, keySystemOptions, askedConfiguration, loadedSessionsStore, mediaKeySystemAccess, mediaKeys, }: IMediaKeysState, cancelSignal: CancellationSignal): Promise<void>;
|
|
38
38
|
/** MediaKeys and associated state attached to a media element. */
|
|
39
39
|
export interface IMediaKeysState {
|
|
40
40
|
/** Options set when the MediaKeys has been attached. */
|
|
@@ -45,6 +45,11 @@ export interface IMediaKeysState {
|
|
|
45
45
|
mediaKeySystemAccess: MediaKeySystemAccess | ICustomMediaKeySystemAccess;
|
|
46
46
|
/** The MediaKeys instance to attach to the media element. */
|
|
47
47
|
mediaKeys: MediaKeys | ICustomMediaKeys;
|
|
48
|
+
/**
|
|
49
|
+
* The MediaKeySystemConfiguration that has been provided to the
|
|
50
|
+
* `requestMediaKeySystemAccess` API.
|
|
51
|
+
*/
|
|
52
|
+
askedConfiguration: MediaKeySystemConfiguration;
|
|
48
53
|
/**
|
|
49
54
|
* The chosen EME implementation abstraction linked to `mediaKeys`.
|
|
50
55
|
* Different EME implementation might for example be used while debugging or
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attach_media_keys.d.ts","sourceRoot":"","sources":["../../../../src/main_thread/decrypt/attach_media_keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,KAAK,EACV,gBAAgB,EAChB,2BAA2B,EAC3B,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAK1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,mBAAmB,MAAM,+BAA+B,CAAC;AAGrE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAI9E;AAED;;;;;;;;GAQG;AACH,wBAA8B,eAAe,CAC3C,YAAY,EAAE,aAAa,EAC3B,EACE,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,GACV,EAAE,eAAe,EAClB,YAAY,EAAE,kBAAkB,GAC/B,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"attach_media_keys.d.ts","sourceRoot":"","sources":["../../../../src/main_thread/decrypt/attach_media_keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,KAAK,EACV,gBAAgB,EAChB,2BAA2B,EAC3B,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAK1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,mBAAmB,MAAM,+BAA+B,CAAC;AAGrE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAI9E;AAED;;;;;;;;GAQG;AACH,wBAA8B,eAAe,CAC3C,YAAY,EAAE,aAAa,EAC3B,EACE,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,GACV,EAAE,eAAe,EAClB,YAAY,EAAE,kBAAkB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAsCf;AAED,kEAAkE;AAClE,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,gEAAgE;IAChE,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,uEAAuE;IACvE,oBAAoB,EAAE,oBAAoB,GAAG,2BAA2B,CAAC;IACzE,6DAA6D;IAC7D,SAAS,EAAE,SAAS,GAAG,gBAAgB,CAAC;IACxC;;;OAGG;IACH,kBAAkB,EAAE,2BAA2B,CAAC;IAChD;;;;OAIG;IACH,iBAAiB,EAAE,qBAAqB,CAAC;CAC1C"}
|
|
@@ -39,7 +39,7 @@ export function disableMediaKeys(mediaElement) {
|
|
|
39
39
|
* @param {Object} cancelSignal
|
|
40
40
|
* @returns {Promise}
|
|
41
41
|
*/
|
|
42
|
-
export default async function attachMediaKeys(mediaElement, { emeImplementation, keySystemOptions, loadedSessionsStore, mediaKeySystemAccess, mediaKeys, }, cancelSignal) {
|
|
42
|
+
export default async function attachMediaKeys(mediaElement, { emeImplementation, keySystemOptions, askedConfiguration, loadedSessionsStore, mediaKeySystemAccess, mediaKeys, }, cancelSignal) {
|
|
43
43
|
const previousState = MediaKeysInfosStore.getState(mediaElement);
|
|
44
44
|
const closeAllSessions = previousState !== null && previousState.loadedSessionsStore !== loadedSessionsStore
|
|
45
45
|
? previousState.loadedSessionsStore.closeAllSessions()
|
|
@@ -56,6 +56,7 @@ export default async function attachMediaKeys(mediaElement, { emeImplementation,
|
|
|
56
56
|
mediaKeySystemAccess,
|
|
57
57
|
mediaKeys,
|
|
58
58
|
loadedSessionsStore,
|
|
59
|
+
askedConfiguration,
|
|
59
60
|
});
|
|
60
61
|
if (mediaElement.mediaKeys === mediaKeys) {
|
|
61
62
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content_decryptor.d.ts","sourceRoot":"","sources":["../../../../src/main_thread/decrypt/content_decryptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAO9E,OAAO,KAAK,EAAE,gBAAgB,EAAgB,MAAM,oBAAoB,CAAC;AAIzE,OAAO,YAAY,MAAM,2BAA2B,CAAC;AAerD,OAAO,KAAK,EACV,eAAe,EAEf,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,SAAS,CAAC;AACjB,OAAO,EAA8B,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAU5E,OAAO,KAAK,gBAAgB,MAAM,4BAA4B,CAAC;AAE/D;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,YAAY,CAAC,sBAAsB,CAAC;IAChF;;;;;;;;;;;;OAYG;IACI,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAEpC;;;OAGG;IACI,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAE3B;;;;;;;OAOG;IACH,OAAO,CAAC,UAAU,CAA6B;IAE/C;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB,CAAuB;IAE/C;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAgB;IAElC;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc,CAAoB;IAE1C;;OAEG;IACH,OAAO,CAAC,4BAA4B,CAAoB;IAExD;;;;;OAKG;WACW,UAAU,IAAI,OAAO;IAInC;;;;;;;;;;;;;OAaG;gBACS,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,EAAE;IAqEtE;;;;OAIG;IACI,QAAQ,IAAI,qBAAqB;IAIxC;;;;;;;;OAQG;IACI,MAAM,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"content_decryptor.d.ts","sourceRoot":"","sources":["../../../../src/main_thread/decrypt/content_decryptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAO9E,OAAO,KAAK,EAAE,gBAAgB,EAAgB,MAAM,oBAAoB,CAAC;AAIzE,OAAO,YAAY,MAAM,2BAA2B,CAAC;AAerD,OAAO,KAAK,EACV,eAAe,EAEf,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,SAAS,CAAC;AACjB,OAAO,EAA8B,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAU5E,OAAO,KAAK,gBAAgB,MAAM,4BAA4B,CAAC;AAE/D;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,YAAY,CAAC,sBAAsB,CAAC;IAChF;;;;;;;;;;;;OAYG;IACI,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAEpC;;;OAGG;IACI,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAE3B;;;;;;;OAOG;IACH,OAAO,CAAC,UAAU,CAA6B;IAE/C;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB,CAAuB;IAE/C;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAgB;IAElC;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc,CAAoB;IAE1C;;OAEG;IACH,OAAO,CAAC,4BAA4B,CAAoB;IAExD;;;;;OAKG;WACW,UAAU,IAAI,OAAO;IAInC;;;;;;;;;;;;;OAaG;gBACS,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,EAAE;IAqEtE;;;;OAIG;IACI,QAAQ,IAAI,qBAAqB;IAIxC;;;;;;;;OAQG;IACI,MAAM,IAAI,IAAI;IAgFrB;;;;;;OAMG;IACI,OAAO;IAYd;;;;;;;;;;OAUG;IACI,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAgB7E;;;;;;;;OAQG;IACI,oBAAoB,CAAC,kBAAkB,EAAE,eAAe,GAAG,IAAI;IAqBtE;;;;;;;;OAQG;YACW,0BAA0B;IAiTxC,OAAO,CAAC,8BAA8B;IAyItC;;;;;;OAMG;IACH,OAAO,CAAC,wBAAwB;IAmChC;;;;;;;;;OASG;IACH,OAAO,CAAC,aAAa;IAuBrB;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAOlB;;;OAGG;IACH,OAAO,CAAC,4BAA4B;IAUpC;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;CAQ7B;AAeD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,UAAU,EAAE,EAC5B,YAAY,EAAE,UAAU,EAAE,GACzB,UAAU,EAAE,CAId;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,UAAU,EAAE,GACtB,UAAU,EAAE,CAUd;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,kBAAkB,EAAE,wBAAwB,EAC5C,SAAS,EAAE,UAAU,EAAE,GACtB,UAAU,EAAE,CAcd"}
|
|
@@ -154,7 +154,7 @@ export default class ContentDecryptor extends EventEmitter {
|
|
|
154
154
|
return;
|
|
155
155
|
}
|
|
156
156
|
const { mediaElement, mediaKeysInfo } = this._stateData.data;
|
|
157
|
-
const { options, mediaKeys, mediaKeySystemAccess, stores } = mediaKeysInfo;
|
|
157
|
+
const { options, mediaKeys, mediaKeySystemAccess, stores, askedConfiguration } = mediaKeysInfo;
|
|
158
158
|
const shouldDisableLock = options.disableMediaKeysAttachmentLock === true;
|
|
159
159
|
if (shouldDisableLock) {
|
|
160
160
|
this._stateData = {
|
|
@@ -175,6 +175,7 @@ export default class ContentDecryptor extends EventEmitter {
|
|
|
175
175
|
loadedSessionsStore: stores.loadedSessionsStore,
|
|
176
176
|
mediaKeySystemAccess,
|
|
177
177
|
mediaKeys,
|
|
178
|
+
askedConfiguration,
|
|
178
179
|
keySystemOptions: options,
|
|
179
180
|
};
|
|
180
181
|
log.debug("DRM: Attaching current MediaKeys");
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import type { IMediaElement } from "../../compat/browser_compatibility_types";
|
|
17
17
|
import type { ICustomMediaKeySystemAccess } from "../../compat/eme";
|
|
18
|
-
import type {
|
|
18
|
+
import type { IKeySystemOption } from "../../public_types";
|
|
19
19
|
import type { CancellationSignal } from "../../utils/task_canceller";
|
|
20
20
|
export type ICodecSupportList = Array<{
|
|
21
21
|
codec: string;
|
|
@@ -23,8 +23,19 @@ export type ICodecSupportList = Array<{
|
|
|
23
23
|
result: boolean;
|
|
24
24
|
}>;
|
|
25
25
|
export interface IMediaKeySystemAccessInfos {
|
|
26
|
+
/** `MediaKeySystemAccess` to use to create `MediaKeys` instances. */
|
|
26
27
|
mediaKeySystemAccess: MediaKeySystemAccess | ICustomMediaKeySystemAccess;
|
|
28
|
+
/**
|
|
29
|
+
* The MediaKeySystemConfiguration that has been provided to the
|
|
30
|
+
* `requestMediaKeySystemAccess` API.
|
|
31
|
+
*/
|
|
32
|
+
askedConfiguration: MediaKeySystemConfiguration;
|
|
33
|
+
/**
|
|
34
|
+
* Corresponding `keySystems` element that has led to the creation of the
|
|
35
|
+
* `MediaKeySystemAccess`.
|
|
36
|
+
*/
|
|
27
37
|
options: IKeySystemOption;
|
|
38
|
+
/** Information on supported or unsupported codec on that `MediaKeySystemAccess`. */
|
|
28
39
|
codecSupport: ICodecSupportList;
|
|
29
40
|
}
|
|
30
41
|
export interface IReuseMediaKeySystemAccessEvent {
|
|
@@ -38,12 +49,13 @@ export interface ICreateMediaKeySystemAccessEvent {
|
|
|
38
49
|
export type IFoundMediaKeySystemAccessEvent = IReuseMediaKeySystemAccessEvent | ICreateMediaKeySystemAccessEvent;
|
|
39
50
|
/**
|
|
40
51
|
* Extract from the current mediaKeys the supported Codecs.
|
|
41
|
-
* @param {Object
|
|
42
|
-
*
|
|
43
|
-
* @param {Object | undefined} mksConfiguration - The result of
|
|
52
|
+
* @param {Object} initialConfiguration - The MediaKeySystemConfiguration given
|
|
53
|
+
* to the `navigator.requestMediaKeySystemAccess` API.
|
|
54
|
+
* @param {Object | undefined} mksConfiguration - The result of
|
|
55
|
+
* getConfiguration() of the media keys.
|
|
44
56
|
* @return {Array} The list of supported codec by the CDM.
|
|
45
57
|
*/
|
|
46
|
-
export declare function extractCodecSupportListFromConfiguration(
|
|
58
|
+
export declare function extractCodecSupportListFromConfiguration(initialConfiguration: MediaKeySystemConfiguration, mksConfiguration: MediaKeySystemConfiguration): ICodecSupportList;
|
|
47
59
|
/**
|
|
48
60
|
* Try to find a compatible key system from the keySystems array given.
|
|
49
61
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find_key_system.d.ts","sourceRoot":"","sources":["../../../../src/main_thread/decrypt/find_key_system.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAE9E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAUpE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"find_key_system.d.ts","sourceRoot":"","sources":["../../../../src/main_thread/decrypt/find_key_system.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAE9E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAUpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAK3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAKrE,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC,CAAC;AAEH,MAAM,WAAW,0BAA0B;IACzC,qEAAqE;IACrE,oBAAoB,EAAE,oBAAoB,GAAG,2BAA2B,CAAC;IACzE;;;OAGG;IACH,kBAAkB,EAAE,2BAA2B,CAAC;IAChD;;;OAGG;IACH,OAAO,EAAE,gBAAgB,CAAC;IAC1B,oFAAoF;IACpF,YAAY,EAAE,iBAAiB,CAAC;CACjC;AAED,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,+BAA+B,CAAC;IACtC,KAAK,EAAE,0BAA0B,CAAC;CACnC;AAED,MAAM,WAAW,gCAAgC;IAC/C,IAAI,EAAE,gCAAgC,CAAC;IACvC,KAAK,EAAE,0BAA0B,CAAC;CACnC;AAED,MAAM,MAAM,+BAA+B,GACvC,+BAA+B,GAC/B,gCAAgC,CAAC;AAkPrC;;;;;;;GAOG;AACH,wBAAgB,wCAAwC,CACtD,oBAAoB,EAAE,2BAA2B,EACjD,gBAAgB,EAAE,2BAA2B,GAC5C,iBAAiB,CA2CnB;AACD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,YAAY,EAAE,aAAa,EAC3B,iBAAiB,EAAE,gBAAgB,EAAE,EACrC,YAAY,EAAE,kBAAkB,GAC/B,OAAO,CAAC,+BAA+B,CAAC,CA+H1C;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,uBAAuB,EAAE,2BAA2B,EAAE,+FAmBvD"}
|