UNPKG

@project-sunbird/sunbird-video-player-v9

Version:

The Video player library is powered by Angular. This player is primarily designed to be used on Sunbird consumption platforms _(mobile app, web portal, offline desktop app)_ to drive reusability and maintainability, hence reducing the redundant developmen

147 lines 18.7 kB
import { Injectable } from '@angular/core'; import * as _ from 'lodash-es'; import { CsTelemetryModule } from '@project-sunbird/client-services/telemetry'; import * as i0 from "@angular/core"; import * as i1 from "./services/util.service"; export class SunbirdVideoPlayerService { constructor(utilService) { this.utilService = utilService; this.contentSessionId = this.utilService.uniqueId(); } initialize({ context, config, metadata }) { this.context = context; this.config = config; this.playSessionId = this.utilService.uniqueId(); if (!CsTelemetryModule.instance.isInitialised) { CsTelemetryModule.instance.init({}); CsTelemetryModule.instance.telemetryService.initTelemetry({ config: { pdata: context.pdata, env: 'contentplayer', channel: context.channel, did: context.did, authtoken: context.authToken || '', uid: context.uid || '', sid: context.sid, batchsize: 20, mode: context.mode, host: context.host || '', endpoint: context.endpoint || '/data/v3/telemetry', tags: context.tags, cdata: [{ id: this.contentSessionId, type: 'ContentSession' }, { id: this.playSessionId, type: 'PlaySession' }, { id: '2.0', type: 'PlayerVersion' }] }, userOrgDetails: {} }); } this.telemetryObject = { id: metadata.identifier, type: 'Content', ver: metadata.pkgVersion + '', rollup: context.objectRollup || {} }; } start(duration) { CsTelemetryModule.instance.telemetryService.raiseStartTelemetry({ options: this.getEventOptions(), edata: { type: 'content', mode: 'play', pageid: '', duration: Number((duration / 1e3).toFixed(2)) } }); } end(duration, totallength, currentlength, endpageseen, totalseekedlength, visitedlength, score, uniqueVisitedLength) { const durationSec = Number((duration / 1e3).toFixed(2)); let progress = Number(((uniqueVisitedLength / totallength) * 100).toFixed(0)); if (totallength - uniqueVisitedLength < 5) { progress = 100; } CsTelemetryModule.instance.telemetryService.raiseEndTelemetry({ edata: { type: 'content', mode: 'play', pageid: 'sunbird-player-Endpage', summary: [ { progress }, { totallength }, { visitedlength }, { visitedcontentend: endpageseen }, { totalseekedlength }, { endpageseen }, { score }, { uniquevisitedlength: uniqueVisitedLength } ], duration: durationSec }, options: this.getEventOptions() }); } interact(id, currentPage, extraValues) { CsTelemetryModule.instance.telemetryService.raiseInteractTelemetry({ options: this.getEventOptions(), edata: { type: 'TOUCH', subtype: '', id, pageid: currentPage + '', extra: extraValues } }); } heartBeat(data) { CsTelemetryModule.instance.playerTelemetryService.onHeartBeatEvent(data, {}); } impression(currentPage, cdata = {}) { const impressionEvent = { options: this.getEventOptions(), edata: { type: 'workflow', subtype: '', pageid: currentPage + '', uri: '' } }; if (!_.isEmpty(cdata)) { impressionEvent.options.context.cdata.push(cdata); } CsTelemetryModule.instance.telemetryService.raiseImpressionTelemetry(impressionEvent); } error(errorCode, errorType, stacktrace) { CsTelemetryModule.instance.telemetryService.raiseErrorTelemetry({ options: this.getEventOptions(), edata: { err: errorCode, errtype: errorType, stacktrace: (stacktrace && stacktrace.toString()) || '' } }); } getEventOptions() { return ({ object: this.telemetryObject, context: { channel: this.context.channel, pdata: this.context.pdata, env: 'contentplayer', sid: this.context.sid, uid: this.context.uid, cdata: [{ id: this.contentSessionId, type: 'ContentSession' }, { id: this.playSessionId, type: 'PlaySession' }, { id: '2.0', type: 'PlayerVersion' }], rollup: this.context.contextRollup || {} } }); } } /** @nocollapse */ SunbirdVideoPlayerService.ɵfac = function SunbirdVideoPlayerService_Factory(t) { return new (t || SunbirdVideoPlayerService)(i0.ɵɵinject(i1.UtilService)); }; /** @nocollapse */ SunbirdVideoPlayerService.ɵprov = /** @pureOrBreakMyCode */ i0.ɵɵdefineInjectable({ token: SunbirdVideoPlayerService, factory: SunbirdVideoPlayerService.ɵfac, providedIn: 'root' }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SunbirdVideoPlayerService, [{ type: Injectable, args: [{ providedIn: 'root' }] }], function () { return [{ type: i1.UtilService }]; }, null); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VuYmlyZC12aWRlby1wbGF5ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3N1bmJpcmQtdmlkZW8tcGxheWVyL3NyYy9saWIvc3VuYmlyZC12aWRlby1wbGF5ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sS0FBSyxDQUFDLE1BQU0sV0FBVyxDQUFDO0FBRy9CLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7QUFLL0UsTUFBTSxPQUFPLHlCQUF5QjtJQVFwQyxZQUFvQixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUMxQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBRU0sVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQWdCO1FBQzNELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVqRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRTtZQUM3QyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQ3ZEO2dCQUNFLE1BQU0sRUFBRTtvQkFDTixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7b0JBQ3BCLEdBQUcsRUFBRSxlQUFlO29CQUNwQixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87b0JBQ3hCLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztvQkFDaEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRTtvQkFDbEMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLElBQUksRUFBRTtvQkFDdEIsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO29CQUNoQixTQUFTLEVBQUUsRUFBRTtvQkFDYixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7b0JBQ2xCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUU7b0JBQ3hCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLG9CQUFvQjtvQkFDbEQsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO29CQUNsQixLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO3dCQUM3RCxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUU7d0JBQy9DLEVBQUMsRUFBRSxFQUFFLEtBQUssRUFBRyxJQUFJLEVBQUUsZUFBZSxFQUFDLENBQUM7aUJBQ3JDO2dCQUNELGNBQWMsRUFBRSxFQUFFO2FBQ25CLENBQ0YsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNyQixFQUFFLEVBQUUsUUFBUSxDQUFDLFVBQVU7WUFDdkIsSUFBSSxFQUFFLFNBQVM7WUFDZixHQUFHLEVBQUUsUUFBUSxDQUFDLFVBQVUsR0FBRyxFQUFFO1lBQzdCLE1BQU0sRUFBRSxPQUFPLENBQUMsWUFBWSxJQUFJLEVBQUU7U0FDbkMsQ0FBQztJQUNKLENBQUM7SUFHTSxLQUFLLENBQUMsUUFBUTtRQUNuQixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQzdEO1lBQ0UsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDL0IsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUNwRyxDQUNGLENBQUM7SUFFSixDQUFDO0lBRU0sR0FBRyxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLG1CQUFtQjtRQUN4SCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEQsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsR0FBRyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RSxJQUFHLFdBQVcsR0FBRyxtQkFBbUIsR0FBRyxDQUFDLEVBQUU7WUFDeEMsUUFBUSxHQUFHLEdBQUcsQ0FBQztTQUNoQjtRQUNELGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQztZQUM1RCxLQUFLLEVBQUU7Z0JBQ0wsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsSUFBSSxFQUFFLE1BQU07Z0JBQ1osTUFBTSxFQUFFLHdCQUF3QjtnQkFDaEMsT0FBTyxFQUFFO29CQUNQO3dCQUNFLFFBQVE7cUJBQ1Q7b0JBQ0Q7d0JBQ0UsV0FBVztxQkFDWjtvQkFDRDt3QkFDRSxhQUFhO3FCQUNkO29CQUNEO3dCQUNFLGlCQUFpQixFQUFFLFdBQVc7cUJBQy9CO29CQUNEO3dCQUNFLGlCQUFpQjtxQkFDbEI7b0JBQ0Q7d0JBQ0UsV0FBVztxQkFDWjtvQkFDRDt3QkFDRSxLQUFLO3FCQUNOO29CQUNEO3dCQUNFLG1CQUFtQixFQUFFLG1CQUFtQjtxQkFDekM7aUJBQ0Y7Z0JBQ0QsUUFBUSxFQUFFLFdBQVc7YUFDdEI7WUFDRCxPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRTtTQUNoQyxDQUFDLENBQUM7SUFFTCxDQUFDO0lBRU0sUUFBUSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBWTtRQUMzQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUM7WUFDakUsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDL0IsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsV0FBVyxHQUFHLEVBQUUsRUFBRyxLQUFLLEVBQUUsV0FBVyxFQUFFO1NBQ3pGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxTQUFTLENBQUMsSUFBSTtRQUNuQixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFTSxVQUFVLENBQUMsV0FBVyxFQUFFLFFBQWEsRUFBRTtRQUM1QyxNQUFNLGVBQWUsR0FBRztZQUN0QixPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUMvQixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFdBQVcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtTQUM1RSxDQUFDO1FBQ0YsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckIsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNuRDtRQUNELGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRU0sS0FBSyxDQUFDLFNBQWlCLEVBQUcsU0FBaUIsRUFBSSxVQUFrQjtRQUN0RSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUM7WUFDOUQsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDL0IsS0FBSyxFQUFFO2dCQUNMLEdBQUcsRUFBRSxTQUFTO2dCQUNkLE9BQU8sRUFBRSxTQUFTO2dCQUNsQixVQUFVLEVBQUUsQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRTthQUN4RDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlO1FBQ3JCLE9BQU8sQ0FBQztZQUNOLE1BQU0sRUFBRSxJQUFJLENBQUMsZUFBZTtZQUM1QixPQUFPLEVBQUU7Z0JBQ1AsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTztnQkFDN0IsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSztnQkFDekIsR0FBRyxFQUFFLGVBQWU7Z0JBQ3BCLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUc7Z0JBQ3JCLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUc7Z0JBQ3JCLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7b0JBQzdELEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRTtvQkFDL0MsRUFBQyxFQUFFLEVBQUUsS0FBSyxFQUFHLElBQUksRUFBRSxlQUFlLEVBQUMsQ0FBQztnQkFDcEMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxJQUFJLEVBQUU7YUFDekM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOztxSEExSlUseUJBQXlCOzhHQUF6Qix5QkFBeUIsV0FBekIseUJBQXlCLG1CQUZ4QixNQUFNO3VGQUVQLHlCQUF5QjtjQUhyQyxVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBQbGF5ZXJDb25maWcgfSBmcm9tICcuL3BsYXllckludGVyZmFjZXMnO1xuaW1wb3J0IHsgVXRpbFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3V0aWwuc2VydmljZSc7XG5pbXBvcnQgeyBDc1RlbGVtZXRyeU1vZHVsZSB9IGZyb20gJ0Bwcm9qZWN0LXN1bmJpcmQvY2xpZW50LXNlcnZpY2VzL3RlbGVtZXRyeSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFN1bmJpcmRWaWRlb1BsYXllclNlcnZpY2Uge1xuXG4gIHByaXZhdGUgY29udGVudFNlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHBsYXlTZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSB0ZWxlbWV0cnlPYmplY3Q6IGFueTtcbiAgcHJpdmF0ZSBjb250ZXh0O1xuICBwdWJsaWMgY29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdXRpbFNlcnZpY2U6IFV0aWxTZXJ2aWNlKSB7XG4gICAgdGhpcy5jb250ZW50U2Vzc2lvbklkID0gdGhpcy51dGlsU2VydmljZS51bmlxdWVJZCgpO1xuICB9XG5cbiAgcHVibGljIGluaXRpYWxpemUoeyBjb250ZXh0LCBjb25maWcsIG1ldGFkYXRhIH06IFBsYXllckNvbmZpZykge1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5wbGF5U2Vzc2lvbklkID0gdGhpcy51dGlsU2VydmljZS51bmlxdWVJZCgpO1xuXG4gICAgaWYgKCFDc1RlbGVtZXRyeU1vZHVsZS5pbnN0YW5jZS5pc0luaXRpYWxpc2VkKSB7XG4gICAgICBDc1RlbGVtZXRyeU1vZHVsZS5pbnN0YW5jZS5pbml0KHt9KTtcbiAgICAgIENzVGVsZW1ldHJ5TW9kdWxlLmluc3RhbmNlLnRlbGVtZXRyeVNlcnZpY2UuaW5pdFRlbGVtZXRyeShcbiAgICAgICAge1xuICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgcGRhdGE6IGNvbnRleHQucGRhdGEsXG4gICAgICAgICAgICBlbnY6ICdjb250ZW50cGxheWVyJyxcbiAgICAgICAgICAgIGNoYW5uZWw6IGNvbnRleHQuY2hhbm5lbCxcbiAgICAgICAgICAgIGRpZDogY29udGV4dC5kaWQsXG4gICAgICAgICAgICBhdXRodG9rZW46IGNvbnRleHQuYXV0aFRva2VuIHx8ICcnLFxuICAgICAgICAgICAgdWlkOiBjb250ZXh0LnVpZCB8fCAnJyxcbiAgICAgICAgICAgIHNpZDogY29udGV4dC5zaWQsXG4gICAgICAgICAgICBiYXRjaHNpemU6IDIwLFxuICAgICAgICAgICAgbW9kZTogY29udGV4dC5tb2RlLFxuICAgICAgICAgICAgaG9zdDogY29udGV4dC5ob3N0IHx8ICcnLFxuICAgICAgICAgICAgZW5kcG9pbnQ6IGNvbnRleHQuZW5kcG9pbnQgfHwgJy9kYXRhL3YzL3RlbGVtZXRyeScsXG4gICAgICAgICAgICB0YWdzOiBjb250ZXh0LnRhZ3MsXG4gICAgICAgICAgICBjZGF0YTogW3sgaWQ6IHRoaXMuY29udGVudFNlc3Npb25JZCwgdHlwZTogJ0NvbnRlbnRTZXNzaW9uJyB9LFxuICAgICAgICAgICAgeyBpZDogdGhpcy5wbGF5U2Vzc2lvbklkLCB0eXBlOiAnUGxheVNlc3Npb24nIH0sXG4gICAgICAgICAgICB7aWQ6ICcyLjAnICwgdHlwZTogJ1BsYXllclZlcnNpb24nfV1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHVzZXJPcmdEZXRhaWxzOiB7fVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMudGVsZW1ldHJ5T2JqZWN0ID0ge1xuICAgICAgaWQ6IG1ldGFkYXRhLmlkZW50aWZpZXIsXG4gICAgICB0eXBlOiAnQ29udGVudCcsXG4gICAgICB2ZXI6IG1ldGFkYXRhLnBrZ1ZlcnNpb24gKyAnJyxcbiAgICAgIHJvbGx1cDogY29udGV4dC5vYmplY3RSb2xsdXAgfHwge31cbiAgICB9O1xuICB9XG5cblxuICBwdWJsaWMgc3RhcnQoZHVyYXRpb24pIHtcbiAgICBDc1RlbGVtZXRyeU1vZHVsZS5pbnN0YW5jZS50ZWxlbWV0cnlTZXJ2aWNlLnJhaXNlU3RhcnRUZWxlbWV0cnkoXG4gICAgICB7XG4gICAgICAgIG9wdGlvbnM6IHRoaXMuZ2V0RXZlbnRPcHRpb25zKCksXG4gICAgICAgIGVkYXRhOiB7IHR5cGU6ICdjb250ZW50JywgbW9kZTogJ3BsYXknLCBwYWdlaWQ6ICcnLCBkdXJhdGlvbjogTnVtYmVyKChkdXJhdGlvbiAvIDFlMykudG9GaXhlZCgyKSkgfVxuICAgICAgfVxuICAgICk7XG5cbiAgfVxuXG4gIHB1YmxpYyBlbmQoZHVyYXRpb24sIHRvdGFsbGVuZ3RoLCBjdXJyZW50bGVuZ3RoLCBlbmRwYWdlc2VlbiwgdG90YWxzZWVrZWRsZW5ndGgsIHZpc2l0ZWRsZW5ndGgsIHNjb3JlLCB1bmlxdWVWaXNpdGVkTGVuZ3RoKSB7XG4gICAgY29uc3QgZHVyYXRpb25TZWMgPSBOdW1iZXIoKGR1cmF0aW9uIC8gMWUzKS50b0ZpeGVkKDIpKTtcbiAgICBsZXQgcHJvZ3Jlc3MgPSBOdW1iZXIoKCh1bmlxdWVWaXNpdGVkTGVuZ3RoIC8gdG90YWxsZW5ndGgpICogMTAwKS50b0ZpeGVkKDApKTtcbiAgICBpZih0b3RhbGxlbmd0aCAtIHVuaXF1ZVZpc2l0ZWRMZW5ndGggPCA1KSB7XG4gICAgICBwcm9ncmVzcyA9IDEwMDtcbiAgICB9XG4gICAgQ3NUZWxlbWV0cnlNb2R1bGUuaW5zdGFuY2UudGVsZW1ldHJ5U2VydmljZS5yYWlzZUVuZFRlbGVtZXRyeSh7XG4gICAgICBlZGF0YToge1xuICAgICAgICB0eXBlOiAnY29udGVudCcsXG4gICAgICAgIG1vZGU6ICdwbGF5JyxcbiAgICAgICAgcGFnZWlkOiAnc3VuYmlyZC1wbGF5ZXItRW5kcGFnZScsXG4gICAgICAgIHN1bW1hcnk6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm9ncmVzc1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdG90YWxsZW5ndGhcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZpc2l0ZWRsZW5ndGhcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZpc2l0ZWRjb250ZW50ZW5kOiBlbmRwYWdlc2VlblxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdG90YWxzZWVrZWRsZW5ndGhcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVuZHBhZ2VzZWVuXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzY29yZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdW5pcXVldmlzaXRlZGxlbmd0aDogdW5pcXVlVmlzaXRlZExlbmd0aFxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uU2VjXG4gICAgICB9LFxuICAgICAgb3B0aW9uczogdGhpcy5nZXRFdmVudE9wdGlvbnMoKVxuICAgIH0pO1xuXG4gIH1cblxuICBwdWJsaWMgaW50ZXJhY3QoaWQsIGN1cnJlbnRQYWdlLCBleHRyYVZhbHVlcz8pIHtcbiAgICBDc1RlbGVtZXRyeU1vZHVsZS5pbnN0YW5jZS50ZWxlbWV0cnlTZXJ2aWNlLnJhaXNlSW50ZXJhY3RUZWxlbWV0cnkoe1xuICAgICAgb3B0aW9uczogdGhpcy5nZXRFdmVudE9wdGlvbnMoKSxcbiAgICAgIGVkYXRhOiB7IHR5cGU6ICdUT1VDSCcsIHN1YnR5cGU6ICcnLCBpZCwgcGFnZWlkOiBjdXJyZW50UGFnZSArICcnICwgZXh0cmE6IGV4dHJhVmFsdWVzIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBoZWFydEJlYXQoZGF0YSkge1xuICAgIENzVGVsZW1ldHJ5TW9kdWxlLmluc3RhbmNlLnBsYXllclRlbGVtZXRyeVNlcnZpY2Uub25IZWFydEJlYXRFdmVudChkYXRhLCB7fSk7XG4gIH1cblxuICBwdWJsaWMgaW1wcmVzc2lvbihjdXJyZW50UGFnZSwgY2RhdGE6IGFueSA9IHt9KSB7XG4gICAgY29uc3QgaW1wcmVzc2lvbkV2ZW50ID0ge1xuICAgICAgb3B0aW9uczogdGhpcy5nZXRFdmVudE9wdGlvbnMoKSxcbiAgICAgIGVkYXRhOiB7IHR5cGU6ICd3b3JrZmxvdycsIHN1YnR5cGU6ICcnLCBwYWdlaWQ6IGN1cnJlbnRQYWdlICsgJycsIHVyaTogJycgfVxuICAgIH07XG4gICAgaWYgKCFfLmlzRW1wdHkoY2RhdGEpKSB7XG4gICAgICBpbXByZXNzaW9uRXZlbnQub3B0aW9ucy5jb250ZXh0LmNkYXRhLnB1c2goY2RhdGEpO1xuICAgIH1cbiAgICBDc1RlbGVtZXRyeU1vZHVsZS5pbnN0YW5jZS50ZWxlbWV0cnlTZXJ2aWNlLnJhaXNlSW1wcmVzc2lvblRlbGVtZXRyeShpbXByZXNzaW9uRXZlbnQpO1xuICB9XG5cbiAgcHVibGljIGVycm9yKGVycm9yQ29kZTogc3RyaW5nICwgZXJyb3JUeXBlOiBzdHJpbmcgLCAgc3RhY2t0cmFjZT86IEVycm9yKSB7XG4gICAgQ3NUZWxlbWV0cnlNb2R1bGUuaW5zdGFuY2UudGVsZW1ldHJ5U2VydmljZS5yYWlzZUVycm9yVGVsZW1ldHJ5KHtcbiAgICAgIG9wdGlvbnM6IHRoaXMuZ2V0RXZlbnRPcHRpb25zKCksXG4gICAgICBlZGF0YToge1xuICAgICAgICBlcnI6IGVycm9yQ29kZSxcbiAgICAgICAgZXJydHlwZTogZXJyb3JUeXBlLFxuICAgICAgICBzdGFja3RyYWNlOiAoc3RhY2t0cmFjZSAmJiBzdGFja3RyYWNlLnRvU3RyaW5nKCkpIHx8ICcnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEV2ZW50T3B0aW9ucygpIHtcbiAgICByZXR1cm4gKHtcbiAgICAgIG9iamVjdDogdGhpcy50ZWxlbWV0cnlPYmplY3QsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIGNoYW5uZWw6IHRoaXMuY29udGV4dC5jaGFubmVsLFxuICAgICAgICBwZGF0YTogdGhpcy5jb250ZXh0LnBkYXRhLFxuICAgICAgICBlbnY6ICdjb250ZW50cGxheWVyJyxcbiAgICAgICAgc2lkOiB0aGlzLmNvbnRleHQuc2lkLFxuICAgICAgICB1aWQ6IHRoaXMuY29udGV4dC51aWQsXG4gICAgICAgIGNkYXRhOiBbeyBpZDogdGhpcy5jb250ZW50U2Vzc2lvbklkLCB0eXBlOiAnQ29udGVudFNlc3Npb24nIH0sXG4gICAgICAgIHsgaWQ6IHRoaXMucGxheVNlc3Npb25JZCwgdHlwZTogJ1BsYXlTZXNzaW9uJyB9LFxuICAgICAgICB7aWQ6ICcyLjAnICwgdHlwZTogJ1BsYXllclZlcnNpb24nfV0sXG4gICAgICAgIHJvbGx1cDogdGhpcy5jb250ZXh0LmNvbnRleHRSb2xsdXAgfHwge31cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19