@reveldigital/player-client 1.0.9 → 1.0.10
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/esm2020/lib/interfaces/client.interface.mjs +1 -1
- package/esm2020/lib/player-client.service.mjs +52 -3
- package/esm2020/lib/version.mjs +3 -0
- package/fesm2015/reveldigital-player-client.mjs +69 -2
- package/fesm2015/reveldigital-player-client.mjs.map +1 -1
- package/fesm2020/reveldigital-player-client.mjs +53 -2
- package/fesm2020/reveldigital-player-client.mjs.map +1 -1
- package/lib/interfaces/client.interface.d.ts +144 -9
- package/lib/interfaces/client.interface.d.ts.map +1 -1
- package/lib/player-client.service.d.ts +25 -0
- package/lib/player-client.service.d.ts.map +1 -1
- package/lib/version.d.ts +2 -0
- package/lib/version.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JldmVsZGlnaXRhbC9wbGF5ZXItY2xpZW50L3NyYy9saWIvaW50ZXJmYWNlcy9jbGllbnQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGlnbm9yZSAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElDbGllbnQge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgdG8gdGhlIHBsYXllci5cclxuICAgICAqIFRoaXMgaXMgdGhlIHByaW1hcnkgbWV0aG9kIG9mIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgY2xpZW50IGFuZCB0aGUgcGxheWVyLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqIEBtZW1iZXJvZiBJQ2xpZW50XHJcbiAgICAgKi9cclxuICAgIGNhbGxiYWNrKC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBkZXZpY2UgbmFtZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmcgfCBudWxsPn1cclxuICAgICAqIEBtZW1iZXJvZiBJQ2xpZW50XHJcbiAgICAgKi9cclxuICAgIGdldERldmljZVRpbWUoZGF0ZT86IERhdGUpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGRldmljZSB0aW1lIHpvbmUgbmFtZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmcgfCBudWxsPn1cclxuICAgICAqIEBtZW1iZXJvZiBJQ2xpZW50XHJcbiAgICAgKi9cclxuICAgIGdldERldmljZVRpbWVab25lTmFtZSgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGRldmljZSB0aW1lIHpvbmUgSURcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nIHwgbnVsbD59XHJcbiAgICAgKiBAbWVtYmVyb2YgSUNsaWVudFxyXG4gICAgICovXHJcbiAgICBnZXREZXZpY2VUaW1lWm9uZUlEKCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZGV2aWNlIHRpbWUgem9uZSBvZmZzZXRcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyIHwgbnVsbD59XHJcbiAgICAgKiBAbWVtYmVyb2YgSUNsaWVudFxyXG4gICAgICovXHJcbiAgICBnZXREZXZpY2VUaW1lWm9uZU9mZnNldCgpOiBQcm9taXNlPG51bWJlciB8IG51bGw+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGRldmljZSBsYW5ndWFnZSBjb2RlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZyB8IG51bGw+fVxyXG4gICAgICogQG1lbWJlcm9mIElDbGllbnRcclxuICAgICAqL1xyXG4gICAgZ2V0TGFuZ3VhZ2VDb2RlKCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZGV2aWNlIGtleVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmcgfCBudWxsPn1cclxuICAgICAqIEBtZW1iZXJvZiBJQ2xpZW50XHJcbiAgICAgKi9cclxuICAgIGdldERldmljZUtleSgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VuZCBjb21tYW5kIHRvIGRldmljZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gbmFtZSBcclxuICAgICAqIEBwYXJhbSBhcmcgXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqIEBtZW1iZXJvZiBJQ2xpZW50XHJcbiAgICAgKi9cclxuICAgIHNlbmRDb21tYW5kKG5hbWU6IHN0cmluZywgYXJnOiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VuZCByZW1vdGUgY29tbWFuZCB0byBkZXZpY2VcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGRldmljZUtleXNcclxuICAgICAqIEBwYXJhbSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gYXJnXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqIEBtZW1iZXJvZiBJQ2xpZW50XHJcbiAgICAgKi9cclxuICAgIHNlbmRSZW1vdGVDb21tYW5kKGRldmljZUtleXM6IHN0cmluZ1tdLCBuYW1lOiBzdHJpbmcsIGFyZzogc3RyaW5nKTogdm9pZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYWNrIGV2ZW50XHJcbiAgICAgKiBcclxuICAgICAqIEluIHRoZSBjYXNlIG9mIGEgdGltZWQgZXZlbnQsIHRoZSBkdXJhdGlvbiBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIHRpbWVFdmVudCBjYWxsIHRvIHRoZSB0cmFjayBjYWxsLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gZXZlbnROYW1lIFxyXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgXHJcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAqIEBtZW1iZXJvZiBJQ2xpZW50XHJcbiAgICAgKi9cclxuICAgIHRyYWNrKGV2ZW50TmFtZTogc3RyaW5nLCBwcm9wZXJ0aWVzPzogc3RyaW5nKTogdm9pZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0IHRyYWNraW5nIG9mIGV2ZW50IHdpdGggZHVyYXRpb25cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGV2ZW50TmFtZVxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKiBAbWVtYmVyb2YgSUNsaWVudFxyXG4gICAgICovXHJcbiAgICB0aW1lRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RhcnQgYSBuZXcgc2Vzc2lvblxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gaWQgb3B0aW9uYWwgc2Vzc2lvbiBJRFxyXG4gICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgKiBAbWVtYmVyb2YgSUNsaWVudFxyXG4gICAgICovXHJcbiAgICBuZXdFdmVudFNlc3Npb24oaWQ/OiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgUmV2ZWwgc3lzdGVtXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZyB8IG51bGw+fVxyXG4gICAgICogQG1lbWJlcm9mIElDbGllbnRcclxuICAgICAqL1xyXG4gICAgZ2V0UmV2ZWxSb290KCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIGNvbW1hbmQgbWFwXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZyB8IG51bGw+fVxyXG4gICAgICogQG1lbWJlcm9mIElDbGllbnRcclxuICAgICAqL1xyXG4gICAgZ2V0Q29tbWFuZE1hcCgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2lnbmFscyB0byB0aGUgcGxheWVyIHRoYXQgdGhlIGNsaWVudCBpcyBmaW5pc2hlZCBhbmQgdGhlIHBsYXllciBjYW4gdHJhbnNpdGlvbiB0byB0aGUgbmV4dCBzb3VyY2VcclxuICAgICAqL1xyXG4gICAgZmluaXNoKCk6IHZvaWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZGV2aWNlIGluZm9ybWF0aW9uXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZyB8IG51bGw+fVxyXG4gICAgICogQG1lbWJlcm9mIElDbGllbnRcclxuICAgICAqL1xyXG4gICAgZ2V0RGV2aWNlKCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgd2lkdGggb2YgdGhlIHZpc3VhbGl6YXRpb24gYXJlYVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXIgfCBudWxsPn1cclxuICAgICAqIEBtZW1iZXJvZiBJQ2xpZW50XHJcbiAgICAgKi9cclxuICAgIGdldFdpZHRoKCk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgaGVpZ2h0IG9mIHRoZSB2aXN1YWxpemF0aW9uIGFyZWFcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyIHwgbnVsbD59XHJcbiAgICAgKiBAbWVtYmVyb2YgSUNsaWVudFxyXG4gICAgICovXHJcbiAgICBnZXRIZWlnaHQoKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgZHVyYXRpb24gb2YgdGhlIGN1cnJlbnRseSBwbGF5aW5nIHNvdXJjZVxyXG4gICAgICogKG9ubHkgYXBwbGljYWJsZSB3aGVuIGFzc29jaWF0ZWQgd2l0aCBhIHBsYXlsaXN0KVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXIgfCBudWxsPn1cclxuICAgICAqIEBtZW1iZXJvZiBJQ2xpZW50XHJcbiAgICAgKi9cclxuICAgIGdldER1cmF0aW9uKCk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIFNESyB2ZXJzaW9uXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZyB8IG51bGw+fVxyXG4gICAgICogQG1lbWJlcm9mIElDbGllbnRcclxuICAgICAqL1xyXG4gICAgZ2V0U2RrVmVyc2lvbigpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+O1xyXG59Il19
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
2
|
import { BehaviorSubject, fromEvent, Subject } from 'rxjs';
|
|
3
3
|
import { map, share, tap } from 'rxjs/operators';
|
|
4
|
+
import { version } from './version';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
export class PlayerClientService {
|
|
6
7
|
// private onPostMessageSub: Subscription;
|
|
@@ -316,6 +317,42 @@ export class PlayerClientService {
|
|
|
316
317
|
});
|
|
317
318
|
return device[0];
|
|
318
319
|
}
|
|
320
|
+
/**
|
|
321
|
+
* Returns the width of the visualization area.
|
|
322
|
+
*
|
|
323
|
+
* @returns Width of the visualization area
|
|
324
|
+
*/
|
|
325
|
+
async getWidth() {
|
|
326
|
+
const client = await this.getClient();
|
|
327
|
+
return client.getWidth();
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Returns the height of the visualization area.
|
|
331
|
+
*
|
|
332
|
+
* @returns Height of the visualization area
|
|
333
|
+
*/
|
|
334
|
+
async getHeight() {
|
|
335
|
+
const client = await this.getClient();
|
|
336
|
+
return client.getHeight();
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Returns the duration of the currently playing source.
|
|
340
|
+
* (only applicable when associated with a playlist)
|
|
341
|
+
*
|
|
342
|
+
* @returns Duration of the current item in milliseconds
|
|
343
|
+
*/
|
|
344
|
+
async getDuration() {
|
|
345
|
+
const client = await this.getClient();
|
|
346
|
+
return client.getDuration();
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Returns the current SDK version.
|
|
350
|
+
*
|
|
351
|
+
* @returns SDK version
|
|
352
|
+
*/
|
|
353
|
+
async getSdkVersion() {
|
|
354
|
+
return Promise.resolve(version);
|
|
355
|
+
}
|
|
319
356
|
// ---
|
|
320
357
|
// PRIVATE METHODS.
|
|
321
358
|
// ---
|
|
@@ -413,11 +450,23 @@ class NoopClient {
|
|
|
413
450
|
async getCommandMap() {
|
|
414
451
|
return Promise.resolve('{}');
|
|
415
452
|
}
|
|
453
|
+
finish() {
|
|
454
|
+
// NOOP implement, nothing to do....
|
|
455
|
+
}
|
|
416
456
|
async getDevice() {
|
|
417
457
|
return Promise.resolve(null);
|
|
418
458
|
}
|
|
419
|
-
|
|
420
|
-
|
|
459
|
+
async getWidth() {
|
|
460
|
+
return Promise.resolve(null);
|
|
461
|
+
}
|
|
462
|
+
async getHeight() {
|
|
463
|
+
return Promise.resolve(null);
|
|
464
|
+
}
|
|
465
|
+
async getDuration() {
|
|
466
|
+
return Promise.resolve(null);
|
|
467
|
+
}
|
|
468
|
+
async getSdkVersion() {
|
|
469
|
+
return Promise.resolve(version);
|
|
421
470
|
}
|
|
422
471
|
}
|
|
423
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLWNsaWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmV2ZWxkaWdpdGFsL3BsYXllci1jbGllbnQvc3JjL2xpYi9wbGF5ZXItY2xpZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFvQmpELE1BQU0sT0FBTyxtQkFBbUI7SUFtRDlCLDBDQUEwQztJQUMxQyxpRUFBaUU7SUFDakUsMkNBQTJDO0lBQzNDLCtDQUErQztJQUMvQywrQ0FBK0M7SUFDL0Msc0RBQXNEO0lBQ3RELHdFQUF3RTtJQUN4RSxhQUFhO0lBQ2IseUJBQXlCO0lBQ3pCLEtBQUs7SUFFTCxjQUFjO0lBQ2QsWUFBWSxJQUFZO1FBMUR4Qjs7V0FFRztRQUNJLGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBWSxDQUFDO1FBQzVDOztXQUVHO1FBQ0ksYUFBUSxHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDOztXQUVHO1FBQ0ksYUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDaEM7O1dBRUc7UUFDSSxZQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQVUvQixjQUFjO1FBQ04sZ0JBQVcsR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUNsRSxLQUFLLEVBQUUsRUFDUCxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUNuQixDQUFDO1FBR0YsY0FBYztRQUNOLGVBQVUsR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFF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QU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWU7UUFFMUIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxLQUFLLENBQUMsWUFBWTtRQUV2QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLFdBQVcsQ0FBQyxJQUFZLEVBQUUsR0FBVztRQUUxQyxvQ0FBb0M7SUFDdEMsQ0FBQztJQUVNLGlCQUFpQixDQUFDLFVBQW9CLEVBQUUsSUFBWSxFQUFFLEdBQVc7UUFFdEUsb0NBQW9DO0lBQ3RDLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBaUIsRUFBRSxVQUFtQjtRQUVqRCxvQ0FBb0M7SUFDdEMsQ0FBQztJQUVNLFNBQVMsQ0FBQyxTQUFpQjtRQUVoQyxvQ0FBb0M7SUFDdEMsQ0FBQztJQUVNLGVBQWUsQ0FBQyxFQUFXO1FBRWhDLG9DQUFvQztJQUN0QyxDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVk7UUFFdkIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYTtRQUV4QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTO1FBRXBCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU0sTUFBTTtRQUVYLG9DQUFvQztJQUN0QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBOZ1pvbmUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBnYWRnZXRzIH0gZnJvbSAnQHJldmVsZGlnaXRhbC9nYWRnZXQtdHlwZXMnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb21FdmVudCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgc2hhcmUsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSUNvbW1hbmQgfSBmcm9tICcuL2ludGVyZmFjZXMvY29tbWFuZC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBJRGV2aWNlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2RldmljZS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBJRXZlbnRQcm9wZXJ0aWVzIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2V2ZW50LXByb3BlcnRpZXMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgSUNsaWVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9jbGllbnQuaW50ZXJmYWNlJztcclxuXHJcblxyXG4vLyBTbyB0aGF0IFR5cGVTY3JpcHQgZG9lc24ndCBjb21wbGFpbiwgd2UncmUgZ29pbmcgdG8gYXVnbWVudCB0aGUgR0xPQkFMIC8gV0lORE9XIFxyXG4vLyBuYW1lLXNwYWNlIGRlZmluaXRpb24gdG8gaW5jbHVkZSB0aGUgVHJhY2tlciBBUEkuIFRoaXMgYWxzbyBwcm92aWRlcyB1cyB3aXRoIGEgcGxhY2VcclxuLy8gdG8gYWN0dWFsbHkgRE9DVU1FTlQgdGhlIEFQSSBzbyB0aGF0IG91ciBkZXZlbG9wZXJzIGFyZW4ndCBndWVzc2luZyBhYm91dCB3aGF0J3NcclxuLy8gYXZhaWxhYmxlIG9uIHRoZSBsaWJyYXJ5LlxyXG5cclxuLyoqIEBpZ25vcmUgKi9cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gIHZhciBDbGllbnQ6IElDbGllbnQ7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFBsYXllckNsaWVudFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIHByaXZhdGUgY2xpZW50UHJvbWlzZTogUHJvbWlzZTxJQ2xpZW50PiB8IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbW1hbmRzIHNlbnQgdG8gdGhpcyBwbGF5ZXIuXHJcbiAgICovXHJcbiAgcHVibGljIG9uQ29tbWFuZCQgPSBuZXcgU3ViamVjdDxJQ29tbWFuZD4oKTtcclxuICAvKipcclxuICAgKiBTaWduYWxzIHRoZSBnYWRnZXQgaGFzIGJlZW4gbG9hZGVkIGFuZCBpcyByZWFkeSB0byBzdGFydC5cclxuICAgKi9cclxuICBwdWJsaWMgb25SZWFkeSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuICAvKipcclxuICAgKiBTaWduYWxzIHRoZSBnYWRnZXQgaGFzIGJlZW4gc3RhcnRlZCBieSB0aGUgcGxheWVyLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBvblN0YXJ0JCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgLyoqXHJcbiAgICogU2lnbmFscyB0aGUgZ2FkZ2V0cyBoYXMgYmVlbiBzdG9wcGVkIGJ5IHRoZSBwbGF5ZXIuXHJcbiAgICovXHJcbiAgcHVibGljIG9uU3RvcCQgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAvL1xyXG4gIC8vIFR3byBtZXRob2RzIGF2YWlsYWJsZSBmb3IgY2FsbGluZyBpbnRvIHRoZSBsaWJyYXJ5OlxyXG4gIC8vXHJcbiAgLy8gMSkgVXNpbmcgZGlzcGF0Y2hFdmVudCgpIHdpdGggdGhlIGZvbGxvd2luZyBjdXN0b20gZXZlbnRzXHJcbiAgLy8gMikgVXNpbmcgdGhlIHdpbmRvdyBzY29wZWQgUmV2ZWxEaWdpdGFsIG9iamVjdCBhcyBkZWZpbmVkIGluIHRoZSBjb25zdHJ1Y3RvclxyXG4gIC8vXHJcbiAgLyoqIEBpZ25vcmUgKi9cclxuICBwcml2YXRlIG9uU3RhcnRTdWI6IFN1YnNjcmlwdGlvbjtcclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIHByaXZhdGUgb25TdGFydEV2dCQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdSZXZlbERpZ2l0YWwuU3RhcnQnKS5waXBlKFxyXG4gICAgc2hhcmUoKSxcclxuICAgIHRhcCh0aGlzLm9uU3RhcnQkKVxyXG4gICk7XHJcbiAgLyoqIEBpZ25vcmUgKi9cclxuICBwcml2YXRlIG9uU3RvcFN1YjogU3Vic2NyaXB0aW9uO1xyXG4gIC8qKiBAaWdub3JlICovXHJcbiAgcHJpdmF0ZSBvblN0b3BFdnQkID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnUmV2ZWxEaWdpdGFsLlN0b3AnKS5waXBlKFxyXG4gICAgc2hhcmUoKSxcclxuICAgIHRhcCh0aGlzLm9uU3RvcCQpXHJcbiAgKTtcclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIHByaXZhdGUgb25Db21tYW5kU3ViOiBTdWJzY3JpcHRpb247XHJcbiAgLyoqIEBpZ25vcmUgKi9cclxuICBwcml2YXRlIG9uQ29tbWFuZEV2dCQgPSBmcm9tRXZlbnQ8SUNvbW1hbmQ+KGRvY3VtZW50LCAnUmV2ZWxEaWdpdGFsLkNvbW1hbmQnKS5waXBlKFxyXG4gICAgbWFwKChlOiBhbnkpID0+IHsgcmV0dXJuIHsgbmFtZTogZS5kZXRhaWwubmFtZSwgYXJnOiBlLmRldGFpbC5hcmcgfSBhcyBJQ29tbWFuZCB9KSxcclxuICAgIHNoYXJlKCksXHJcbiAgICB0YXAodGhpcy5vbkNvbW1hbmQkKVxyXG4gICk7XHJcblxyXG4gIC8vIHByaXZhdGUgb25Qb3N0TWVzc2FnZVN1YjogU3Vic2NyaXB0aW9uO1xyXG4gIC8vIHByaXZhdGUgb25Qb3N0TWVzc2FnZUV2dCQgPSBmcm9tRXZlbnQod2luZG93LCAnbWVzc2FnZScpLnBpcGUoXHJcbiAgLy8gICBmaWx0ZXIoKG1lc3NhZ2VFdmVudDogTWVzc2FnZUV2ZW50KSA9PlxyXG4gIC8vICAgICBtZXNzYWdlRXZlbnQuc291cmNlICE9PSB3aW5kb3cucGFyZW50ICYmXHJcbiAgLy8gICAgIHR5cGVvZiBtZXNzYWdlRXZlbnQuZGF0YSA9PT0gJ3N0cmluZycgJiZcclxuICAvLyAgICAgbWVzc2FnZUV2ZW50LmRhdGEuc3RhcnRzV2l0aCgncmV2ZWxkaWdpdGFsOicpKSxcclxuICAvLyAgIG1hcCgoZTogYW55KSA9PiB7IHJldHVybiBKU09OLnBhcnNlKGUuc3Vic3RyaW5nKDEzKSkgYXMgQ29tbWFuZCB9KSxcclxuICAvLyAgIHNoYXJlKCksXHJcbiAgLy8gICB0YXAodGhpcy5vbkNvbW1hbmQkKVxyXG4gIC8vICk7XHJcblxyXG4gIC8qKiBAaWdub3JlICovXHJcbiAgY29uc3RydWN0b3Ioem9uZTogTmdab25lKSB7XHJcblxyXG4gICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgKHdpbmRvdyBhcyBhbnkpLlJldmVsRGlnaXRhbCA9IHtcclxuICAgICAgQ29udHJvbGxlcjoge1xyXG4gICAgICAgIG9uQ29tbWFuZDogZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgYXJnOiBzdHJpbmcpIHtcclxuICAgICAgICAgIHpvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICAgc2VsZi5vbkNvbW1hbmQkLm5leHQoeyBuYW1lOiBuYW1lLCBhcmc6IGFyZyB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25TdGFydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgem9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBzZWxmLm9uU3RhcnQkLm5leHQobnVsbCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uU3RvcDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgem9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBzZWxmLm9uU3RvcCQubmV4dChudWxsKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub25TdGFydFN1YiA9IHRoaXMub25TdGFydEV2dCQuc3Vic2NyaWJlKCgpID0+IHsgfSk7XHJcbiAgICB0aGlzLm9uU3RvcFN1YiA9IHRoaXMub25TdG9wRXZ0JC5zdWJzY3JpYmUoKCkgPT4geyB9KTtcclxuICAgIHRoaXMub25Db21tYW5kU3ViID0gdGhpcy5vbkNvbW1hbmRFdnQkLnN1YnNjcmliZSgoKSA9PiB7IH0pO1xyXG5cclxuICAgIHRoaXMuY2xpZW50UHJvbWlzZSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5vblJlYWR5JC5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBpZ25vcmUgKi9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLm9uU3RhcnRTdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLm9uU3RvcFN1Yj8udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMub25Db21tYW5kU3ViPy51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMub25SZWFkeSQubmV4dChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIHB1YmxpYyBzdGF0aWMgaW5pdChkYXRhOiBhbnkpIHtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcclxuICAgICAgJyVj4pqZ77iPIEluaXRpYWxpemluZyBSZXZlbCBEaWdpdGFsIGNsaWVudCBsaWJyYXJ5JyxcclxuICAgICAgJ2JhY2tncm91bmQtY29sb3I6Ymx1ZTsgY29sb3I6eWVsbG93OydcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIG1ldGhvZCBhbGxvd3MgdGhlIGdhZGdldCB0byBjb21tdW5pY2F0ZSB3aXRoIHBsYXllciBzY3JpcHRpbmcuXHJcbiAgICogSWYgdGhlIGFwcHJvcHJpYXRlIHNjcmlwdGluZyBpcyBpbiBwbGFjZSBpbiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdGVtcGxhdGUsIGNhbGxpbmcgdGhpcyBtZXRob2RcclxuICAgKiB3aWxsIGluaXRpYXRlIGEgY2FsbGJhY2sgd2hpY2ggY2FuIGJlIGFjdGVkIHVwb24gaW4gcGxheWVyIHNjcmlwdC5cclxuICAgKiBcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIGNsaWVudC5jYWxsYmFjaygndGVzdCcsICd0aGlzJyk7XHJcbiAgICogXHJcbiAgICogQHBhcmFtIGFyZ3MgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50c1xyXG4gICAqL1xyXG4gIHB1YmxpYyBjYWxsYmFjayguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZ2V0Q2xpZW50KCkudGhlbigoY2xpZW50KSA9PiB7XHJcblxyXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgY2xpZW50LmNhbGxiYWNrKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1swXSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1sxXSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1syXSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1szXSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1s0XSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFjY2Vzc29yIG1ldGhvZCBmb3IgdGhlIHVzZXIgcHJlZmVyZW5jZXMgaW50ZXJmYWNlIGV4cG9zZWQgYnkgdGhlIEdhZGdldHMgQVBJLlxyXG4gICAqIFxyXG4gICAqIFNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vZ2FkZ2V0cy9kb2NzL2Jhc2ljfSBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBHYWRnZXRzIEFQSS5cclxuICAgKiBcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIGNvbnN0cnVjdG9yKHB1YmxpYyBjbGllbnQ6IFBsYXllckNsaWVudFNlcnZpY2UpIHtcclxuICAgKiAgICAgICAgICAgIGxldCBwcmVmcyA9IGNsaWVudC5nZXRQcmVmcygpO1xyXG4gICAqICAgICAgICAgICAgbGV0IG15U3RyaW5nID0gcHJlZnMuZ2V0U3RyaW5nKCdteVN0cmluZ1ByZWYnKTtcclxuICAgKiB9XHJcbiAgICogQHJldHVybnMge2dhZGdldHMuUHJlZnN9IEdhZGdldCBBUEkgUHJlZnMgb2JqZWN0XHJcbiAgICovXHJcbiAgcHVibGljIGdldFByZWZzKCk6IGdhZGdldHMuUHJlZnMge1xyXG5cclxuICAgIHJldHVybiBuZXcgd2luZG93WydnYWRnZXRzJ11bJ1ByZWZzJ10oKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgZGV2aWNlIHRpbWUgaW4gSVNPODYwMSBmb3JtYXQuXHJcbiAgICogQ3VycmVudCBkZXZpY2UgdGltZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBkZXZpY2UgdGltZXpvbmUgYXNzaWduZWQgdG8gdGhlIGRldmljZSBpbiB0aGUgQ01TLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBkYXRlIE9wdGlvbmFsLiBJZiBzdXBwbGllZCB3aWxsIHRyYW5zbGF0ZSB0aGUgc3VwcGxpZWQgZGF0ZS90aW1lIHRvIGRldmljZSB0aW1lIGJhc2VkIG9uIHJlc3BlY3RpdmUgdGltZXpvbmVzLlxyXG4gICAqIEByZXR1cm5zIERhdGUvdGltZSBpbiBJU084NjAxIGZvcm1hdFxyXG4gICAqL1xyXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VUaW1lKGRhdGU/OiBEYXRlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuXHJcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xyXG5cclxuICAgIGlmIChkYXRlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGNsaWVudC5nZXREZXZpY2VUaW1lKGRhdGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNsaWVudC5nZXREZXZpY2VUaW1lKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB0aW1lem9uZSBuYW1lIGN1cnJlbnRseSBhc3NpZ25lZCB0byB0aGUgZGV2aWNlLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIFRpbWV6b25lIE5hbWVcclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVOYW1lKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcclxuXHJcbiAgICByZXR1cm4gY2xpZW50LmdldERldmljZVRpbWVab25lTmFtZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgdGltZXpvbmUgSUQgY3VycmVudGx5IGFzc2lnbmVkIHRvIHRoZSBkZXZpY2UuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMgVGltZXpvbmUgSURcclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVJRCgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG5cclxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XHJcblxyXG4gICAgcmV0dXJuIGNsaWVudC5nZXREZXZpY2VUaW1lWm9uZUlEKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBudW1lcmljYWwgb2Zmc2V0IGZyb20gR01UIG9mIHRoZSB0aW1lem9uZSBjdXJyZW50bHkgYXNzaWduZWQgdG8gdGhlIGRldmljZS5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyBUaW1lem9uZSBvZmZzZXRcclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVPZmZzZXQoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuXHJcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xyXG5cclxuICAgIHJldHVybiBjbGllbnQuZ2V0RGV2aWNlVGltZVpvbmVPZmZzZXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGxhbmd1YWdlIGNvZGUgb2YgdGhlIGxhbmd1YWdlIGN1cnJlbnRseSBhc3NpZ25lZCB0byB0aGUgZGV2aWNlLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIExhbmd1YWdlIGNvZGVcclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgZ2V0TGFuZ3VhZ2VDb2RlKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcclxuXHJcbiAgICByZXR1cm4gY2xpZW50LmdldExhbmd1YWdlQ29kZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgdW5pcXVlIFJldmVsIERpZ2l0YWwgZGV2aWNlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZS5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyBEZXZpY2Uga2V5XHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIGdldERldmljZUtleSgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG5cclxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XHJcblxyXG4gICAgcmV0dXJuIGNsaWVudC5nZXREZXZpY2VLZXkoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmQgYSBjb21tYW5kIHRvIHRoZSBwbGF5ZXIgZGV2aWNlLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBuYW1lIENvbW1hbmQgbmFtZVxyXG4gICAqIEBwYXJhbSBhcmcgQ29tbWFuZCBhcmd1bWVudFxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZW5kQ29tbWFuZChuYW1lOiBzdHJpbmcsIGFyZzogc3RyaW5nKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5nZXRDbGllbnQoKS50aGVuKChjbGllbnQpID0+IHtcclxuICAgICAgY2xpZW50LnNlbmRDb21tYW5kKG5hbWUsIGFyZyk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZCBhIGNvbW1hbmQgdG8gYW55IHJlbW90ZSBwbGF5ZXIgd2l0aCB0aGUgc3VwcGxpZWQgZGV2aWNlIGtleShzKS5cclxuICAgKiBOb3RlOiBSZW1vdGUgY29tbWFuZHMgY2FuIG9ubHkgYmUgZGVsaXZlcmVkIHRvIGRldmljZXMgd2l0aGluIHRoZSBzYW1lIGFjY291bnQgYXMgdGhlIHNlbmRlciBkZXZpY2UuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGRldmljZUtleXMgQXJyYXkgb2YgcmVtb3RlIGRldmljZSBrZXlzXHJcbiAgICogQHBhcmFtIG5hbWUgQ29tbWFuZCBuYW1lXHJcbiAgICogQHBhcmFtIGFyZyBDb21tYW5kIGFyZ1xyXG4gICAqL1xyXG4gIHB1YmxpYyBzZW5kUmVtb3RlQ29tbWFuZChkZXZpY2VLZXlzOiBzdHJpbmdbXSwgbmFtZTogc3RyaW5nLCBhcmc6IHN0cmluZyk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZ2V0Q2xpZW50KCkudGhlbigoY2xpZW50KSA9PiB7XHJcbiAgICAgIGNsaWVudC5zZW5kUmVtb3RlQ29tbWFuZChkZXZpY2VLZXlzLCBuYW1lLCBhcmcpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2cgYW4gZXZlbnQgZm9yIHVzZSB3aXRoIEFkSGF3ayBhbmFseXRpY3MuXHJcbiAgICogRXZlbnRzIGFyZSB1c2VkIGZvciB0cmFja2luZyB2YXJpb3VzIG1ldHJpY3MgaW5jbHVkaW5nIHVzYWdlIHN0YXRpc3RpY3MsIHBsYXllciBjb25kaXRpb24sIHN0YXRlIGNoYW5nZXMsIGV0Yy5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gZXZlbnROYW1lIFVuaXF1ZSBuYW1lIGZvciB0aGlzIGV2ZW50XHJcbiAgICogQHBhcmFtIHByb3BlcnRpZXMgQSBtYXAgb2YgdXNlciBkZWZpbmVkIHByb3BlcnRpZXMgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBldmVudFxyXG4gICAqL1xyXG4gIHB1YmxpYyB0cmFjayhldmVudE5hbWU6IHN0cmluZywgcHJvcGVydGllcz86IElFdmVudFByb3BlcnRpZXMpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmdldENsaWVudCgpLnRoZW4oKGNsaWVudCkgPT4ge1xyXG4gICAgICBjbGllbnQudHJhY2soZXZlbnROYW1lLCBKU09OLnN0cmluZ2lmeShwcm9wZXJ0aWVzKSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIGZvciBpbml0aWF0aW5nIGEgdGltZWQgZXZlbnQuXHJcbiAgICogVGltZWQgZXZlbnRzIGFyZSB1c2VmdWwgZm9yIHRyYWNraW5nIHRoZSBkdXJhdGlvbiBvZiBhbiBldmVudCBhbmQgbXVzdCBiZSBwcm9jZWVkZWQgd2l0aCBhIGNhbGwgdG8gdHJhY2soKS5cclxuICAgKiBcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIGNsaWVudC50aW1lRXZlbnQoJ3Rlc3RFdmVudCcpO1xyXG4gICAqIGNsaWVudC50cmFjayhcInRlc3RcIiwgeyBcImFcIjogXCJiXCIgfSk7XHJcbiAgICogQHBhcmFtIGV2ZW50TmFtZSBVbmlxdWUgbmFtZSBmb3IgdGhpcyBldmVudFxyXG4gICAqL1xyXG4gIHB1YmxpYyB0aW1lRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmdldENsaWVudCgpLnRoZW4oKGNsaWVudCkgPT4ge1xyXG4gICAgICBjbGllbnQudGltZUV2ZW50KGV2ZW50TmFtZSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQSBzZXNzaW9uIGlzIGEgd2F5IG9mIGdyb3VwaW5nIGV2ZW50cyB0b2dldGhlci4gRWFjaCBldmVudCBoYXMgYW4gYXNzb2NpYXRlZCBzZXNzaW9uIElELlxyXG4gICAqIFNlc3Npb24gSUQncyBhcmUgcmFuZG9tbHkgZ2VuZXJhdGVkIGFuZCByZXNldCBieSBzdWJzZXF1ZW50IGNhbGxzIHRvIG5ld0V2ZW50U2Vzc2lvbigpLlxyXG4gICAqIFxyXG4gICAqIEVhY2ggY2FsbCB0byB0cmFjaygpIHdpbGwgdXRpbGl6ZSB0aGUgc2FtZSBzZXNzaW9uIElELCB1bnRpbCBhbm90aGVyIGNhbGwgdG8gbmV3RXZlbnRTZXNzaW9uKCkuXHJcbiAgICogQHBhcmFtIGlkIE9wdGlvbmFsLiBVc2VyIHN1cHBsaWVkIHNlc3Npb24gSUQuIElmIG5vdCBzdXBwbGllZCBhIHJhbmRvbSBzZXNzaW9uIElEIHdpbGwgYmUgZ2VuZXJhdGVkLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZXdFdmVudFNlc3Npb24oaWQ/OiBzdHJpbmcpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmdldENsaWVudCgpLnRoZW4oKGNsaWVudCkgPT4ge1xyXG4gICAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNsaWVudC5uZXdFdmVudFNlc3Npb24oKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjbGllbnQubmV3RXZlbnRTZXNzaW9uKGlkKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHJvb3QgZm9sZGVyIHV0aWxpemVkIGJ5IHRoaXMgcGxheWVyIGRldmljZS5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyBQYXRoIHRvIHRoZSByb290IGZvbGRlclxyXG4gICAqL1xyXG4gIHB1YmxpYyBhc3luYyBnZXRSZXZlbFJvb3QoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuXHJcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xyXG5cclxuICAgIHJldHVybiBjbGllbnQuZ2V0UmV2ZWxSb290KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgbWFwIG9mIGNvbW1hbmRzIGN1cnJlbnRseSBhY3RpdmUgZm9yIHRoaXMgZGV2aWNlLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIE1hcCBvZiBjb21tYW5kcyBjdXJyZW50bHkgYWN0aXZlIGZvciB0aGlzIGRldmljZS5cclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgZ2V0Q29tbWFuZE1hcCgpOiBQcm9taXNlPGFueT4ge1xyXG5cclxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XHJcblxyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoYXdhaXQgY2xpZW50LmdldENvbW1hbmRNYXAoKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2F0ZSB0byB0aGUgcGxheWVyIHRoYXQgdGhpcyBnYWRnZXQgaGFzIGZpbmlzaGVkIGl0J3MgdmlzdWFsaXphdGlvbi5cclxuICAgKiBUaGlzIGFsbG93cyB0aGUgcGxheWVyIHRvIHByb2NlZWQgd2l0aCB0aGUgbmV4dCBpdGVtIGluIGEgcGxheWxpc3QgaWYgYXBwbGljYWJsZS5cclxuICAgKi9cclxuICBwdWJsaWMgZmluaXNoKCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZ2V0Q2xpZW50KCkudGhlbigoY2xpZW50KSA9PiB7XHJcblxyXG4gICAgICBjbGllbnQuZmluaXNoKCk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaXMgdGhlIGdhZGdldCBpcyBydW5uaW5nIGluIHByZXZpZXcgbW9kZS4gUHJldmlldyBtb2RlIGlzIGVuYWJsZWQgd2hlbiB0aGUgZ2FkZ2V0IGlzXHJcbiAgICogYmVpbmcgZWRpdGVkIGluIHRoZSBDTVMsIG9yIG90aGVyd2lzZSBub3QgcnVubmluZyBpbiBhIG5vcm1hbCBwbGF5ZXIgZW52aXJvbm1lbnQuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZ2FkZ2V0IGlzIHJ1bm5pbmcgaW4gcHJldmlldyBtb2RlLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIGlzUHJldmlld01vZGUoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcblxyXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcclxuXHJcbiAgICByZXR1cm4gY2xpZW50IGluc3RhbmNlb2YgTm9vcENsaWVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBSZXR1cm5zIHRoZSBkZXZpY2UgZGV0YWlscyBhc3NvY2lhdGVkIHdpdGggdGhlIHBsYXllciBydW5uaW5nIHRoZSBnYWRnZXQgb3Igd2ViIGFwcC5cclxuICogXHJcbiAqIEByZXR1cm5zIERldmljZSBkZXRhaWxzLlxyXG4gKi9cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlKCk6IFByb21pc2U8SURldmljZSB8IG51bGw+IHtcclxuXHJcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xyXG5cclxuICAgIGxldCBvYmo6IGFueSA9IEpTT04ucGFyc2UoPHN0cmluZz5hd2FpdCBjbGllbnQuZ2V0RGV2aWNlKCkpO1xyXG5cclxuICAgIGNvbnN0IGRldmljZTogSURldmljZVtdID0gW29ial0ubWFwKChkZXZpY2U6IGFueSkgPT4ge1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBuYW1lOiBkZXZpY2UubmFtZSxcclxuICAgICAgICByZWdpc3RyYXRpb25LZXk6IGRldmljZS5rZXksXHJcbiAgICAgICAgZGV2aWNlVHlwZTogZGV2aWNlLmRldmljZXR5cGUsXHJcbiAgICAgICAgZW50ZXJlZFNlcnZpY2U6IG5ldyBEYXRlKGRldmljZS5lbnRlcmVkc2VydmljZSksXHJcbiAgICAgICAgbGFuZ0NvZGU6IGRldmljZS5sYW5nY29kZSxcclxuICAgICAgICB0aW1lWm9uZTogZGV2aWNlLnRpbWV6b25lLFxyXG4gICAgICAgIHRhZ3M6IGRldmljZS5kZXNjcmlwdGlvbj8uc3BsaXQoJ1xcbicpLFxyXG4gICAgICAgIGxvY2F0aW9uOiB7XHJcbiAgICAgICAgICBjaXR5OiBkZXZpY2UubG9jYXRpb24/LmNpdHksXHJcbiAgICAgICAgICBzdGF0ZTogZGV2aWNlLmxvY2F0aW9uPy5zdGF0ZSxcclxuICAgICAgICAgIGNvdW50cnk6IGRldmljZS5sb2NhdGlvbj8uY291bnRyeSxcclxuICAgICAgICAgIHBvc3RhbENvZGU6IGRldmljZS5sb2NhdGlvbj8ucG9zdGFsY29kZSxcclxuICAgICAgICAgIGFkZHJlc3M6IGRldmljZS5sb2NhdGlvbj8uYWRkcmVzcyxcclxuICAgICAgICAgIGxhdGl0dWRlOiBkZXZpY2UubG9jYXRpb24/LmxhdGl0dWRlLFxyXG4gICAgICAgICAgbG9uZ2l0dWRlOiBkZXZpY2UubG9jYXRpb24/LmxvbmdpdHVkZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZGV2aWNlWzBdO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tXHJcbiAgLy8gUFJJVkFURSBNRVRIT0RTLlxyXG4gIC8vIC0tLVxyXG4gIC8qKiBAaWdub3JlICovXHJcbiAgcHJpdmF0ZSBnZXRDbGllbnQoKTogUHJvbWlzZTxJQ2xpZW50PiB7XHJcblxyXG4gICAgaWYgKHRoaXMuY2xpZW50UHJvbWlzZSkge1xyXG5cclxuICAgICAgcmV0dXJuICh0aGlzLmNsaWVudFByb21pc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aW5kb3cuQ2xpZW50KSB7XHJcblxyXG4gICAgICByZXR1cm4gKHRoaXMuY2xpZW50UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh3aW5kb3cuQ2xpZW50KSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQSBcImNvbXBsZXRlXCIgc3RhdHVzIGluZGljYXRlcyB0aGF0IHRoZSBcImxvYWRcIiBldmVudCBoYXMgYmVlbiBmaXJlZCBvbiB0aGVcclxuICAgIC8vIHdpbmRvdzsgYW5kLCB0aGF0IGFsbCBzdWItcmVzb3VyY2VzIHN1Y2ggYXMgU2NyaXB0cywgSW1hZ2VzLCBhbmQgRnJhbWVzIGhhdmVcclxuICAgIC8vIGJlZW4gbG9hZGVkLlxyXG4gICAgaWYgKHdpbmRvdy5kb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcclxuXHJcbiAgICAgIC8vIElmIHRoaXMgZXZlbnQgaGFzIGZpcmVkIEFORCB0aGUgM3JkLXBhcnR5IHNjcmlwdCBpc24ndCBhdmFpbGFibGUgKHNlZSBJRi1cclxuICAgICAgLy8gY29uZGl0aW9uIEJFRk9SRSB0aGlzIG9uZSksIGl0IG1lYW5zIHRoYXQgdGhlIDNyZC1wYXJ0eSBzY3JpcHQgZWl0aGVyXHJcbiAgICAgIC8vIGZhaWxlZCBvbiB0aGUgbmV0d29yayBvciB3YXMgQkxPQ0tFRCBieSBhbiBhZC1ibG9ja2VyLiBBcyBzdWNoLCB3ZSBoYXZlIHRvXHJcbiAgICAgIC8vIGZhbGwtYmFjayB0byB1c2luZyBhIG1vY2sgQVBJLlxyXG4gICAgICByZXR1cm4gKHRoaXMuY2xpZW50UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShuZXcgTm9vcENsaWVudCgpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQVNTRVJUOiBJZiB3ZSBtYWRlIGl0IHRoaXMgZmFyLCB0aGUgZG9jdW1lbnQgaGFzIG5vdCBjb21wbGV0ZWQgbG9hZGluZyAoYnV0IGl0XHJcbiAgICAvLyBtYXkgYmUgaW4gYW4gXCJpbnRlcmFjdGl2ZVwiIHN0YXRlIHdoaWNoIGlzIHdoZW4gSSBiZWxpZXZlIHRoYXQgdGhlIEFuZ3VsYXIgYXBwXHJcbiAgICAvLyBnZXRzIGJvb3RzdHJhcHBlZCkuIEFzIHN1Y2gsIHdlIG5lZWQgYmluZCB0byB0aGUgTE9BRCBldmVudCB0byB3YWl0IGZvciBvdXJcclxuICAgIC8vIHRoaXJkLXBhcnR5IHNjcmlwdHMgdG8gbG9hZCAob3IgZmFpbCB0byBsb2FkLCBvciBiZSBibG9ja2VkKS5cclxuICAgIHRoaXMuY2xpZW50UHJvbWlzZSA9IG5ldyBQcm9taXNlPElDbGllbnQ+KFxyXG4gICAgICAocmVzb2x2ZSkgPT4ge1xyXG5cclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAgIFwibG9hZFwiLFxyXG4gICAgICAgICAgZnVuY3Rpb24gaGFuZGxlV2luZG93TG9hZCgpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSAzcmQtcGFydHkgbGlicmFyeSBpcyBlaXRoZXIgYXZhaWxhYmxlIG9yXHJcbiAgICAgICAgICAgIC8vIGl0J3Mgbm90IC0gdGhlcmUncyBubyBmdXJ0aGVyIGxvYWRpbmcgdG8gZG8uIElmIGl0J3Mgbm90XHJcbiAgICAgICAgICAgIC8vIHByZXNlbnQgb24gdGhlIGdsb2JhbCBzY29wZSwgd2UncmUgZ29pbmcgdG8gZmFsbC1iYWNrIHRvIHVzaW5nXHJcbiAgICAgICAgICAgIC8vIGEgbW9jayBBUEkuXHJcbiAgICAgICAgICAgIHJlc29sdmUod2luZG93LkNsaWVudCB8fCBuZXcgTm9vcENsaWVudCgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gKHRoaXMuY2xpZW50UHJvbWlzZSk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuXHJcblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xyXG5cclxuLy8gSSBwcm92aWRlIGEgbW9jayBBUEkgZm9yIHRoZSAzcmQtcGFydHkgc2NyaXB0LiBUaGlzIGp1c3QgYWxsb3dzIHRoZSBjb25zdW1pbmcgY29kZSB0b1xyXG4vLyBhY3QgYXMgdGhvdWdoIHRoZSBsaWJyYXJ5IGlzIGF2YWlsYWJsZSBldmVuIGlmIGl0IGZhaWxlZCB0byBsb2FkIChleGFtcGxlLCBpdCB3YXNcclxuLy8gYmxvY2tlZCBieSBhbiBhZC1ibG9ja2VyKS5cclxuXHJcbi8qKiBAaWdub3JlICovXHJcbmNsYXNzIE5vb3BDbGllbnQgaW1wbGVtZW50cyBJQ2xpZW50IHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcblxyXG4gICAgY29uc29sZS5sb2coXHJcbiAgICAgICclY0NsaWVudCBBUEkgbm90IGF2YWlsYWJsZSwgZmFsbGluZyBiYWNrIHRvIG1vY2sgQVBJJyxcclxuICAgICAgJ2JhY2tncm91bmQtY29sb3I6Ymx1ZTsgY29sb3I6eWVsbG93OydcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FsbGJhY2soLi4uYXJnczogYW55W10pOiB2b2lkIHtcclxuXHJcbiAgICAvLyBOT09QIGltcGxlbWVudCwgbm90aGluZyB0byBkby4uLi5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXREZXZpY2VUaW1lKGRhdGU/OiBEYXRlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVOYW1lKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VUaW1lWm9uZUlEKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VUaW1lWm9uZU9mZnNldCgpOiBQcm9taXNlPG51bWJlcj4ge1xyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0TGFuZ3VhZ2VDb2RlKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VLZXkoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbmRDb21tYW5kKG5hbWU6IHN0cmluZywgYXJnOiBzdHJpbmcpOiB2b2lkIHtcclxuXHJcbiAgICAvLyBOT09QIGltcGxlbWVudCwgbm90aGluZyB0byBkby4uLi5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZW5kUmVtb3RlQ29tbWFuZChkZXZpY2VLZXlzOiBzdHJpbmdbXSwgbmFtZTogc3RyaW5nLCBhcmc6IHN0cmluZykge1xyXG5cclxuICAgIC8vIE5PT1AgaW1wbGVtZW50LCBub3RoaW5nIHRvIGRvLi4uLlxyXG4gIH1cclxuXHJcbiAgcHVibGljIHRyYWNrKGV2ZW50TmFtZTogc3RyaW5nLCBwcm9wZXJ0aWVzPzogc3RyaW5nKTogdm9pZCB7XHJcblxyXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdGltZUV2ZW50KGV2ZW50TmFtZTogc3RyaW5nKTogdm9pZCB7XHJcblxyXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmV3RXZlbnRTZXNzaW9uKGlkPzogc3RyaW5nKTogdm9pZCB7XHJcblxyXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UmV2ZWxSb290KCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRDb21tYW5kTWFwKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgne30nKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2UoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaW5pc2goKTogdm9pZCB7XHJcblxyXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
472
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLWNsaWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmV2ZWxkaWdpdGFsL3BsYXllci1jbGllbnQvc3JjL2xpYi9wbGF5ZXItY2xpZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUtqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDOztBQWlCcEMsTUFBTSxPQUFPLG1CQUFtQjtJQW1EOUIsMENBQTBDO0lBQzFDLGlFQUFpRTtJQUNqRSwyQ0FBMkM7SUFDM0MsK0NBQStDO0lBQy9DLCtDQUErQztJQUMvQyxzREFBc0Q7SUFDdEQsd0VBQXdFO0lBQ3hFLGFBQWE7SUFDYix5QkFBeUI7SUFDekIsS0FBSztJQUVMLGNBQWM7SUFDZCxZQUFZLElBQVk7UUExRHhCOztXQUVHO1FBQ0ksZUFBVSxHQUFHLElBQUksT0FBTyxFQUFZLENBQUM7UUFDNUM7O1dBRUc7UUFDSSxhQUFRLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0M7O1dBRUc7UUFDSSxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNoQzs7V0FFRztRQUNJLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBVS9CLGNBQWM7UUFDTixnQkFBVyxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQ2xFLEtBQUssRUFBRSxFQUNQLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQ25CLENBQUM7UUFH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Q0FBQyxTQUFpQjtRQUVoQyxvQ0FBb0M7SUFDdEMsQ0FBQztJQUVNLGVBQWUsQ0FBQyxFQUFXO1FBRWhDLG9DQUFvQztJQUN0QyxDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVk7UUFFdkIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYTtRQUV4QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLE1BQU07UUFFWCxvQ0FBb0M7SUFDdEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTO1FBRXBCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVE7UUFFbkIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUztRQUVwQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLEtBQUssQ0FBQyxXQUFXO1FBRXRCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU0sS0FBSyxDQUFDLGFBQWE7UUFFeEIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGdhZGdldHMgfSBmcm9tICdAcmV2ZWxkaWdpdGFsL2dhZGdldC10eXBlcyc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbUV2ZW50LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBzaGFyZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBJQ29tbWFuZCB9IGZyb20gJy4vaW50ZXJmYWNlcy9jb21tYW5kLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IElEZXZpY2UgfSBmcm9tICcuL2ludGVyZmFjZXMvZGV2aWNlLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IElFdmVudFByb3BlcnRpZXMgfSBmcm9tICcuL2ludGVyZmFjZXMvZXZlbnQtcHJvcGVydGllcy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBJQ2xpZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NsaWVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uJztcclxuXHJcbi8vaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4vdmVyc2lvbi5qcyc7XHJcblxyXG4vLyBTbyB0aGF0IFR5cGVTY3JpcHQgZG9lc24ndCBjb21wbGFpbiwgd2UncmUgZ29pbmcgdG8gYXVnbWVudCB0aGUgR0xPQkFMIC8gV0lORE9XIFxyXG4vLyBuYW1lLXNwYWNlIGRlZmluaXRpb24gdG8gaW5jbHVkZSB0aGUgVHJhY2tlciBBUEkuIFRoaXMgYWxzbyBwcm92aWRlcyB1cyB3aXRoIGEgcGxhY2VcclxuLy8gdG8gYWN0dWFsbHkgRE9DVU1FTlQgdGhlIEFQSSBzbyB0aGF0IG91ciBkZXZlbG9wZXJzIGFyZW4ndCBndWVzc2luZyBhYm91dCB3aGF0J3NcclxuLy8gYXZhaWxhYmxlIG9uIHRoZSBsaWJyYXJ5LlxyXG5cclxuLyoqIEBpZ25vcmUgKi9cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gIHZhciBDbGllbnQ6IElDbGllbnQ7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFBsYXllckNsaWVudFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIHByaXZhdGUgY2xpZW50UHJvbWlzZTogUHJvbWlzZTxJQ2xpZW50PiB8IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbW1hbmRzIHNlbnQgdG8gdGhpcyBwbGF5ZXIuXHJcbiAgICovXHJcbiAgcHVibGljIG9uQ29tbWFuZCQgPSBuZXcgU3ViamVjdDxJQ29tbWFuZD4oKTtcclxuICAvKipcclxuICAgKiBTaWduYWxzIHRoZSBnYWRnZXQgaGFzIGJlZW4gbG9hZGVkIGFuZCBpcyByZWFkeSB0byBzdGFydC5cclxuICAgKi9cclxuICBwdWJsaWMgb25SZWFkeSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuICAvKipcclxuICAgKiBTaWduYWxzIHRoZSBnYWRnZXQgaGFzIGJlZW4gc3RhcnRlZCBieSB0aGUgcGxheWVyLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBvblN0YXJ0JCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgLyoqXHJcbiAgICogU2lnbmFscyB0aGUgZ2FkZ2V0cyBoYXMgYmVlbiBzdG9wcGVkIGJ5IHRoZSBwbGF5ZXIuXHJcbiAgICovXHJcbiAgcHVibGljIG9uU3RvcCQgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAvL1xyXG4gIC8vIFR3byBtZXRob2RzIGF2YWlsYWJsZSBmb3IgY2FsbGluZyBpbnRvIHRoZSBsaWJyYXJ5OlxyXG4gIC8vXHJcbiAgLy8gMSkgVXNpbmcgZGlzcGF0Y2hFdmVudCgpIHdpdGggdGhlIGZvbGxvd2luZyBjdXN0b20gZXZlbnRzXHJcbiAgLy8gMikgVXNpbmcgdGhlIHdpbmRvdyBzY29wZWQgUmV2ZWxEaWdpdGFsIG9iamVjdCBhcyBkZWZpbmVkIGluIHRoZSBjb25zdHJ1Y3RvclxyXG4gIC8vXHJcbiAgLyoqIEBpZ25vcmUgKi9cclxuICBwcml2YXRlIG9uU3RhcnRTdWI6IFN1YnNjcmlwdGlvbjtcclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIHByaXZhdGUgb25TdGFydEV2dCQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdSZXZlbERpZ2l0YWwuU3RhcnQnKS5waXBlKFxyXG4gICAgc2hhcmUoKSxcclxuICAgIHRhcCh0aGlzLm9uU3RhcnQkKVxyXG4gICk7XHJcbiAgLyoqIEBpZ25vcmUgKi9cclxuICBwcml2YXRlIG9uU3RvcFN1YjogU3Vic2NyaXB0aW9uO1xyXG4gIC8qKiBAaWdub3JlICovXHJcbiAgcHJpdmF0ZSBvblN0b3BFdnQkID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnUmV2ZWxEaWdpdGFsLlN0b3AnKS5waXBlKFxyXG4gICAgc2hhcmUoKSxcclxuICAgIHRhcCh0aGlzLm9uU3RvcCQpXHJcbiAgKTtcclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIHByaXZhdGUgb25Db21tYW5kU3ViOiBTdWJzY3JpcHRpb247XHJcbiAgLyoqIEBpZ25vcmUgKi9cclxuICBwcml2YXRlIG9uQ29tbWFuZEV2dCQgPSBmcm9tRXZlbnQ8SUNvbW1hbmQ+KGRvY3VtZW50LCAnUmV2ZWxEaWdpdGFsLkNvbW1hbmQnKS5waXBlKFxyXG4gICAgbWFwKChlOiBhbnkpID0+IHsgcmV0dXJuIHsgbmFtZTogZS5kZXRhaWwubmFtZSwgYXJnOiBlLmRldGFpbC5hcmcgfSBhcyBJQ29tbWFuZCB9KSxcclxuICAgIHNoYXJlKCksXHJcbiAgICB0YXAodGhpcy5vbkNvbW1hbmQkKVxyXG4gICk7XHJcblxyXG4gIC8vIHByaXZhdGUgb25Qb3N0TWVzc2FnZVN1YjogU3Vic2NyaXB0aW9uO1xyXG4gIC8vIHByaXZhdGUgb25Qb3N0TWVzc2FnZUV2dCQgPSBmcm9tRXZlbnQod2luZG93LCAnbWVzc2FnZScpLnBpcGUoXHJcbiAgLy8gICBmaWx0ZXIoKG1lc3NhZ2VFdmVudDogTWVzc2FnZUV2ZW50KSA9PlxyXG4gIC8vICAgICBtZXNzYWdlRXZlbnQuc291cmNlICE9PSB3aW5kb3cucGFyZW50ICYmXHJcbiAgLy8gICAgIHR5cGVvZiBtZXNzYWdlRXZlbnQuZGF0YSA9PT0gJ3N0cmluZycgJiZcclxuICAvLyAgICAgbWVzc2FnZUV2ZW50LmRhdGEuc3RhcnRzV2l0aCgncmV2ZWxkaWdpdGFsOicpKSxcclxuICAvLyAgIG1hcCgoZTogYW55KSA9PiB7IHJldHVybiBKU09OLnBhcnNlKGUuc3Vic3RyaW5nKDEzKSkgYXMgQ29tbWFuZCB9KSxcclxuICAvLyAgIHNoYXJlKCksXHJcbiAgLy8gICB0YXAodGhpcy5vbkNvbW1hbmQkKVxyXG4gIC8vICk7XHJcblxyXG4gIC8qKiBAaWdub3JlICovXHJcbiAgY29uc3RydWN0b3Ioem9uZTogTmdab25lKSB7XHJcblxyXG4gICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgKHdpbmRvdyBhcyBhbnkpLlJldmVsRGlnaXRhbCA9IHtcclxuICAgICAgQ29udHJvbGxlcjoge1xyXG4gICAgICAgIG9uQ29tbWFuZDogZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgYXJnOiBzdHJpbmcpIHtcclxuICAgICAgICAgIHpvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICAgc2VsZi5vbkNvbW1hbmQkLm5leHQoeyBuYW1lOiBuYW1lLCBhcmc6IGFyZyB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25TdGFydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgem9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBzZWxmLm9uU3RhcnQkLm5leHQobnVsbCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uU3RvcDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgem9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBzZWxmLm9uU3RvcCQubmV4dChudWxsKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub25TdGFydFN1YiA9IHRoaXMub25TdGFydEV2dCQuc3Vic2NyaWJlKCgpID0+IHsgfSk7XHJcbiAgICB0aGlzLm9uU3RvcFN1YiA9IHRoaXMub25TdG9wRXZ0JC5zdWJzY3JpYmUoKCkgPT4geyB9KTtcclxuICAgIHRoaXMub25Db21tYW5kU3ViID0gdGhpcy5vbkNvbW1hbmRFdnQkLnN1YnNjcmliZSgoKSA9PiB7IH0pO1xyXG5cclxuICAgIHRoaXMuY2xpZW50UHJvbWlzZSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5vblJlYWR5JC5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBpZ25vcmUgKi9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLm9uU3RhcnRTdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLm9uU3RvcFN1Yj8udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMub25Db21tYW5kU3ViPy51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMub25SZWFkeSQubmV4dChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIHB1YmxpYyBzdGF0aWMgaW5pdChkYXRhOiBhbnkpIHtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcclxuICAgICAgJyVj4pqZ77iPIEluaXRpYWxpemluZyBSZXZlbCBEaWdpdGFsIGNsaWVudCBsaWJyYXJ5JyxcclxuICAgICAgJ2JhY2tncm91bmQtY29sb3I6Ymx1ZTsgY29sb3I6eWVsbG93OydcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIG1ldGhvZCBhbGxvd3MgdGhlIGdhZGdldCB0byBjb21tdW5pY2F0ZSB3aXRoIHBsYXllciBzY3JpcHRpbmcuXHJcbiAgICogSWYgdGhlIGFwcHJvcHJpYXRlIHNjcmlwdGluZyBpcyBpbiBwbGFjZSBpbiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdGVtcGxhdGUsIGNhbGxpbmcgdGhpcyBtZXRob2RcclxuICAgKiB3aWxsIGluaXRpYXRlIGEgY2FsbGJhY2sgd2hpY2ggY2FuIGJlIGFjdGVkIHVwb24gaW4gcGxheWVyIHNjcmlwdC5cclxuICAgKiBcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIGNsaWVudC5jYWxsYmFjaygndGVzdCcsICd0aGlzJyk7XHJcbiAgICogXHJcbiAgICogQHBhcmFtIGFyZ3MgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50c1xyXG4gICAqL1xyXG4gIHB1YmxpYyBjYWxsYmFjayguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZ2V0Q2xpZW50KCkudGhlbigoY2xpZW50KSA9PiB7XHJcblxyXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgY2xpZW50LmNhbGxiYWNrKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1swXSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1sxXSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1syXSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1szXSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1s0XSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFjY2Vzc29yIG1ldGhvZCBmb3IgdGhlIHVzZXIgcHJlZmVyZW5jZXMgaW50ZXJmYWNlIGV4cG9zZWQgYnkgdGhlIEdhZGdldHMgQVBJLlxyXG4gICAqIFxyXG4gICAqIFNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vZ2FkZ2V0cy9kb2NzL2Jhc2ljfSBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBHYWRnZXRzIEFQSS5cclxuICAgKiBcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIGNvbnN0cnVjdG9yKHB1YmxpYyBjbGllbnQ6IFBsYXllckNsaWVudFNlcnZpY2UpIHtcclxuICAgKiAgICAgICAgICAgIGxldCBwcmVmcyA9IGNsaWVudC5nZXRQcmVmcygpO1xyXG4gICAqICAgICAgICAgICAgbGV0IG15U3RyaW5nID0gcHJlZnMuZ2V0U3RyaW5nKCdteVN0cmluZ1ByZWYnKTtcclxuICAgKiB9XHJcbiAgICogQHJldHVybnMge2dhZGdldHMuUHJlZnN9IEdhZGdldCBBUEkgUHJlZnMgb2JqZWN0XHJcbiAgICovXHJcbiAgcHVibGljIGdldFByZWZzKCk6IGdhZGdldHMuUHJlZnMge1xyXG5cclxuICAgIHJldHVybiBuZXcgd2luZG93WydnYWRnZXRzJ11bJ1ByZWZzJ10oKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgZGV2aWNlIHRpbWUgaW4gSVNPODYwMSBmb3JtYXQuXHJcbiAgICogQ3VycmVudCBkZXZpY2UgdGltZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBkZXZpY2UgdGltZXpvbmUgYXNzaWduZWQgdG8gdGhlIGRldmljZSBpbiB0aGUgQ01TLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBkYXRlIE9wdGlvbmFsLiBJZiBzdXBwbGllZCB3aWxsIHRyYW5zbGF0ZSB0aGUgc3VwcGxpZWQgZGF0ZS90aW1lIHRvIGRldmljZSB0aW1lIGJhc2VkIG9uIHJlc3BlY3RpdmUgdGltZXpvbmVzLlxyXG4gICAqIEByZXR1cm5zIERhdGUvdGltZSBpbiBJU084NjAxIGZvcm1hdFxyXG4gICAqL1xyXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VUaW1lKGRhdGU/OiBEYXRlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuXHJcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xyXG5cclxuICAgIGlmIChkYXRlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGNsaWVudC5nZXREZXZpY2VUaW1lKGRhdGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNsaWVudC5nZXREZXZpY2VUaW1lKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB0aW1lem9uZSBuYW1lIGN1cnJlbnRseSBhc3NpZ25lZCB0byB0aGUgZGV2aWNlLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIFRpbWV6b25lIE5hbWVcclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVOYW1lKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcclxuXHJcbiAgICByZXR1cm4gY2xpZW50LmdldERldmljZVRpbWVab25lTmFtZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgdGltZXpvbmUgSUQgY3VycmVudGx5IGFzc2lnbmVkIHRvIHRoZSBkZXZpY2UuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMgVGltZXpvbmUgSURcclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVJRCgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG5cclxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XHJcblxyXG4gICAgcmV0dXJuIGNsaWVudC5nZXREZXZpY2VUaW1lWm9uZUlEKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBudW1lcmljYWwgb2Zmc2V0IGZyb20gR01UIG9mIHRoZSB0aW1lem9uZSBjdXJyZW50bHkgYXNzaWduZWQgdG8gdGhlIGRldmljZS5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyBUaW1lem9uZSBvZmZzZXRcclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVPZmZzZXQoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuXHJcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xyXG5cclxuICAgIHJldHVybiBjbGllbnQuZ2V0RGV2aWNlVGltZVpvbmVPZmZzZXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGxhbmd1YWdlIGNvZGUgb2YgdGhlIGxhbmd1YWdlIGN1cnJlbnRseSBhc3NpZ25lZCB0byB0aGUgZGV2aWNlLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIExhbmd1YWdlIGNvZGVcclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgZ2V0TGFuZ3VhZ2VDb2RlKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcclxuXHJcbiAgICByZXR1cm4gY2xpZW50LmdldExhbmd1YWdlQ29kZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgdW5pcXVlIFJldmVsIERpZ2l0YWwgZGV2aWNlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZS5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyBEZXZpY2Uga2V5XHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIGdldERldmljZUtleSgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG5cclxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XHJcblxyXG4gICAgcmV0dXJuIGNsaWVudC5nZXREZXZpY2VLZXkoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmQgYSBjb21tYW5kIHRvIHRoZSBwbGF5ZXIgZGV2aWNlLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBuYW1lIENvbW1hbmQgbmFtZVxyXG4gICAqIEBwYXJhbSBhcmcgQ29tbWFuZCBhcmd1bWVudFxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZW5kQ29tbWFuZChuYW1lOiBzdHJpbmcsIGFyZzogc3RyaW5nKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5nZXRDbGllbnQoKS50aGVuKChjbGllbnQpID0+IHtcclxuICAgICAgY2xpZW50LnNlbmRDb21tYW5kKG5hbWUsIGFyZyk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZCBhIGNvbW1hbmQgdG8gYW55IHJlbW90ZSBwbGF5ZXIgd2l0aCB0aGUgc3VwcGxpZWQgZGV2aWNlIGtleShzKS5cclxuICAgKiBOb3RlOiBSZW1vdGUgY29tbWFuZHMgY2FuIG9ubHkgYmUgZGVsaXZlcmVkIHRvIGRldmljZXMgd2l0aGluIHRoZSBzYW1lIGFjY291bnQgYXMgdGhlIHNlbmRlciBkZXZpY2UuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGRldmljZUtleXMgQXJyYXkgb2YgcmVtb3RlIGRldmljZSBrZXlzXHJcbiAgICogQHBhcmFtIG5hbWUgQ29tbWFuZCBuYW1lXHJcbiAgICogQHBhcmFtIGFyZyBDb21tYW5kIGFyZ1xyXG4gICAqL1xyXG4gIHB1YmxpYyBzZW5kUmVtb3RlQ29tbWFuZChkZXZpY2VLZXlzOiBzdHJpbmdbXSwgbmFtZTogc3RyaW5nLCBhcmc6IHN0cmluZyk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZ2V0Q2xpZW50KCkudGhlbigoY2xpZW50KSA9PiB7XHJcbiAgICAgIGNsaWVudC5zZW5kUmVtb3RlQ29tbWFuZChkZXZpY2VLZXlzLCBuYW1lLCBhcmcpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2cgYW4gZXZlbnQgZm9yIHVzZSB3aXRoIEFkSGF3ayBhbmFseXRpY3MuXHJcbiAgICogRXZlbnRzIGFyZSB1c2VkIGZvciB0cmFja2luZyB2YXJpb3VzIG1ldHJpY3MgaW5jbHVkaW5nIHVzYWdlIHN0YXRpc3RpY3MsIHBsYXllciBjb25kaXRpb24sIHN0YXRlIGNoYW5nZXMsIGV0Yy5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gZXZlbnROYW1lIFVuaXF1ZSBuYW1lIGZvciB0aGlzIGV2ZW50XHJcbiAgICogQHBhcmFtIHByb3BlcnRpZXMgQSBtYXAgb2YgdXNlciBkZWZpbmVkIHByb3BlcnRpZXMgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBldmVudFxyXG4gICAqL1xyXG4gIHB1YmxpYyB0cmFjayhldmVudE5hbWU6IHN0cmluZywgcHJvcGVydGllcz86IElFdmVudFByb3BlcnRpZXMpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmdldENsaWVudCgpLnRoZW4oKGNsaWVudCkgPT4ge1xyXG4gICAgICBjbGllbnQudHJhY2soZXZlbnROYW1lLCBKU09OLnN0cmluZ2lmeShwcm9wZXJ0aWVzKSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIGZvciBpbml0aWF0aW5nIGEgdGltZWQgZXZlbnQuXHJcbiAgICogVGltZWQgZXZlbnRzIGFyZSB1c2VmdWwgZm9yIHRyYWNraW5nIHRoZSBkdXJhdGlvbiBvZiBhbiBldmVudCBhbmQgbXVzdCBiZSBwcm9jZWVkZWQgd2l0aCBhIGNhbGwgdG8gdHJhY2soKS5cclxuICAgKiBcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIGNsaWVudC50aW1lRXZlbnQoJ3Rlc3RFdmVudCcpO1xyXG4gICAqIGNsaWVudC50cmFjayhcInRlc3RcIiwgeyBcImFcIjogXCJiXCIgfSk7XHJcbiAgICogQHBhcmFtIGV2ZW50TmFtZSBVbmlxdWUgbmFtZSBmb3IgdGhpcyBldmVudFxyXG4gICAqL1xyXG4gIHB1YmxpYyB0aW1lRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmdldENsaWVudCgpLnRoZW4oKGNsaWVudCkgPT4ge1xyXG4gICAgICBjbGllbnQudGltZUV2ZW50KGV2ZW50TmFtZSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQSBzZXNzaW9uIGlzIGEgd2F5IG9mIGdyb3VwaW5nIGV2ZW50cyB0b2dldGhlci4gRWFjaCBldmVudCBoYXMgYW4gYXNzb2NpYXRlZCBzZXNzaW9uIElELlxyXG4gICAqIFNlc3Npb24gSUQncyBhcmUgcmFuZG9tbHkgZ2VuZXJhdGVkIGFuZCByZXNldCBieSBzdWJzZXF1ZW50IGNhbGxzIHRvIG5ld0V2ZW50U2Vzc2lvbigpLlxyXG4gICAqIFxyXG4gICAqIEVhY2ggY2FsbCB0byB0cmFjaygpIHdpbGwgdXRpbGl6ZSB0aGUgc2FtZSBzZXNzaW9uIElELCB1bnRpbCBhbm90aGVyIGNhbGwgdG8gbmV3RXZlbnRTZXNzaW9uKCkuXHJcbiAgICogQHBhcmFtIGlkIE9wdGlvbmFsLiBVc2VyIHN1cHBsaWVkIHNlc3Npb24gSUQuIElmIG5vdCBzdXBwbGllZCBhIHJhbmRvbSBzZXNzaW9uIElEIHdpbGwgYmUgZ2VuZXJhdGVkLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZXdFdmVudFNlc3Npb24oaWQ/OiBzdHJpbmcpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmdldENsaWVudCgpLnRoZW4oKGNsaWVudCkgPT4ge1xyXG4gICAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNsaWVudC5uZXdFdmVudFNlc3Npb24oKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjbGllbnQubmV3RXZlbnRTZXNzaW9uKGlkKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHJvb3QgZm9sZGVyIHV0aWxpemVkIGJ5IHRoaXMgcGxheWVyIGRldmljZS5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyBQYXRoIHRvIHRoZSByb290IGZvbGRlclxyXG4gICAqL1xyXG4gIHB1YmxpYyBhc3luYyBnZXRSZXZlbFJvb3QoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuXHJcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xyXG5cclxuICAgIHJldHVybiBjbGllbnQuZ2V0UmV2ZWxSb290KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgbWFwIG9mIGNvbW1hbmRzIGN1cnJlbnRseSBhY3RpdmUgZm9yIHRoaXMgZGV2aWNlLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIE1hcCBvZiBjb21tYW5kcyBjdXJyZW50bHkgYWN0aXZlIGZvciB0aGlzIGRldmljZS5cclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgZ2V0Q29tbWFuZE1hcCgpOiBQcm9taXNlPGFueT4ge1xyXG5cclxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XHJcblxyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoYXdhaXQgY2xpZW50LmdldENvbW1hbmRNYXAoKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2F0ZSB0byB0aGUgcGxheWVyIHRoYXQgdGhpcyBnYWRnZXQgaGFzIGZpbmlzaGVkIGl0J3MgdmlzdWFsaXphdGlvbi5cclxuICAgKiBUaGlzIGFsbG93cyB0aGUgcGxheWVyIHRvIHByb2NlZWQgd2l0aCB0aGUgbmV4dCBpdGVtIGluIGEgcGxheWxpc3QgaWYgYXBwbGljYWJsZS5cclxuICAgKi9cclxuICBwdWJsaWMgZmluaXNoKCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZ2V0Q2xpZW50KCkudGhlbigoY2xpZW50KSA9PiB7XHJcblxyXG4gICAgICBjbGllbnQuZmluaXNoKCk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaXMgdGhlIGdhZGdldCBpcyBydW5uaW5nIGluIHByZXZpZXcgbW9kZS4gUHJldmlldyBtb2RlIGlzIGVuYWJsZWQgd2hlbiB0aGUgZ2FkZ2V0IGlzXHJcbiAgICogYmVpbmcgZWRpdGVkIGluIHRoZSBDTVMsIG9yIG90aGVyd2lzZSBub3QgcnVubmluZyBpbiBhIG5vcm1hbCBwbGF5ZXIgZW52aXJvbm1lbnQuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZ2FkZ2V0IGlzIHJ1bm5pbmcgaW4gcHJldmlldyBtb2RlLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIGlzUHJldmlld01vZGUoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcblxyXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcclxuXHJcbiAgICByZXR1cm4gY2xpZW50IGluc3RhbmNlb2YgTm9vcENsaWVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBSZXR1cm5zIHRoZSBkZXZpY2UgZGV0YWlscyBhc3NvY2lhdGVkIHdpdGggdGhlIHBsYXllciBydW5uaW5nIHRoZSBnYWRnZXQgb3Igd2ViIGFwcC5cclxuICogXHJcbiAqIEByZXR1cm5zIERldmljZSBkZXRhaWxzLlxyXG4gKi9cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlKCk6IFByb21pc2U8SURldmljZSB8IG51bGw+IHtcclxuXHJcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xyXG5cclxuICAgIGxldCBvYmo6IGFueSA9IEpTT04ucGFyc2UoPHN0cmluZz5hd2FpdCBjbGllbnQuZ2V0RGV2aWNlKCkpO1xyXG5cclxuICAgIGNvbnN0IGRldmljZTogSURldmljZVtdID0gW29ial0ubWFwKChkZXZpY2U6IGFueSkgPT4ge1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBuYW1lOiBkZXZpY2UubmFtZSxcclxuICAgICAgICByZWdpc3RyYXRpb25LZXk6IGRldmljZS5rZXksXHJcbiAgICAgICAgZGV2aWNlVHlwZTogZGV2aWNlLmRldmljZXR5cGUsXHJcbiAgICAgICAgZW50ZXJlZFNlcnZpY2U6IG5ldyBEYXRlKGRldmljZS5lbnRlcmVkc2VydmljZSksXHJcbiAgICAgICAgbGFuZ0NvZGU6IGRldmljZS5sYW5nY29kZSxcclxuICAgICAgICB0aW1lWm9uZTogZGV2aWNlLnRpbWV6b25lLFxyXG4gICAgICAgIHRhZ3M6IGRldmljZS5kZXNjcmlwdGlvbj8uc3BsaXQoJ1xcbicpLFxyXG4gICAgICAgIGxvY2F0aW9uOiB7XHJcbiAgICAgICAgICBjaXR5OiBkZXZpY2UubG9jYXRpb24/LmNpdHksXHJcbiAgICAgICAgICBzdGF0ZTogZGV2aWNlLmxvY2F0aW9uPy5zdGF0ZSxcclxuICAgICAgICAgIGNvdW50cnk6IGRldmljZS5sb2NhdGlvbj8uY291bnRyeSxcclxuICAgICAgICAgIHBvc3RhbENvZGU6IGRldmljZS5sb2NhdGlvbj8ucG9zdGFsY29kZSxcclxuICAgICAgICAgIGFkZHJlc3M6IGRldmljZS5sb2NhdGlvbj8uYWRkcmVzcyxcclxuICAgICAgICAgIGxhdGl0dWRlOiBkZXZpY2UubG9jYXRpb24/LmxhdGl0dWRlLFxyXG4gICAgICAgICAgbG9uZ2l0dWRlOiBkZXZpY2UubG9jYXRpb24/LmxvbmdpdHVkZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZGV2aWNlWzBdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIHZpc3VhbGl6YXRpb24gYXJlYS5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyBXaWR0aCBvZiB0aGUgdmlzdWFsaXphdGlvbiBhcmVhXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIGdldFdpZHRoKCk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xyXG5cclxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XHJcblxyXG4gICAgcmV0dXJuIGNsaWVudC5nZXRXaWR0aCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgaGVpZ2h0IG9mIHRoZSB2aXN1YWxpemF0aW9uIGFyZWEuXHJcbiAgICogXHJcbiAgICogQHJldHVybnMgSGVpZ2h0IG9mIHRoZSB2aXN1YWxpemF0aW9uIGFyZWFcclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgZ2V0SGVpZ2h0KCk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xyXG5cclxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XHJcblxyXG4gICAgcmV0dXJuIGNsaWVudC5nZXRIZWlnaHQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBjdXJyZW50bHkgcGxheWluZyBzb3VyY2UuXHJcbiAgICogKG9ubHkgYXBwbGljYWJsZSB3aGVuIGFzc29jaWF0ZWQgd2l0aCBhIHBsYXlsaXN0KVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIER1cmF0aW9uIG9mIHRoZSBjdXJyZW50IGl0ZW0gaW4gbWlsbGlzZWNvbmRzXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIGdldER1cmF0aW9uKCk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xyXG5cclxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XHJcblxyXG4gICAgcmV0dXJuIGNsaWVudC5nZXREdXJhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBTREsgdmVyc2lvbi5cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyBTREsgdmVyc2lvblxyXG4gICAqL1xyXG4gIHB1YmxpYyBhc3luYyBnZXRTZGtWZXJzaW9uKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2ZXJzaW9uKTtcclxuICB9XHJcblxyXG5cclxuICAvLyAtLS1cclxuICAvLyBQUklWQVRFIE1FVEhPRFMuXHJcbiAgLy8gLS0tXHJcbiAgLyoqIEBpZ25vcmUgKi9cclxuICBwcml2YXRlIGdldENsaWVudCgpOiBQcm9taXNlPElDbGllbnQ+IHtcclxuXHJcbiAgICBpZiAodGhpcy5jbGllbnRQcm9taXNlKSB7XHJcblxyXG4gICAgICByZXR1cm4gKHRoaXMuY2xpZW50UHJvbWlzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpbmRvdy5DbGllbnQpIHtcclxuXHJcbiAgICAgIHJldHVybiAodGhpcy5jbGllbnRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHdpbmRvdy5DbGllbnQpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBIFwiY29tcGxldGVcIiBzdGF0dXMgaW5kaWNhdGVzIHRoYXQgdGhlIFwibG9hZFwiIGV2ZW50IGhhcyBiZWVuIGZpcmVkIG9uIHRoZVxyXG4gICAgLy8gd2luZG93OyBhbmQsIHRoYXQgYWxsIHN1Yi1yZXNvdXJjZXMgc3VjaCBhcyBTY3JpcHRzLCBJbWFnZXMsIGFuZCBGcmFtZXMgaGF2ZVxyXG4gICAgLy8gYmVlbiBsb2FkZWQuXHJcbiAgICBpZiAod2luZG93LmRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xyXG5cclxuICAgICAgLy8gSWYgdGhpcyBldmVudCBoYXMgZmlyZWQgQU5EIHRoZSAzcmQtcGFydHkgc2NyaXB0IGlzbid0IGF2YWlsYWJsZSAoc2VlIElGLVxyXG4gICAgICAvLyBjb25kaXRpb24gQkVGT1JFIHRoaXMgb25lKSwgaXQgbWVhbnMgdGhhdCB0aGUgM3JkLXBhcnR5IHNjcmlwdCBlaXRoZXJcclxuICAgICAgLy8gZmFpbGVkIG9uIHRoZSBuZXR3b3JrIG9yIHdhcyBCTE9DS0VEIGJ5IGFuIGFkLWJsb2NrZXIuIEFzIHN1Y2gsIHdlIGhhdmUgdG9cclxuICAgICAgLy8gZmFsbC1iYWNrIHRvIHVzaW5nIGEgbW9jayBBUEkuXHJcbiAgICAgIHJldHVybiAodGhpcy5jbGllbnRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKG5ldyBOb29wQ2xpZW50KCkpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBU1NFUlQ6IElmIHdlIG1hZGUgaXQgdGhpcyBmYXIsIHRoZSBkb2N1bWVudCBoYXMgbm90IGNvbXBsZXRlZCBsb2FkaW5nIChidXQgaXRcclxuICAgIC8vIG1heSBiZSBpbiBhbiBcImludGVyYWN0aXZlXCIgc3RhdGUgd2hpY2ggaXMgd2hlbiBJIGJlbGlldmUgdGhhdCB0aGUgQW5ndWxhciBhcHBcclxuICAgIC8vIGdldHMgYm9vdHN0cmFwcGVkKS4gQXMgc3VjaCwgd2UgbmVlZCBiaW5kIHRvIHRoZSBMT0FEIGV2ZW50IHRvIHdhaXQgZm9yIG91clxyXG4gICAgLy8gdGhpcmQtcGFydHkgc2NyaXB0cyB0byBsb2FkIChvciBmYWlsIHRvIGxvYWQsIG9yIGJlIGJsb2NrZWQpLlxyXG4gICAgdGhpcy5jbGllbnRQcm9taXNlID0gbmV3IFByb21pc2U8SUNsaWVudD4oXHJcbiAgICAgIChyZXNvbHZlKSA9PiB7XHJcblxyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICAgXCJsb2FkXCIsXHJcbiAgICAgICAgICBmdW5jdGlvbiBoYW5kbGVXaW5kb3dMb2FkKCkge1xyXG5cclxuICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIDNyZC1wYXJ0eSBsaWJyYXJ5IGlzIGVpdGhlciBhdmFpbGFibGUgb3JcclxuICAgICAgICAgICAgLy8gaXQncyBub3QgLSB0aGVyZSdzIG5vIGZ1cnRoZXIgbG9hZGluZyB0byBkby4gSWYgaXQncyBub3RcclxuICAgICAgICAgICAgLy8gcHJlc2VudCBvbiB0aGUgZ2xvYmFsIHNjb3BlLCB3ZSdyZSBnb2luZyB0byBmYWxsLWJhY2sgdG8gdXNpbmdcclxuICAgICAgICAgICAgLy8gYSBtb2NrIEFQSS5cclxuICAgICAgICAgICAgcmVzb2x2ZSh3aW5kb3cuQ2xpZW50IHx8IG5ldyBOb29wQ2xpZW50KCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiAodGhpcy5jbGllbnRQcm9taXNlKTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cclxuXHJcbi8vIEkgcHJvdmlkZSBhIG1vY2sgQVBJIGZvciB0aGUgM3JkLXBhcnR5IHNjcmlwdC4gVGhpcyBqdXN0IGFsbG93cyB0aGUgY29uc3VtaW5nIGNvZGUgdG9cclxuLy8gYWN0IGFzIHRob3VnaCB0aGUgbGlicmFyeSBpcyBhdmFpbGFibGUgZXZlbiBpZiBpdCBmYWlsZWQgdG8gbG9hZCAoZXhhbXBsZSwgaXQgd2FzXHJcbi8vIGJsb2NrZWQgYnkgYW4gYWQtYmxvY2tlcikuXHJcblxyXG4vKiogQGlnbm9yZSAqL1xyXG5jbGFzcyBOb29wQ2xpZW50IGltcGxlbWVudHMgSUNsaWVudCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG5cclxuICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAnJWNDbGllbnQgQVBJIG5vdCBhdmFpbGFibGUsIGZhbGxpbmcgYmFjayB0byBtb2NrIEFQSScsXHJcbiAgICAgICdiYWNrZ3JvdW5kLWNvbG9yOmJsdWU7IGNvbG9yOnllbGxvdzsnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbGxiYWNrKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XHJcblxyXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RGV2aWNlVGltZShkYXRlPzogRGF0ZSk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldERldmljZVRpbWVab25lTmFtZSgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVJRCgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVPZmZzZXQoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldExhbmd1YWdlQ29kZSgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlS2V5KCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZW5kQ29tbWFuZChuYW1lOiBzdHJpbmcsIGFyZzogc3RyaW5nKTogdm9pZCB7XHJcblxyXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VuZFJlbW90ZUNvbW1hbmQoZGV2aWNlS2V5czogc3RyaW5nW10sIG5hbWU6IHN0cmluZywgYXJnOiBzdHJpbmcpIHtcclxuXHJcbiAgICAvLyBOT09QIGltcGxlbWVudCwgbm90aGluZyB0byBkby4uLi5cclxuICB9XHJcblxyXG4gIHB1YmxpYyB0cmFjayhldmVudE5hbWU6IHN0cmluZywgcHJvcGVydGllcz86IHN0cmluZyk6IHZvaWQge1xyXG5cclxuICAgIC8vIE5PT1AgaW1wbGVtZW50LCBub3RoaW5nIHRvIGRvLi4uLlxyXG4gIH1cclxuXHJcbiAgcHVibGljIHRpbWVFdmVudChldmVudE5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG5cclxuICAgIC8vIE5PT1AgaW1wbGVtZW50LCBub3RoaW5nIHRvIGRvLi4uLlxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5ld0V2ZW50U2Vzc2lvbihpZD86IHN0cmluZyk6IHZvaWQge1xyXG5cclxuICAgIC8vIE5PT1AgaW1wbGVtZW50LCBub3RoaW5nIHRvIGRvLi4uLlxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFJldmVsUm9vdCgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0Q29tbWFuZE1hcCgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoJ3t9Jyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmluaXNoKCk6IHZvaWQge1xyXG5cclxuICAgIC8vIE5PT1AgaW1wbGVtZW50LCBub3RoaW5nIHRvIGRvLi4uLlxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldERldmljZSgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcclxuXHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFdpZHRoKCk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0SGVpZ2h0KCk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0RHVyYXRpb24oKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRTZGtWZXJzaW9uKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2ZXJzaW9uKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// Generated by genversion.
|
|
2
|
+
export const version = '1.0.10';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JldmVsZGlnaXRhbC9wbGF5ZXItY2xpZW50L3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQkFBMkI7QUFDM0IsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdlbmVyYXRlZCBieSBnZW52ZXJzaW9uLlxuZXhwb3J0IGNvbnN0IHZlcnNpb24gPSAnMS4wLjEwJ1xuIl19
|
|
@@ -12,6 +12,9 @@ import { RouterModule } from '@angular/router';
|
|
|
12
12
|
import { APP_BASE_HREF } from '@angular/common';
|
|
13
13
|
import * as i1$1 from '@angular/platform-browser';
|
|
14
14
|
|
|
15
|
+
// Generated by genversion.
|
|
16
|
+
const version = '1.0.10';
|
|
17
|
+
|
|
15
18
|
class PlayerClientService {
|
|
16
19
|
// private onPostMessageSub: Subscription;
|
|
17
20
|
// private onPostMessageEvt$ = fromEvent(window, 'message').pipe(
|
|
@@ -348,6 +351,50 @@ class PlayerClientService {
|
|
|
348
351
|
return device[0];
|
|
349
352
|
});
|
|
350
353
|
}
|
|
354
|
+
/**
|
|
355
|
+
* Returns the width of the visualization area.
|
|
356
|
+
*
|
|
357
|
+
* @returns Width of the visualization area
|
|
358
|
+
*/
|
|
359
|
+
getWidth() {
|
|
360
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
361
|
+
const client = yield this.getClient();
|
|
362
|
+
return client.getWidth();
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Returns the height of the visualization area.
|
|
367
|
+
*
|
|
368
|
+
* @returns Height of the visualization area
|
|
369
|
+
*/
|
|
370
|
+
getHeight() {
|
|
371
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
372
|
+
const client = yield this.getClient();
|
|
373
|
+
return client.getHeight();
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Returns the duration of the currently playing source.
|
|
378
|
+
* (only applicable when associated with a playlist)
|
|
379
|
+
*
|
|
380
|
+
* @returns Duration of the current item in milliseconds
|
|
381
|
+
*/
|
|
382
|
+
getDuration() {
|
|
383
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
384
|
+
const client = yield this.getClient();
|
|
385
|
+
return client.getDuration();
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Returns the current SDK version.
|
|
390
|
+
*
|
|
391
|
+
* @returns SDK version
|
|
392
|
+
*/
|
|
393
|
+
getSdkVersion() {
|
|
394
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
395
|
+
return Promise.resolve(version);
|
|
396
|
+
});
|
|
397
|
+
}
|
|
351
398
|
// ---
|
|
352
399
|
// PRIVATE METHODS.
|
|
353
400
|
// ---
|
|
@@ -459,13 +506,33 @@ class NoopClient {
|
|
|
459
506
|
return Promise.resolve('{}');
|
|
460
507
|
});
|
|
461
508
|
}
|
|
509
|
+
finish() {
|
|
510
|
+
// NOOP implement, nothing to do....
|
|
511
|
+
}
|
|
462
512
|
getDevice() {
|
|
463
513
|
return __awaiter(this, void 0, void 0, function* () {
|
|
464
514
|
return Promise.resolve(null);
|
|
465
515
|
});
|
|
466
516
|
}
|
|
467
|
-
|
|
468
|
-
|
|
517
|
+
getWidth() {
|
|
518
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
519
|
+
return Promise.resolve(null);
|
|
520
|
+
});
|
|
521
|
+
}
|
|
522
|
+
getHeight() {
|
|
523
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
524
|
+
return Promise.resolve(null);
|
|
525
|
+
});
|
|
526
|
+
}
|
|
527
|
+
getDuration() {
|
|
528
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
529
|
+
return Promise.resolve(null);
|
|
530
|
+
});
|
|
531
|
+
}
|
|
532
|
+
getSdkVersion() {
|
|
533
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
534
|
+
return Promise.resolve(version);
|
|
535
|
+
});
|
|
469
536
|
}
|
|
470
537
|
}
|
|
471
538
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reveldigital-player-client.mjs","sources":["../../../../projects/reveldigital/player-client/src/lib/player-client.service.ts","../../../../projects/reveldigital/player-client/src/lib/app-init.service.ts","../../../../projects/reveldigital/player-client/src/lib/safe-style.pipe.ts","../../../../projects/reveldigital/player-client/src/lib/player-client.module.ts","../../../../projects/reveldigital/player-client/src/public-api.ts","../../../../projects/reveldigital/player-client/src/reveldigital-player-client.ts"],"sourcesContent":["import { Injectable, NgZone, OnDestroy } from '@angular/core';\r\nimport { gadgets } from '@reveldigital/gadget-types';\r\nimport { BehaviorSubject, fromEvent, Subject, Subscription } from 'rxjs';\r\nimport { map, share, tap } from 'rxjs/operators';\r\nimport { ICommand } from './interfaces/command.interface';\r\nimport { IDevice } from './interfaces/device.interface';\r\nimport { IEventProperties } from './interfaces/event-properties.interface';\r\nimport { IClient } from './interfaces/client.interface';\r\n\r\n\r\n// So that TypeScript doesn't complain, we're going to augment the GLOBAL / WINDOW \r\n// name-space definition to include the Tracker API. This also provides us with a place\r\n// to actually DOCUMENT the API so that our developers aren't guessing about what's\r\n// available on the library.\r\n\r\n/** @ignore */\r\ndeclare global {\r\n var Client: IClient;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PlayerClientService implements OnDestroy {\r\n\r\n /** @ignore */\r\n private clientPromise: Promise<IClient> | null;\r\n\r\n /**\r\n * Commands sent to this player.\r\n */\r\n public onCommand$ = new Subject<ICommand>();\r\n /**\r\n * Signals the gadget has been loaded and is ready to start.\r\n */\r\n public onReady$ = new BehaviorSubject(false);\r\n /**\r\n * Signals the gadget has been started by the player.\r\n */\r\n public onStart$ = new Subject();\r\n /**\r\n * Signals the gadgets has been stopped by the player.\r\n */\r\n public onStop$ = new Subject();\r\n\r\n //\r\n // Two methods available for calling into the library:\r\n //\r\n // 1) Using dispatchEvent() with the following custom events\r\n // 2) Using the window scoped RevelDigital object as defined in the constructor\r\n //\r\n /** @ignore */\r\n private onStartSub: Subscription;\r\n /** @ignore */\r\n private onStartEvt$ = fromEvent(document, 'RevelDigital.Start').pipe(\r\n share(),\r\n tap(this.onStart$)\r\n );\r\n /** @ignore */\r\n private onStopSub: Subscription;\r\n /** @ignore */\r\n private onStopEvt$ = fromEvent(document, 'RevelDigital.Stop').pipe(\r\n share(),\r\n tap(this.onStop$)\r\n );\r\n /** @ignore */\r\n private onCommandSub: Subscription;\r\n /** @ignore */\r\n private onCommandEvt$ = fromEvent<ICommand>(document, 'RevelDigital.Command').pipe(\r\n map((e: any) => { return { name: e.detail.name, arg: e.detail.arg } as ICommand }),\r\n share(),\r\n tap(this.onCommand$)\r\n );\r\n\r\n // private onPostMessageSub: Subscription;\r\n // private onPostMessageEvt$ = fromEvent(window, 'message').pipe(\r\n // filter((messageEvent: MessageEvent) =>\r\n // messageEvent.source !== window.parent &&\r\n // typeof messageEvent.data === 'string' &&\r\n // messageEvent.data.startsWith('reveldigital:')),\r\n // map((e: any) => { return JSON.parse(e.substring(13)) as Command }),\r\n // share(),\r\n // tap(this.onCommand$)\r\n // );\r\n\r\n /** @ignore */\r\n constructor(zone: NgZone) {\r\n\r\n let self = this;\r\n (window as any).RevelDigital = {\r\n Controller: {\r\n onCommand: function (name: string, arg: string) {\r\n zone.run(() => {\r\n self.onCommand$.next({ name: name, arg: arg });\r\n });\r\n },\r\n onStart: function () {\r\n zone.run(() => {\r\n self.onStart$.next(null);\r\n });\r\n },\r\n onStop: function () {\r\n zone.run(() => {\r\n self.onStop$.next(null);\r\n });\r\n }\r\n }\r\n }\r\n\r\n this.onStartSub = this.onStartEvt$.subscribe(() => { });\r\n this.onStopSub = this.onStopEvt$.subscribe(() => { });\r\n this.onCommandSub = this.onCommandEvt$.subscribe(() => { });\r\n\r\n this.clientPromise = null;\r\n\r\n this.onReady$.next(true);\r\n }\r\n\r\n /** @ignore */\r\n ngOnDestroy(): void {\r\n\r\n this.onStartSub?.unsubscribe();\r\n this.onStopSub?.unsubscribe();\r\n this.onCommandSub?.unsubscribe();\r\n\r\n this.onReady$.next(false);\r\n }\r\n\r\n /** @ignore */\r\n public static init(data: any) {\r\n\r\n console.log(\r\n '%c⚙️ Initializing Revel Digital client library',\r\n 'background-color:blue; color:yellow;'\r\n );\r\n }\r\n\r\n /**\r\n * This method allows the gadget to communicate with player scripting.\r\n * If the appropriate scripting is in place in the currently running template, calling this method\r\n * will initiate a callback which can be acted upon in player script.\r\n * \r\n * @example\r\n * client.callback('test', 'this');\r\n * \r\n * @param args variable number of arguments\r\n */\r\n public callback(...args: any[]): void {\r\n\r\n this.getClient().then((client) => {\r\n\r\n switch (args.length) {\r\n case 0:\r\n client.callback();\r\n break;\r\n case 1:\r\n client.callback(args[0]);\r\n break;\r\n case 2:\r\n client.callback(args[1]);\r\n break;\r\n case 3:\r\n client.callback(args[2]);\r\n break;\r\n case 4:\r\n client.callback(args[3]);\r\n break;\r\n case 5:\r\n client.callback(args[4]);\r\n break;\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Accessor method for the user preferences interface exposed by the Gadgets API.\r\n * \r\n * See {@link https://developers.google.com/gadgets/docs/basic} for more details on the Gadgets API.\r\n * \r\n * @example\r\n * constructor(public client: PlayerClientService) {\r\n * let prefs = client.getPrefs();\r\n * let myString = prefs.getString('myStringPref');\r\n * }\r\n * @returns {gadgets.Prefs} Gadget API Prefs object\r\n */\r\n public getPrefs(): gadgets.Prefs {\r\n\r\n return new window['gadgets']['Prefs']();\r\n }\r\n\r\n /**\r\n * Returns the current device time in ISO8601 format.\r\n * Current device time is determined by the device timezone assigned to the device in the CMS.\r\n * \r\n * @param date Optional. If supplied will translate the supplied date/time to device time based on respective timezones.\r\n * @returns Date/time in ISO8601 format\r\n */\r\n public async getDeviceTime(date?: Date): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n if (date !== undefined) {\r\n return client.getDeviceTime(date);\r\n }\r\n return client.getDeviceTime();\r\n }\r\n\r\n /**\r\n * Returns the timezone name currently assigned to the device.\r\n * \r\n * @returns Timezone Name\r\n */\r\n public async getDeviceTimeZoneName(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneName();\r\n }\r\n\r\n /**\r\n * Returns the timezone ID currently assigned to the device.\r\n * \r\n * @returns Timezone ID\r\n */\r\n public async getDeviceTimeZoneID(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneID();\r\n }\r\n\r\n /**\r\n * Returns the numerical offset from GMT of the timezone currently assigned to the device.\r\n * \r\n * @returns Timezone offset\r\n */\r\n public async getDeviceTimeZoneOffset(): Promise<number> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneOffset();\r\n }\r\n\r\n /**\r\n * Returns the language code of the language currently assigned to the device.\r\n * \r\n * @returns Language code\r\n */\r\n public async getLanguageCode(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getLanguageCode();\r\n }\r\n\r\n /**\r\n * Returns the unique Revel Digital device key associated with the device.\r\n * \r\n * @returns Device key\r\n */\r\n public async getDeviceKey(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceKey();\r\n }\r\n\r\n /**\r\n * Send a command to the player device.\r\n * \r\n * @param name Command name\r\n * @param arg Command argument\r\n */\r\n public sendCommand(name: string, arg: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.sendCommand(name, arg);\r\n })\r\n }\r\n\r\n /**\r\n * Send a command to any remote player with the supplied device key(s).\r\n * Note: Remote commands can only be delivered to devices within the same account as the sender device.\r\n * \r\n * @param deviceKeys Array of remote device keys\r\n * @param name Command name\r\n * @param arg Command arg\r\n */\r\n public sendRemoteCommand(deviceKeys: string[], name: string, arg: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.sendRemoteCommand(deviceKeys, name, arg);\r\n });\r\n }\r\n\r\n /**\r\n * Log an event for use with AdHawk analytics.\r\n * Events are used for tracking various metrics including usage statistics, player condition, state changes, etc.\r\n * \r\n * @param eventName Unique name for this event\r\n * @param properties A map of user defined properties to associate with this event\r\n */\r\n public track(eventName: string, properties?: IEventProperties): void {\r\n\r\n this.getClient().then((client) => {\r\n client.track(eventName, JSON.stringify(properties));\r\n })\r\n }\r\n\r\n /**\r\n * Method for initiating a timed event.\r\n * Timed events are useful for tracking the duration of an event and must be proceeded with a call to track().\r\n * \r\n * @example\r\n * client.timeEvent('testEvent');\r\n * client.track(\"test\", { \"a\": \"b\" });\r\n * @param eventName Unique name for this event\r\n */\r\n public timeEvent(eventName: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.timeEvent(eventName);\r\n })\r\n }\r\n\r\n /**\r\n * A session is a way of grouping events together. Each event has an associated session ID.\r\n * Session ID's are randomly generated and reset by subsequent calls to newEventSession().\r\n * \r\n * Each call to track() will utilize the same session ID, until another call to newEventSession().\r\n * @param id Optional. User supplied session ID. If not supplied a random session ID will be generated.\r\n */\r\n public newEventSession(id?: string): void {\r\n\r\n this.getClient().then((client) => {\r\n if (id !== undefined) {\r\n client.newEventSession();\r\n } else {\r\n client.newEventSession(id);\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Returns the root folder utilized by this player device.\r\n * \r\n * @returns Path to the root folder\r\n */\r\n public async getRevelRoot(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getRevelRoot();\r\n }\r\n\r\n /**\r\n * Returns a map of commands currently active for this device.\r\n * \r\n * @returns Map of commands currently active for this device.\r\n */\r\n public async getCommandMap(): Promise<any> {\r\n\r\n const client = await this.getClient();\r\n\r\n return JSON.parse(await client.getCommandMap());\r\n }\r\n\r\n /**\r\n * Indicate to the player that this gadget has finished it's visualization.\r\n * This allows the player to proceed with the next item in a playlist if applicable.\r\n */\r\n public finish(): void {\r\n\r\n this.getClient().then((client) => {\r\n\r\n client.finish();\r\n })\r\n }\r\n\r\n /**\r\n * Check is the gadget is running in preview mode. Preview mode is enabled when the gadget is\r\n * being edited in the CMS, or otherwise not running in a normal player environment.\r\n * \r\n * @returns True if the gadget is running in preview mode, false otherwise.\r\n */\r\n public async isPreviewMode(): Promise<boolean> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client instanceof NoopClient;\r\n }\r\n\r\n /**\r\n * Returns the device details associated with the player running the gadget or web app.\r\n * \r\n * @returns Device details.\r\n */\r\n public async getDevice(): Promise<IDevice | null> {\r\n\r\n const client = await this.getClient();\r\n\r\n let obj: any = JSON.parse(<string>await client.getDevice());\r\n\r\n const device: IDevice[] = [obj].map((device: any) => {\r\n\r\n return {\r\n name: device.name,\r\n registrationKey: device.key,\r\n deviceType: device.devicetype,\r\n enteredService: new Date(device.enteredservice),\r\n langCode: device.langcode,\r\n timeZone: device.timezone,\r\n tags: device.description?.split('\\n'),\r\n location: {\r\n city: device.location?.city,\r\n state: device.location?.state,\r\n country: device.location?.country,\r\n postalCode: device.location?.postalcode,\r\n address: device.location?.address,\r\n latitude: device.location?.latitude,\r\n longitude: device.location?.longitude\r\n }\r\n }\r\n });\r\n return device[0];\r\n }\r\n\r\n // ---\r\n // PRIVATE METHODS.\r\n // ---\r\n /** @ignore */\r\n private getClient(): Promise<IClient> {\r\n\r\n if (this.clientPromise) {\r\n\r\n return (this.clientPromise);\r\n }\r\n\r\n if (window.Client) {\r\n\r\n return (this.clientPromise = Promise.resolve(window.Client));\r\n }\r\n\r\n // A \"complete\" status indicates that the \"load\" event has been fired on the\r\n // window; and, that all sub-resources such as Scripts, Images, and Frames have\r\n // been loaded.\r\n if (window.document.readyState === \"complete\") {\r\n\r\n // If this event has fired AND the 3rd-party script isn't available (see IF-\r\n // condition BEFORE this one), it means that the 3rd-party script either\r\n // failed on the network or was BLOCKED by an ad-blocker. As such, we have to\r\n // fall-back to using a mock API.\r\n return (this.clientPromise = Promise.resolve(new NoopClient()));\r\n }\r\n\r\n // ASSERT: If we made it this far, the document has not completed loading (but it\r\n // may be in an \"interactive\" state which is when I believe that the Angular app\r\n // gets bootstrapped). As such, we need bind to the LOAD event to wait for our\r\n // third-party scripts to load (or fail to load, or be blocked).\r\n this.clientPromise = new Promise<IClient>(\r\n (resolve) => {\r\n\r\n window.addEventListener(\r\n \"load\",\r\n function handleWindowLoad() {\r\n\r\n // At this point, the 3rd-party library is either available or\r\n // it's not - there's no further loading to do. If it's not\r\n // present on the global scope, we're going to fall-back to using\r\n // a mock API.\r\n resolve(window.Client || new NoopClient());\r\n }\r\n );\r\n\r\n }\r\n );\r\n\r\n return (this.clientPromise);\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n// ----------------------------------------------------------------------------------- //\r\n// ----------------------------------------------------------------------------------- //\r\n\r\n// I provide a mock API for the 3rd-party script. This just allows the consuming code to\r\n// act as though the library is available even if it failed to load (example, it was\r\n// blocked by an ad-blocker).\r\n\r\n/** @ignore */\r\nclass NoopClient implements IClient {\r\n\r\n constructor() {\r\n\r\n console.log(\r\n '%cClient API not available, falling back to mock API',\r\n 'background-color:blue; color:yellow;'\r\n );\r\n }\r\n\r\n public callback(...args: any[]): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public getDeviceTime(date?: Date): Promise<string> {\r\n\r\n return Promise.resolve(new Date().toISOString());\r\n }\r\n\r\n public async getDeviceTimeZoneName(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceTimeZoneID(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceTimeZoneOffset(): Promise<number> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getLanguageCode(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceKey(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public sendCommand(name: string, arg: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public sendRemoteCommand(deviceKeys: string[], name: string, arg: string) {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public track(eventName: string, properties?: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public timeEvent(eventName: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public newEventSession(id?: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public async getRevelRoot(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getCommandMap(): Promise<string> {\r\n\r\n return Promise.resolve('{}');\r\n }\r\n\r\n public async getDevice(): Promise<string | null> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public finish(): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n}\r\n","import { Injectable, enableProdMode, isDevMode } from '@angular/core';\r\nimport { HttpClient } from \"@angular/common/http\";\r\nimport { ActivatedRoute, Router } from \"@angular/router\";\r\nimport * as yaml from \"js-yaml\";\r\nimport * as WebFont from 'webfontloader';\r\n\r\nconst isLocal: boolean = /localhost/.test(document.location.host);\r\n!isLocal && enableProdMode();\r\n\r\n\r\n/** @ignore */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AppInitService {\r\n\r\n constructor(\r\n public http: HttpClient,\r\n private _route: ActivatedRoute,\r\n private _router: Router) {\r\n }\r\n\r\n init(): Promise<any> {\r\n\r\n return new Promise<void>(async (resolve) => {\r\n\r\n this.loadFonts();\r\n\r\n if (isDevMode()) {\r\n console.log(\r\n '%cRunning in development mode',\r\n 'background-color:blue; color:yellow;'\r\n );\r\n\r\n /**\r\n * Shim the shindig prefs functionality for dev mode\r\n */\r\n (<any>window).gadgets = {\r\n\r\n Prefs: class {\r\n getString(key: string) { return this.getParameterByName(key) }\r\n\r\n getArray(key: string) { return this.getParameterByName(key).split(',') }\r\n\r\n getBool(key: string) { return this.getParameterByName(key) === 'true' }\r\n\r\n getCountry() { }\r\n\r\n getFloat(key: string) { return parseFloat(this.getParameterByName(key)) }\r\n\r\n getInt(key: string) { return parseInt(this.getParameterByName(key)) }\r\n\r\n getLang() { return this.getParameterByName('lang') === '' ? 'en' : this.getParameterByName('lang'); }\r\n\r\n getParameterByName(name: string, search = window.location.href): string {\r\n\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n let regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n results = regex.exec(search);\r\n if (!results) return '';\r\n if (!results[2]) return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n }\r\n }\r\n };\r\n\r\n this.http.get('assets/gadget.yaml', {\r\n responseType: 'text'\r\n }).subscribe(data => {\r\n const doc: any = yaml.load(data);\r\n let params: any = {}\r\n for (const val of doc.prefs) {\r\n params[val.name] = val.default_value\r\n }\r\n\r\n this._router.navigate([], {\r\n relativeTo: this._route,\r\n queryParams: params,\r\n });\r\n\r\n console.log(\r\n `%cUser prefs loaded successfully`,\r\n 'background-color:blue; color:yellow;'\r\n );\r\n }, (err) => {\r\n console.log(\r\n `%cUnable to load user preferences YAML definition file: ${err}`,\r\n 'background-color:blue; color:yellow;'\r\n );\r\n console.log(\r\n `%cPlease see our developer documentation for help with your app configuration: https://developer.reveldigital.com`,\r\n 'background-color:red; color:yellow;'\r\n )\r\n })\r\n }\r\n resolve();\r\n });\r\n }\r\n\r\n\r\n private getFamilyName(css) {\r\n\r\n let FONT_FAMILY_REGEX = /font-family:\\s*(?:['"])*['\"]*(.+?)['\"]*(?:['"])*\\s*;/i;\r\n if (FONT_FAMILY_REGEX.test(css)) {\r\n var matches = css.match(FONT_FAMILY_REGEX);\r\n return matches[1].split(',')[0];\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n /**\r\n * Loads the given font from Google Web Fonts.\r\n */\r\n private loadFonts(): void {\r\n\r\n const parameters = new URLSearchParams(window.location.search);\r\n parameters.forEach((val, key) => {\r\n try {\r\n let fontFamily = this.getFamilyName(val);\r\n if (fontFamily !== '') {\r\n WebFont.load({\r\n google: {\r\n families: [fontFamily]\r\n },\r\n fontactive: (familyName) => {\r\n console.log(`%cActivating font: ${familyName}`,\r\n 'background-color:blue; color:yellow;');\r\n },\r\n fontinactive: (familyName) => {\r\n console.log(`%cFont inactive: ${familyName}`,\r\n 'background-color:red; color:yellow;');\r\n }\r\n });\r\n }\r\n } catch (e) {\r\n }\r\n });\r\n }\r\n}\r\n","import { Pipe, PipeTransform, NgModule } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n/**\r\n * The safe style pipe is used when custom styles are defined for a gadget and must be applied to an Angular\r\n * component. This pipe will ensure the style can be appied safely by utilizing the DomSanitizer.\r\n * \r\n * @example\r\n * <h2 [style]=\"style | safeStyle\">Sample Pref: {{ prefs.getString('myStringPref') }}</h2>\r\n */\r\n@Pipe({\r\n name: 'safeStyle',\r\n})\r\nexport class SafeStylePipe implements PipeTransform {\r\n constructor(private sanitized: DomSanitizer) { }\r\n\r\n transform(value: any): unknown {\r\n return this.sanitized.bypassSecurityTrustStyle(value);\r\n }\r\n}\r\n\r\n@NgModule({\r\n declarations: [SafeStylePipe],\r\n exports: [SafeStylePipe],\r\n})\r\nexport class NgSafeStylePipeModule { }\r\n","import { APP_INITIALIZER, LOCALE_ID, NgModule } from '@angular/core';\nimport { PlayerClientService } from './player-client.service';\nimport { AppInitService } from './app-init.service';\nimport { HttpClientModule } from '@angular/common/http';\nimport { RouterModule } from '@angular/router';\nimport { APP_BASE_HREF } from '@angular/common';\nimport { NgSafeStylePipeModule } from './safe-style.pipe';\n\ndeclare var gadgets: any;\n\n\n@NgModule({\n imports: [\n HttpClientModule,\n RouterModule.forRoot([]),\n NgSafeStylePipeModule\n ],\n exports: [\n NgSafeStylePipeModule\n ],\n providers: [{\n provide: APP_INITIALIZER,\n useFactory: initializeApp,\n deps: [AppInitService, PlayerClientService],\n multi: true\n },\n {\n provide: LOCALE_ID,\n useFactory: () => {\n try {\n return new gadgets.Prefs().getLang();\n } catch {\n return 'en';\n }\n }\n },\n { provide: APP_BASE_HREF, useValue: '/gadgets/ifr' }]\n})\nexport class PlayerClientModule { }\n\nfunction initializeApp(appInitService: AppInitService) {\n return async () => {\n PlayerClientService.init({});\n await appInitService.init();\n }\n}\n","/*\n * Public API Surface of player-client\n */\n\nexport * from './lib/player-client.service';\nexport * from './lib/player-client.module';\nexport * from './lib/safe-style.pipe';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reveldigital-player-client.mjs","sources":["../../../../projects/reveldigital/player-client/src/lib/version.ts","../../../../projects/reveldigital/player-client/src/lib/player-client.service.ts","../../../../projects/reveldigital/player-client/src/lib/app-init.service.ts","../../../../projects/reveldigital/player-client/src/lib/safe-style.pipe.ts","../../../../projects/reveldigital/player-client/src/lib/player-client.module.ts","../../../../projects/reveldigital/player-client/src/public-api.ts","../../../../projects/reveldigital/player-client/src/reveldigital-player-client.ts"],"sourcesContent":["// Generated by genversion.\nexport const version = '1.0.10'\n","import { Injectable, NgZone, OnDestroy } from '@angular/core';\r\nimport { gadgets } from '@reveldigital/gadget-types';\r\nimport { BehaviorSubject, fromEvent, Subject, Subscription } from 'rxjs';\r\nimport { map, share, tap } from 'rxjs/operators';\r\nimport { ICommand } from './interfaces/command.interface';\r\nimport { IDevice } from './interfaces/device.interface';\r\nimport { IEventProperties } from './interfaces/event-properties.interface';\r\nimport { IClient } from './interfaces/client.interface';\r\nimport { version } from './version';\r\n\r\n//import { version } from './version.js';\r\n\r\n// So that TypeScript doesn't complain, we're going to augment the GLOBAL / WINDOW \r\n// name-space definition to include the Tracker API. This also provides us with a place\r\n// to actually DOCUMENT the API so that our developers aren't guessing about what's\r\n// available on the library.\r\n\r\n/** @ignore */\r\ndeclare global {\r\n var Client: IClient;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PlayerClientService implements OnDestroy {\r\n\r\n /** @ignore */\r\n private clientPromise: Promise<IClient> | null;\r\n\r\n /**\r\n * Commands sent to this player.\r\n */\r\n public onCommand$ = new Subject<ICommand>();\r\n /**\r\n * Signals the gadget has been loaded and is ready to start.\r\n */\r\n public onReady$ = new BehaviorSubject(false);\r\n /**\r\n * Signals the gadget has been started by the player.\r\n */\r\n public onStart$ = new Subject();\r\n /**\r\n * Signals the gadgets has been stopped by the player.\r\n */\r\n public onStop$ = new Subject();\r\n\r\n //\r\n // Two methods available for calling into the library:\r\n //\r\n // 1) Using dispatchEvent() with the following custom events\r\n // 2) Using the window scoped RevelDigital object as defined in the constructor\r\n //\r\n /** @ignore */\r\n private onStartSub: Subscription;\r\n /** @ignore */\r\n private onStartEvt$ = fromEvent(document, 'RevelDigital.Start').pipe(\r\n share(),\r\n tap(this.onStart$)\r\n );\r\n /** @ignore */\r\n private onStopSub: Subscription;\r\n /** @ignore */\r\n private onStopEvt$ = fromEvent(document, 'RevelDigital.Stop').pipe(\r\n share(),\r\n tap(this.onStop$)\r\n );\r\n /** @ignore */\r\n private onCommandSub: Subscription;\r\n /** @ignore */\r\n private onCommandEvt$ = fromEvent<ICommand>(document, 'RevelDigital.Command').pipe(\r\n map((e: any) => { return { name: e.detail.name, arg: e.detail.arg } as ICommand }),\r\n share(),\r\n tap(this.onCommand$)\r\n );\r\n\r\n // private onPostMessageSub: Subscription;\r\n // private onPostMessageEvt$ = fromEvent(window, 'message').pipe(\r\n // filter((messageEvent: MessageEvent) =>\r\n // messageEvent.source !== window.parent &&\r\n // typeof messageEvent.data === 'string' &&\r\n // messageEvent.data.startsWith('reveldigital:')),\r\n // map((e: any) => { return JSON.parse(e.substring(13)) as Command }),\r\n // share(),\r\n // tap(this.onCommand$)\r\n // );\r\n\r\n /** @ignore */\r\n constructor(zone: NgZone) {\r\n\r\n let self = this;\r\n (window as any).RevelDigital = {\r\n Controller: {\r\n onCommand: function (name: string, arg: string) {\r\n zone.run(() => {\r\n self.onCommand$.next({ name: name, arg: arg });\r\n });\r\n },\r\n onStart: function () {\r\n zone.run(() => {\r\n self.onStart$.next(null);\r\n });\r\n },\r\n onStop: function () {\r\n zone.run(() => {\r\n self.onStop$.next(null);\r\n });\r\n }\r\n }\r\n }\r\n\r\n this.onStartSub = this.onStartEvt$.subscribe(() => { });\r\n this.onStopSub = this.onStopEvt$.subscribe(() => { });\r\n this.onCommandSub = this.onCommandEvt$.subscribe(() => { });\r\n\r\n this.clientPromise = null;\r\n\r\n this.onReady$.next(true);\r\n }\r\n\r\n /** @ignore */\r\n ngOnDestroy(): void {\r\n\r\n this.onStartSub?.unsubscribe();\r\n this.onStopSub?.unsubscribe();\r\n this.onCommandSub?.unsubscribe();\r\n\r\n this.onReady$.next(false);\r\n }\r\n\r\n /** @ignore */\r\n public static init(data: any) {\r\n\r\n console.log(\r\n '%c⚙️ Initializing Revel Digital client library',\r\n 'background-color:blue; color:yellow;'\r\n );\r\n }\r\n\r\n /**\r\n * This method allows the gadget to communicate with player scripting.\r\n * If the appropriate scripting is in place in the currently running template, calling this method\r\n * will initiate a callback which can be acted upon in player script.\r\n * \r\n * @example\r\n * client.callback('test', 'this');\r\n * \r\n * @param args variable number of arguments\r\n */\r\n public callback(...args: any[]): void {\r\n\r\n this.getClient().then((client) => {\r\n\r\n switch (args.length) {\r\n case 0:\r\n client.callback();\r\n break;\r\n case 1:\r\n client.callback(args[0]);\r\n break;\r\n case 2:\r\n client.callback(args[1]);\r\n break;\r\n case 3:\r\n client.callback(args[2]);\r\n break;\r\n case 4:\r\n client.callback(args[3]);\r\n break;\r\n case 5:\r\n client.callback(args[4]);\r\n break;\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Accessor method for the user preferences interface exposed by the Gadgets API.\r\n * \r\n * See {@link https://developers.google.com/gadgets/docs/basic} for more details on the Gadgets API.\r\n * \r\n * @example\r\n * constructor(public client: PlayerClientService) {\r\n * let prefs = client.getPrefs();\r\n * let myString = prefs.getString('myStringPref');\r\n * }\r\n * @returns {gadgets.Prefs} Gadget API Prefs object\r\n */\r\n public getPrefs(): gadgets.Prefs {\r\n\r\n return new window['gadgets']['Prefs']();\r\n }\r\n\r\n /**\r\n * Returns the current device time in ISO8601 format.\r\n * Current device time is determined by the device timezone assigned to the device in the CMS.\r\n * \r\n * @param date Optional. If supplied will translate the supplied date/time to device time based on respective timezones.\r\n * @returns Date/time in ISO8601 format\r\n */\r\n public async getDeviceTime(date?: Date): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n if (date !== undefined) {\r\n return client.getDeviceTime(date);\r\n }\r\n return client.getDeviceTime();\r\n }\r\n\r\n /**\r\n * Returns the timezone name currently assigned to the device.\r\n * \r\n * @returns Timezone Name\r\n */\r\n public async getDeviceTimeZoneName(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneName();\r\n }\r\n\r\n /**\r\n * Returns the timezone ID currently assigned to the device.\r\n * \r\n * @returns Timezone ID\r\n */\r\n public async getDeviceTimeZoneID(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneID();\r\n }\r\n\r\n /**\r\n * Returns the numerical offset from GMT of the timezone currently assigned to the device.\r\n * \r\n * @returns Timezone offset\r\n */\r\n public async getDeviceTimeZoneOffset(): Promise<number> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneOffset();\r\n }\r\n\r\n /**\r\n * Returns the language code of the language currently assigned to the device.\r\n * \r\n * @returns Language code\r\n */\r\n public async getLanguageCode(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getLanguageCode();\r\n }\r\n\r\n /**\r\n * Returns the unique Revel Digital device key associated with the device.\r\n * \r\n * @returns Device key\r\n */\r\n public async getDeviceKey(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceKey();\r\n }\r\n\r\n /**\r\n * Send a command to the player device.\r\n * \r\n * @param name Command name\r\n * @param arg Command argument\r\n */\r\n public sendCommand(name: string, arg: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.sendCommand(name, arg);\r\n })\r\n }\r\n\r\n /**\r\n * Send a command to any remote player with the supplied device key(s).\r\n * Note: Remote commands can only be delivered to devices within the same account as the sender device.\r\n * \r\n * @param deviceKeys Array of remote device keys\r\n * @param name Command name\r\n * @param arg Command arg\r\n */\r\n public sendRemoteCommand(deviceKeys: string[], name: string, arg: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.sendRemoteCommand(deviceKeys, name, arg);\r\n });\r\n }\r\n\r\n /**\r\n * Log an event for use with AdHawk analytics.\r\n * Events are used for tracking various metrics including usage statistics, player condition, state changes, etc.\r\n * \r\n * @param eventName Unique name for this event\r\n * @param properties A map of user defined properties to associate with this event\r\n */\r\n public track(eventName: string, properties?: IEventProperties): void {\r\n\r\n this.getClient().then((client) => {\r\n client.track(eventName, JSON.stringify(properties));\r\n })\r\n }\r\n\r\n /**\r\n * Method for initiating a timed event.\r\n * Timed events are useful for tracking the duration of an event and must be proceeded with a call to track().\r\n * \r\n * @example\r\n * client.timeEvent('testEvent');\r\n * client.track(\"test\", { \"a\": \"b\" });\r\n * @param eventName Unique name for this event\r\n */\r\n public timeEvent(eventName: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.timeEvent(eventName);\r\n })\r\n }\r\n\r\n /**\r\n * A session is a way of grouping events together. Each event has an associated session ID.\r\n * Session ID's are randomly generated and reset by subsequent calls to newEventSession().\r\n * \r\n * Each call to track() will utilize the same session ID, until another call to newEventSession().\r\n * @param id Optional. User supplied session ID. If not supplied a random session ID will be generated.\r\n */\r\n public newEventSession(id?: string): void {\r\n\r\n this.getClient().then((client) => {\r\n if (id !== undefined) {\r\n client.newEventSession();\r\n } else {\r\n client.newEventSession(id);\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Returns the root folder utilized by this player device.\r\n * \r\n * @returns Path to the root folder\r\n */\r\n public async getRevelRoot(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getRevelRoot();\r\n }\r\n\r\n /**\r\n * Returns a map of commands currently active for this device.\r\n * \r\n * @returns Map of commands currently active for this device.\r\n */\r\n public async getCommandMap(): Promise<any> {\r\n\r\n const client = await this.getClient();\r\n\r\n return JSON.parse(await client.getCommandMap());\r\n }\r\n\r\n /**\r\n * Indicate to the player that this gadget has finished it's visualization.\r\n * This allows the player to proceed with the next item in a playlist if applicable.\r\n */\r\n public finish(): void {\r\n\r\n this.getClient().then((client) => {\r\n\r\n client.finish();\r\n })\r\n }\r\n\r\n /**\r\n * Check is the gadget is running in preview mode. Preview mode is enabled when the gadget is\r\n * being edited in the CMS, or otherwise not running in a normal player environment.\r\n * \r\n * @returns True if the gadget is running in preview mode, false otherwise.\r\n */\r\n public async isPreviewMode(): Promise<boolean> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client instanceof NoopClient;\r\n }\r\n\r\n /**\r\n * Returns the device details associated with the player running the gadget or web app.\r\n * \r\n * @returns Device details.\r\n */\r\n public async getDevice(): Promise<IDevice | null> {\r\n\r\n const client = await this.getClient();\r\n\r\n let obj: any = JSON.parse(<string>await client.getDevice());\r\n\r\n const device: IDevice[] = [obj].map((device: any) => {\r\n\r\n return {\r\n name: device.name,\r\n registrationKey: device.key,\r\n deviceType: device.devicetype,\r\n enteredService: new Date(device.enteredservice),\r\n langCode: device.langcode,\r\n timeZone: device.timezone,\r\n tags: device.description?.split('\\n'),\r\n location: {\r\n city: device.location?.city,\r\n state: device.location?.state,\r\n country: device.location?.country,\r\n postalCode: device.location?.postalcode,\r\n address: device.location?.address,\r\n latitude: device.location?.latitude,\r\n longitude: device.location?.longitude\r\n }\r\n }\r\n });\r\n return device[0];\r\n }\r\n\r\n /**\r\n * Returns the width of the visualization area.\r\n * \r\n * @returns Width of the visualization area\r\n */\r\n public async getWidth(): Promise<number | null> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getWidth();\r\n }\r\n\r\n /**\r\n * Returns the height of the visualization area.\r\n * \r\n * @returns Height of the visualization area\r\n */\r\n public async getHeight(): Promise<number | null> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getHeight();\r\n }\r\n\r\n /**\r\n * Returns the duration of the currently playing source.\r\n * (only applicable when associated with a playlist)\r\n * \r\n * @returns Duration of the current item in milliseconds\r\n */\r\n public async getDuration(): Promise<number | null> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDuration();\r\n }\r\n\r\n /**\r\n * Returns the current SDK version.\r\n * \r\n * @returns SDK version\r\n */\r\n public async getSdkVersion(): Promise<string> {\r\n\r\n return Promise.resolve(version);\r\n }\r\n\r\n\r\n // ---\r\n // PRIVATE METHODS.\r\n // ---\r\n /** @ignore */\r\n private getClient(): Promise<IClient> {\r\n\r\n if (this.clientPromise) {\r\n\r\n return (this.clientPromise);\r\n }\r\n\r\n if (window.Client) {\r\n\r\n return (this.clientPromise = Promise.resolve(window.Client));\r\n }\r\n\r\n // A \"complete\" status indicates that the \"load\" event has been fired on the\r\n // window; and, that all sub-resources such as Scripts, Images, and Frames have\r\n // been loaded.\r\n if (window.document.readyState === \"complete\") {\r\n\r\n // If this event has fired AND the 3rd-party script isn't available (see IF-\r\n // condition BEFORE this one), it means that the 3rd-party script either\r\n // failed on the network or was BLOCKED by an ad-blocker. As such, we have to\r\n // fall-back to using a mock API.\r\n return (this.clientPromise = Promise.resolve(new NoopClient()));\r\n }\r\n\r\n // ASSERT: If we made it this far, the document has not completed loading (but it\r\n // may be in an \"interactive\" state which is when I believe that the Angular app\r\n // gets bootstrapped). As such, we need bind to the LOAD event to wait for our\r\n // third-party scripts to load (or fail to load, or be blocked).\r\n this.clientPromise = new Promise<IClient>(\r\n (resolve) => {\r\n\r\n window.addEventListener(\r\n \"load\",\r\n function handleWindowLoad() {\r\n\r\n // At this point, the 3rd-party library is either available or\r\n // it's not - there's no further loading to do. If it's not\r\n // present on the global scope, we're going to fall-back to using\r\n // a mock API.\r\n resolve(window.Client || new NoopClient());\r\n }\r\n );\r\n\r\n }\r\n );\r\n\r\n return (this.clientPromise);\r\n }\r\n}\r\n\r\n\r\n\r\n// ----------------------------------------------------------------------------------- //\r\n// ----------------------------------------------------------------------------------- //\r\n\r\n// I provide a mock API for the 3rd-party script. This just allows the consuming code to\r\n// act as though the library is available even if it failed to load (example, it was\r\n// blocked by an ad-blocker).\r\n\r\n/** @ignore */\r\nclass NoopClient implements IClient {\r\n\r\n constructor() {\r\n\r\n console.log(\r\n '%cClient API not available, falling back to mock API',\r\n 'background-color:blue; color:yellow;'\r\n );\r\n }\r\n\r\n public callback(...args: any[]): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public getDeviceTime(date?: Date): Promise<string> {\r\n\r\n return Promise.resolve(new Date().toISOString());\r\n }\r\n\r\n public async getDeviceTimeZoneName(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceTimeZoneID(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceTimeZoneOffset(): Promise<number> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getLanguageCode(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceKey(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public sendCommand(name: string, arg: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public sendRemoteCommand(deviceKeys: string[], name: string, arg: string) {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public track(eventName: string, properties?: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public timeEvent(eventName: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public newEventSession(id?: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public async getRevelRoot(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getCommandMap(): Promise<string> {\r\n\r\n return Promise.resolve('{}');\r\n }\r\n\r\n public finish(): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public async getDevice(): Promise<string | null> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getWidth(): Promise<number | null> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getHeight(): Promise<number | null> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDuration(): Promise<number | null> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getSdkVersion(): Promise<string> {\r\n\r\n return Promise.resolve(version);\r\n }\r\n}\r\n","import { Injectable, enableProdMode, isDevMode } from '@angular/core';\r\nimport { HttpClient } from \"@angular/common/http\";\r\nimport { ActivatedRoute, Router } from \"@angular/router\";\r\nimport * as yaml from \"js-yaml\";\r\nimport * as WebFont from 'webfontloader';\r\n\r\nconst isLocal: boolean = /localhost/.test(document.location.host);\r\n!isLocal && enableProdMode();\r\n\r\n\r\n/** @ignore */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AppInitService {\r\n\r\n constructor(\r\n public http: HttpClient,\r\n private _route: ActivatedRoute,\r\n private _router: Router) {\r\n }\r\n\r\n init(): Promise<any> {\r\n\r\n return new Promise<void>(async (resolve) => {\r\n\r\n this.loadFonts();\r\n\r\n if (isDevMode()) {\r\n console.log(\r\n '%cRunning in development mode',\r\n 'background-color:blue; color:yellow;'\r\n );\r\n\r\n /**\r\n * Shim the shindig prefs functionality for dev mode\r\n */\r\n (<any>window).gadgets = {\r\n\r\n Prefs: class {\r\n getString(key: string) { return this.getParameterByName(key) }\r\n\r\n getArray(key: string) { return this.getParameterByName(key).split(',') }\r\n\r\n getBool(key: string) { return this.getParameterByName(key) === 'true' }\r\n\r\n getCountry() { }\r\n\r\n getFloat(key: string) { return parseFloat(this.getParameterByName(key)) }\r\n\r\n getInt(key: string) { return parseInt(this.getParameterByName(key)) }\r\n\r\n getLang() { return this.getParameterByName('lang') === '' ? 'en' : this.getParameterByName('lang'); }\r\n\r\n getParameterByName(name: string, search = window.location.href): string {\r\n\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n let regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n results = regex.exec(search);\r\n if (!results) return '';\r\n if (!results[2]) return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n }\r\n }\r\n };\r\n\r\n this.http.get('assets/gadget.yaml', {\r\n responseType: 'text'\r\n }).subscribe(data => {\r\n const doc: any = yaml.load(data);\r\n let params: any = {}\r\n for (const val of doc.prefs) {\r\n params[val.name] = val.default_value\r\n }\r\n\r\n this._router.navigate([], {\r\n relativeTo: this._route,\r\n queryParams: params,\r\n });\r\n\r\n console.log(\r\n `%cUser prefs loaded successfully`,\r\n 'background-color:blue; color:yellow;'\r\n );\r\n }, (err) => {\r\n console.log(\r\n `%cUnable to load user preferences YAML definition file: ${err}`,\r\n 'background-color:blue; color:yellow;'\r\n );\r\n console.log(\r\n `%cPlease see our developer documentation for help with your app configuration: https://developer.reveldigital.com`,\r\n 'background-color:red; color:yellow;'\r\n )\r\n })\r\n }\r\n resolve();\r\n });\r\n }\r\n\r\n\r\n private getFamilyName(css) {\r\n\r\n let FONT_FAMILY_REGEX = /font-family:\\s*(?:['"])*['\"]*(.+?)['\"]*(?:['"])*\\s*;/i;\r\n if (FONT_FAMILY_REGEX.test(css)) {\r\n var matches = css.match(FONT_FAMILY_REGEX);\r\n return matches[1].split(',')[0];\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n /**\r\n * Loads the given font from Google Web Fonts.\r\n */\r\n private loadFonts(): void {\r\n\r\n const parameters = new URLSearchParams(window.location.search);\r\n parameters.forEach((val, key) => {\r\n try {\r\n let fontFamily = this.getFamilyName(val);\r\n if (fontFamily !== '') {\r\n WebFont.load({\r\n google: {\r\n families: [fontFamily]\r\n },\r\n fontactive: (familyName) => {\r\n console.log(`%cActivating font: ${familyName}`,\r\n 'background-color:blue; color:yellow;');\r\n },\r\n fontinactive: (familyName) => {\r\n console.log(`%cFont inactive: ${familyName}`,\r\n 'background-color:red; color:yellow;');\r\n }\r\n });\r\n }\r\n } catch (e) {\r\n }\r\n });\r\n }\r\n}\r\n","import { Pipe, PipeTransform, NgModule } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n/**\r\n * The safe style pipe is used when custom styles are defined for a gadget and must be applied to an Angular\r\n * component. This pipe will ensure the style can be appied safely by utilizing the DomSanitizer.\r\n * \r\n * @example\r\n * <h2 [style]=\"style | safeStyle\">Sample Pref: {{ prefs.getString('myStringPref') }}</h2>\r\n */\r\n@Pipe({\r\n name: 'safeStyle',\r\n})\r\nexport class SafeStylePipe implements PipeTransform {\r\n constructor(private sanitized: DomSanitizer) { }\r\n\r\n transform(value: any): unknown {\r\n return this.sanitized.bypassSecurityTrustStyle(value);\r\n }\r\n}\r\n\r\n@NgModule({\r\n declarations: [SafeStylePipe],\r\n exports: [SafeStylePipe],\r\n})\r\nexport class NgSafeStylePipeModule { }\r\n","import { APP_INITIALIZER, LOCALE_ID, NgModule } from '@angular/core';\nimport { PlayerClientService } from './player-client.service';\nimport { AppInitService } from './app-init.service';\nimport { HttpClientModule } from '@angular/common/http';\nimport { RouterModule } from '@angular/router';\nimport { APP_BASE_HREF } from '@angular/common';\nimport { NgSafeStylePipeModule } from './safe-style.pipe';\n\ndeclare var gadgets: any;\n\n\n@NgModule({\n imports: [\n HttpClientModule,\n RouterModule.forRoot([]),\n NgSafeStylePipeModule\n ],\n exports: [\n NgSafeStylePipeModule\n ],\n providers: [{\n provide: APP_INITIALIZER,\n useFactory: initializeApp,\n deps: [AppInitService, PlayerClientService],\n multi: true\n },\n {\n provide: LOCALE_ID,\n useFactory: () => {\n try {\n return new gadgets.Prefs().getLang();\n } catch {\n return 'en';\n }\n }\n },\n { provide: APP_BASE_HREF, useValue: '/gadgets/ifr' }]\n})\nexport class PlayerClientModule { }\n\nfunction initializeApp(appInitService: AppInitService) {\n return async () => {\n PlayerClientService.init({});\n await appInitService.init();\n }\n}\n","/*\n * Public API Surface of player-client\n */\n\nexport * from './lib/player-client.service';\nexport * from './lib/player-client.module';\nexport * from './lib/safe-style.pipe';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,9 @@ import { RouterModule } from '@angular/router';
|
|
|
11
11
|
import { APP_BASE_HREF } from '@angular/common';
|
|
12
12
|
import * as i1$1 from '@angular/platform-browser';
|
|
13
13
|
|
|
14
|
+
// Generated by genversion.
|
|
15
|
+
const version = '1.0.10';
|
|
16
|
+
|
|
14
17
|
class PlayerClientService {
|
|
15
18
|
// private onPostMessageSub: Subscription;
|
|
16
19
|
// private onPostMessageEvt$ = fromEvent(window, 'message').pipe(
|
|
@@ -325,6 +328,42 @@ class PlayerClientService {
|
|
|
325
328
|
});
|
|
326
329
|
return device[0];
|
|
327
330
|
}
|
|
331
|
+
/**
|
|
332
|
+
* Returns the width of the visualization area.
|
|
333
|
+
*
|
|
334
|
+
* @returns Width of the visualization area
|
|
335
|
+
*/
|
|
336
|
+
async getWidth() {
|
|
337
|
+
const client = await this.getClient();
|
|
338
|
+
return client.getWidth();
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Returns the height of the visualization area.
|
|
342
|
+
*
|
|
343
|
+
* @returns Height of the visualization area
|
|
344
|
+
*/
|
|
345
|
+
async getHeight() {
|
|
346
|
+
const client = await this.getClient();
|
|
347
|
+
return client.getHeight();
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Returns the duration of the currently playing source.
|
|
351
|
+
* (only applicable when associated with a playlist)
|
|
352
|
+
*
|
|
353
|
+
* @returns Duration of the current item in milliseconds
|
|
354
|
+
*/
|
|
355
|
+
async getDuration() {
|
|
356
|
+
const client = await this.getClient();
|
|
357
|
+
return client.getDuration();
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Returns the current SDK version.
|
|
361
|
+
*
|
|
362
|
+
* @returns SDK version
|
|
363
|
+
*/
|
|
364
|
+
async getSdkVersion() {
|
|
365
|
+
return Promise.resolve(version);
|
|
366
|
+
}
|
|
328
367
|
// ---
|
|
329
368
|
// PRIVATE METHODS.
|
|
330
369
|
// ---
|
|
@@ -422,11 +461,23 @@ class NoopClient {
|
|
|
422
461
|
async getCommandMap() {
|
|
423
462
|
return Promise.resolve('{}');
|
|
424
463
|
}
|
|
464
|
+
finish() {
|
|
465
|
+
// NOOP implement, nothing to do....
|
|
466
|
+
}
|
|
425
467
|
async getDevice() {
|
|
426
468
|
return Promise.resolve(null);
|
|
427
469
|
}
|
|
428
|
-
|
|
429
|
-
|
|
470
|
+
async getWidth() {
|
|
471
|
+
return Promise.resolve(null);
|
|
472
|
+
}
|
|
473
|
+
async getHeight() {
|
|
474
|
+
return Promise.resolve(null);
|
|
475
|
+
}
|
|
476
|
+
async getDuration() {
|
|
477
|
+
return Promise.resolve(null);
|
|
478
|
+
}
|
|
479
|
+
async getSdkVersion() {
|
|
480
|
+
return Promise.resolve(version);
|
|
430
481
|
}
|
|
431
482
|
}
|
|
432
483
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reveldigital-player-client.mjs","sources":["../../../../projects/reveldigital/player-client/src/lib/player-client.service.ts","../../../../projects/reveldigital/player-client/src/lib/app-init.service.ts","../../../../projects/reveldigital/player-client/src/lib/safe-style.pipe.ts","../../../../projects/reveldigital/player-client/src/lib/player-client.module.ts","../../../../projects/reveldigital/player-client/src/public-api.ts","../../../../projects/reveldigital/player-client/src/reveldigital-player-client.ts"],"sourcesContent":["import { Injectable, NgZone, OnDestroy } from '@angular/core';\r\nimport { gadgets } from '@reveldigital/gadget-types';\r\nimport { BehaviorSubject, fromEvent, Subject, Subscription } from 'rxjs';\r\nimport { map, share, tap } from 'rxjs/operators';\r\nimport { ICommand } from './interfaces/command.interface';\r\nimport { IDevice } from './interfaces/device.interface';\r\nimport { IEventProperties } from './interfaces/event-properties.interface';\r\nimport { IClient } from './interfaces/client.interface';\r\n\r\n\r\n// So that TypeScript doesn't complain, we're going to augment the GLOBAL / WINDOW \r\n// name-space definition to include the Tracker API. This also provides us with a place\r\n// to actually DOCUMENT the API so that our developers aren't guessing about what's\r\n// available on the library.\r\n\r\n/** @ignore */\r\ndeclare global {\r\n var Client: IClient;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PlayerClientService implements OnDestroy {\r\n\r\n /** @ignore */\r\n private clientPromise: Promise<IClient> | null;\r\n\r\n /**\r\n * Commands sent to this player.\r\n */\r\n public onCommand$ = new Subject<ICommand>();\r\n /**\r\n * Signals the gadget has been loaded and is ready to start.\r\n */\r\n public onReady$ = new BehaviorSubject(false);\r\n /**\r\n * Signals the gadget has been started by the player.\r\n */\r\n public onStart$ = new Subject();\r\n /**\r\n * Signals the gadgets has been stopped by the player.\r\n */\r\n public onStop$ = new Subject();\r\n\r\n //\r\n // Two methods available for calling into the library:\r\n //\r\n // 1) Using dispatchEvent() with the following custom events\r\n // 2) Using the window scoped RevelDigital object as defined in the constructor\r\n //\r\n /** @ignore */\r\n private onStartSub: Subscription;\r\n /** @ignore */\r\n private onStartEvt$ = fromEvent(document, 'RevelDigital.Start').pipe(\r\n share(),\r\n tap(this.onStart$)\r\n );\r\n /** @ignore */\r\n private onStopSub: Subscription;\r\n /** @ignore */\r\n private onStopEvt$ = fromEvent(document, 'RevelDigital.Stop').pipe(\r\n share(),\r\n tap(this.onStop$)\r\n );\r\n /** @ignore */\r\n private onCommandSub: Subscription;\r\n /** @ignore */\r\n private onCommandEvt$ = fromEvent<ICommand>(document, 'RevelDigital.Command').pipe(\r\n map((e: any) => { return { name: e.detail.name, arg: e.detail.arg } as ICommand }),\r\n share(),\r\n tap(this.onCommand$)\r\n );\r\n\r\n // private onPostMessageSub: Subscription;\r\n // private onPostMessageEvt$ = fromEvent(window, 'message').pipe(\r\n // filter((messageEvent: MessageEvent) =>\r\n // messageEvent.source !== window.parent &&\r\n // typeof messageEvent.data === 'string' &&\r\n // messageEvent.data.startsWith('reveldigital:')),\r\n // map((e: any) => { return JSON.parse(e.substring(13)) as Command }),\r\n // share(),\r\n // tap(this.onCommand$)\r\n // );\r\n\r\n /** @ignore */\r\n constructor(zone: NgZone) {\r\n\r\n let self = this;\r\n (window as any).RevelDigital = {\r\n Controller: {\r\n onCommand: function (name: string, arg: string) {\r\n zone.run(() => {\r\n self.onCommand$.next({ name: name, arg: arg });\r\n });\r\n },\r\n onStart: function () {\r\n zone.run(() => {\r\n self.onStart$.next(null);\r\n });\r\n },\r\n onStop: function () {\r\n zone.run(() => {\r\n self.onStop$.next(null);\r\n });\r\n }\r\n }\r\n }\r\n\r\n this.onStartSub = this.onStartEvt$.subscribe(() => { });\r\n this.onStopSub = this.onStopEvt$.subscribe(() => { });\r\n this.onCommandSub = this.onCommandEvt$.subscribe(() => { });\r\n\r\n this.clientPromise = null;\r\n\r\n this.onReady$.next(true);\r\n }\r\n\r\n /** @ignore */\r\n ngOnDestroy(): void {\r\n\r\n this.onStartSub?.unsubscribe();\r\n this.onStopSub?.unsubscribe();\r\n this.onCommandSub?.unsubscribe();\r\n\r\n this.onReady$.next(false);\r\n }\r\n\r\n /** @ignore */\r\n public static init(data: any) {\r\n\r\n console.log(\r\n '%c⚙️ Initializing Revel Digital client library',\r\n 'background-color:blue; color:yellow;'\r\n );\r\n }\r\n\r\n /**\r\n * This method allows the gadget to communicate with player scripting.\r\n * If the appropriate scripting is in place in the currently running template, calling this method\r\n * will initiate a callback which can be acted upon in player script.\r\n * \r\n * @example\r\n * client.callback('test', 'this');\r\n * \r\n * @param args variable number of arguments\r\n */\r\n public callback(...args: any[]): void {\r\n\r\n this.getClient().then((client) => {\r\n\r\n switch (args.length) {\r\n case 0:\r\n client.callback();\r\n break;\r\n case 1:\r\n client.callback(args[0]);\r\n break;\r\n case 2:\r\n client.callback(args[1]);\r\n break;\r\n case 3:\r\n client.callback(args[2]);\r\n break;\r\n case 4:\r\n client.callback(args[3]);\r\n break;\r\n case 5:\r\n client.callback(args[4]);\r\n break;\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Accessor method for the user preferences interface exposed by the Gadgets API.\r\n * \r\n * See {@link https://developers.google.com/gadgets/docs/basic} for more details on the Gadgets API.\r\n * \r\n * @example\r\n * constructor(public client: PlayerClientService) {\r\n * let prefs = client.getPrefs();\r\n * let myString = prefs.getString('myStringPref');\r\n * }\r\n * @returns {gadgets.Prefs} Gadget API Prefs object\r\n */\r\n public getPrefs(): gadgets.Prefs {\r\n\r\n return new window['gadgets']['Prefs']();\r\n }\r\n\r\n /**\r\n * Returns the current device time in ISO8601 format.\r\n * Current device time is determined by the device timezone assigned to the device in the CMS.\r\n * \r\n * @param date Optional. If supplied will translate the supplied date/time to device time based on respective timezones.\r\n * @returns Date/time in ISO8601 format\r\n */\r\n public async getDeviceTime(date?: Date): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n if (date !== undefined) {\r\n return client.getDeviceTime(date);\r\n }\r\n return client.getDeviceTime();\r\n }\r\n\r\n /**\r\n * Returns the timezone name currently assigned to the device.\r\n * \r\n * @returns Timezone Name\r\n */\r\n public async getDeviceTimeZoneName(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneName();\r\n }\r\n\r\n /**\r\n * Returns the timezone ID currently assigned to the device.\r\n * \r\n * @returns Timezone ID\r\n */\r\n public async getDeviceTimeZoneID(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneID();\r\n }\r\n\r\n /**\r\n * Returns the numerical offset from GMT of the timezone currently assigned to the device.\r\n * \r\n * @returns Timezone offset\r\n */\r\n public async getDeviceTimeZoneOffset(): Promise<number> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneOffset();\r\n }\r\n\r\n /**\r\n * Returns the language code of the language currently assigned to the device.\r\n * \r\n * @returns Language code\r\n */\r\n public async getLanguageCode(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getLanguageCode();\r\n }\r\n\r\n /**\r\n * Returns the unique Revel Digital device key associated with the device.\r\n * \r\n * @returns Device key\r\n */\r\n public async getDeviceKey(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceKey();\r\n }\r\n\r\n /**\r\n * Send a command to the player device.\r\n * \r\n * @param name Command name\r\n * @param arg Command argument\r\n */\r\n public sendCommand(name: string, arg: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.sendCommand(name, arg);\r\n })\r\n }\r\n\r\n /**\r\n * Send a command to any remote player with the supplied device key(s).\r\n * Note: Remote commands can only be delivered to devices within the same account as the sender device.\r\n * \r\n * @param deviceKeys Array of remote device keys\r\n * @param name Command name\r\n * @param arg Command arg\r\n */\r\n public sendRemoteCommand(deviceKeys: string[], name: string, arg: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.sendRemoteCommand(deviceKeys, name, arg);\r\n });\r\n }\r\n\r\n /**\r\n * Log an event for use with AdHawk analytics.\r\n * Events are used for tracking various metrics including usage statistics, player condition, state changes, etc.\r\n * \r\n * @param eventName Unique name for this event\r\n * @param properties A map of user defined properties to associate with this event\r\n */\r\n public track(eventName: string, properties?: IEventProperties): void {\r\n\r\n this.getClient().then((client) => {\r\n client.track(eventName, JSON.stringify(properties));\r\n })\r\n }\r\n\r\n /**\r\n * Method for initiating a timed event.\r\n * Timed events are useful for tracking the duration of an event and must be proceeded with a call to track().\r\n * \r\n * @example\r\n * client.timeEvent('testEvent');\r\n * client.track(\"test\", { \"a\": \"b\" });\r\n * @param eventName Unique name for this event\r\n */\r\n public timeEvent(eventName: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.timeEvent(eventName);\r\n })\r\n }\r\n\r\n /**\r\n * A session is a way of grouping events together. Each event has an associated session ID.\r\n * Session ID's are randomly generated and reset by subsequent calls to newEventSession().\r\n * \r\n * Each call to track() will utilize the same session ID, until another call to newEventSession().\r\n * @param id Optional. User supplied session ID. If not supplied a random session ID will be generated.\r\n */\r\n public newEventSession(id?: string): void {\r\n\r\n this.getClient().then((client) => {\r\n if (id !== undefined) {\r\n client.newEventSession();\r\n } else {\r\n client.newEventSession(id);\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Returns the root folder utilized by this player device.\r\n * \r\n * @returns Path to the root folder\r\n */\r\n public async getRevelRoot(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getRevelRoot();\r\n }\r\n\r\n /**\r\n * Returns a map of commands currently active for this device.\r\n * \r\n * @returns Map of commands currently active for this device.\r\n */\r\n public async getCommandMap(): Promise<any> {\r\n\r\n const client = await this.getClient();\r\n\r\n return JSON.parse(await client.getCommandMap());\r\n }\r\n\r\n /**\r\n * Indicate to the player that this gadget has finished it's visualization.\r\n * This allows the player to proceed with the next item in a playlist if applicable.\r\n */\r\n public finish(): void {\r\n\r\n this.getClient().then((client) => {\r\n\r\n client.finish();\r\n })\r\n }\r\n\r\n /**\r\n * Check is the gadget is running in preview mode. Preview mode is enabled when the gadget is\r\n * being edited in the CMS, or otherwise not running in a normal player environment.\r\n * \r\n * @returns True if the gadget is running in preview mode, false otherwise.\r\n */\r\n public async isPreviewMode(): Promise<boolean> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client instanceof NoopClient;\r\n }\r\n\r\n /**\r\n * Returns the device details associated with the player running the gadget or web app.\r\n * \r\n * @returns Device details.\r\n */\r\n public async getDevice(): Promise<IDevice | null> {\r\n\r\n const client = await this.getClient();\r\n\r\n let obj: any = JSON.parse(<string>await client.getDevice());\r\n\r\n const device: IDevice[] = [obj].map((device: any) => {\r\n\r\n return {\r\n name: device.name,\r\n registrationKey: device.key,\r\n deviceType: device.devicetype,\r\n enteredService: new Date(device.enteredservice),\r\n langCode: device.langcode,\r\n timeZone: device.timezone,\r\n tags: device.description?.split('\\n'),\r\n location: {\r\n city: device.location?.city,\r\n state: device.location?.state,\r\n country: device.location?.country,\r\n postalCode: device.location?.postalcode,\r\n address: device.location?.address,\r\n latitude: device.location?.latitude,\r\n longitude: device.location?.longitude\r\n }\r\n }\r\n });\r\n return device[0];\r\n }\r\n\r\n // ---\r\n // PRIVATE METHODS.\r\n // ---\r\n /** @ignore */\r\n private getClient(): Promise<IClient> {\r\n\r\n if (this.clientPromise) {\r\n\r\n return (this.clientPromise);\r\n }\r\n\r\n if (window.Client) {\r\n\r\n return (this.clientPromise = Promise.resolve(window.Client));\r\n }\r\n\r\n // A \"complete\" status indicates that the \"load\" event has been fired on the\r\n // window; and, that all sub-resources such as Scripts, Images, and Frames have\r\n // been loaded.\r\n if (window.document.readyState === \"complete\") {\r\n\r\n // If this event has fired AND the 3rd-party script isn't available (see IF-\r\n // condition BEFORE this one), it means that the 3rd-party script either\r\n // failed on the network or was BLOCKED by an ad-blocker. As such, we have to\r\n // fall-back to using a mock API.\r\n return (this.clientPromise = Promise.resolve(new NoopClient()));\r\n }\r\n\r\n // ASSERT: If we made it this far, the document has not completed loading (but it\r\n // may be in an \"interactive\" state which is when I believe that the Angular app\r\n // gets bootstrapped). As such, we need bind to the LOAD event to wait for our\r\n // third-party scripts to load (or fail to load, or be blocked).\r\n this.clientPromise = new Promise<IClient>(\r\n (resolve) => {\r\n\r\n window.addEventListener(\r\n \"load\",\r\n function handleWindowLoad() {\r\n\r\n // At this point, the 3rd-party library is either available or\r\n // it's not - there's no further loading to do. If it's not\r\n // present on the global scope, we're going to fall-back to using\r\n // a mock API.\r\n resolve(window.Client || new NoopClient());\r\n }\r\n );\r\n\r\n }\r\n );\r\n\r\n return (this.clientPromise);\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n// ----------------------------------------------------------------------------------- //\r\n// ----------------------------------------------------------------------------------- //\r\n\r\n// I provide a mock API for the 3rd-party script. This just allows the consuming code to\r\n// act as though the library is available even if it failed to load (example, it was\r\n// blocked by an ad-blocker).\r\n\r\n/** @ignore */\r\nclass NoopClient implements IClient {\r\n\r\n constructor() {\r\n\r\n console.log(\r\n '%cClient API not available, falling back to mock API',\r\n 'background-color:blue; color:yellow;'\r\n );\r\n }\r\n\r\n public callback(...args: any[]): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public getDeviceTime(date?: Date): Promise<string> {\r\n\r\n return Promise.resolve(new Date().toISOString());\r\n }\r\n\r\n public async getDeviceTimeZoneName(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceTimeZoneID(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceTimeZoneOffset(): Promise<number> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getLanguageCode(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceKey(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public sendCommand(name: string, arg: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public sendRemoteCommand(deviceKeys: string[], name: string, arg: string) {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public track(eventName: string, properties?: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public timeEvent(eventName: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public newEventSession(id?: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public async getRevelRoot(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getCommandMap(): Promise<string> {\r\n\r\n return Promise.resolve('{}');\r\n }\r\n\r\n public async getDevice(): Promise<string | null> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public finish(): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n}\r\n","import { Injectable, enableProdMode, isDevMode } from '@angular/core';\r\nimport { HttpClient } from \"@angular/common/http\";\r\nimport { ActivatedRoute, Router } from \"@angular/router\";\r\nimport * as yaml from \"js-yaml\";\r\nimport * as WebFont from 'webfontloader';\r\n\r\nconst isLocal: boolean = /localhost/.test(document.location.host);\r\n!isLocal && enableProdMode();\r\n\r\n\r\n/** @ignore */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AppInitService {\r\n\r\n constructor(\r\n public http: HttpClient,\r\n private _route: ActivatedRoute,\r\n private _router: Router) {\r\n }\r\n\r\n init(): Promise<any> {\r\n\r\n return new Promise<void>(async (resolve) => {\r\n\r\n this.loadFonts();\r\n\r\n if (isDevMode()) {\r\n console.log(\r\n '%cRunning in development mode',\r\n 'background-color:blue; color:yellow;'\r\n );\r\n\r\n /**\r\n * Shim the shindig prefs functionality for dev mode\r\n */\r\n (<any>window).gadgets = {\r\n\r\n Prefs: class {\r\n getString(key: string) { return this.getParameterByName(key) }\r\n\r\n getArray(key: string) { return this.getParameterByName(key).split(',') }\r\n\r\n getBool(key: string) { return this.getParameterByName(key) === 'true' }\r\n\r\n getCountry() { }\r\n\r\n getFloat(key: string) { return parseFloat(this.getParameterByName(key)) }\r\n\r\n getInt(key: string) { return parseInt(this.getParameterByName(key)) }\r\n\r\n getLang() { return this.getParameterByName('lang') === '' ? 'en' : this.getParameterByName('lang'); }\r\n\r\n getParameterByName(name: string, search = window.location.href): string {\r\n\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n let regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n results = regex.exec(search);\r\n if (!results) return '';\r\n if (!results[2]) return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n }\r\n }\r\n };\r\n\r\n this.http.get('assets/gadget.yaml', {\r\n responseType: 'text'\r\n }).subscribe(data => {\r\n const doc: any = yaml.load(data);\r\n let params: any = {}\r\n for (const val of doc.prefs) {\r\n params[val.name] = val.default_value\r\n }\r\n\r\n this._router.navigate([], {\r\n relativeTo: this._route,\r\n queryParams: params,\r\n });\r\n\r\n console.log(\r\n `%cUser prefs loaded successfully`,\r\n 'background-color:blue; color:yellow;'\r\n );\r\n }, (err) => {\r\n console.log(\r\n `%cUnable to load user preferences YAML definition file: ${err}`,\r\n 'background-color:blue; color:yellow;'\r\n );\r\n console.log(\r\n `%cPlease see our developer documentation for help with your app configuration: https://developer.reveldigital.com`,\r\n 'background-color:red; color:yellow;'\r\n )\r\n })\r\n }\r\n resolve();\r\n });\r\n }\r\n\r\n\r\n private getFamilyName(css) {\r\n\r\n let FONT_FAMILY_REGEX = /font-family:\\s*(?:['"])*['\"]*(.+?)['\"]*(?:['"])*\\s*;/i;\r\n if (FONT_FAMILY_REGEX.test(css)) {\r\n var matches = css.match(FONT_FAMILY_REGEX);\r\n return matches[1].split(',')[0];\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n /**\r\n * Loads the given font from Google Web Fonts.\r\n */\r\n private loadFonts(): void {\r\n\r\n const parameters = new URLSearchParams(window.location.search);\r\n parameters.forEach((val, key) => {\r\n try {\r\n let fontFamily = this.getFamilyName(val);\r\n if (fontFamily !== '') {\r\n WebFont.load({\r\n google: {\r\n families: [fontFamily]\r\n },\r\n fontactive: (familyName) => {\r\n console.log(`%cActivating font: ${familyName}`,\r\n 'background-color:blue; color:yellow;');\r\n },\r\n fontinactive: (familyName) => {\r\n console.log(`%cFont inactive: ${familyName}`,\r\n 'background-color:red; color:yellow;');\r\n }\r\n });\r\n }\r\n } catch (e) {\r\n }\r\n });\r\n }\r\n}\r\n","import { Pipe, PipeTransform, NgModule } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n/**\r\n * The safe style pipe is used when custom styles are defined for a gadget and must be applied to an Angular\r\n * component. This pipe will ensure the style can be appied safely by utilizing the DomSanitizer.\r\n * \r\n * @example\r\n * <h2 [style]=\"style | safeStyle\">Sample Pref: {{ prefs.getString('myStringPref') }}</h2>\r\n */\r\n@Pipe({\r\n name: 'safeStyle',\r\n})\r\nexport class SafeStylePipe implements PipeTransform {\r\n constructor(private sanitized: DomSanitizer) { }\r\n\r\n transform(value: any): unknown {\r\n return this.sanitized.bypassSecurityTrustStyle(value);\r\n }\r\n}\r\n\r\n@NgModule({\r\n declarations: [SafeStylePipe],\r\n exports: [SafeStylePipe],\r\n})\r\nexport class NgSafeStylePipeModule { }\r\n","import { APP_INITIALIZER, LOCALE_ID, NgModule } from '@angular/core';\nimport { PlayerClientService } from './player-client.service';\nimport { AppInitService } from './app-init.service';\nimport { HttpClientModule } from '@angular/common/http';\nimport { RouterModule } from '@angular/router';\nimport { APP_BASE_HREF } from '@angular/common';\nimport { NgSafeStylePipeModule } from './safe-style.pipe';\n\ndeclare var gadgets: any;\n\n\n@NgModule({\n imports: [\n HttpClientModule,\n RouterModule.forRoot([]),\n NgSafeStylePipeModule\n ],\n exports: [\n NgSafeStylePipeModule\n ],\n providers: [{\n provide: APP_INITIALIZER,\n useFactory: initializeApp,\n deps: [AppInitService, PlayerClientService],\n multi: true\n },\n {\n provide: LOCALE_ID,\n useFactory: () => {\n try {\n return new gadgets.Prefs().getLang();\n } catch {\n return 'en';\n }\n }\n },\n { provide: APP_BASE_HREF, useValue: '/gadgets/ifr' }]\n})\nexport class PlayerClientModule { }\n\nfunction initializeApp(appInitService: AppInitService) {\n return async () => {\n PlayerClientService.init({});\n await appInitService.init();\n }\n}\n","/*\n * Public API Surface of player-client\n */\n\nexport * from './lib/player-client.service';\nexport * from './lib/player-client.module';\nexport * from './lib/safe-style.pipe';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reveldigital-player-client.mjs","sources":["../../../../projects/reveldigital/player-client/src/lib/version.ts","../../../../projects/reveldigital/player-client/src/lib/player-client.service.ts","../../../../projects/reveldigital/player-client/src/lib/app-init.service.ts","../../../../projects/reveldigital/player-client/src/lib/safe-style.pipe.ts","../../../../projects/reveldigital/player-client/src/lib/player-client.module.ts","../../../../projects/reveldigital/player-client/src/public-api.ts","../../../../projects/reveldigital/player-client/src/reveldigital-player-client.ts"],"sourcesContent":["// Generated by genversion.\nexport const version = '1.0.10'\n","import { Injectable, NgZone, OnDestroy } from '@angular/core';\r\nimport { gadgets } from '@reveldigital/gadget-types';\r\nimport { BehaviorSubject, fromEvent, Subject, Subscription } from 'rxjs';\r\nimport { map, share, tap } from 'rxjs/operators';\r\nimport { ICommand } from './interfaces/command.interface';\r\nimport { IDevice } from './interfaces/device.interface';\r\nimport { IEventProperties } from './interfaces/event-properties.interface';\r\nimport { IClient } from './interfaces/client.interface';\r\nimport { version } from './version';\r\n\r\n//import { version } from './version.js';\r\n\r\n// So that TypeScript doesn't complain, we're going to augment the GLOBAL / WINDOW \r\n// name-space definition to include the Tracker API. This also provides us with a place\r\n// to actually DOCUMENT the API so that our developers aren't guessing about what's\r\n// available on the library.\r\n\r\n/** @ignore */\r\ndeclare global {\r\n var Client: IClient;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PlayerClientService implements OnDestroy {\r\n\r\n /** @ignore */\r\n private clientPromise: Promise<IClient> | null;\r\n\r\n /**\r\n * Commands sent to this player.\r\n */\r\n public onCommand$ = new Subject<ICommand>();\r\n /**\r\n * Signals the gadget has been loaded and is ready to start.\r\n */\r\n public onReady$ = new BehaviorSubject(false);\r\n /**\r\n * Signals the gadget has been started by the player.\r\n */\r\n public onStart$ = new Subject();\r\n /**\r\n * Signals the gadgets has been stopped by the player.\r\n */\r\n public onStop$ = new Subject();\r\n\r\n //\r\n // Two methods available for calling into the library:\r\n //\r\n // 1) Using dispatchEvent() with the following custom events\r\n // 2) Using the window scoped RevelDigital object as defined in the constructor\r\n //\r\n /** @ignore */\r\n private onStartSub: Subscription;\r\n /** @ignore */\r\n private onStartEvt$ = fromEvent(document, 'RevelDigital.Start').pipe(\r\n share(),\r\n tap(this.onStart$)\r\n );\r\n /** @ignore */\r\n private onStopSub: Subscription;\r\n /** @ignore */\r\n private onStopEvt$ = fromEvent(document, 'RevelDigital.Stop').pipe(\r\n share(),\r\n tap(this.onStop$)\r\n );\r\n /** @ignore */\r\n private onCommandSub: Subscription;\r\n /** @ignore */\r\n private onCommandEvt$ = fromEvent<ICommand>(document, 'RevelDigital.Command').pipe(\r\n map((e: any) => { return { name: e.detail.name, arg: e.detail.arg } as ICommand }),\r\n share(),\r\n tap(this.onCommand$)\r\n );\r\n\r\n // private onPostMessageSub: Subscription;\r\n // private onPostMessageEvt$ = fromEvent(window, 'message').pipe(\r\n // filter((messageEvent: MessageEvent) =>\r\n // messageEvent.source !== window.parent &&\r\n // typeof messageEvent.data === 'string' &&\r\n // messageEvent.data.startsWith('reveldigital:')),\r\n // map((e: any) => { return JSON.parse(e.substring(13)) as Command }),\r\n // share(),\r\n // tap(this.onCommand$)\r\n // );\r\n\r\n /** @ignore */\r\n constructor(zone: NgZone) {\r\n\r\n let self = this;\r\n (window as any).RevelDigital = {\r\n Controller: {\r\n onCommand: function (name: string, arg: string) {\r\n zone.run(() => {\r\n self.onCommand$.next({ name: name, arg: arg });\r\n });\r\n },\r\n onStart: function () {\r\n zone.run(() => {\r\n self.onStart$.next(null);\r\n });\r\n },\r\n onStop: function () {\r\n zone.run(() => {\r\n self.onStop$.next(null);\r\n });\r\n }\r\n }\r\n }\r\n\r\n this.onStartSub = this.onStartEvt$.subscribe(() => { });\r\n this.onStopSub = this.onStopEvt$.subscribe(() => { });\r\n this.onCommandSub = this.onCommandEvt$.subscribe(() => { });\r\n\r\n this.clientPromise = null;\r\n\r\n this.onReady$.next(true);\r\n }\r\n\r\n /** @ignore */\r\n ngOnDestroy(): void {\r\n\r\n this.onStartSub?.unsubscribe();\r\n this.onStopSub?.unsubscribe();\r\n this.onCommandSub?.unsubscribe();\r\n\r\n this.onReady$.next(false);\r\n }\r\n\r\n /** @ignore */\r\n public static init(data: any) {\r\n\r\n console.log(\r\n '%c⚙️ Initializing Revel Digital client library',\r\n 'background-color:blue; color:yellow;'\r\n );\r\n }\r\n\r\n /**\r\n * This method allows the gadget to communicate with player scripting.\r\n * If the appropriate scripting is in place in the currently running template, calling this method\r\n * will initiate a callback which can be acted upon in player script.\r\n * \r\n * @example\r\n * client.callback('test', 'this');\r\n * \r\n * @param args variable number of arguments\r\n */\r\n public callback(...args: any[]): void {\r\n\r\n this.getClient().then((client) => {\r\n\r\n switch (args.length) {\r\n case 0:\r\n client.callback();\r\n break;\r\n case 1:\r\n client.callback(args[0]);\r\n break;\r\n case 2:\r\n client.callback(args[1]);\r\n break;\r\n case 3:\r\n client.callback(args[2]);\r\n break;\r\n case 4:\r\n client.callback(args[3]);\r\n break;\r\n case 5:\r\n client.callback(args[4]);\r\n break;\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Accessor method for the user preferences interface exposed by the Gadgets API.\r\n * \r\n * See {@link https://developers.google.com/gadgets/docs/basic} for more details on the Gadgets API.\r\n * \r\n * @example\r\n * constructor(public client: PlayerClientService) {\r\n * let prefs = client.getPrefs();\r\n * let myString = prefs.getString('myStringPref');\r\n * }\r\n * @returns {gadgets.Prefs} Gadget API Prefs object\r\n */\r\n public getPrefs(): gadgets.Prefs {\r\n\r\n return new window['gadgets']['Prefs']();\r\n }\r\n\r\n /**\r\n * Returns the current device time in ISO8601 format.\r\n * Current device time is determined by the device timezone assigned to the device in the CMS.\r\n * \r\n * @param date Optional. If supplied will translate the supplied date/time to device time based on respective timezones.\r\n * @returns Date/time in ISO8601 format\r\n */\r\n public async getDeviceTime(date?: Date): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n if (date !== undefined) {\r\n return client.getDeviceTime(date);\r\n }\r\n return client.getDeviceTime();\r\n }\r\n\r\n /**\r\n * Returns the timezone name currently assigned to the device.\r\n * \r\n * @returns Timezone Name\r\n */\r\n public async getDeviceTimeZoneName(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneName();\r\n }\r\n\r\n /**\r\n * Returns the timezone ID currently assigned to the device.\r\n * \r\n * @returns Timezone ID\r\n */\r\n public async getDeviceTimeZoneID(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneID();\r\n }\r\n\r\n /**\r\n * Returns the numerical offset from GMT of the timezone currently assigned to the device.\r\n * \r\n * @returns Timezone offset\r\n */\r\n public async getDeviceTimeZoneOffset(): Promise<number> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceTimeZoneOffset();\r\n }\r\n\r\n /**\r\n * Returns the language code of the language currently assigned to the device.\r\n * \r\n * @returns Language code\r\n */\r\n public async getLanguageCode(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getLanguageCode();\r\n }\r\n\r\n /**\r\n * Returns the unique Revel Digital device key associated with the device.\r\n * \r\n * @returns Device key\r\n */\r\n public async getDeviceKey(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDeviceKey();\r\n }\r\n\r\n /**\r\n * Send a command to the player device.\r\n * \r\n * @param name Command name\r\n * @param arg Command argument\r\n */\r\n public sendCommand(name: string, arg: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.sendCommand(name, arg);\r\n })\r\n }\r\n\r\n /**\r\n * Send a command to any remote player with the supplied device key(s).\r\n * Note: Remote commands can only be delivered to devices within the same account as the sender device.\r\n * \r\n * @param deviceKeys Array of remote device keys\r\n * @param name Command name\r\n * @param arg Command arg\r\n */\r\n public sendRemoteCommand(deviceKeys: string[], name: string, arg: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.sendRemoteCommand(deviceKeys, name, arg);\r\n });\r\n }\r\n\r\n /**\r\n * Log an event for use with AdHawk analytics.\r\n * Events are used for tracking various metrics including usage statistics, player condition, state changes, etc.\r\n * \r\n * @param eventName Unique name for this event\r\n * @param properties A map of user defined properties to associate with this event\r\n */\r\n public track(eventName: string, properties?: IEventProperties): void {\r\n\r\n this.getClient().then((client) => {\r\n client.track(eventName, JSON.stringify(properties));\r\n })\r\n }\r\n\r\n /**\r\n * Method for initiating a timed event.\r\n * Timed events are useful for tracking the duration of an event and must be proceeded with a call to track().\r\n * \r\n * @example\r\n * client.timeEvent('testEvent');\r\n * client.track(\"test\", { \"a\": \"b\" });\r\n * @param eventName Unique name for this event\r\n */\r\n public timeEvent(eventName: string): void {\r\n\r\n this.getClient().then((client) => {\r\n client.timeEvent(eventName);\r\n })\r\n }\r\n\r\n /**\r\n * A session is a way of grouping events together. Each event has an associated session ID.\r\n * Session ID's are randomly generated and reset by subsequent calls to newEventSession().\r\n * \r\n * Each call to track() will utilize the same session ID, until another call to newEventSession().\r\n * @param id Optional. User supplied session ID. If not supplied a random session ID will be generated.\r\n */\r\n public newEventSession(id?: string): void {\r\n\r\n this.getClient().then((client) => {\r\n if (id !== undefined) {\r\n client.newEventSession();\r\n } else {\r\n client.newEventSession(id);\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Returns the root folder utilized by this player device.\r\n * \r\n * @returns Path to the root folder\r\n */\r\n public async getRevelRoot(): Promise<string> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getRevelRoot();\r\n }\r\n\r\n /**\r\n * Returns a map of commands currently active for this device.\r\n * \r\n * @returns Map of commands currently active for this device.\r\n */\r\n public async getCommandMap(): Promise<any> {\r\n\r\n const client = await this.getClient();\r\n\r\n return JSON.parse(await client.getCommandMap());\r\n }\r\n\r\n /**\r\n * Indicate to the player that this gadget has finished it's visualization.\r\n * This allows the player to proceed with the next item in a playlist if applicable.\r\n */\r\n public finish(): void {\r\n\r\n this.getClient().then((client) => {\r\n\r\n client.finish();\r\n })\r\n }\r\n\r\n /**\r\n * Check is the gadget is running in preview mode. Preview mode is enabled when the gadget is\r\n * being edited in the CMS, or otherwise not running in a normal player environment.\r\n * \r\n * @returns True if the gadget is running in preview mode, false otherwise.\r\n */\r\n public async isPreviewMode(): Promise<boolean> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client instanceof NoopClient;\r\n }\r\n\r\n /**\r\n * Returns the device details associated with the player running the gadget or web app.\r\n * \r\n * @returns Device details.\r\n */\r\n public async getDevice(): Promise<IDevice | null> {\r\n\r\n const client = await this.getClient();\r\n\r\n let obj: any = JSON.parse(<string>await client.getDevice());\r\n\r\n const device: IDevice[] = [obj].map((device: any) => {\r\n\r\n return {\r\n name: device.name,\r\n registrationKey: device.key,\r\n deviceType: device.devicetype,\r\n enteredService: new Date(device.enteredservice),\r\n langCode: device.langcode,\r\n timeZone: device.timezone,\r\n tags: device.description?.split('\\n'),\r\n location: {\r\n city: device.location?.city,\r\n state: device.location?.state,\r\n country: device.location?.country,\r\n postalCode: device.location?.postalcode,\r\n address: device.location?.address,\r\n latitude: device.location?.latitude,\r\n longitude: device.location?.longitude\r\n }\r\n }\r\n });\r\n return device[0];\r\n }\r\n\r\n /**\r\n * Returns the width of the visualization area.\r\n * \r\n * @returns Width of the visualization area\r\n */\r\n public async getWidth(): Promise<number | null> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getWidth();\r\n }\r\n\r\n /**\r\n * Returns the height of the visualization area.\r\n * \r\n * @returns Height of the visualization area\r\n */\r\n public async getHeight(): Promise<number | null> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getHeight();\r\n }\r\n\r\n /**\r\n * Returns the duration of the currently playing source.\r\n * (only applicable when associated with a playlist)\r\n * \r\n * @returns Duration of the current item in milliseconds\r\n */\r\n public async getDuration(): Promise<number | null> {\r\n\r\n const client = await this.getClient();\r\n\r\n return client.getDuration();\r\n }\r\n\r\n /**\r\n * Returns the current SDK version.\r\n * \r\n * @returns SDK version\r\n */\r\n public async getSdkVersion(): Promise<string> {\r\n\r\n return Promise.resolve(version);\r\n }\r\n\r\n\r\n // ---\r\n // PRIVATE METHODS.\r\n // ---\r\n /** @ignore */\r\n private getClient(): Promise<IClient> {\r\n\r\n if (this.clientPromise) {\r\n\r\n return (this.clientPromise);\r\n }\r\n\r\n if (window.Client) {\r\n\r\n return (this.clientPromise = Promise.resolve(window.Client));\r\n }\r\n\r\n // A \"complete\" status indicates that the \"load\" event has been fired on the\r\n // window; and, that all sub-resources such as Scripts, Images, and Frames have\r\n // been loaded.\r\n if (window.document.readyState === \"complete\") {\r\n\r\n // If this event has fired AND the 3rd-party script isn't available (see IF-\r\n // condition BEFORE this one), it means that the 3rd-party script either\r\n // failed on the network or was BLOCKED by an ad-blocker. As such, we have to\r\n // fall-back to using a mock API.\r\n return (this.clientPromise = Promise.resolve(new NoopClient()));\r\n }\r\n\r\n // ASSERT: If we made it this far, the document has not completed loading (but it\r\n // may be in an \"interactive\" state which is when I believe that the Angular app\r\n // gets bootstrapped). As such, we need bind to the LOAD event to wait for our\r\n // third-party scripts to load (or fail to load, or be blocked).\r\n this.clientPromise = new Promise<IClient>(\r\n (resolve) => {\r\n\r\n window.addEventListener(\r\n \"load\",\r\n function handleWindowLoad() {\r\n\r\n // At this point, the 3rd-party library is either available or\r\n // it's not - there's no further loading to do. If it's not\r\n // present on the global scope, we're going to fall-back to using\r\n // a mock API.\r\n resolve(window.Client || new NoopClient());\r\n }\r\n );\r\n\r\n }\r\n );\r\n\r\n return (this.clientPromise);\r\n }\r\n}\r\n\r\n\r\n\r\n// ----------------------------------------------------------------------------------- //\r\n// ----------------------------------------------------------------------------------- //\r\n\r\n// I provide a mock API for the 3rd-party script. This just allows the consuming code to\r\n// act as though the library is available even if it failed to load (example, it was\r\n// blocked by an ad-blocker).\r\n\r\n/** @ignore */\r\nclass NoopClient implements IClient {\r\n\r\n constructor() {\r\n\r\n console.log(\r\n '%cClient API not available, falling back to mock API',\r\n 'background-color:blue; color:yellow;'\r\n );\r\n }\r\n\r\n public callback(...args: any[]): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public getDeviceTime(date?: Date): Promise<string> {\r\n\r\n return Promise.resolve(new Date().toISOString());\r\n }\r\n\r\n public async getDeviceTimeZoneName(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceTimeZoneID(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceTimeZoneOffset(): Promise<number> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getLanguageCode(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDeviceKey(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public sendCommand(name: string, arg: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public sendRemoteCommand(deviceKeys: string[], name: string, arg: string) {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public track(eventName: string, properties?: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public timeEvent(eventName: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public newEventSession(id?: string): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public async getRevelRoot(): Promise<string> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getCommandMap(): Promise<string> {\r\n\r\n return Promise.resolve('{}');\r\n }\r\n\r\n public finish(): void {\r\n\r\n // NOOP implement, nothing to do....\r\n }\r\n\r\n public async getDevice(): Promise<string | null> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getWidth(): Promise<number | null> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getHeight(): Promise<number | null> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getDuration(): Promise<number | null> {\r\n\r\n return Promise.resolve(null);\r\n }\r\n\r\n public async getSdkVersion(): Promise<string> {\r\n\r\n return Promise.resolve(version);\r\n }\r\n}\r\n","import { Injectable, enableProdMode, isDevMode } from '@angular/core';\r\nimport { HttpClient } from \"@angular/common/http\";\r\nimport { ActivatedRoute, Router } from \"@angular/router\";\r\nimport * as yaml from \"js-yaml\";\r\nimport * as WebFont from 'webfontloader';\r\n\r\nconst isLocal: boolean = /localhost/.test(document.location.host);\r\n!isLocal && enableProdMode();\r\n\r\n\r\n/** @ignore */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AppInitService {\r\n\r\n constructor(\r\n public http: HttpClient,\r\n private _route: ActivatedRoute,\r\n private _router: Router) {\r\n }\r\n\r\n init(): Promise<any> {\r\n\r\n return new Promise<void>(async (resolve) => {\r\n\r\n this.loadFonts();\r\n\r\n if (isDevMode()) {\r\n console.log(\r\n '%cRunning in development mode',\r\n 'background-color:blue; color:yellow;'\r\n );\r\n\r\n /**\r\n * Shim the shindig prefs functionality for dev mode\r\n */\r\n (<any>window).gadgets = {\r\n\r\n Prefs: class {\r\n getString(key: string) { return this.getParameterByName(key) }\r\n\r\n getArray(key: string) { return this.getParameterByName(key).split(',') }\r\n\r\n getBool(key: string) { return this.getParameterByName(key) === 'true' }\r\n\r\n getCountry() { }\r\n\r\n getFloat(key: string) { return parseFloat(this.getParameterByName(key)) }\r\n\r\n getInt(key: string) { return parseInt(this.getParameterByName(key)) }\r\n\r\n getLang() { return this.getParameterByName('lang') === '' ? 'en' : this.getParameterByName('lang'); }\r\n\r\n getParameterByName(name: string, search = window.location.href): string {\r\n\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n let regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n results = regex.exec(search);\r\n if (!results) return '';\r\n if (!results[2]) return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n }\r\n }\r\n };\r\n\r\n this.http.get('assets/gadget.yaml', {\r\n responseType: 'text'\r\n }).subscribe(data => {\r\n const doc: any = yaml.load(data);\r\n let params: any = {}\r\n for (const val of doc.prefs) {\r\n params[val.name] = val.default_value\r\n }\r\n\r\n this._router.navigate([], {\r\n relativeTo: this._route,\r\n queryParams: params,\r\n });\r\n\r\n console.log(\r\n `%cUser prefs loaded successfully`,\r\n 'background-color:blue; color:yellow;'\r\n );\r\n }, (err) => {\r\n console.log(\r\n `%cUnable to load user preferences YAML definition file: ${err}`,\r\n 'background-color:blue; color:yellow;'\r\n );\r\n console.log(\r\n `%cPlease see our developer documentation for help with your app configuration: https://developer.reveldigital.com`,\r\n 'background-color:red; color:yellow;'\r\n )\r\n })\r\n }\r\n resolve();\r\n });\r\n }\r\n\r\n\r\n private getFamilyName(css) {\r\n\r\n let FONT_FAMILY_REGEX = /font-family:\\s*(?:['"])*['\"]*(.+?)['\"]*(?:['"])*\\s*;/i;\r\n if (FONT_FAMILY_REGEX.test(css)) {\r\n var matches = css.match(FONT_FAMILY_REGEX);\r\n return matches[1].split(',')[0];\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n /**\r\n * Loads the given font from Google Web Fonts.\r\n */\r\n private loadFonts(): void {\r\n\r\n const parameters = new URLSearchParams(window.location.search);\r\n parameters.forEach((val, key) => {\r\n try {\r\n let fontFamily = this.getFamilyName(val);\r\n if (fontFamily !== '') {\r\n WebFont.load({\r\n google: {\r\n families: [fontFamily]\r\n },\r\n fontactive: (familyName) => {\r\n console.log(`%cActivating font: ${familyName}`,\r\n 'background-color:blue; color:yellow;');\r\n },\r\n fontinactive: (familyName) => {\r\n console.log(`%cFont inactive: ${familyName}`,\r\n 'background-color:red; color:yellow;');\r\n }\r\n });\r\n }\r\n } catch (e) {\r\n }\r\n });\r\n }\r\n}\r\n","import { Pipe, PipeTransform, NgModule } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n/**\r\n * The safe style pipe is used when custom styles are defined for a gadget and must be applied to an Angular\r\n * component. This pipe will ensure the style can be appied safely by utilizing the DomSanitizer.\r\n * \r\n * @example\r\n * <h2 [style]=\"style | safeStyle\">Sample Pref: {{ prefs.getString('myStringPref') }}</h2>\r\n */\r\n@Pipe({\r\n name: 'safeStyle',\r\n})\r\nexport class SafeStylePipe implements PipeTransform {\r\n constructor(private sanitized: DomSanitizer) { }\r\n\r\n transform(value: any): unknown {\r\n return this.sanitized.bypassSecurityTrustStyle(value);\r\n }\r\n}\r\n\r\n@NgModule({\r\n declarations: [SafeStylePipe],\r\n exports: [SafeStylePipe],\r\n})\r\nexport class NgSafeStylePipeModule { }\r\n","import { APP_INITIALIZER, LOCALE_ID, NgModule } from '@angular/core';\nimport { PlayerClientService } from './player-client.service';\nimport { AppInitService } from './app-init.service';\nimport { HttpClientModule } from '@angular/common/http';\nimport { RouterModule } from '@angular/router';\nimport { APP_BASE_HREF } from '@angular/common';\nimport { NgSafeStylePipeModule } from './safe-style.pipe';\n\ndeclare var gadgets: any;\n\n\n@NgModule({\n imports: [\n HttpClientModule,\n RouterModule.forRoot([]),\n NgSafeStylePipeModule\n ],\n exports: [\n NgSafeStylePipeModule\n ],\n providers: [{\n provide: APP_INITIALIZER,\n useFactory: initializeApp,\n deps: [AppInitService, PlayerClientService],\n multi: true\n },\n {\n provide: LOCALE_ID,\n useFactory: () => {\n try {\n return new gadgets.Prefs().getLang();\n } catch {\n return 'en';\n }\n }\n },\n { provide: APP_BASE_HREF, useValue: '/gadgets/ifr' }]\n})\nexport class PlayerClientModule { }\n\nfunction initializeApp(appInitService: AppInitService) {\n return async () => {\n PlayerClientService.init({});\n await appInitService.init();\n }\n}\n","/*\n * Public API Surface of player-client\n */\n\nexport * from './lib/player-client.service';\nexport * from './lib/player-client.module';\nexport * from './lib/safe-style.pipe';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,155 @@
|
|
|
1
1
|
/** @ignore */
|
|
2
2
|
export interface IClient {
|
|
3
|
+
/**
|
|
4
|
+
* Callback to the player.
|
|
5
|
+
* This is the primary method of communication between the client and the player.
|
|
6
|
+
*
|
|
7
|
+
* @param {...any[]} args
|
|
8
|
+
* @returns {void}
|
|
9
|
+
* @memberof IClient
|
|
10
|
+
*/
|
|
3
11
|
callback(...args: any[]): void;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Get device name
|
|
14
|
+
*
|
|
15
|
+
* @returns {Promise<string | null>}
|
|
16
|
+
* @memberof IClient
|
|
17
|
+
*/
|
|
18
|
+
getDeviceTime(date?: Date): Promise<string | null>;
|
|
19
|
+
/**
|
|
20
|
+
* Get device time zone name
|
|
21
|
+
*
|
|
22
|
+
* @returns {Promise<string | null>}
|
|
23
|
+
* @memberof IClient
|
|
24
|
+
*/
|
|
25
|
+
getDeviceTimeZoneName(): Promise<string | null>;
|
|
26
|
+
/**
|
|
27
|
+
* Get device time zone ID
|
|
28
|
+
*
|
|
29
|
+
* @returns {Promise<string | null>}
|
|
30
|
+
* @memberof IClient
|
|
31
|
+
*/
|
|
32
|
+
getDeviceTimeZoneID(): Promise<string | null>;
|
|
33
|
+
/**
|
|
34
|
+
* Get device time zone offset
|
|
35
|
+
*
|
|
36
|
+
* @returns {Promise<number | null>}
|
|
37
|
+
* @memberof IClient
|
|
38
|
+
*/
|
|
39
|
+
getDeviceTimeZoneOffset(): Promise<number | null>;
|
|
40
|
+
/**
|
|
41
|
+
* Get device language code
|
|
42
|
+
*
|
|
43
|
+
* @returns {Promise<string | null>}
|
|
44
|
+
* @memberof IClient
|
|
45
|
+
*/
|
|
46
|
+
getLanguageCode(): Promise<string | null>;
|
|
47
|
+
/**
|
|
48
|
+
* Get device key
|
|
49
|
+
*
|
|
50
|
+
* @returns {Promise<string | null>}
|
|
51
|
+
* @memberof IClient
|
|
52
|
+
*/
|
|
53
|
+
getDeviceKey(): Promise<string | null>;
|
|
54
|
+
/**
|
|
55
|
+
* Send command to device
|
|
56
|
+
*
|
|
57
|
+
* @param name
|
|
58
|
+
* @param arg
|
|
59
|
+
* @returns {void}
|
|
60
|
+
* @memberof IClient
|
|
61
|
+
*/
|
|
10
62
|
sendCommand(name: string, arg: string): void;
|
|
63
|
+
/**
|
|
64
|
+
* Send remote command to device
|
|
65
|
+
*
|
|
66
|
+
* @param deviceKeys
|
|
67
|
+
* @param name
|
|
68
|
+
* @param arg
|
|
69
|
+
* @returns {void}
|
|
70
|
+
* @memberof IClient
|
|
71
|
+
*/
|
|
11
72
|
sendRemoteCommand(deviceKeys: string[], name: string, arg: string): void;
|
|
73
|
+
/**
|
|
74
|
+
* Track event
|
|
75
|
+
*
|
|
76
|
+
* In the case of a timed event, the duration is calculated from the timeEvent call to the track call.
|
|
77
|
+
*
|
|
78
|
+
* @param eventName
|
|
79
|
+
* @param properties
|
|
80
|
+
* @returns {void}
|
|
81
|
+
* @memberof IClient
|
|
82
|
+
*/
|
|
12
83
|
track(eventName: string, properties?: string): void;
|
|
84
|
+
/**
|
|
85
|
+
* Start tracking of event with duration
|
|
86
|
+
*
|
|
87
|
+
* @param eventName
|
|
88
|
+
* @returns {void}
|
|
89
|
+
* @memberof IClient
|
|
90
|
+
*/
|
|
13
91
|
timeEvent(eventName: string): void;
|
|
92
|
+
/**
|
|
93
|
+
* Start a new session
|
|
94
|
+
*
|
|
95
|
+
* @param id optional session ID
|
|
96
|
+
* @returns {void}
|
|
97
|
+
* @memberof IClient
|
|
98
|
+
*/
|
|
14
99
|
newEventSession(id?: string): void;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
100
|
+
/**
|
|
101
|
+
* Get the root directory of the Revel system
|
|
102
|
+
*
|
|
103
|
+
* @returns {Promise<string | null>}
|
|
104
|
+
* @memberof IClient
|
|
105
|
+
*/
|
|
106
|
+
getRevelRoot(): Promise<string | null>;
|
|
107
|
+
/**
|
|
108
|
+
* Get the command map
|
|
109
|
+
*
|
|
110
|
+
* @returns {Promise<string | null>}
|
|
111
|
+
* @memberof IClient
|
|
112
|
+
*/
|
|
113
|
+
getCommandMap(): Promise<string | null>;
|
|
114
|
+
/**
|
|
115
|
+
* Signals to the player that the client is finished and the player can transition to the next source
|
|
116
|
+
*/
|
|
18
117
|
finish(): void;
|
|
118
|
+
/**
|
|
119
|
+
* Get device information
|
|
120
|
+
*
|
|
121
|
+
* @returns {Promise<string | null>}
|
|
122
|
+
* @memberof IClient
|
|
123
|
+
*/
|
|
124
|
+
getDevice(): Promise<string | null>;
|
|
125
|
+
/**
|
|
126
|
+
* Get width of the visualization area
|
|
127
|
+
*
|
|
128
|
+
* @returns {Promise<number | null>}
|
|
129
|
+
* @memberof IClient
|
|
130
|
+
*/
|
|
131
|
+
getWidth(): Promise<number | null>;
|
|
132
|
+
/**
|
|
133
|
+
* Get height of the visualization area
|
|
134
|
+
*
|
|
135
|
+
* @returns {Promise<number | null>}
|
|
136
|
+
* @memberof IClient
|
|
137
|
+
*/
|
|
138
|
+
getHeight(): Promise<number | null>;
|
|
139
|
+
/**
|
|
140
|
+
* Get the duration of the currently playing source
|
|
141
|
+
* (only applicable when associated with a playlist)
|
|
142
|
+
*
|
|
143
|
+
* @returns {Promise<number | null>}
|
|
144
|
+
* @memberof IClient
|
|
145
|
+
*/
|
|
146
|
+
getDuration(): Promise<number | null>;
|
|
147
|
+
/**
|
|
148
|
+
* Get the SDK version
|
|
149
|
+
*
|
|
150
|
+
* @returns {Promise<string | null>}
|
|
151
|
+
* @memberof IClient
|
|
152
|
+
*/
|
|
153
|
+
getSdkVersion(): Promise<string | null>;
|
|
19
154
|
}
|
|
20
155
|
//# sourceMappingURL=client.interface.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.interface.d.ts","sourceRoot":"","sources":["../../../../../projects/reveldigital/player-client/src/lib/interfaces/client.interface.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,MAAM,WAAW,OAAO;IAEpB,QAAQ,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAE/B,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"client.interface.d.ts","sourceRoot":"","sources":["../../../../../projects/reveldigital/player-client/src/lib/interfaces/client.interface.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,MAAM,WAAW,OAAO;IAEpB;;;;;;;OAOG;IACH,QAAQ,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAE/B;;;;;OAKG;IACH,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEnD;;;;;OAKG;IACH,qBAAqB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEhD;;;;;OAKG;IACH,mBAAmB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAE9C;;;;;OAKG;IACH,uBAAuB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAElD;;;;;OAKG;IACH,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAE1C;;;;;OAKG;IACH,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEvC;;;;;;;OAOG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7C;;;;;;;;OAQG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzE;;;;;;;;;OASG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpD;;;;;;OAMG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnC;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnC;;;;;OAKG;IACH,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEvC;;;;;OAKG;IACH,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAExC;;OAEG;IACH,MAAM,IAAI,IAAI,CAAC;IAEf;;;;;OAKG;IACH,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEpC;;;;;OAKG;IACH,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEnC;;;;;OAKG;IACH,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEpC;;;;;;OAMG;IACH,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEtC;;;;;OAKG;IACH,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC3C"}
|
|
@@ -181,6 +181,31 @@ export declare class PlayerClientService implements OnDestroy {
|
|
|
181
181
|
* @returns Device details.
|
|
182
182
|
*/
|
|
183
183
|
getDevice(): Promise<IDevice | null>;
|
|
184
|
+
/**
|
|
185
|
+
* Returns the width of the visualization area.
|
|
186
|
+
*
|
|
187
|
+
* @returns Width of the visualization area
|
|
188
|
+
*/
|
|
189
|
+
getWidth(): Promise<number | null>;
|
|
190
|
+
/**
|
|
191
|
+
* Returns the height of the visualization area.
|
|
192
|
+
*
|
|
193
|
+
* @returns Height of the visualization area
|
|
194
|
+
*/
|
|
195
|
+
getHeight(): Promise<number | null>;
|
|
196
|
+
/**
|
|
197
|
+
* Returns the duration of the currently playing source.
|
|
198
|
+
* (only applicable when associated with a playlist)
|
|
199
|
+
*
|
|
200
|
+
* @returns Duration of the current item in milliseconds
|
|
201
|
+
*/
|
|
202
|
+
getDuration(): Promise<number | null>;
|
|
203
|
+
/**
|
|
204
|
+
* Returns the current SDK version.
|
|
205
|
+
*
|
|
206
|
+
* @returns SDK version
|
|
207
|
+
*/
|
|
208
|
+
getSdkVersion(): Promise<string>;
|
|
184
209
|
/** @ignore */
|
|
185
210
|
private getClient;
|
|
186
211
|
static ɵfac: i0.ɵɵFactoryDeclaration<PlayerClientService, never>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"player-client.service.d.ts","sourceRoot":"","sources":["../../../../projects/reveldigital/player-client/src/lib/player-client.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,eAAe,EAAa,OAAO,EAAgB,MAAM,MAAM,CAAC;AAEzE,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;;
|
|
1
|
+
{"version":3,"file":"player-client.service.d.ts","sourceRoot":"","sources":["../../../../projects/reveldigital/player-client/src/lib/player-client.service.ts"],"names":[],"mappings":"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"}
|
package/lib/version.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../../projects/reveldigital/player-client/src/lib/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,WAAW,CAAA"}
|
package/package.json
CHANGED