@ashetm/ng-mediastream
Version:
``@ashetm/ng-mediastream`` is a library that simplify manipulation of API ``MediaStream``.
101 lines • 13.8 kB
JavaScript
import { Injectable, Injector } from '@angular/core';
import { MediastreamCameraMicrophoneService } from './mediastream-camera-microphone.service';
import { MediastreamCameraService } from './mediastream-camera.service';
import { MediastreamMicrophoneService } from './mediastream-microphone.service';
import { AMediastream } from './mediastream.class';
import { MEDIASTREAM_TOKEN_CAMERA_CONSTRAINTS, MEDIASTREAM_TOKEN_MICROPHONE_CONSTRAINTS } from './mediastream.token';
import * as i0 from "@angular/core";
export class MediastreamService extends AMediastream {
constructor(_injector) {
super();
this._injector = _injector;
}
async getCameraDevices() {
return (await this.getDevices()).filter((device) => device.kind === 'videoinput');
}
async getDevices() {
return await this.MEDIA_DEVICES.enumerateDevices();
}
async getMicrophoneDevices() {
return (await this.getDevices()).filter((device) => device.kind === 'audioinput');
}
async hasCameraDevices() {
return (await this.getCameraDevices()).length !== 0;
}
async hasMicrophoneDevices() {
return (await this.getMicrophoneDevices()).length !== 0;
}
async requestCamera(constraints) {
const cameraConstraints = constraints || true;
const injector = Injector.create({
providers: [
{
provide: MediastreamCameraService,
useClass: MediastreamCameraService
}, {
provide: MEDIASTREAM_TOKEN_CAMERA_CONSTRAINTS,
useValue: cameraConstraints
}
],
parent: this._injector
});
return await this.MEDIA_DEVICES.getUserMedia({
audio: false,
video: cameraConstraints
}).then(() => injector.get(MediastreamCameraService));
}
async requestCameraAndMicrophone(constraints) {
const cameraConstraints = constraints?.video || true;
const microphoneConstraints = constraints?.audio || true;
const injector = Injector.create({
providers: [
{
provide: MediastreamCameraService,
useClass: MediastreamCameraService
}, {
provide: MediastreamCameraMicrophoneService,
useClass: MediastreamCameraMicrophoneService
}, {
provide: MediastreamMicrophoneService,
useClass: MediastreamMicrophoneService
}, {
provide: MEDIASTREAM_TOKEN_CAMERA_CONSTRAINTS,
useValue: cameraConstraints
}, {
provide: MEDIASTREAM_TOKEN_MICROPHONE_CONSTRAINTS,
useValue: microphoneConstraints
}
],
parent: this._injector
});
return await this.MEDIA_DEVICES.getUserMedia({
audio: microphoneConstraints,
video: cameraConstraints
}).then(() => injector.get(MediastreamCameraMicrophoneService));
}
async requestMicrophone(constraints) {
const microphoneConstraints = constraints || true;
const injector = Injector.create({
providers: [
{
provide: MediastreamMicrophoneService,
useClass: MediastreamMicrophoneService
}, {
provide: MEDIASTREAM_TOKEN_MICROPHONE_CONSTRAINTS,
useValue: microphoneConstraints
}
],
parent: this._injector
});
return await this.MEDIA_DEVICES.getUserMedia({
audio: microphoneConstraints,
video: false
}).then(() => injector.get(MediastreamMicrophoneService));
}
static { this.ɵfac = function MediastreamService_Factory(t) { return new (t || MediastreamService)(i0.ɵɵinject(i0.Injector)); }; }
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: MediastreamService, factory: MediastreamService.ɵfac }); }
}
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MediastreamService, [{
type: Injectable
}], function () { return [{ type: i0.Injector }]; }, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWFzdHJlYW0uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhc3RyZWFtL3NyYy9saWIvbWVkaWFzdHJlYW0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyRCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM3RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUNMLG9DQUFvQyxFQUNwQyx3Q0FBd0MsRUFDekMsTUFBTSxxQkFBcUIsQ0FBQzs7QUFJN0IsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFlBQVk7SUFFbEQsWUFBNkIsU0FBbUI7UUFDOUMsS0FBSyxFQUFFLENBQUM7UUFEbUIsY0FBUyxHQUFULFNBQVMsQ0FBVTtJQUVoRCxDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQjtRQUNwQixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUF1QixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVTtRQUNkLE9BQU8sTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0I7UUFDeEIsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBdUIsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQjtRQUNwQixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0I7UUFDeEIsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUNqQixXQUFtQztRQUVuQyxNQUFNLGlCQUFpQixHQUFvQyxXQUFXLElBQUksSUFBSSxDQUFDO1FBQy9FLE1BQU0sUUFBUSxHQUFhLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDekMsU0FBUyxFQUFFO2dCQUNUO29CQUNFLE9BQU8sRUFBRSx3QkFBd0I7b0JBQ2pDLFFBQVEsRUFBRSx3QkFBd0I7aUJBQ25DLEVBQUU7b0JBQ0QsT0FBTyxFQUFFLG9DQUFvQztvQkFDN0MsUUFBUSxFQUFFLGlCQUFpQjtpQkFDNUI7YUFDRjtZQUNELE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUztTQUN2QixDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7WUFDM0MsS0FBSyxFQUFFLEtBQUs7WUFDWixLQUFLLEVBQUUsaUJBQWlCO1NBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxXQUVoQztRQUNDLE1BQU0saUJBQWlCLEdBQ25CLFdBQVcsRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDO1FBQy9CLE1BQU0scUJBQXFCLEdBQ3ZCLFdBQVcsRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDO1FBQy9CLE1BQU0sUUFBUSxHQUFhLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDekMsU0FBUyxFQUFFO2dCQUNUO29CQUNFLE9BQU8sRUFBRSx3QkFBd0I7b0JBQ2pDLFFBQVEsRUFBRSx3QkFBd0I7aUJBQ25DLEVBQUU7b0JBQ0QsT0FBTyxFQUFFLGtDQUFrQztvQkFDM0MsUUFBUSxFQUFFLGtDQUFrQztpQkFDN0MsRUFBRTtvQkFDRCxPQUFPLEVBQUUsNEJBQTRCO29CQUNyQyxRQUFRLEVBQUUsNEJBQTRCO2lCQUN2QyxFQUFFO29CQUNELE9BQU8sRUFBRSxvQ0FBb0M7b0JBQzdDLFFBQVEsRUFBRSxpQkFBaUI7aUJBQzVCLEVBQUU7b0JBQ0QsT0FBTyxFQUFFLHdDQUF3QztvQkFDakQsUUFBUSxFQUFFLHFCQUFxQjtpQkFDaEM7YUFDRjtZQUNELE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUztTQUN2QixDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7WUFDM0MsS0FBSyxFQUFFLHFCQUFxQjtZQUM1QixLQUFLLEVBQUUsaUJBQWlCO1NBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELEtBQUssQ0FBQyxpQkFBaUIsQ0FDckIsV0FBbUM7UUFFbkMsTUFBTSxxQkFBcUIsR0FBb0MsV0FBVyxJQUFJLElBQUksQ0FBQztRQUNuRixNQUFNLFFBQVEsR0FBYSxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3pDLFNBQVMsRUFBRTtnQkFDVDtvQkFDRSxPQUFPLEVBQUUsNEJBQTRCO29CQUNyQyxRQUFRLEVBQUUsNEJBQTRCO2lCQUN2QyxFQUFFO29CQUNELE9BQU8sRUFBRSx3Q0FBd0M7b0JBQ2pELFFBQVEsRUFBRSxxQkFBcUI7aUJBQ2hDO2FBQ0Y7WUFDRCxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDdkIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO1lBQzNDLEtBQUssRUFBRSxxQkFBcUI7WUFDNUIsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7bUZBekdVLGtCQUFrQjt1RUFBbEIsa0JBQWtCLFdBQWxCLGtCQUFrQjs7dUZBQWxCLGtCQUFrQjtjQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTWVkaWFzdHJlYW1DYW1lcmFNaWNyb3Bob25lU2VydmljZSB9IGZyb20gJy4vbWVkaWFzdHJlYW0tY2FtZXJhLW1pY3JvcGhvbmUuc2VydmljZSc7XG5pbXBvcnQgeyBNZWRpYXN0cmVhbUNhbWVyYVNlcnZpY2UgfSBmcm9tICcuL21lZGlhc3RyZWFtLWNhbWVyYS5zZXJ2aWNlJztcbmltcG9ydCB7IE1lZGlhc3RyZWFtTWljcm9waG9uZVNlcnZpY2UgfSBmcm9tICcuL21lZGlhc3RyZWFtLW1pY3JvcGhvbmUuc2VydmljZSc7XG5pbXBvcnQgeyBBTWVkaWFzdHJlYW0gfSBmcm9tICcuL21lZGlhc3RyZWFtLmNsYXNzJztcbmltcG9ydCB7XG4gIE1FRElBU1RSRUFNX1RPS0VOX0NBTUVSQV9DT05TVFJBSU5UUyxcbiAgTUVESUFTVFJFQU1fVE9LRU5fTUlDUk9QSE9ORV9DT05TVFJBSU5UU1xufSBmcm9tICcuL21lZGlhc3RyZWFtLnRva2VuJztcblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTWVkaWFzdHJlYW1TZXJ2aWNlIGV4dGVuZHMgQU1lZGlhc3RyZWFtIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9pbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q2FtZXJhRGV2aWNlcygpOiBQcm9taXNlPE1lZGlhRGV2aWNlSW5mb1tdPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmdldERldmljZXMoKSkuZmlsdGVyKChkZXZpY2U6IE1lZGlhRGV2aWNlSW5mbykgPT4gZGV2aWNlLmtpbmQgPT09ICd2aWRlb2lucHV0Jyk7XG4gIH1cblxuICBhc3luYyBnZXREZXZpY2VzKCk6IFByb21pc2U8TWVkaWFEZXZpY2VJbmZvW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5NRURJQV9ERVZJQ0VTLmVudW1lcmF0ZURldmljZXMoKTtcbiAgfVxuXG4gIGFzeW5jIGdldE1pY3JvcGhvbmVEZXZpY2VzKCk6IFByb21pc2U8TWVkaWFEZXZpY2VJbmZvW10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuZ2V0RGV2aWNlcygpKS5maWx0ZXIoKGRldmljZTogTWVkaWFEZXZpY2VJbmZvKSA9PiBkZXZpY2Uua2luZCA9PT0gJ2F1ZGlvaW5wdXQnKTtcbiAgfVxuXG4gIGFzeW5jIGhhc0NhbWVyYURldmljZXMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmdldENhbWVyYURldmljZXMoKSkubGVuZ3RoICE9PSAwO1xuICB9XG5cbiAgYXN5bmMgaGFzTWljcm9waG9uZURldmljZXMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmdldE1pY3JvcGhvbmVEZXZpY2VzKCkpLmxlbmd0aCAhPT0gMDtcbiAgfVxuXG4gIGFzeW5jIHJlcXVlc3RDYW1lcmEoXG4gICAgY29uc3RyYWludHM/OiBNZWRpYVRyYWNrQ29uc3RyYWludHNcbiAgKTogUHJvbWlzZTxNZWRpYXN0cmVhbUNhbWVyYVNlcnZpY2U+IHtcbiAgICBjb25zdCBjYW1lcmFDb25zdHJhaW50czogYm9vbGVhbiB8IE1lZGlhVHJhY2tDb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzIHx8IHRydWU7XG4gICAgY29uc3QgaW5qZWN0b3I6IEluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogTWVkaWFzdHJlYW1DYW1lcmFTZXJ2aWNlLFxuICAgICAgICAgIHVzZUNsYXNzOiBNZWRpYXN0cmVhbUNhbWVyYVNlcnZpY2VcbiAgICAgICAgfSwge1xuICAgICAgICAgIHByb3ZpZGU6IE1FRElBU1RSRUFNX1RPS0VOX0NBTUVSQV9DT05TVFJBSU5UUyxcbiAgICAgICAgICB1c2VWYWx1ZTogY2FtZXJhQ29uc3RyYWludHNcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHBhcmVudDogdGhpcy5faW5qZWN0b3JcbiAgICB9KTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLk1FRElBX0RFVklDRVMuZ2V0VXNlck1lZGlhKHtcbiAgICAgIGF1ZGlvOiBmYWxzZSxcbiAgICAgIHZpZGVvOiBjYW1lcmFDb25zdHJhaW50c1xuICAgIH0pLnRoZW4oKCkgPT4gaW5qZWN0b3IuZ2V0KE1lZGlhc3RyZWFtQ2FtZXJhU2VydmljZSkpO1xuICB9XG5cbiAgYXN5bmMgcmVxdWVzdENhbWVyYUFuZE1pY3JvcGhvbmUoY29uc3RyYWludHM/OiBQYXJ0aWFsPFxuICAgIFJlY29yZDwnYXVkaW8nIHwgJ3ZpZGVvJywgTWVkaWFUcmFja0NvbnN0cmFpbnRzPlxuICA+KTogUHJvbWlzZTxNZWRpYXN0cmVhbUNhbWVyYU1pY3JvcGhvbmVTZXJ2aWNlPiB7XG4gICAgY29uc3QgY2FtZXJhQ29uc3RyYWludHM6IGJvb2xlYW4gfCBNZWRpYVRyYWNrQ29uc3RyYWludHNcbiAgICAgID0gY29uc3RyYWludHM/LnZpZGVvIHx8IHRydWU7XG4gICAgY29uc3QgbWljcm9waG9uZUNvbnN0cmFpbnRzOiBib29sZWFuIHwgTWVkaWFUcmFja0NvbnN0cmFpbnRzXG4gICAgICA9IGNvbnN0cmFpbnRzPy5hdWRpbyB8fCB0cnVlO1xuICAgIGNvbnN0IGluamVjdG9yOiBJbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IE1lZGlhc3RyZWFtQ2FtZXJhU2VydmljZSxcbiAgICAgICAgICB1c2VDbGFzczogTWVkaWFzdHJlYW1DYW1lcmFTZXJ2aWNlXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBwcm92aWRlOiBNZWRpYXN0cmVhbUNhbWVyYU1pY3JvcGhvbmVTZXJ2aWNlLFxuICAgICAgICAgIHVzZUNsYXNzOiBNZWRpYXN0cmVhbUNhbWVyYU1pY3JvcGhvbmVTZXJ2aWNlXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBwcm92aWRlOiBNZWRpYXN0cmVhbU1pY3JvcGhvbmVTZXJ2aWNlLFxuICAgICAgICAgIHVzZUNsYXNzOiBNZWRpYXN0cmVhbU1pY3JvcGhvbmVTZXJ2aWNlXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBwcm92aWRlOiBNRURJQVNUUkVBTV9UT0tFTl9DQU1FUkFfQ09OU1RSQUlOVFMsXG4gICAgICAgICAgdXNlVmFsdWU6IGNhbWVyYUNvbnN0cmFpbnRzXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBwcm92aWRlOiBNRURJQVNUUkVBTV9UT0tFTl9NSUNST1BIT05FX0NPTlNUUkFJTlRTLFxuICAgICAgICAgIHVzZVZhbHVlOiBtaWNyb3Bob25lQ29uc3RyYWludHNcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHBhcmVudDogdGhpcy5faW5qZWN0b3JcbiAgICB9KTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLk1FRElBX0RFVklDRVMuZ2V0VXNlck1lZGlhKHtcbiAgICAgIGF1ZGlvOiBtaWNyb3Bob25lQ29uc3RyYWludHMsXG4gICAgICB2aWRlbzogY2FtZXJhQ29uc3RyYWludHNcbiAgICB9KS50aGVuKCgpID0+IGluamVjdG9yLmdldChNZWRpYXN0cmVhbUNhbWVyYU1pY3JvcGhvbmVTZXJ2aWNlKSk7XG4gIH1cblxuICBhc3luYyByZXF1ZXN0TWljcm9waG9uZShcbiAgICBjb25zdHJhaW50cz86IE1lZGlhVHJhY2tDb25zdHJhaW50c1xuICApOiBQcm9taXNlPE1lZGlhc3RyZWFtTWljcm9waG9uZVNlcnZpY2U+IHtcbiAgICBjb25zdCBtaWNyb3Bob25lQ29uc3RyYWludHM6IGJvb2xlYW4gfCBNZWRpYVRyYWNrQ29uc3RyYWludHMgPSBjb25zdHJhaW50cyB8fCB0cnVlO1xuICAgIGNvbnN0IGluamVjdG9yOiBJbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IE1lZGlhc3RyZWFtTWljcm9waG9uZVNlcnZpY2UsXG4gICAgICAgICAgdXNlQ2xhc3M6IE1lZGlhc3RyZWFtTWljcm9waG9uZVNlcnZpY2VcbiAgICAgICAgfSwge1xuICAgICAgICAgIHByb3ZpZGU6IE1FRElBU1RSRUFNX1RPS0VOX01JQ1JPUEhPTkVfQ09OU1RSQUlOVFMsXG4gICAgICAgICAgdXNlVmFsdWU6IG1pY3JvcGhvbmVDb25zdHJhaW50c1xuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgcGFyZW50OiB0aGlzLl9pbmplY3RvclxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuTUVESUFfREVWSUNFUy5nZXRVc2VyTWVkaWEoe1xuICAgICAgYXVkaW86IG1pY3JvcGhvbmVDb25zdHJhaW50cyxcbiAgICAgIHZpZGVvOiBmYWxzZVxuICAgIH0pLnRoZW4oKCkgPT4gaW5qZWN0b3IuZ2V0KE1lZGlhc3RyZWFtTWljcm9waG9uZVNlcnZpY2UpKTtcbiAgfVxuXG59XG4iXX0=